Clear Linux OS 调研

开篇先放置一个性能测试对比, 可以看到早期 Clear Linux 足足比 Ubuntu 的性能快了 2.3 倍.

alt text

源自: https://openbenchmarking.org/ , 这里可以找到更多的对比图

2025.7.18 Intel 官方社区明确停止 Clear Linux OS 停止维护、停止安全补丁与更新.

为什么要做这次调研? 笔者的理解是: 尽管停止了支持(貌似是因为成本原因), 但我们不能否认, 这是一款相较于其他发行版性能爆炸的 OS, 其到现在仍然能够提供一定的指导意义.

  • Clear Linux OS 是一个怎么样的 OS 发行版? 第一节将总体介绍到.

  • Clear Linux OS 中有哪些值得被借鉴的理念和项目? 调研一下这个发行版有没有什么优秀的 project 能够被继承或者衍生.第二和第三节将讨论, 二三节的工具和内容是贯穿始终的

  • Clear Linux OS 的底层设计思想是否能够应用到其他架构? 对于 riscv 架构在后续是否也能够提供一个 “riscv performance OS”? 在笔者看来 Clear Linux OS 更像一个性能样板发行版(performance OS).比较零碎, 分布在二三四节

注: 下面系统统指 Clear Linux OS, 为了便于讨论工具或内容, 文档中会穿插一些指令.

0 Clear Linux OS 的设计理念

开篇我们就能知道这个系统的特点.

  1. 目标用户是开发者, 而不是作为其他发行版(Fedora, Ubuntu)这样的通用性而设计; 覆盖云、边缘、服务器场景; 性能优先, 安全内置.

    Clear Linux* OS does things differently. Our software architecture provides a unique and innovative platform for Linux* developers focused on performance and security for compute, server, and the cloud.

  2. 滚动更新(类似Arch Linux?), 完全独立(从零自建构建系统, 这里笔者认为既然书写到了官网上, 必然是亮点所在, 下面的软件生态与构建体系这节也详细列举了相关的工具以及其功能.)

    A rolling-release Linux distro, optimized for performance and security from cloud to Edge.
    Built from scratch, not based on any other distro.

  3. 受众也明确提到了: IT 专业人员, DevOps, 云/容器部署, AI 场景.

    Clear Linux OS mainly targets professionals in IT, DevOps, Cloud/Container deployments, and AI.

  4. 系统的设计也是极简的, 默认一切安全、极简, 用户需要的功能再打开.

    Clear Linux OS does not enable antivirus by default, we provide a bundle for it (clamav). We leave antivirus configuration to our users.

  5. 对于 GUI 的看法是不着重支持, 因为上面也提到了, 通用性, 桌面不是他们的主战场, 但 GNOME 则作为默认的桌面软件.

    Clear Linux OS minimizes the customizations and patches in support of the desktop and provides a generic GNOME implementation.

PS: 这里官方有一个 “What makes Clear Linux OS different”“ 可以阅读一下.

1 软件生态与构建体系

从这一系列奇特的软件生态可以看出, Clear Linux OS 是想打造出一个开箱即用的 OS, 用户无需深入了解过多的配置, 整体有着较高的自动化过程.

1.1 swupd

swupd 是系统自研的包管理器, 下面来简单介绍一下这个包管理器的特点. 首先它有两个特点.

  • 通过安装 bundle 文件而非软件包来管理软件

  • 检查是否存在系统更新并进行安装

常用命令列举:

命令 说明
swupd check-update 检查是否有系统更新
swupd update 更新整个系统到最新版本
swupd bundle-list 查看系统中已安装的 bundles
swupd bundle-add <bundle> 安装新的 bundle
swupd bundle-remove <bundle> 删除 bundle
swupd search <keyword> 搜索包含某命令或文件的 bundle
swupd verify --fix 校验并修复系统文件(相当于“系统体检”)
swupd info 显示系统版本、当前状态等信息

另外, Manifest 是系统中的一种纯文本”元数据文件”, 包含的所有文件、依赖、版本、哈希校验值等信息. swupd 通过比较这些 Manifest 文件来决定系统需要下载或删除哪些文件.

The content url server provides metadata in the form of manifests. These Manifest files list and describe file contents, symlinks, directories. Additionally, the actual content is provided to clients in the form of archive files.

