![为什么 FreeBSD 上的应用程序运行速度比 Linux 上慢?](https://linux22.com/image/156998/%E4%B8%BA%E4%BB%80%E4%B9%88%20FreeBSD%20%E4%B8%8A%E7%9A%84%E5%BA%94%E7%94%A8%E7%A8%8B%E5%BA%8F%E8%BF%90%E8%A1%8C%E9%80%9F%E5%BA%A6%E6%AF%94%20Linux%20%E4%B8%8A%E6%85%A2%EF%BC%9F.png)
更新
他们不!至少,不适合我。
看我的回答。
原问题
根据去年的 Phoronix 基准测试,FreeBSD 上的应用程序大多比 Debian 上运行得慢(包括 Stockfish 国际象棋引擎、Node.js、FLAC 编码和其他计算任务)。
Phoronix 文章本身将一些性能差异归因于使用 Clang 而不是 GCC 编译器。其他有观点认为,使用 ZFS 会使 FreeBSD 变慢,因为 ZFS 本质上比 ext4 慢。
但即使是使用 GCC8 编译的 FreeBSD 上的纯粹计算任务的执行速度也比 Linux 上慢。
其原因何在?这是 FreeBSD 和 Linux 内核之间固有的差异,还是驱动程序质量较差造成的,或者还有其他原因吗?
聚苯乙烯更具体地说,这是一个相当简单的纯计算程序,根据 Phoronix 的说法,它在 FreeBSD 上的运行速度比在 Linux 上慢:m-皇后1.2。编译如下:
gcc -o m-queens.bin main.c -O2 -march=native -mtune=native -std=c99 -fopenmp
由于这是一个在两个 20 核 CPU 上运行的多线程任务,我怀疑性能差异归结为操作系统处理多个线程的能力。
聚苯硫醚为了更清楚地说明,我知道 FreeBSD 有良好的网络能力并且它是Netflix 使用。这个问题专门针对计算任务,如上面的任务。
购买力平价服务在我的 6 核桌面上安装 FreeBSD (TrueOS) 和 Ubuntu 并尝试自己运行 queens 基准测试后,我没有注意到多线程性能有任何显着差异。虽然 Phoronix 声称它在 FreeBSD 上运行速度慢了 39%,但在我的测试中它仅慢了 3.7%,这可能归因于编译器版本的细微差异(TrueOS 上的 gcc 7.4,Ubuntu 上的 gcc 7.2)。稍后我会进行更多测试。
答案1
如此多的反对票刺激我在我的 6 核台式电脑上安装 FreeBSD (TrueOS) 来亲自测试。 (注意:我不建议尝试将 TrueOS 与其他操作系统一起安装,因为此安装擦除了我的一个硬盘驱动器,即使我尝试将其安装在 USB 驱动器上......这不是一种用户友好的体验。)
结果,在 Ubuntu 和 FreeBSD 上运行 Phoronix 测试套件的一些测试后,我看不到“FreeBSD 上应用程序缓慢”的效果。恰恰相反,一些应用程序在 FreeBSD 上的运行速度显着加快 (10–25%):
Test FreeBSD 13 Ubuntu 17
Fhourstones, kpos/s 16753 13336
m-queens, multithreaded, user time, s 18.08 17.38
7zip 1 GB text file, user time, s 994 1096
正如您所看到的,在 FreeBSD 上执行速度较慢的唯一任务是多线程 N 皇后问题,比 Ubuntu 上多花费 3.7% 的时间。
潜在的陷阱:
- Ubuntu 上的 gcc 版本为 7.2,FreeBSD 上的版本为 7.4
- Ubuntu 在 shell 中与 KDE、FreeBSD 一起运行(应该没有太大区别)
- Phoronix 使用 80 线程服务器,我使用 6 线程 Intel i5 计算机。
总之,在测试操作系统性能时,您应该:
- 自己对您的设置运行基准测试,而不是相信其他人获得的结果。
- 尝试使用相同的编译器。
- 请注意,Perl 和 Python 等脚本语言的性能并不是操作系统性能的良好指标,因为不同安装的解释器的行为不同。
答案2
我明白了,基准测试涉及使用 OpenMP。这就是差异可能来自的地方。检查正在使用什么 OpenMP 运行时库。
另一件值得关注的事情 - 反汇编代码或中间表示。它可以让您快速找到正在执行的指令的差异。
总而言之,这个问题没有快速且明确的答案,你必须做一些研究。