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は通常、ある程度の時間アイドル状態であり、ほとんどの場合、ホストは100%のpCPU使用率に達しないためです。
-
ホスト上のvCPUの総数がホスト上のpCPUの数より大きい場合で、ホストが時々100%のホストpCPU使用率に達している場合、VMのvCPUはスパイク時に要求するだけのpCPUを受け取ることができません。代わりに、これらのスパイク時には、VMはホスト上で利用可能なpCPUの共有を受け取るために速度が低下します。
-
ホスト上のvCPUの総数がホスト上のpCPUの数より大きい場合で、ホストが頻繁に100%のホストpCPU使用率に達している場合、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 approaching 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 が 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 が常に同時にすべて使用されることを示します。推奨されるアクション:runstate_fullrun < 100% になるまで、このVMのvCPU数を増やすことができます。それ以上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が同時実行ハザード状態になるリスクが高まる可能性があります。