与 OpenEuler 的包管理不同, 主要在于:

  • 该系统的更新是系统整体同步而非局部的包升级

  • 该系统的更新采用的是 diff 的方式而非完整包的下载更新

  • 一个 Bundle 本身就附带当前 Bundle 的依赖关系, 而非在安装软件时下载一系列软件包依赖关系

  • 安全方面, 该包依赖自身提供的 Manifest 而非 GPG Keys

1.2 mixer

该工具可以根据软件包定制 Bundle组合

mixer bundle remove kernel-native
mixer bundle add kernel-kvm

也可以一键构建 clear Linux 的发行版. 对于这里 mixer 的发行版的定制功能笔者对比了一下 OpenEuler 下的两款软件.

给出了较为主观的判断.

工具 核心职责 粒度 类比理解
mixer 管理 bundle、版本、更新流、镜像生成, 即整个发行版构建流水线 最大(管理包、更新流、版本体系) 相当于 OBS + ISO 生成 + repo 管理器
imageTailor 从现有系统定制和裁剪镜像(更适用与快速产出定制镜像) 最小(快速生成、裁剪、修改现成镜像) 相当于 mixer build image 的后半部分
oemaker 构建 openEuler ISO 安装镜像(直接构建特定场景的安装系统) 中等(生成带安装流程的系统介质) 类似 mixer build image –format installer

1.3 autospec

这里可以看看一个打包软件包的示例(类似helloworld).

在传统的 RPM 构建中(如openEuler, 但是好像oe社区在今年的developer day的展台貌似看到有出 AI 写 spec 的工具), 每个包都需要:

  • 手写 .spec 文件

  • 手动维护版本、补丁、依赖.

但是该系统主打一个高性能和简便. autospec 就是这样系统下的一个自动化打包与构建工具.

1
2
# 一行命令就能从压缩包构建 RPM 到 ./packages/helloclear/
make autospecnew URL="https://github.com/clearlinux/helloclear/archive/helloclear-v1.0.tar.gz" NAME="helloclear"

不需要写任何的(%build %install),

对于 OpenEuler 手工维护 spec + obs 构建, 这种高自动化在其他发行版也是少见, 可能正是这种高效才能够有助于系统的滚动更新.

1.4 Telemetrics

Telemetrics 是一个用于系统遥测与错误报告收集的基础组件. 核心功能是收集系统运行时信息(例如崩溃、性能事件)并安全地上报给 Intel 的分析服务器, 以便改进系统的稳定性、性能和安全性.

但 OpenEuler 貌似不存在这样统一、系统级的遥测框架.

工作流程: 系统或应用程序检测到特定事件, 通过 telem-record-gen 或直接调用 Telemetrics API, 生成一个 JSON 格式的记录, Telemd 会将事件存储在 /var/lib/telemetry/ 下的队列中(确保离线时不会丢失), Telemd 定期调用 telempost 将数据发送到服务器.

当然这个上传并不是强制的, 系统不会收集用户的隐私、可识别信息, 所有上传通过 HTTPS 加密, 并且用户可以通过命令禁用该功能.

By default, the telemetry client is disabled until you choose to enable it.

1
sudo systemctl disable --now telemd

笔者认为这个遥测也正是能够帮助 Intel 团队优化 CPU 特性, 持续滚动更新的一大原因.

1.5 clr-boot-manager

clr-boot-manager 是 Intel 专门开发的内核引导管理工具(下面简称 CMB), 也是系统中唯一负责生成启动项的工具.

除此之外, 任何文件都不应该被用户安装到 /boot.

The way that a kernel is packaged changes significantly with clr-boot-manager. First and foremost, no files shall be shipped in /boot.

所以它能干什么?

  • 在系统升级的过程中, 自动管理引导分区和 /boot.

  • 支持多个内核版本共存, 并且允许新内核在出现问题的时候回滚到旧内核的状态.

  • 主要主要针对基于 UEFI + GPT 的系统设计, 但同时提供对传统 BIOS + MBR 启动方式的兼容支持(clr-boot-manager is primarily designed to install the bootloader, kernel, initrd and accompanying metadata files for GPT disks using UEFI, however it does contain fallback support for legacy bootloaders such as GRUB2 to allow all users to benefit from automated kernel management when MBR partition tables are used.).

CBM 支持的组合.

UEFI Filesystem Backend
BIOS ext2/3/4 extlinux
BIOS vfat syslinux
UEFI vfat systemd-boot

下面举几个明显的例子, 来演示如何使用 CBM 进行内核的设置.

我可以列出系统中管理的内核版本.

1
clr-boot-manager list-kernels

