0

Linuxスケジューラでいくつかの測定を行いました。Linux は「Linux バージョン 2.6.18-194.el5 (mockbuild@x86-005.build.bos.redhat.com)」で、マシンは 8 CPU です。測定は、そのマシンの唯一のワークロードです。

測定は2セットです。最初のセットでは、8 つのスレッドが設定され、それぞれの計算コストは​​同じです。2 番目のセットは、1 つのスレッドを 2 つに分割することで、合計 9 つのスレッドになります (そのうちの 2 つは他の 7 つのスレッドの半分のコストです)。

2 つの測定セットを実行すると、スループットは同じであると予想されます。これは、総計算コストが同じであり、Linux スケジューラが (確かではありませんが) 1 つのコアでこれら 2 つの小さなスレッドをスケジュールする必要があるためです。結果は、スループットが 8 スレッドから 9 スレッドに劇的に減少したことが判明しました。何が原因なのか、誰にでも思い当たることはあります。

編集:@Waldheinz。これらのスレッドは順番に設定され (たとえば 0、1 ... 7)、スレッド 0、1 からスレッド 7 までの (無限の) タプル ストリームが通過します。8 つのスレッドはすべて、最初の測定セットと同じ計算コストです。

更新: スレッドの数が 16 に変更された場合、つまりすべてのコアに 2 つのスレッドがある場合、スループットは 8 スレッドの場合に改善されます...

4

2 に答える 2

1

Linux 2.6.18 は 2006 年にさかのぼる現在ではかなり古く、マルチコア システムは当時ほど一般的でも重要でもありませんでした。カーネルが 2.6.23 まで使用していたO(1) スケジューラの欠陥の一部をベンチマークが実行する可能性があります。それらの問題が何であったかは正確には忘れていますが、もっともらしいように思えます。O(1) の部分は、スケジューリングのオーバーヘッドが本質的に一定であるという事実を指しますが、そうであったとしても、状況によってはスケジューラーが不適切な決定を下しました。

可能であれば、より新しいカーネル (2.6.23 以降) を試して、新しい完全に公正なスケジューラーが違いを生むかどうかを確認してください。

于 2011-07-28T07:55:58.263 に答える