为什么Linux发行版的性能不同?

为什么Linux发行版的性能不同?

Phoronix 发布一个对比9 个操作系统。最快的三个是:

  1. 清除Linux 32310
  2. CentOS Stream(而滚动的 Manjaro 是倒数第二个)
  3. Fedora 工作站 31

造成这种差异的根本原因是什么,尤其是滚动的 CentOS 和 Manjaro 之间?他们提供不同的内核吗? CentOS 软件包是否使用更多优化标志?他们默认使用不同的 IO 队列或调控器吗?

答案1

以下是我从头到尾能想到的因素:

  • 内核配置
  • CPU和IO调度器的选择
  • 系统启动后有多少个应用程序同时运行
  • 编译内核时使用的编译器标志
  • 编译基准测试中使用的应用程序时使用的编译器标志
  • 编译器(GCC vs Clang vs ICC,旧 GCC vs 新 GCC)
  • 交换性
  • 文件系统选择(ext4、XFS、BTRFS、ZFS)
  • 磁盘配置(软件RAID)

对于 Clear Linux 来说,他们引以为豪的是:

  • 优化编译标志
  • 使用最新的Linux内核
  • 使用自定义补丁修补内核以提高性能
  • 使用 AVX512 指令,如果 CPU 可以支持它们(这会产生巨大的差异)

使用 CPU 可以提供的完整指令集会产生重大影响。

作为比较,Arch Linux(和 Manjaro)为通用 64 位 x86 CPU 提供了使用 GCC 编译的内核、库和可执行文件 ( -march=x86-64 -mtune=generic)。这提供了良好的性能,但不如专门为其运行的 CPU 编译的可执行文件。

使用elfx86extsArch Linux上的工具/usr/bin/ls至少显示需要哪些 CPU 指令:

$ elfx86exts /usr/bin/ls
MODE64 (call)
CMOV (cmovne)
SSE2 (movdqa)
SSE1 (movups)
CPU Generation: Intel Core

我还没有机会在 Clear Linux 上尝试相同的操作,但我假设会出现更长的指令列表。

总之,修补内核和调整内核配置可以带来良好的结果,但最重要的是,支持可用的 CPU 指令会带来很大的不同。

答案2

手动调整编译标志所带来的性能增益被高估了。而且成本是不小的(如果你编译了一种适合你的机器的配置,我为我的机器定制了一个不同的配置,你偶然发现的任何错误都将只属于你自己,很可能我会有自己的私人一套)。

获取一本 Bentley 的“编写高效程序”(遗憾的是早已绝版)或他的“编程珍珠”(第二版)。真正的性能提升要难得多,而且要大几个数量级。

相关内容