也可以指定默认启动的内核.

1
sudo clr-boot-manager set-kernel <kernel>

也可以设置引导菜单.

1
2
# 比如设置等待时间
sudo clr-boot-manager set-timeout 20

Clear Linux OS 在 CBM 的管理过程中不会像传统的 Linux 一样, 将 kernel 和 initrd 放在 /boot 下, 而是 /usr/lib/kernel 中. 当然下面会提到 Stateless 的理念, 笔者认为这也是系统设计的一种分层理念(即 /usr 应该由系统配置).

在 “Understanding clr-boot-manager and kernel packages“ 这篇 discussion 里面, 我们会看到 /boot 下的一个配置可能是这样的.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
# "源" 虽然被放在 "/usr/lib/kernel" 下, 但是部署依然在 "/boot" 下.
# /boot 下允许存放多个内核, 按照官网说对应不同的 "namespace".
/boot/
/boot/EFI
/boot/EFI/org.clearlinux
/boot/EFI/org.clearlinux/bootloaderx64.efi
/boot/EFI/org.clearlinux/loaderx64.efi
/boot/EFI/org.clearlinux/kernel-org.clearlinux.ltscurrent.6.6.47-1416
/boot/EFI/org.clearlinux/freestanding-00-early-ucode.cpio
/boot/EFI/org.clearlinux/mmx64.efi
/boot/EFI/org.clearlinux/freestanding-i915-firmware.cpio.zst
/boot/EFI/org.clearlinux/kernel-org.clearlinux.ltscurrent.6.6.59-1428
/boot/EFI/BOOT
/boot/EFI/BOOT/BOOTX64.EFI
/boot/loader
/boot/loader/entries
/boot/loader/entries/Clear-linux-ltscurrent-6.6.47-1416.conf
/boot/loader/entries/Clear-linux-ltscurrent-6.6.59-1428.conf
/boot/loader/loader.conf

这种独立的引导管理工具, openEuler 下似乎是没有的, openEuler 继承自 RHEL 系列, 因此采用传统方式管理内核与引导. 而笔者认为 Clear Linux OS 这种管理的方式无不体现着 “自动化 + Stateless” 的理念, 是可以被借鉴的.

1.6 clr-power-tweaks

这是 Clear Linux OS 下默认的一个电源管理工具.

默认情况下, clr_power 在系统启动时或定期被调用, 以将系统设备与内核参数调整为预设的合理电源管理默认值. 用户也可以通过 /etc/clr-power-tweaks.conf 来自定义参数以覆盖默认值(这里也可以看到用户配置都在 /etc 下, 默认都在 /usr 下, 这种 Stateless 的设计哲学).

openEuler 下不存在这样一种聚焦于设备底层电源管理的工具, 但是性能优化的工具还是存在的, 比如 A-Tune.

2 系统特性与设计原则

2.1 Autoproxy

Autoproxy 是一个用来自动处理代理设置的机制, 无需手动配置.

Autoproxy tries to detect a Proxy Auto-Config (PAC) script and use it to automatically resolve the proxy needed for a given connection. With Autoproxy, you can use Clear Linux OS inside any proxy environment without having to manually configure the proxies.

Autoproxy 的工作流程如下.

简而言之, 有一个 PAC 检测的守护进程, 利用检测到的 PAC 脚本来决定走哪个代理或者直连. 尽量减少手动设置 http_proxy 或 https_proxy 之类环境变量的需求.

alt text

而 openEuler 下, 应用需显式读取环境变量(如 http_proxy 、https_proxy).

2.2 bundles

Bundle 是系统区分于其他发行版最核心的软件分发单位. 所谓 Bundle 是一组功能相关的软件包(packages)的集合.

具体每组 Bundle 有哪些软件包我们可以查看Bundles list, 举个例子:

  • A Bundle Bundle: B 软件, C 软件.

每个 bundle 由系统的 mixer 工具生成, 对应一套完整的文件系统层. 我们安装和下载也可以通过 swupd 工具以 Bundle 为单位进行安装. 这样的好处是按功能而不是单个包来管理软件包. 软件的分工十分明确, 我们通过 autospec 负责打包单个软件, mixer 负责把它们组合成 bundles.

下面来看一下系统的安装, 期间会让我们选择安装的功能包的组合, 可以看到都是以 Bundle 为单位勾选安装的.

但是其他发行版比如 OpenEuler 则会让我们根据使用的场景比如边缘计算, 最小安装等划分进行安装.

alt text

