XenServer

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が同時実行ハザード状態に陥るリスクが高まる可能性があります。

CPU使用率の監視