Windows Server の電源プラン

前回、前々回とパフォーマンストラブルシューティングの基礎的な部分を書いていたのですが、今回は少し変えて Windows Server の電源オプションについて書いていきます。この電源オプションもパフォーマンスに大きく影響する要素です。

電源プランでパフォーマンスは変わる

昨今はITにおける省電力も重要な要素になりつつあり、最近のWindowsも省電力にフォーカスした機能をたくさん搭載しています。それらの機能の動作を変更しているのが電源オプションです。電源オプションの設定画面にはコントロールパネルからアクセスこともできますし、Windows Server 2012 R2 ではデスクトップのWindowsボタンを右クリックして直接アクセスすることができます。

デフォルトでは [高パフォーマンス]、[バランス]、[省電力] の3つの電源プランが用意されていて、たくさんの省電力機能の動作が変更されます。

一例としてCPUの動作クロックが変わることを確認してみます。

パフォーマンス モニターで [Processor Information / Processor Frequency] というカウンターを表示してみましょう。(もし Hyper-V が有効化されている場合は [Hyper-V Hypervisor Logical Processor / Frequency] というカウンターを表示してください)

今回のサンプル環境には Intel 社製の定格 2.0 Ghz のCPUが搭載されていますが、電源プランが [バランス] でCPU負荷が低い場合は約 1.2 Ghz で動作させて消費電力を削減させていることが確認できます。

負荷が低い状態で電源プランを [高パフォーマンス] に変更すると動作クロックが向上することが確認できると思います。

[バランス] だとパフォーマンスが出ない場合も

さて、電源プランを [バランス] に戻してベンチマークソフトなどを実行してCPUに負荷をかけてみます。通常CPUに負荷がかかると電源プランが [バランス] の場合はCPUのクロックを向上させて、電源プランを [省電力] の場合はCPUの負荷がかかっている状態でもクロックが低いままになるのですが、シングルスレッドのCPUベンチマークソフトである Super PI を実行した場合、電源プランが [バランス] に変更してもCPUクロックがほとんど向上しない場合があります。この理由は単純で、複数のCPUコアを搭載したシステムではシングルスレッドのアプリケーションを実行しても電源プラン定義されたCPUクロックを向上させるための閾値に達しないためです。

ちなみに、シングルスレッドのアプリケーションでもタスクマネージャーから特定のCPUコアで実行するように設定を変更するとそのCPUコアの負荷が高い状態になるので動作クロックも向上します。

非表示の詳細設定

これらの電源プランで定義されている設定は電源オプションの詳細設定で変更できますが、CPUの省電力設定などはデフォルトでは非表示になっていることが多いと思います。
しかし非表示になっている設定はレジストリの値を変更することで表示することができます。(※これらの設定変更をする場合は自己責任で慎重に行ってください。)

CPUに関する設定は HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Power\PowerSettings\54533251-82be-4824-96c1-47b60b740d00\447235c7-6a8d-4cc0-8e24-9eaf70b96e2b というキーの配下に格納されています。このキーのサブキーに含まれている Attributes の値を0に変更すると電源オプションの詳細画面に表示されるようになります。

あくまで自己責任ですが、これらのデフォルトは非表示の項目の値を変更することで CorePark や TurboBoost、SpeedStep の動作を制御することもできるようです。

このように、Windows では電源オプションによってCPUの動作が変わってきます。「新しいサーバーになったのに性能が伸びない」とか「夜間のバッチ処理が遅い」などCPUの省電力機能によって性能を発揮できていない場合は電源オプションの変更によって改善する可能性がありますので、覚えておくとよいと思います。