到这里为止我们不难看出 Clear Linux OS 包管理的特点, 包管理粒度很粗, 用户通常不能只安装一小部分软件, 这种粗粒度的管理方式方便, 开箱即用, 但是缺少灵活度.

PS: 这里, OpenEuler 的软件包的构成存在一个明确的划分吗? 好像更多是以依赖关系为导向构成的.

2.3 Stateless

关于 Stateless 的概念笔者了解了一下, 在计算机的很多领域都有用到, 不同地方可能各不相同, 笔者在这里总的理解就是系统组件是否保存持久状态或依赖外部上下文信息.

那这里所谓 Stateless 是指的 OS 的设计原则. 指系统配置与用户数据分离, 即系统不会持久保存配置状态, 配置可通过模板或 overlay 动态生成.

这是传统的 OS, 用户和系统文件会随着时间的推移在文件系统中混杂在一起.

alt text

这是 Clear Linux OS, 用户和系统文件在文件系统上是隔离的.

alt text

Clear Linux OS is stateless by design, meaning system configuration and user data are separated from the system software. The system can be replaced or updated without affecting the user’s customizations.

Stateless means that configuration settings are easier to manage and remain untouched when system software is updated.

系统被分成了三个层次:

/usr 下, 系统核心, 由 bundles 提供(可以通过 swupd 系统更新删除), 只读, 不应修改.

/etc 下, 用户配置层, 如果需要更改配置, 用户应在 /etc 下修改适当的文件(新安装的系统在 /etc 目录中只有极少量的文件, 并且安装的软件不会主动写入 /etc).

/var, /home 下, 保存运行时状态和用户数据.

上面的解释都不太通俗易懂, 下面举个例子.

/usr/lib/systemd/system/sshd.service 是系统模板(来自 bundle)

/etc/systemd/system/sshd.service 是本地的覆盖文件

/etc/systemd/system/sshd.service 配置被误删, 可以用模板 /usr/lib/systemd/system/sshd.service 恢复.

该设计的优点是只需删除 /etc/var 下的所有内容, 就可以轻松恢复系统默认值.

1
2
3
4
5
# 这在其他发行版是不敢想象的
# 比如我电脑的 Ubuntu 上就装了很多软件, 现在不敢轻易地动 /etc 目录
# 对此笔者深有体会
sudo rm -rf /etc
sudo rm -rf /var

PS: 但对于该设计是否需要用户首先对系统的 Stateless 设计有一个明确的认知呢? 笔者觉得是肯定的, 否则这种设计反而会带来认知上的困惑.

3 内核与系统优化策略

平台、Linux内核、函数库、中间件层、框架以及运行环境(Runtime), 以至整个操作系统堆栈进行了优化, 专为英特尔平台调校以作优化的性能执行, 默认采用采用了最具有进取性的优化策略以提供最快的性能.

源自: https://zh.wikipedia.org/wiki/Clear_Linux_OS

3.1 内核

要说 Clear Linux OS 的一个主要特点就是 Intel 针对自家的处理器或者说x86上做了许多优化, 当然他也只支持x86_64.

Clear Linux OS 维护了多个内核的补丁版本, 主要有四个仓库, 两个适配在实体机, 两个适配在虚拟化上的, 他们的仓库如下(有蛮多内核仓库的).

查阅到有一篇文章跟我产生了同样的疑惑 “Why Intel’s optimizations on Clear Linux aren’t merged into the official Linux kernel?“.

其中一个 comment 提到.

“如果你仔细查看这些补丁, 会发现: a)它们的数量其实非常少; b)几乎所有补丁都很小; c)其中大多数补丁实际上与性能无关.”

If you look over them, you may notice that a) there’s actually a really small number of them, b) they’re almost all very small, and c) most of these patches aren’t actually performance related

3.2 进攻型的策略

在一篇 post “Performance of Clear Linux, and why its not adopted in other kernels & Distros“ 把 Clear Linux OS 作为性能优化最极端的代表案例.

整段在说明一个问题——“为什么 Clear Linux 很快, 但别的发行版不会照搬它的做法”.

Clear Linux OS 性能好, 不只是因为内核, 而是整个系统的整体优化, 他的优化策略特别激进, 不考虑兼容性、不考虑老硬件、不考虑低功耗模式, 一切以性能最大化为目标(The philosophy is to do everything with performance in mind), 它专门针对 Intel CPU 做调优, 在 AMD 上也比别的发行版快, 但差距没那么明显(因为它使用了 Intel 工具链和补丁).

