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 が100%に近づいている 状況は避けるべきです。推奨されるアクション:ストレージベンダーが提供するバックエンドメトリックを確認して、バックエンドI/Oストレージサーバーが過負荷になっていないか確認してください。ストレージサーバーが過負荷になっておらず、パフォーマンスの問題がある場合は、次のいずれかのアクションを実行してください。
-
VM内のvCPUの数を減らします。
-
VMを別のホストに移動します。
-
他のVMを移行するか、それらのvCPUの数を減らすことによって、ホスト上のvCPUの総数を減らします。
-
runstate_full_contention
-
runstate_full_contention > 0% は、vCPUがすべて同時に実行を希望しているにもかかわらず、いずれもpCPU時間を取得できない場合があることを示します。
-
「runstate_full_contention が 100% に近づいている」状況は避けるべきです。推奨されるアクション:パフォーマンスの問題がある場合は、次のいずれかのアクションを実行してください。
-
VM の vCPU の数を減らします。
-
VM を別のホストに移動します。
-
他の VM を移行するか、それらの vCPU の数を減らすことによって、ホスト上の vCPU の総数を減らします。
-
ホストの pCPU 使用率が 100% 未満の場合
ホストの pCPU 使用率が 100% に達していない場合、VM が適切な数の vCPU を持っているかどうかを判断するために、以下の VM メトリックを使用します。
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が同時実行ハザード状態に陥るリスクが高まる可能性があります。