CPU使用率の監視
ホスト上のpCPUあたりのvCPUの最適な数は、使用事例によって異なります。運用中は、XenServer®環境のパフォーマンスを監視し、それに応じて構成を調整してください。
用語
この分野では、いくつかの用語が互換的に使用されることがあります。この記事では、以下の用語と意味を使用します。
- CPU (物理CPU): プロセッサソケットに取り付けられた物理ハードウェア。
- コア: 独立した1つの実行スレッドを実行できる物理処理ユニットで、その実行をサポートするために必要なすべての機能ユニットを含みます。
- ハイパースレッド: 独立した1つの実行スレッドを実行できる物理処理ユニットで、他のハイパースレッド(「兄弟スレッド」とも呼ばれる)と一部の機能ユニットを共有します。
- 論理CPU (pCPU): レジスタセットと命令ポインタを含む、独立した実行スレッドを実行できるユニット。ハイパースレッドが有効なシステムでは、これはハイパースレッドです。それ以外の場合は、コアです。
- ホストpCPU: ホスト内の論理CPUの総数。
- vCPU (仮想CPU): 仮想化された論理CPU。これは、VMに提供される、独立した実行スレッドを実行できる論理ユニットです。XenServerでは、vCPUはスケジューラを使用して、どのvCPUがどのpCPUで実行されているかを決定することで、pCPUを「タイムシェア」できます。
- ゲストvCPU: VM内のゲストオペレーティングシステムに提示されるvCPU。
- Dom0 vCPU: XenServerコントロール ドメイン (dom0) に表示されるvCPU。
- ホストの合計vCPU: ホスト内のdom0 vCPUとすべてのゲストvCPUの合計。
一般的な動作
ホスト上のvCPUの総数は、dom0によって使用されるvCPUの数と、ホスト上のすべてのVMに割り当てられたvCPUの総数を加算したものです。ホスト上のvCPUの数を増やすと、次の種類の動作が発生する可能性があります。
-
ホスト上のvCPUの総数がホスト上のpCPUの数と同等かそれ以下の場合、ホストは常にVMが要求するだけのCPUを提供します。
-
ホスト上のvCPUの総数がホスト上のpCPUの数より多い場合、ホストはホストのpCPUの時間をVMと共有します。この動作は通常、VMに影響を与えません。なぜなら、VMのvCPUは通常、ある程度の時間アイドル状態であり、ほとんどの場合、ホストはpCPU使用率100%に達しないからです。
-
ホスト上のvCPUの総数がホスト上のpCPUの数より多く、ホストが時々ホストpCPU使用率100%に達する場合、VMのvCPUは、スパイク時に要求するほどのpCPUを受け取ることができません。その代わりに、これらのスパイク時には、VMはホスト上で利用可能なpCPUの共有を受け取るために速度を落とします。
-
ホスト上のvCPUの総数がホスト上のpCPUの数より多く、ホストが頻繁にホストpCPU使用率100%に達する場合、VMのvCPUは、ホスト上で利用可能なCPUの共有を受け取るために継続的に速度を落とされます。VMにリアルタイム要件がある場合、この状況は理想的ではなく、ホスト上のvCPUの数を減らすことで対処できます。
ホスト上の最適なvCPU数は、VMユーザーがVMの速度をどのように認識するかによって異なります。特にVMにリアルタイム要件がある場合はそうです。
CPUに関する情報の取得
ホスト上のpCPUの総数を確認するには、次のコマンドを実行します。
xe host-cpu-info --minimal
現在ホスト上にあるvCPU(ゲストおよびdom0)の総数を確認するには、次のコマンドを実行します。
xl vcpu-list | grep -v VCPU | wc -l
RRDメトリックを使用したCPU使用率の監視
XenServerは、VM上のvCPUのパフォーマンスを記述するRRDメトリックを提供します。
ホストのpCPU使用率が100%の場合
ホストのpCPU使用率が100%に達している場合、VMを別のホストに移動するかどうかを決定するために、次のVMメトリックを使用します。
runstate_concurrency_hazard
-
runstate_concurrency_hazard > 0% は、時々、少なくとも1つのvCPUが実行されている間に、少なくとももう1つのvCPUが実行を希望しているにもかかわらずpCPU時間を得られないことを示します。vCPUが協調する必要がある場合、この動作はパフォーマンスの問題を引き起こします。
-
runstate_concurrency_hazard が100%に近づいている 状況は避けるべきです。
推奨されるアクション:
パフォーマンスの問題がある場合は、次のいずれかのアクションを実行してください。
- VM内のvCPUの数を減らします。
- VMを別のホストに移動します。
- 他のVMを移行するか、それらのvCPUの数を減らすことによって、ホスト上のvCPUの総数を減らします。
runstate_partial_contention
-
runstate_partial_contention > 0% は、少なくとも1つのvCPUが実行を希望しているがpCPU時間を取得できないこと、および少なくとももう1つのvCPUがブロックされていること(何もすることがないか、I/Oの完了を待っているため)の両方を示します。
-
runstate_concurrency_hazard approaching 100% は、避けるべき状況です。
推奨されるアクション:
ストレージベンダーが提供するバックエンドメトリクスを確認して、バックエンドI/Oストレージサーバーが過負荷になっていないか確認してください。ストレージサーバーが過負荷になっておらず、パフォーマンスの問題がある場合は、次のいずれかのアクションを実行してください。
- VM内のvCPUの数を減らします。
- VMを別のホストに移動します。
- 他のVMを移行するか、それらのvCPUの数を減らすことによって、ホスト上のvCPUの総数を減らします。
runstate_full_contention
-
runstate_full_contention > 0% は、vCPUが同時にすべて実行しようとするが、どれもpCPU時間を取得できない場合があることを示します。
-
runstate_full_contention approaching 100% は避けるべき状況です。
推奨されるアクション:
パフォーマンスの問題がある場合は、次のいずれかのアクションを実行してください。
- VM の vCPU の数を減らします。
- VM を別のホストに移動します。
- 他の VM を移行するか、それらの vCPU の数を減らすことによって、ホスト上の vCPU の総数を減らします。
ホストの pCPU 使用率が 100% 未満の場合
ホストの pCPU 使用率が 100% に達していない場合は、これらの VM メトリックを使用して、VM に適切な数の vCPU が割り当てられているかどうかを判断します。
runstate_fullrun
-
runstate_fullrun = 0% は、vCPU が同時にすべて使用されることはないことを示します。
推奨されるアクション:
この VM の vCPU の数を減らします。
-
0% < runstate_fullrun < 100% は、vCPU が同時にすべて使用されることがあることを示します。
-
runstate_fullrun = 100% は、vCPU が常に同時にすべて使用されていることを示します。
推奨されるアクション:
このVMのvCPU数を、runstate_fullrun < 100%になるまで増やすことができます。それ以上vCPU数を増やさないでください。ホストのpCPU使用率が100%に達した場合、同時実行ハザードの可能性が高まる可能性があります。
runstate_partial_run
-
runstate_partial_run = 0% は、すべてのvCPUが常に使用されている(full-run=100%)か、またはvCPUがまったく使用されていない(idle=100%)かのいずれかであることを示します。
-
0% < runstate_partial_run < 100% は、場合によっては、少なくとも1つのvCPUがブロックされていることを示します。これは、何もすることがないためか、I/Oの完了を待っているためです。
-
runstate_partial_run=100% は、常に少なくとも1つのvCPUがブロックされていることを示します。
推奨されるアクション:
バックエンドのI/Oストレージサーバーが過負荷状態になっていないか確認してください。過負荷状態でない場合、VMにはvCPUが多すぎる可能性があり、このVMのvCPU数を減らすことができます。VMにvCPUが多すぎると、ホストのCPU使用率が100%に達したときに、VMが同時実行ハザード状態に陥るリスクが高まる可能性があります。