ラーニング

VMwareテクニカルトレーナーよりワンポイントアドバイス~シェアと予約をおさえよう!~

こんにちは。VMware EducationのテクニカルトレーナーのSatokoです!!!
前回は、物理のCPUやメモリがどのように仮想レイヤと紐づいているか、お話させていただきました。その中で仮想環境では物理的なリソース量に対して、その物理量を超えた仮想マシンを載せることができること  (= 設定時におけるオーバーコミット状態 ) についても触れました。今回は、多くの仮想マシンを載せてしまったが、実際運用時ではどのようにリソース制御をすればよいか?の基本をお話します。
■物理リースを超えた仮想マシンのリソース総量
例えば、VMware ESXi ホスト ( ESXi ) 上に、Webサーバ、Appサーバ、DBサーバ、Fileサーバ等の仮想マシン(仮想マシン)を構成しています。
図1

図1 が示すように、
40GB(ホストの持つメモリリソース)  <  43GB(仮想マシンに設定されたメモリリソースの合計)
となり、ESXi ホストがもつ40GBメモリーリソース以上に仮想マシンのメモリリソース合計が設定されている状態です。この状態はどうかといういうと、設定されている値 (ここでは43GB )をすべて使用するとは限らず、必要な分だけ各仮想マシンに割り当てられていますので、物理のリソースを超えた設定自体がパフォーマンスに影響を与えるものではないことを、前回もお話しました。
続いてCPUリソースをみていきましょう

図2
図2

こちらもvCPU数が物理のコア数を超えていても、それぞれの仮想マシンが必要な時に必要なCPUリソースを配分されることで、パフォーマンスに影響なく複数のサービスの提供が可能です。そのため、設計時にそれぞれの仮想マシンのリソース消費のピークが重ならないように組み合わせを考慮することが重要になります。

図3
図3

図3のように、CPUリソースが競合した場合には、処理の遅延が発生することでパフォーマンスへの影響が懸念されます。
メモリリソースもCPUリソースもオーバコミットしていること自体パフォーマンスへの影響はないのですが、リソースを有効に使用する!という仮想基盤の特性上、このリソース競合とどう付き合っていくか?がとても大事になってきます。今回は、その仮想基盤の特性上欠かせない、リソース制御の「シェア」と「予約」の基本についてみていきます。
■CPU/メモリリソース制御における「シェア」を押さえよう
CPUのシェアの考え方
まず、CPUのシェアをみていきましょう。シェアはリソースが競合してしまったときに、設定した「シェア値」でリソース配分を決めることができます。

図4
図4

上記の図4で、CPUリソースの割り当てを具体的に見てみましょう。
物理CPU:3GHz×1
各仮想マシンvCPU:3GHz×1
1つの物理Coreを2つの仮想マシンvCPUで共有しているパターン(合計2vCPU)です。
リソースが競合した場合、シェアの値によって、リソースが割り当てされます。
デフォルトであれば、各vCPUは、1.5GHzのCPUリソースが均等にハイパーバイザによって割り当てられます。もちろん共有している物理CPUは1つなので、所有できる時間をシェアの値によって優先度を変えています。
例えばシェアの値を変えてみましょう。シェア値を大きくすることによって、特定の仮想マシンに対してより優先的にリソースを分配することが可能なのです。(図5)

図5
図5

メモリシェア編
同様に図6で、メモリシェアの割り当ても具体的に見てみましょう。

図6
図6

ESXi ホストの持つ 6GB の物理メモリを2つの仮想マシンで共有しているパターンです。
この例では、6GB の物理メモリリソースでは、各仮想マシンに設定された4GBが割り当てられるわけではなく、仮想マシンでのメモリ使用量合計が 6GB を超えた場合 (= 競合状態) にシェアの値が働きます。シェア値がデフォルトであれば、各仮想マシンは、3GBずつのメモリリソースが均等にハイパーバイザによって割り当てられます(左図)が、 シェア値を大きくすることで、優先的にリソースを分配することが可能です(右図)。
リソースの競合が起きたとき、デフォルトでは、均等にリソースは割り当てられますが、競合時にCPUメモリリソースを優先的に割り当てたいシステムは存在します。 競合発生時、それぞれのサーバが必要とするリソースが均等ではないのであれば、ここは、管理者が優先度に従い、割合を指定していくことで柔軟にリソースの割り当てを実施していきます。

■「予約」の基本 ~CPU編~
シェア値の設定によって、リソース競合時の優先度を定義できるのですが、シェアは、あくまでも割合の指定です。
例えば、Applicationのために十分なパフォーマンスを確約したいということであれば、具体的な数値で指定する「予約」の値を指定することで、より確実に指定したリソースを担保することも可能です。

図7
図7

CPUリソースの予約を指定した場合を見てみましょう。
1Coreを4つの仮想マシン(vCPU)で共有しているパターン(合計 4vCPU )です。
予約の値はデフォルト設定されていません。予約の値を設定することで、CPUリソースは、起動時や運用時のCPUリソースの割り当てを担保することができます。
CPUリソースは、ハイパーバイザによって割り当てられます。CPUリソースは、指定した予約の値のCPUリソースを使用していない時は、別の仮想マシンにCPUリソースが割り当てられ、より柔軟にCPUリソースは活用されます。
■「予約」の基本 ~メモリ編~
続いてメモリリソースの予約を見ていきましょう。
図8

図8ESXi ホストの持つ物理メモリ 6GB を4つの仮想マシンで共有しているパターンです。
CPUリソースと同様に、デフォルトでは予約は設定されていません。A_VMの予約値を2GBと指定することで、2GB が起動時にハイパーバイザによって確保されます。A_VMが予約されたメモリリソース以上のメモリリソースが必要な場合は、残る共有リソースから割り当てられることになります。
予約は特定の仮想マシンがリソースを占有することになります。すなわち、仮想化のメリットであるリソースの共有を最大限に生かすのであれば、予約値を必要最低限にしておくのがコツです♪

■設定してみよう!
それでは各仮想マシンに対するシェアと予約の設定方法を見ていきましょう。各仮想マシンを右クリックして「リソース設定の編集」を開きますデフォルトの設定では、下記のように、シェアは「標準」、予約は「0」となっています。

図9
図9

CPUを例にシェアの値を指定してみましょう。仮想マシンに割り当てたシェアの値を、ESXi ホスト側からも確認することができます。この例の場合、CPUのシェアが4 (高): 2 (標準): 1 (低)になっていることが分かります。このように優先順位が指定されます。予約に関しても同じ画面で設定することができますので、設定自体はとても簡単ですね♪

図10
図10

今回は、リソースの制御方法である「シェア」と「予約」を見てきました。 安全に多くの仮想基盤を運用するには、このリソース管理の考え方が基本になってきます。ここでは、単体のESXi ホスト上でのリソース制御を紹介しましたが、クラスタ(複数のESXiホストをグループ化)のリソース制御では、リソースプールが利用できます。それはまた次の機会にお話したいと思います!
VMwareテクニカルトレーナーよりワンポイントアドバイス
第1回:VMware vSphereにおけるCPU・メモリの考え方編
第2回:シェアと予約をおさえよう!(本記事)
共同執筆 パートナーSE 中村朝之