vSphere でオンプレミス環境を構築する際、以前はサイジングはするけれど価格その他の関係でリソースを減らしたりしてどうにか予算を抑えることが結構行われていました。
その時の減らされるリソースは例えばストレージのグレードを下げる、メモリーを減らす、CPU コアを減らすなどがありました。そのようにした仮想化環境はサイジングよりもリソースが下回っているので負荷が低い時には正常に動いているのに、負荷が上がると急に性能が下がるなどの事象が発生したりするのですが、vRealize Operations などを入れていなかった場合、その原因を調べるためには事象が発生しているときに esxtop などを使って調査をしますが、CPU の場合はちょっと困ったことがあります。それが「CPU Stolen Time」と呼ばれるものです。
CPU Stolen Time とは
CPU Stolen Time とは簡単に言うと「仮想マシンの vCPU に割当てられたリソースについて、仮想マシンが実際に CPU の処理として使用できなかった時間」のことで、仮想マシンの vCPU に対してハイパーバイザーがCPUリソースを割当てられたのに、他の処理に CPU リソースを盗まれて(stolen)仮想マシンが実際に CPU の処理として使用できたリソースが減ることがあります。つまり、物理 CPU (論理CPU) は仮想マシンからリクエストされた分仮想マシンにリソースを割り当てますが、仮想マシン側で実際の vCPU の処理として使うことができなかった分が「CPU Stolen Time」となります。つまりCPUスケジューリング競合が発生しているということになります。
CPU Stolen Time になる要因としては、仮想マシンの稼働している ESXi 上でなんらかの処理負荷(CPU 負荷の高い仮想マシンがあるなど)が高くなり、その結果そちらに CPU の処理が横取りされてしまった場合に発生します。
例として、ディスクへの I/O が高くなるアプリケーションが仮想マシン内で動作しており、仮想マシン自体でその処理への負担が非常に高くなっていたため CPU Stolen Time が発生してしまったなど、主にサイジングのミスで CPU リソースが足りなくなるなどで発生したりします。
CPU Stolen Time は、仮想マシン側で発生している状態に対し、今はどのようになっているかの結果が表示されているだけなので、この値を下げるためには仮想マシン内で発生している事象を特定し、それを適切に対応して解消しないかぎり、再度同じことが発生してしまいます。これらは、例えば仮想マシン内で発生している事象はアプリケーション処理などに起因するものならばそちらを対処する必要があり、ハイパーバイザを含めた仮想環境に起因するものの場合は、サイジングのミスで CPU リソースが必要な需要に追い付いていないなどが考えられます。
以下の絵は CPU Stolen Time のイメージです。
CPU Stolen Time を知る?
vSphere に関して CPU stoles time に関する情報は非常に少ないです。実はこの CPU stolen time については VMware vSphere ESXi 独自の話ではなく、Linux の Xen や KVM、Windows Hyper-V でも発生します。それぞれのハイパーバイザーでの stolen time 相当は以下の通りです。
- Linux :sar コマンドで表示される %steal
- Windows (Hyper-V):パフォーマンスモニターのカウンターにある Hyper-V Hypervisor Virtual Processor\CPU Wait Time Per Dispatch が相当
- ESXi:esxtop の %RDY が相当
Timekeeping in VMware Virtual Machinesに古いですが CPU stolen time のことが少し出ています。しかし他はなかなかまとまった情報がありません。但し、考え方はほかのハイパーバイザーと変わりませんので、理解するならそれらを参考にするのも良いかもしれません。
ESXi の場合、esxtop を見て %RDY (CPU Ready) の値が高いと CPU Stolen time が発生しているので対処が必要です。具体的には CPU stolen time の値を下げる必要があり、他のホストに仮想マシンを移動させる(手動/DRSなどで)、仮想マシンのホストへの統合率を下げる、空きソケットがある場合は CPU を増強するなどが必要になります。ただ、%RDY の値があっても必ずしも直ぐに対処しなければならないということではなく、%RDY の値が極端に高く、かつ PCPU USED および PCPU UTIL の値もとても高くなっているなどいくつかの条件で判断します。このあたり、最後の esxtop をサポートするツール の vSphere 6 ESXTOP quick Overview for Troubleshootin の情報を見て判断するなどしてみてください。
esxtop をサポートするツール
esxtop を使おうとした場合、そこに表示される数字や閾値などどのように見たらよいか悩むことがると思います。以下にいくつかご紹介しますので興味あれば見てください。
- vSphere 6 ESXTOP quick Overview for Troubleshootin:esxtop について簡単な A4 一枚にまとめてある資料が公開されています。ここにある「vSphere 6 ESXTOP quick Overview for Troubleshooting」を見れば難解な esxtop もなんとなくわかってくると思います。
- Virtual esxtop:Virtual esxtopWindoows から GUI で利用できる esxtopです。
文責:imaisato