サーバーのパフォーマンスについて話すとき、それを見るにはいくつかの異なる方法があります。見かけの応答時間(ネットワーク遅延に類似)とスループット(ネットワーク帯域幅に類似)があります。
Windows Serverの一部のバージョンには、デフォルトでバランス電源設定が有効になっています。ジェフが指摘したように。Windows 2008 R2もその1つです。最近ではシングルコアのCPUはほとんどないため、この説明はシングルコアVMを除き、実行するほとんどすべてのWindowsサーバーに当てはまります。(それらについては後で詳しく説明します)。
バランスのとれた電源プランがアクティブな場合、CPUは使用している電力量を抑えようとします。これを行う方法は、「パーキング」と呼ばれるプロセスでCPUコアの半分を無効にすることです。一度に使用できるのはCPUの半分のみであるため、トラフィックが少ないときに使用する電力は少なくなります。これ自体は問題ではありません。
問題は、CPUのパークが解除されると、システムで使用可能なCPUサイクルが2倍になり、システムの負荷が突然不均衡になり、(たとえば)70%の使用率から35%の使用率になることです。システムはそれを確認し、トラフィックのバーストが処理された後、「ちょっと、電力を節約するために少しダイヤルバックする必要がある」と考えます。そして、そうです。
ここが悪い部分です。CPUコア内での熱と電力の不均等な分配を防ぐために、最近駐車されていないCPUを駐車する傾向があります。そして、それが適切に機能するためには、CPUはCPUレジスタ(L1、L2およびL3キャッシュ)から他の場所(ほとんどの場合メインメモリ)にすべてをフラッシュする必要があります。
架空の例として、C1〜C8の8コアCPUがあるとします。
- アクティブ:C1、C3、C5、C7
- 駐車中:C2、C4、C6、C8
これが発生すると、それらはすべて一定期間アクティブになり、システムは次のようにそれらをパークします。
- アクティブ:C2、C4、C6、C8
- 駐車中:C1、C3、C5、C7
しかし、そうすることで、CPUパイプラインからフラッシュされたプログラムに奇妙なエラーが発生しないように、L1-L3キャッシュからすべてのデータをフラッシュすることに関連するかなりのオーバーヘッドがあります。
おそらく正式な名前がありますが、CPUスラッシングとして説明したいと思います。基本的に、プロセッサは、作業要求を処理するよりも、忙しい作業で内部的にデータを移動するのにより多くの時間を費やしています。
リクエストの待ち時間を短くする必要があるアプリケーションがある場合、バランスの取れた電力設定を無効にする必要があります。これが問題かどうかわからない場合は、次の手順を実行します。
- 「タスクマネージャー」を開きます
- 「パフォーマンス」タブをクリックします。
- 「リソースモニターを開く」をクリックします
- 「CPU」タブを選択します
- さまざまなCPUのウィンドウの右側を見てください。
それらのいずれかが駐車されているのを見ると、それらの半分がいつでも駐車され、すべてが発火し、残りの半分が駐車されることに気付くでしょう。それは前後に交互になります。したがって、システムCPUがスラッシングしています。
仮想マシン:ハイパーバイザーには追加のオーバーヘッドがあるため、仮想マシンを実行している場合、この問題はさらに悪化します。一般的に、VMを実行するには、ハードウェアが各タイムスライスで各コアに使用可能な時間スロットを持っている必要があります。
16コアのハードウェアがある場合、合計16を超えるコアを使用してVMを実行できますが、タイムスライスごとに最大16の仮想CPUのみがそのタイムスライスの対象となり、ハイパーバイザーはVMのすべてのコアに適合する必要がありますそのタイムスライスに。複数のタイムスライスに分散することはできません。(タイムスライスは基本的にX CPUサイクルのセットです。1000サイクルまたは10万サイクルになる場合があります)
例:8つのVMを備えた16のコアハードウェア。6つには4つの仮想CPU(4C)があり、2つには8つの仮想CPU(8C)があります。
タイムスライス1:4x4Cタイムスライス2:2x8Cタイムスライス3:2x4C + 1x8Cタイムスライス4:1x8C + 2x4C
ハイパーバイザーができないことは、タイムスライスの割り当ての半分を8 vCPU VMの最初の4つのCPUに分割し、次のタイムスライスで残りをそのVMの他の4つのvCPUに割り当てます。タイムスライス内ですべてまたはゼロです。
MicrosoftのHyper-Vを使用している場合、ホストOSで電源制御設定を有効にできます。つまり、クライアントシステムに伝播し、クライアントシステムにも影響を与えます。
これがどのように機能するかを確認すると、バランスの取れた電源制御設定を使用するとパフォーマンスの問題が発生し、サーバーが遅くなることが簡単にわかります。根本的な問題の1つは、サーバーがデータベースクエリ、Webサーバーリクエスト、その他のいずれであっても、サーバーが着信リクエストに応答できるようになる前に、着信リクエストがCPU駐車/駐車解除プロセスの完了を待つ必要があることです。
時々、システムはリクエストの途中でCPUをパークまたはパーク解除します。これらの場合、要求はCPUパイプラインに開始され、そこからダンプされてから、別のCPUコアがそこからプロセスを取得します。大量のリクエストである場合、これはリクエストの過程で何度か発生し、5秒のデータベースクエリを15秒のデータベースクエリに変更する必要があります。
Balanced Powerを使用することで見られる最大のことは、システムが行うすべての要求への応答が遅く感じることです。