6

ある Linux カーネルで実行した場合と別の Linux カーネルで実行した場合で、パフォーマンスが大幅に低下する、レイテンシーの影響を受けやすい「パイプライン」スタイルのプログラムがいくつかあります。特に、2.6.9 CentOS 4.x (RHEL4) カーネルではパフォーマンスが向上し、CentOS 5.x (RHEL5) の 2.6.18 カーネルではパフォーマンスが低下します。

「パイプライン」プログラムとは、複数のスレッドを持つプログラムを意味します。複数のスレッドが共有データで動作します。各スレッド間にキューがあります。したがって、スレッド A はデータを取得し、Qab にプッシュし、スレッド B は Qab からプルし、何らかの処理を行ってから Qbc にプッシュし、スレッド C は Qbc からプルします。最初のデータはネットワークからのものです (サードパーティによって生成されます)。

基本的に、データを受信して​​から最後のスレッドがタスクを実行するまでの時間を測定します。私たちのアプリケーションでは、CentOS 4 から CentOS 5 に移行すると、20 から 50 マイクロ秒の増加が見られます。

アプリケーションのプロファイリングにいくつかの方法を使用しましたが、CentOS 5 で追加されたレイテンシはキュー操作 (特にポッピング) によるものであることがわかりました。

ただし、タスクセットを使用してプログラムを使用可能なコアのサブセットにバインドすることにより、CentOS 5 でのパフォーマンスを向上させることができます (CentOS 4 と同じになります)。

そのため、CentOS 4 と 5 の間で、(おそらくカーネルに) いくつかの変更があり、スレッドが異なる方法でスケジュールされるようになりました (この違いは、アプリケーションにとって最適ではありません)。

この問題はタスクセット (または sched_setaffinity() を介したコード) で「解決」できますが、私の好みは、これを行う必要がないことです。バージョン間でデフォルトが変更された、ある種のカーネル チューナブル (またはチューナブルのコレクション) があることを願っています。

誰でもこれを経験したことがありますか?おそらく、さらに調査すべき領域がいくつかありますか?

更新:この特定のケースでは、問題はサーバー ベンダー (Dell) からの BIOS 更新によって解決されました。私はこれでかなり長い間髪を伸ばしました。基本に戻って、ベンダーの BIOS アップデートを確認するまでは。疑わしいことに、更新プログラムの 1 つに「最大パフォーマンス モードでパフォーマンスを向上させる」などの記述がありました。BIOS をアップグレードすると、CentOS 5 の方が高速でした。一般的に言えば、特に私のキュー テストと実際の運用実行では高速でした。

4

2 に答える 2

1

うーん..プロデューサー/コンシューマー キューからの pop() 操作にかかる時間がアプリの全体的なパフォーマンスに大きな違いをもたらしている場合は、スレッド/ワークフローの構造がどこかで最適化されていないことをお勧めします。キューに大量の競合がない限り、キューが古典的な「コンピューターサイエンス117」でカーネルロックを使用している場合でも、最新のOSでPCキューのプッシュ/ポップに1 µS以上かかる場合は驚くでしょう。 - 3 つのセマフォの方法で境界のある PC キューを作成する方法。

最小の作業を行うスレッドの機能を最も多くの作業を行うスレッドに吸収して、システムを通過する全体的な作業項目ごとのプッシュ/ポップの数を減らすことができますか?

于 2011-05-24T16:49:05.607 に答える
1

Linux スケジューラーは、長年にわたって変化と論争の激しい分野でした。ごく最近のカーネルを試してみてください。はい、自分でコンパイルする必要があるかもしれません。また、(新しいカーネルを使用している場合)さまざまなプロセスを別のコンテナーに配置し、他のすべてを追加のコンテナーに配置することを検討して、それが役立つかどうかを確認することもできます。

他のランダムなことを試す限り、さまざまなプロセスの優先度を上げて、リアルタイムのセマンティクスを追加できます (注意、リアルタイムの特権を持つバグのあるプログラムは、システムの残りの部分を枯渇させる可能性があります)。

于 2011-05-25T04:51:45.600 に答える