コンテキストスイッチの処理時間

名前付きパイプをJNIWrapperを使って、Javaから読み書きするテストアプリを作りました。

ついでに、2つのプロセス間を、名前付きパイプでつなぎ、1バイトをお互いに読み書きしあうのに、何秒かかるのかはかってみました。プロセスAが書いたら、それをプロセスBが読み、そして、プロセスBが書き込み、それをプロセスAが読み込むというので一サイクルです。

100万回読み書きを行い、1回あたりの読み書きの平均は90μ秒です。マシンは、Pentium4の3.2GHzです。ハイパースレッディングは有効なので、論理CPUは2個です。OSはWindows XPです。処理時間の大半は、ユーザーモードカーネルモードの切り替え時間ではないかと想像されます。

同一のテストを PentiumM 1.2GHzで行ってみました。こちらは論理CPUは1個です。OSはこちらもWindows XPです。ユーザーモードカーネルモードのコンテキストスイッチの時間に加えて、2つのプロセス(スレッド)の間の切り替えの1往復分の時間が追加されます。結果は、1回あたりの読み書きの平均は110μ秒でした。

クロック周波数がこんなに違うのに、結果の差はほとんどありません。

うーん、この処理時間は何が要因で決まっているのでしょうか?