web-dev-qa-db-ja.com

FreeBSD上のアプリケーションの実行速度がLinux上より遅いのはなぜですか?

更新

彼らはしません!少なくとも、私はそうではありません。

私の答えを見てください。

元の質問

昨年のPhoronixベンチマーク によると、FreeBSDのアプリケーションは、Debian(Stockfishチェスエンジン、Node.js、FLACエンコーディング、その他の計算タスクを含む)よりもほとんどの場合、実行が遅くなります。

Phoronixの記事自体は、パフォーマンスの違いのいくつかを、GCCコンパイラーではなくClangを使用することに起因しています。 その他 ZFSは本質的にext4より遅いため、ZFSを使用するとFreeBSDが遅くなるという意見があります。

しかし、GCC8でコンパイルされたFreeBSDの純粋な計算タスクでさえ、Linuxの場合よりもパフォーマンスが低下しました。

その原因は何ですか?これはFreeBSDとLinuxカーネルの違いによるものですか、それともドライバの品質の低下が原因であるのでしょうか、それとも他の理由がありますか?

PSより具体的にするために、Phoronixによると、LinuxよりもFreeBSDの方が低速で実行されるかなり単純な純粋な計算プログラムを次に示します。 m -クイーンズ1.2 。このようにコンパイルされます:

gcc -o m-queens.bin main.c -O2 -march=native -mtune=native -std=c99 -fopenmp

これは2つの20コアCPUで実行されたマルチスレッドタスクなので、パフォーマンスの違いはOSが複数のスレッドをどの程度適切に処理するかにかかっていると思います。

PPSより明確にするために、FreeBSDには 優れたネットワーク機能 があり、 使用されていることを認識しています) Netflixによって 。問題は、特に上記のような計算タスクについてです。

PPPSFreeBSD(TrueOS)をUbuntuと一緒に6コアデスクトップにインストールし、クイーンズベンチマークを自分で実行しようとしたところ、大きな違いはありませんでしたマルチスレッドのパフォーマンス。 PhoronixはFreeBSDで39%遅く動作したと主張していますが、私のテストでは3.7%だけ遅くなりました。これは、コンパイラバージョンのわずかな違い(TrueOSではgcc 7.4、Ubuntuではgcc 7.2)に起因する可能性があります。後でもっとテストします。

3
Andriy Makukha

非常に多くの反対投票があり、自分でテストするために6コアデスクトップコンピューターにFreeBSD(TrueOS)をインストールするように刺激されました。 (注:他のオペレーティングシステムと一緒にTrueOSをインストールすることはお勧めしません。このインストールでは、USBドライブにインストールしようとしたにもかかわらず、ハードドライブの1つがワイプされたためです...ユーザーフレンドリーなエクスペリエンスではありません。)

その結果、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はKDE、FreeBSDをシェルで実行していました(大きな違いはありません)
  • Phoronixは80スレッドのサーバーを使用し、私は6スレッドのIntel i5コンピューターを使用しました。

結論として、OSのパフォーマンスをテストするときは、次のことを行う必要があります。

  • 他の誰かによって得られた結果を信頼する代わりに、自分の設定でベンチマークを実行します。
  • 同じコンパイラを使用してみてください。
  • perlやPython=のようなスクリプト言語のパフォーマンスはOSのパフォーマンスを示す良い指標ではないことに注意してください。インタープリターのインストールによって動作が異なるためです。
5
Andriy Makukha

ベンチマークにはOpenMPの使用が含まれています。これは違いが生じるかもしれないところです。使用されているOpenMPランタイムライブラリを確認します。

もう1つの注目すべき点は、逆アセンブリコードまたは中間表現です。実行中の命令の違いをすばやく見つけることができます。

これを要約すると、これに対する迅速かつ確実な答えはなく、いくつかの調査を行う必要があります。

2
arrowd