web-dev-qa-db-ja.com

Hyper-VホストのSpeedStepを無効にするベストプラクティスは?

仮想マシン内のCPUにバインドされたワークロードのパフォーマンスが、多くの場合(常にではありません)、基盤となるハードウェアに基づいて予想されるパフォーマンスを大幅に下回る問題を分析しています。

Windows Server 2012 R2ではHyper-Vを使用しています。サーバーには、デュアルIntel Xeon E5-2643 v2 @ 3.50 GHzが搭載されています。

以下は、関連があると思われる図です。

  • Hyper-Vハイパーバイザー論理プロセッサー、%合計実行時間、インスタンス_Total:平均20%
  • Hyper-Vハイパーバイザー仮想プロセッサー、ディスパッチごとのCPU待機時間、インスタンス_Total:平均20000(この数値は完全に安全な側にあるように見えるため、ハイパーバイザーが時間をスケジュールするために仮想CPUから「スチール」する必要はないようです別のVMの論理CPUに変換します。2%のオーバーヘッドで変換されるようです)
  • Hyper-Vハイパーバイザー論理プロセッサー、最大頻度の%、インスタンス_合計:平均34%
  • CPU-Zツールは、ほとんどの場合、両方のプロセッサのコア#0で約1200 MHzを示します(パフォーマンスモニターによって報告される最大周波数の%とかなり一致します)。

コアが数個しかないデスクトップでは、CPUにバインドされたアクティビティが始まるとすぐにコア速度が上がります。

ただし、Hyper-Vホストでは、システム全体の負荷が数秒間高いと思われる場合にのみ、コア速度が上がるようです。今、例えばVM合計24の物理CPUのうち4つの仮想CPUがあり(ハイパースレッディングがオンの場合)、かつVMにはCPUパワーとタスクマネージャが必要です。 VMの内部では、ほぼ100%のCPU使用率が示されています。ほとんどの場合、物理CPUのクロック速度は上がらず、パフォーマンスは低下します。

これは明らかに望ましくない動作です。サーバーがCPU周波数を上げるのに「十分」な負荷を持っていないため、クエリに答えるのに3倍の時間が必要なデータベースサーバーを考えてみてください。それは意味がありません。

私は VMWareとCiscoブレードのまったく同じ動作を説明するブログ投稿 を2011年から見つけました。これに関する情報はどこにも見つかりませんでした。

powercfg.cplでWindowsの「ハイパフォーマンス」電源プランに切り替えることで、実際にこの動作を回避することができましたが、約30%高い電力使用率を犠牲にしています。実際にパフォーマンスが向上し、一貫性が向上しました。パフォーマンスモニターでは負荷の数値が低くなっています。

(古いサーバーでは、他のすべての省電力オプションを無効にすることなく100%に設定できる追加の設定「処理電力管理|最小プロセッサー状態」を見つけました。新しいものは、「アクティブ」にある「システム冷却ポリシー」のみを表示します「「バランス」プランの場合でも、「唯一のオプション」は「高性能」を選択することでした。)

これはHyper-Vホストの本当にベストプラクティスですか、それとも他の回避策はありますか? SpeedStepが本当に問題である場合、なぜそれがサーバーのCPUに組み込まれてデフォルトで有効になるのか、なぜHyper-V構成ガイドでこの設定について読んだことがないのでしょうか。

6

もう少し検索したところ、これは仮想化とは関係なく、最新のサーバーCPUの一般的な問題であるようです。主要なサーバーベンダーやMicrosoftやVMWareなどのソフトウェアベンダーは、デフォルトで製品を出荷していますCPUパフォーマンスを人為的に制限する設定。私はまだそれを信じるのは難しいと思います。

すべてのコアが最初にビジーでない状態で、フルCPUパワーコアあたりに瞬時にアクセスすることを気にする人のためのソリューションは、省電力を無効にすることです(Intel SpeedStep/EISTまたはAMD Cool'n'Quiet) 。 BIOS設定に応じて、これはOSレベルで制御できます(Windowsのようにpowercfg.cpl "ハイパフォーマンス"プラン)、またはBIOS経由の場合、この場合、OS設定はグレー表示されます。

Brent Ozarは、2011年にこれを書きました( "SQL Server on Power-Saving CPUs?Not So Fast。" ):

ここ数週間、サーバーのアップグレードによってパフォーマンスが低下するケースがいくつか見られましたが、主要な要因の1つはCPUのスロットルダウンでした。理論的には、サーバーは需要に応じてジュースを調整する必要がありますが、実際にはそうではありません。サーバーの製造元はBIOSで省電力設定を非表示にしており、Windows Serverには、CPUを頻繁に減速するデフォルトの省電力オプションが同梱されています。

Microsoftは KB2207548

既定の(バランスのとれた)電源プランで実行すると、Windows Server 2008 R2マシンで全体的なパフォーマンスが低下する場合があります。この問題はプラットフォームに関係なく発生する可能性があり、ネイティブ環境と仮想環境の両方で発生する可能性があります。パフォーマンスが低下すると、一部のタスクの平均応答時間が長くなり、CPUを集中的に使用するアプリケーションでパフォーマンスの問題が発生する可能性があります。 [...]この問題は、電源オプション設定が[バランス]に設定されている場合に発生することがあります。既定では、Windows Server 2008 R2はバランス(推奨)電源プランを設定します

Win2008R2で利用可能な修正プログラムがあり、BIOSの更新をお勧めしますが、これはWin2012R2の問題であるため、2番目の推奨事項である「高パフォーマンス」計画を回避する方法はないようです。

同様の症状の問題は KB2534356 で説明されています。これは、Win2008R2のみのホットフィックスも提供します。したがって、私には通常の回避策(ハイパフォーマンスプラン)のみが適用されますが、将来的には修正が可能になるようです。 (デスクトップCPUでうまく機能するので、サーバーでこれを実行できない理由を理解できません。)

より良い解決策が見つかる場合に備えて、この回答を更新します(または、他の誰かが解決策を投稿している場合は、もちろん、承認された回答を変更します)。

EC2またはAzureに同じ問題があるかどうかまだ疑問に思っています(この場合、ホストを制御する必要があるため、これについては何もできません。VM won影響はありません)。

さらにいくつかの参照:

7

私はこれを散発的に見ただけです。理論的には、speedstep(構成可能なオプションになりつつあるようですが)はパフォーマンスに影響を与えません。ただし、それがステップダウンしていて、単一のVMで突然忙しくなると、プロセッサーが十分ではないと思われる場合があります。 VMwareとCiscoには同じ問題があるので、これがMicrosoftの問題かどうかはわかりません。

0
Jim B