新しいクアッド コア プロセッサでマルチスレッド アプリケーションを実行する Linux スレッド スケジューラの経験がある人はいますか? そのような人がいる場合は、さまざまなスレッドを管理するカーネルのパフォーマンスについての経験をここに書いてください。
ありがとうございました。
新しいクアッド コア プロセッサでマルチスレッド アプリケーションを実行する Linux スレッド スケジューラの経験がある人はいますか? そのような人がいる場合は、さまざまなスレッドを管理するカーネルのパフォーマンスについての経験をここに書いてください。
ありがとうございました。
Christoph Lameter (およびスケジューラーの Ingo Molnar) のようなカーネル開発者が 4096 プロセッサで適切に動作するようにカーネルを調整したことを考えると、インテル自身がこの問題に投資した最適化の量を考えると、パフォーマンスと省エネルギーの両方のためにマルチコア固有の調整が行われています。 、カーネルは、私たちがユーザー空間に書き込むことができるものよりもはるかに最適化されているに違いありません.
スレッド ライブラリについても同じです。現在、Linux 2.6 用の NPTL という 1 つのスレッド ライブラリしかありません。LinuxThreads は 2.4 リリースで glibc から削除され、NPTL は 2.6 リリースより前に作成されました。そして、それは本当に速いです。
古いカーネルの使用は避けてください。ディストリビューションの最新リリース、または kernel.org が最適です。本番環境にデプロイする前に、必ずパフォーマンスの違いを測定し、それが追加のサポート コスト (ある場合) に値するかどうかを検討してください。
Linux 自体は、多くのプロセッサの使用を非常にうまくサポートしています。SMP についての私の記憶が正しければ、Linux は 4096 プロセッサーをサポートします。実際に違いを生むのは、アプリケーションが複数のプロセッサを利用するように作成されているかどうかです。
これは、私たちが運用しているツイン クアッド コア システム (V8) で非常にうまく機能します。
ただし、ロック (ミューテックス) の競合が激しい場合、Linux のスレッド スタベーションの傾向には十分注意してください。10 個のスレッドが 1 つのロックで動作し、ロックが非常に頻繁に必要とされるが、非常に短い時間であり、特定の時点でロックの外で行われる作業がタイムスライスよりも少ないシナリオを想像してください。Linux は、ほぼ常に 1 つのスレッドにロックを配信し、他のすべてのスレッドを除外する傾向があります。
これは、カーネルにバインドされている特定のスレッド パッケージにも依存します。いくつかあると思います。
Intel Q6600 では、並列 make とその他の並列アプリケーションの両方で、まったく驚くべき結果が得られました。十分な数のスレッドを fork すると、特に同じセマフォで競合する場合に、顕著なオーバーヘッドが発生します。私の推測では、数千のスレッドはおそらく多すぎますが、数十のスレッドはおそらく問題ありません。しかし、それは単なる推測です。知りたい場合は、測定した人を見つけるか、自分で実験する必要があります。
しかし、ダースのスレッドについては、素晴らしい結果が得られました。