更新
他们没有!至少,不适合我。
看我的回答。
原始问题
根据去年的 Phoronix 基准测试,FreeBSD 上的应用程序运行速度大多比 Debian 上慢(包括 Stockfish 国际象棋引擎、Node.js、FLAC 编码和其他计算任务)。
Phoronix 文章本身将一些性能差异归因于使用 Clang 而不是 GCC 编译器。其他一些观点认为使用 ZFS 会使 FreeBSD 变慢,因为 ZFS 本质上比 ext4 慢。
但是,即使是使用 GCC8 编译的 FreeBSD 上的纯计算任务,其执行速度也比 Linux 上要慢。
这是什么原因?它是 FreeBSD 和 Linux 内核之间固有的差异,可能是由于驱动程序质量较差还是有其他原因?
PS为了更具体一点,这里有一个相当简单的纯计算程序,根据 Phoronix,它在 FreeBSD 上比在 Linux 上运行得慢:m-queens 1.2。编译如下:
gcc -o m-queens.bin main.c -O2 -march=native -mtune=native -std=c99 -fopenmp
由于这是在两个 20 核 CPU 上运行的多线程任务,我怀疑性能差异归结为操作系统处理多线程的能力。
PPS为了更清楚地说明,我知道 FreeBSD 具有良好的网络功能并且它被Netflix 使用。这个问题专门针对计算任务,例如上面的问题。
PPPS在我的 6 核桌面和 Ubuntu 一起安装 FreeBSD (TrueOS) 并尝试自己运行皇后基准测试后,我没有注意到多线程性能有任何显着差异。虽然 Phoronix 声称它在 FreeBSD 上的运行速度慢了 39%,但在我的测试中它只慢了 3.7%,这可能是由于编译器版本的细微差别(TrueOS 上的 gcc 7.4,Ubuntu 上的 gcc 7.2)。我稍后会测试更多。
如此多的反对票促使我在我的 6 核台式计算机上安装 FreeBSD (TrueOS) 以自己进行测试。(注意:我不建议尝试将 TrueOS 与其他操作系统一起安装,因为此安装会擦除我的一个硬盘驱动器,即使我尝试将其安装在 USB 驱动器上......这不是一种用户友好的体验。)
结果,在 Ubuntu 和 FreeBSD 上运行 Phoronix 测试套件的一些测试后,我看不到“FreeBSD 上的应用程序缓慢”效果。恰恰相反,一些应用程序在 FreeBSD 上的运行速度明显加快(10-25%):
如您所见,在 FreeBSD 上执行较慢的唯一任务是多线程 N 皇后问题,比在 Ubuntu 上多花费 3.7% 的时间。
潜在的陷阱:
总之,在测试操作系统性能时,您应该:
我明白了,基准测试涉及使用 OpenMP。这可能是差异的来源。检查正在使用的 OpenMP 运行时库。
另一件值得关注的事情——反汇编代码或中间表示。它可以让您快速找到正在执行的指令的差异。
总而言之,对此没有快速而明确的答案,您必须进行一些研究。