Windows 2000 Advanced ServerでCore i7の性能を引き出してみる実験
どうも、Core i7 で Hyper Threading Technology(HTT)を有効にすると、VistaやXPでも 性能が落っこちると言う記事を余りにも見るので、とある実験をしてみることにしました。
実験に使うのは最大4スレッドしか使わないと言う CrystalMark 2004R3 です
Core i7の場合CPU0~7が割り当てられていますが、実際どのCPUがどのHTTなのかよく分かりません。
まず、これが標準状態です。
CrystalMark | 138942 |
ALU | 45409 |
Fibonacci | 16866 |
Napierian | 11726 |
Eratosthenes | 5645 |
QuickSort | 11150 |
FPU | 52185 |
MikoFPU | 5430 |
RandMeanSS | 30553 |
FFT | 8084 |
Mandelbrot | 8096 |
MEM | 41348 |
Read | 17285.93 MB/s ( 17285 ) |
Write | 7969.49 MB/s ( 7969 ) |
Read/Write | 7860.45 MB/s ( 7860 ) |
Cache | 82124.14 MB/s ( 8212 ) |
次に、HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\NDIS\Parameters にある ProcessorAffinityMask の値を 0x55にしてみました。要するに偶数番のCPUを優先的に使うわけです。
CrystalMark | 128809 |
ALU | 41909 |
Fibonacci | 15101 |
Napierian | 11251 |
Eratosthenes | 5402 |
QuickSort | 10133 |
FPU | 47599 |
MikoFPU | 5430 |
RandMeanSS | 26612 |
FFT | 7714 |
Mandelbrot | 7821 |
MEM | 39301 |
Read | 15085.90 MB/s ( 15085 ) |
Write | 8013.80 MB/s ( 8013 ) |
Read/Write | 7982.05 MB/s ( 7982 ) |
Cache | 81991.49 MB/s ( 8199 ) |
ベンチマークの結果がた落ちです。恐らくCPU0とCPU4と言う具合に4番飛ばしでHTTペアになっているのでしょう。
ProcessorAffinityMaskを0xf0にしてみました。
HTTの片方を使う設定です。
CrystalMark | 138863 |
ALU | 47927 |
Fibonacci | 20043 |
Napierian | 11176 |
Eratosthenes | 5645 |
QuickSort | 11041 |
FPU | 51424 |
MikoFPU | 5430 |
RandMeanSS | 30385 |
FFT | 7734 |
Mandelbrot | 7853 |
MEM | 39512 |
Read | 16107.58 MB/s ( 16107 ) |
Write | 8055.21 MB/s ( 8055 ) |
Read/Write | 7935.97 MB/s ( 7935 ) |
Cache | 73935.78 MB/s ( 7393 ) |
設定していないときよりも明らかに性能UPです!
では、完全にCPU0,2,4,6しか使わないようにしたらどうなるか、やってみましょう。
CrystalMark | 105438 |
ALU | 34730 |
Fibonacci | 11697 |
Napierian | 9411 |
Eratosthenes | 4996 |
QuickSort | 8604 |
FPU | 39472 |
MikoFPU | 5420 |
RandMeanSS | 19914 |
FFT | 7358 |
Mandelbrot | 6758 |
MEM | 31236 |
Read | 10518.73 MB/s ( 10518 ) |
Write | 7769.78 MB/s ( 7769 ) |
Read/Write | 6711.58 MB/s ( 6711 ) |
Cache | 62163.35 MB/s ( 6216 ) |
うわ、もうがたがたですね。
最後にHTTを使わない設定です。
CrystalMark | 155237 |
ALU | 51566 |
Fibonacci | 20208 |
Napierian | 12530 |
Eratosthenes | 6211 |
QuickSort | 12595 |
FPU | 58852 |
MikoFPU | 5419 |
RandMeanSS | 36228 |
FFT | 8853 |
Mandelbrot | 8330 |
MEM | 44819 |
Read | 17201.80 MB/s ( 17201 ) |
Write | 8018.07 MB/s ( 8018 ) |
Read/Write | 7867.77 MB/s ( 7867 ) |
Cache | 117117.96 MB/s ( 11711 ) |
格段に結果が向上しました。
以前の結果と比べていただければ分かるように、約20%もCPUのベンチ部分が高速になりました!
スコアは 239316 です。
CPUが少ないときは2スレッド使い切ることが多いわけですが、Core i7になって、CPUが増えると、HTTを使用している場合、遊んでいるCPUが出てきてしまい、全体的にパフォーマンスが落ちることがあるというのは本当のようです。
性能比較
2CPU+HTTに限定<ProcessorAffinityMask に0x55もしくは0xAAを設定<デフォルトの設定<ProcessorAffinityMask に0xf0もしくは0x0fを設定<4CPUHTTなしに限定
こういうことですね。
利用するCPUが固定ならば、IMAGECFG.EXEなどを使用して使うCPUを限定してしまうと言う方法も よいかもしれませんね。
CPUをフルに8スレッド使い切るアプリケーションを使わないのならば 少なくとも、ProcessorAffinityMask を設定しておいた方がよさそうです。
同時にアプリケーションをそんなにたくさん起動しない場合は、もう、HTTを完全に無効にしてしまう方が良いかもしれませんね(^^;
というわけで、勿論4スレッドのCPUにもある程度これは言えそうで、atom のデュアルコア辺りなら、HTTを無効にしてProfessionalで使った方が却ってよいかもしれません。
HTTは1CPU(1コア)で使わないと、Windows2000を含め、XPやVistaでもその能力を発揮するのは普通の利用では難しいようです。
関連記事:
Windows 2000をマルチコアで最適化する
Hyper Threading Technology の足枷?
関連リンク:
プログラムの実行に使用するCPUを限定させる - @IT
Windows Server 2003、Windows 2000 Server、または Windows NT 4.0 実行しているコンピュータで複数のプロセッサのプロセッサの負荷が分散できません。
“関連記事:
Windows 2000をマルチコアで最適化する”
のリンク先をミスしてまする
ありがとうございます。
他も狂ってたので修正しました。