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 スレッドの場合に改善されます...