読者です 読者をやめる 読者になる 読者になる

生物物理計算化学者の雛

主に科学に関する諸々を書き留めています。

CentOSにおけるintel CPU ターボブースト動作の確認

Linux

先日SandyBridge世代CPUの新しい計算機が使えるようになりましたので、従来のマシンとシミュレーション計算時間の比較を行いました。
・新マシン Xeon E5-2630 2.3GHz 6 core (TurboMax 2.8GHz)
・旧マシン Xeon X5680 3.33GHz 6 core (TurboMax 3.6GHz)
・テスト計算 シングルコアジョブ(メモリ使用量は少なく、処理速度はCPU性能依存)

周波数比は 2.3GHz / 3.33GHz = 69% とかなり大きいので、NehalemとSandyBridgeのCPUアーキテクチャの違いがあるといっても旧マシンの方が処理速度は速いと予想していました。ところが、両マシンともほぼ同じ計算時間で終了しました。
この要因としてターボブーストの寄与が大きいかと思い cat /proc/cpuinfo によってCPU周波数をチェックしたのですが、cpu MHz : 2301.000 とターボブーストの効果は見えませんでした。
調べてみると、ターボブーストの効果は /proc/cpuinfo には反映されず、turbostatというプログラムを使う必要があると分かりました。

yumではturbostatは見当たらなかったので、turbostatを直接ダウンロードしてコンパイルすることにしました。

(root権限取得後に/root/turbostatのような適当なディレクトリを作成し、そこに移動してから以下を実行)
wget http://mirror.linux.org.au/linux/kernel/people/lenb/acpi/utils/pmtools-latest/turbostat/turbostat.c
wget http://mirror.linux.org.au/linux/kernel/people/lenb/acpi/utils/pmtools-latest/turbostat/Makefile
make

あとは単純に

./turbostat -v

で起動できます。なお -v オプションを付けることで、turbostat起動時に

12 * 100 = 1200 MHz max efficiency
23 * 100 = 2300 MHz TSC frequency
27 * 100 = 2700 MHz max turbo 4 active cores
27 * 100 = 2700 MHz max turbo 3 active cores
28 * 100 = 2800 MHz max turbo 2 active cores
28 * 100 = 2800 MHz max turbo 1 active cores

のようにCPU使用コア数と対応するターボブーストの上限周波数が表示されます。
ターボブーストが反映された周波数として以下の出力が得られます。

pkg core CPU   %c0   GHz  TSC   %c1    %c3    %c6    %c7   %pc2   %pc3   %pc6   %pc7
              16.89 2.75 2.30   8.15   0.25   0.12  74.59  29.71   0.00   0.00   0.00
   0   0   0   7.18 2.51 2.30  21.24   2.00   0.73  68.85  54.64   0.00   0.00   0.00
   0   1   1   6.26 2.78 2.30  13.79   0.04   0.00  79.91  54.64   0.00   0.00   0.00
   0   2   2   0.31 1.28 2.30   0.30   0.07   0.00  99.31  54.64   0.00   0.00   0.00
   0   3   3   0.34 1.26 2.30   0.41   0.02   0.06  99.18  54.64   0.00   0.00   0.00
   0   4   4   0.01 1.30 2.30  11.80   0.00   0.00  88.19  54.64   0.00   0.00   0.00
   0   5   5   0.38 1.21 2.30  15.21   0.73   0.59  83.08  54.64   0.00   0.00   0.00
   1   0   6  93.82 2.76 2.30   0.07   0.00   0.00   6.11   4.79   0.00   0.00   0.00
   1   1   7  93.74 2.76 2.30   0.06   0.00   0.00   6.20   4.79   0.00   0.00   0.00
   1   2   8   0.05 2.69 2.30   1.93   0.00   0.00  98.02   4.79   0.00   0.00   0.00
   1   3   9   0.07 2.69 2.30   0.11   0.01   0.00  99.82   4.79   0.00   0.00   0.00
   1   4  10   0.48 2.67 2.30  21.45   0.15   0.06  77.85   4.79   0.00   0.00   0.00
   1   5  11   0.01 2.69 2.30  11.46   0.00   0.00  88.53   4.79   0.00   0.00   0.00

左から5列目の「GHz」列がそのCPUコアの周波数であり、ターボブーストのおかげで2.7GHz程度まで周波数が上昇していることが確認できます。
なお、%c0はユーザプログラム等が使用しているCPU使用率、%c1-%c7は各CPUコアの省電力状態(C-states、数字が大きいほどより省電力)、%pc2-6は各物理CPUの省電力状態(package C-state ?)を表しているようです。

ちなみにフルコア使用時でも以下のように2.60GHzまでターボブーストが効いています。

