出版社:ポロニクス対照9つのオペレーティングシステム。最速の3つは次のとおりです。
- クリーン Linux 32310
- CentOS Stream(およびローリングManjaroは最後から2番目)
- Fedora Workstation 31
特に、CentOSとManjaroローリングの間のこれらの違いの根本的な原因は何ですか?彼らは他のコアを提供していますか? CentOSパッケージはより多くの最適化フラグを使用しますか?デフォルトでは別のIOキューまたはガバナーを使用しますか?
答え1
最初から最後まで私が考えることができる要素は次のとおりです。
- カーネルの設定
- CPUおよびIOスケジューラの選択
- システム起動後に同時に実行されるアプリケーション数
- カーネルのコンパイル時に使用するコンパイラフラグ
- ベンチマークで使用されているアプリケーションをコンパイルするときに使用されるコンパイラーフラグ
- コンパイラ(GCC vs Clang vs ICC、古いGCC vs新しいGCC)
- 交換性
- ファイルシステムの選択(ext4、XFS、BTRFS、ZFS)
- ディスク構成(ソフトウェアRAID)
Clear Linuxでは、次のことを誇りに思います。
- コンパイルフラグの最適化
- 最新のLinuxカーネルの使用
- パフォーマンスを向上させるためのカスタムパッチによるカーネルパッチ
- CPUがサポートできる場合は、AVX512命令を使用してください。 (これには大きな違いがあります。)
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の「Writing Effective Programs」(悲しいことに絶版)または「Programming Pearls」(第2版)のコピーを入手してください。実際のパフォーマンスの向上ははるかに難しく、規模もはるかに大きくなります。