2

マシンはデュアルコアであり、OSはマルチプロセッサカーネルを使用します。いくつかのパフォーマンス評価を実行するために、JVMのスレッドアフィニティをシングルコアに設定したいと思います。ただし、JVMがシングルコアに制約されていることに気付かない可能性があるため、パフォーマンス測定値が歪んでしまうのではないかと心配していますが、スレッド同期とガベージコレクションにはマルチプロセッサプリミティブを使用しています。ガベージコレクターはコマンドラインから調整できますが、スレッドの同期はできません。

現在、JVMはスレッドに主に(*)OSスレッドを使用しています。したがって、おそらく問題は、「OS(Windows / Linux)は、対応するプロセスのスレッドアフィニティを設定することによってシングルコアの使用に制約があるマルチスレッドアプリケーションで正しい同期プリミティブを使用するか」ということです。

(*)これはWindowsでは正確には当てはまりません。Windowsでは、OSを呼び出す前にJVMが自動的に回転します。この動作は、-XX:+ UseSpinningおよび-XX:PreBlockSpin設定を介して制御できます。

4

1 に答える 1

0

JVM のアフィニティのみを設定すると、いずれにせよ、結果はある程度歪められます。JVM がシングルコア マシンで実行されているかのように 100% 動作する場合でも、OS カーネルとその他のユーザー空間コードは追加のコアを使用します。つまり、コンテキスト切り替えのオーバーヘッドが少なくなるため、パフォーマンス特性が異なります。

2番目のコアを無効にするだけです。あなたがWindows XPを使用していると仮定します:c:\boot.ini追加して編集します

/onecpu

起動オプションのリストに移動し、マシンを再起動します。

于 2009-07-30T12:44:39.657 に答える