pkg core CPU   %c0   GHz  TSC   %c1    %c3    %c6    %c7   %pc2   %pc3   %pc6   %pc7 
             100.00 2.60 2.30   0.00   0.00   0.00   0.00   0.00   0.00   0.00   0.00
   0   0   0 100.00 2.60 2.30   0.00   0.00   0.00   0.00   0.00   0.00   0.00   0.00
   0   1   1 100.00 2.60 2.30   0.00   0.00   0.00   0.00   0.00   0.00   0.00   0.00
   0   2   2 100.00 2.60 2.30   0.00   0.00   0.00   0.00   0.00   0.00   0.00   0.00
   0   3   3 100.00 2.60 2.30   0.00   0.00   0.00   0.00   0.00   0.00   0.00   0.00
   0   4   4 100.00 2.60 2.30   0.00   0.00   0.00   0.00   0.00   0.00   0.00   0.00
   0   5   5 100.00 2.60 2.30   0.00   0.00   0.00   0.00   0.00   0.00   0.00   0.00
   1   0   6 100.00 2.60 2.30   0.00   0.00   0.00   0.00   0.00   0.00   0.00   0.00
   1   1   7 100.00 2.60 2.30   0.00   0.00   0.00   0.00   0.00   0.00   0.00   0.00
   1   2   8 100.00 2.60 2.30   0.00   0.00   0.00   0.00   0.00   0.00   0.00   0.00
   1   3   9 100.00 2.60 2.30   0.00   0.00   0.00   0.00   0.00   0.00   0.00   0.00
   1   4  10 100.00 2.60 2.30   0.00   0.00   0.00   0.00   0.00   0.00   0.00   0.00
   1   5  11 100.00 2.60 2.30   0.00   0.00   0.00   0.00   0.00   0.00   0.00   0.00

またアイドル時は以下のように大半のCPU時間は高い省電力モードc7になっています。

pkg core CPU   %c0   GHz  TSC   %c1    %c3    %c6    %c7   %pc2   %pc3   %pc6   %pc7 
               0.11 1.27 2.30   2.90   0.01   0.00  96.97  66.72   0.02  20.70   0.00
   0   0   0   0.05 1.20 2.30   0.06   0.00   0.00  99.89  74.69   0.03  20.60   0.00
   0   1   1   0.09 1.20 2.30   0.05   0.01   0.00  99.86  74.69   0.03  20.60   0.00
   0   2   2   0.10 1.24 2.30   0.12   0.01   0.00  99.78  74.69   0.03  20.60   0.00
   0   3   3   0.03 1.20 2.30   3.70   0.00   0.00  96.27  74.69   0.03  20.60   0.00
   0   4   4   0.02 1.20 2.30   3.61   0.00   0.00  96.37  74.69   0.03  20.60   0.00
   0   5   5   0.13 1.20 2.30   0.56   0.11   0.00  99.20  74.69   0.03  20.60   0.00
   1   0   6   0.14 1.20 2.30   0.54   0.00   0.00  99.32  58.75   0.02  20.81   0.00
   1   1   7   0.04 1.20 2.30   2.01   0.00   0.00  97.95  58.75   0.02  20.81   0.00
   1   2   8   0.02 1.20 2.30   1.63   0.00   0.00  98.35  58.75   0.02  20.81   0.00
   1   3   9   0.03 1.20 2.30   0.05   0.00   0.00  99.92  58.75   0.02  20.81   0.00
   1   4  10   0.70 1.33 2.30  19.32   0.05   0.00  79.93  58.75   0.02  20.81   0.00
   1   5  11   0.01 1.21 2.30   3.16   0.00   0.00  96.83  58.75   0.02  20.81   0.00

ついでに旧マシンでもターボブーストが効いているかどうかチェックしようとしたのですが、turbostatを実行すると以下のようにうまく動作してくれません。

cpu8 aperf counter went backwards 59EB55B8 to 23975EC
cpu8 mperf counter went backwards 5676B81C to 2239B01
./turbostat: APERF or MPERF went backwards *
 * Frequency results do not cover entire interval *
 * fix this by running Linux-2.6.30 or later *
pkg core CPU   %c0   GHz  TSC   %c1    %c3    %c6   %pc3   %pc6 
               **** 3.5* 3.33   ****   0.00   0.00   0.00   0.00
   0   0   0   **** 3.5* 3.33   ****   0.00   0.00   0.00   0.00
   0   1   1   **** 3.5* 3.33   ****   0.00   0.00   0.00   0.00
   0   2   2   **** **** 3.33   ****   0.00   0.00   0.00   0.00
   0   8   3   **** **** 3.33   ****   0.00   0.00   0.00   0.00
   0   9   4   **** 3.5* 3.33   ****   0.00   0.00   0.00   0.00
   0  10   5   **** **** 3.33   ****   0.00   0.00   0.00   0.00
   1   0   6   **** 3.5* 3.33   ****   0.00   0.00   0.00   0.00
   1   1   7   **** 3.5* 3.33   ****   0.00   0.00   0.00   0.00
   1   2   8   **** **** 3.33   ****   0.00   0.00   0.00   0.00
   1   8   9   **** 3.5* 3.33   ****   0.00   0.00   0.00   0.00
   1   9  10   **** **** 3.33   ****   0.00   0.00   0.00   0.00
   1  10  11   **** 3.5* 3.33   ****   0.00   0.00   0.00   0.00

旧マシンはCentOS 5.4 (Linxu version 2.6.18)であるため、turbostatが使えないことになります。
なお新マシンはCentOS 6.2(Linux version 2.6.32)なので問題はおきませんでした。