Clear Linux OS 的 gcc, glibc, llvm 都被 Intel 打了性能补丁, 默认启用激进优化选项(如-O3, march=native, LTO).

另外 Intel 的默认编译目标是 Westmere 和 Haswell 级别的 CPU(Clear Linux sets march=westmere and mtune=haswell), 这意味着旧的CPU直接无法运行.

相对而言, Clear Linux OS 可以说作为一个性能实验室更为有价值.

实际上根据文中描述我们可以知道, Fedora 也尝试过对 x86_64 进行性能版本的分级, 但是官方表态必须保持对上游的兼容以及系统的可维护性, 必须在 Intel 和 AMD 平台上表现的稳定.

其他主流的发行版不采用 Clear Linux OS 这种策略实际上是因为必须保持在性能、兼容性、能耗、维护成本之间取得平衡.

笔者认为一个能够在系统的哲学当中取得平衡的 OS 才是一个值得长期推崇的 OS, 因为这些系统可以作为一个黄金参照点, 才可以称之为一个 “Gold OS”.

PS: 这种激进的方式真的不会导致在构建某些软件包的过程中产生 Error 吗?

3.3 启动优化

Intel 在设计 Clear Linux 时追求极致的启动速度与精简化, 因此选用了更轻量、原生支持 EFI 的 systemd-boot, 而不是 OpenEuler 下的 grub.
参见

systemd-boot 是一个非常轻量级的 UEFI 启动管理器, 仅负责从 EFI 系统分区(ESP)载入 EFI 可执行镜像. GRUB 相比则是一个功能庞大的多平台启动器, 支持 BIOS/UEFI、多文件系统、多模块、脚本等.

在我们的 riscv 平台是否也能这么做? 目前笔者的感官是 x86 更多服务于PC, 服务器, 工作站, 而 ARM 服务区域嵌入式以及移动设备较多. riscv 的优势再与他是一个 ISA 级开放的标准, 目前可以看到服务器, PC, 嵌入式设备三个方向都在同时发展(当然成熟度不一致), 不同的场景应用不同的引导方式, 不知 systemd-boot 是否也能分一杯羹?

4 总结

现在回看一些疑惑.

4.1 Clear Linux OS 是一个怎么样的 OS 发行版?

Clear Linux OS 的设计理念都有提到.

总的来说, Clear Linux OS 是 Intel 专为 x86 平台优化的高性能、滚动更新型 Linux 发行版. 它的核心目标不是通用性, 而更多是展示如何将一款操作系统在 Intel 架构上做到极致性能, 它的设计面向开发者、云计算、边缘计算与 AI 场景, 而非桌面用户, 有着自己独到的一个构建体系, 有着极高的自动化过程.

4.2 Clear Linux OS 中有哪些值得被借鉴的理念和项目?

软件生态与构建体系系统特性与设计原则提到的 Stateless 的系统分层思想, 一系列自动化工具, 引导管理工具, 以及软件分发机制, 还有系统级的遥测框架都值得借鉴.

4.3 Clear Linux OS 的底层设计思想是否能够应用到其他架构?

性能调优上, 针对 Intel 指令集(AVX、SSE、PCLMULQDQ)优化, 在 RISC-V 不也有 RVV 的优化吗? 他的自动化构建流水线是不是在 openEuler 上也可以构建一个更加智能的 AutoBuild 平台. RISC-V 若未来主流支持 UEFI, 可尝试移植 systemd-boot 以取代传统 grub.

虽然网友纷纷议论 Clear Linux OS 在 x86 的性能优化, 但我认为更重要的是该系统的整体优化与自动化哲学.

5 References

  1. Wiki: https://en.wikipedia.org/wiki/Clear_Linux_OS

  2. clear Linux 宣停原文: https://community.clearlinux.org/t/all-good-things-come-to-an-end-shutting-down-clear-linux-os

  3. About Clear Linux: https://www.clearlinux.org/clear-linux-documentation/about.html

  4. Clear Linux 源码仓库: https://github.com/clearlinux

  5. Guides: https://www.clearlinux.org/clear-linux-documentation/guides/index.html

  6. Clear Linux* Project for Intel Architecture: https://web.archive.org/web/20150323081923/https://01.org/clearlinux

  7. Intel® 64 and IA-32 Architectures Optimization: https://www.intel.com/content/www/us/en/developer/articles/technical/intel64-and-ia32-architectures-optimization.html