VMware vSphereのハイパーバイザーESXiでは、オーバーコミット環境で仮想マシン間に適切にメモリを割当るため、透過的ページ共有(TPS: Tranceparency Page Sharing)、バルーニング、圧縮、スワップといったメモリ回収機能があります。これらはいつ動作するのでしょうか。以下の記事やドキュメントからまとめてみます。
- Mem.MinFreePct sliding scale function - VMware vSphere Blog
- Mem.MemMinFreePct calculation example | VMwarebits.com
- VMware vSphere: What's New [V5.5 to V6]研修資料
メモリ回収機能のトリガー
ESXiには「minfree」と呼ばれる、最低限確保しておこうとする最小空きメモリ量があります。この量は搭載された物理メモリ量に応じて決まり、例えば物理メモリ96GBのホストであれば、デフォルトでは約1.56GBになります。
ESXiでは残りの空きメモリ量が、この最小空きメモリ量minfreeの何%あるかに応じてメモリ状態を呼び分け、透過的ページ共有、バルーニング、圧縮、スワップのどのメモリ回収機能までを使うかを決めています。
vSphere 5の場合、次のようになります。ただし透過的ページ共有は、下記の空きメモリ量を何度か下回った時に開始されます。
空きメモリ量 | 状態 | 使用するメモリ回収機能 |
---|---|---|
minfreeの100%以下 | High | 透過的ページ共有 |
minfreeの64%以下 | Soft | 透過的ページ共有、バルーニング |
minfreeの32%以下 | Hard | 透過的ページ共有、バルーニング、圧縮 |
minfreeの16%以下 | Low | 透過的ページ共有、バルーニング、圧縮、スワップ |
vSphere 6.0の場合、次のようになります。
空きメモリ量 | 状態 | 使用するメモリ回収機能 |
---|---|---|
minfreeの300%以下 | High | 透過的ページ共有の準備(Large Pageの分割) |
minfreeの100%以下 | Clear | 透過的ページ共有 |
minfreeの64%以下 | Soft | 透過的ページ共有、バルーニング |
minfreeの32%以下 | Hard | 透過的ページ共有、バルーニング、圧縮 |
minfreeの16%以下 | Low | 透過的ページ共有、バルーニング、圧縮、スワップ |
例えば、物理メモリ96GBのホストであれば、minfreeはデフォルトでは約1.56GBなので、メモリ空き容量がその64%である約1GBを切るとバルーニングが発生する計算になります。
minfree値の確認
それでは、実際の(物理メモリ量が96GBではない)ESXiホストでは、minfreeはいくつで、バルーニングはいつ発生するのでしょうか。
実機での確認
もっとも簡単で確実な方法は、ESXi ShellまたはSSHでESXiホストに接続し、esxtop
コマンドを実行し、m
キーでメモリ画面に移動して、そこに表示されている実際の値を確認することです。以下がそうした例です。
2:00:31am up 28 days 18:50, 881 worlds, 25 VMs, 53 vCPUs; MEM overcommit avg: 0.37, 0.37, 0.37
PMEM /MB: 122869 total: 3683 vmk,112420 other, 6766 free
VMKMEM/MB: 122484 managed: 1839 minfree, 16605 rsvd, 105879 ursvd, high state
NUMA /MB: 61428 ( 5786), 61439 ( 596)
PSHARE/MB: 13263 shared, 1836 common: 11427 saving
SWAP /MB: 7 curr, 0 rclmtgt: 0.00 r/s, 0.00 w/s
ZIP /MB: 3 zipped, 2 saved
MEMCTL/MB: 0 curr, 0 target, 78312 max
6988733 6988733 vCenterSV 11 74.08 119.71 0.07 989.62 1.1
GID NAME MEMSZ GRANT CNSM SZTGT TCHD TCHD_W
360483 VM-0001 16384.00 16305.27 10020.59 10117.69 983.04 163.84
7030413 ESXiSV01 16384.00 4128.00 3182.19 3520.49 163.84 0.00
8243506 vCenter Server 16384.00 16384.00 16007.18 16033.14 2785.28 1638.40
3行目に1839 minfree
とあります。1,839MBが最小空き容量minfreeの値ということになります。物理メモリ量120GBのこの環境では、例えばメモリ空き容量が1,839MBの64%に当たる約1,177MBを切ったあたりで、バルーニングが発生する計算になります。
物理メモリと設定値からの計算
実機で確認できない場合、物理メモリ量と設定値から計算することができます。ここで使用する設定値は、ESXiホストの詳細設定パラメータであるMemMinFreePct
(最小空きメモリ%)です。デフォルト値は0ですが、この時は6%として扱われます。
MemMinFreePct
が6%の時、MinFreeは物理メモリの最初の4GBに対して6%、次の8GB(つまり4~12GBの分)に対して4%、次の16GB (つまり12~28GBの分)に対して2%、残りに対して1%を足した分になります。ややこしいですね。できるだけ簡単に計算できるように整理すれば、次のようになります。
物理メモリ量 | 計算方法 | 計算結果例 |
---|---|---|
~4GB | 物理メモリ量×6% | 物理メモリ4GBの時、約246MB |
12GB | (物理メモリ量-4GB)×4%+245.76MB | 物理メモリ12GBの時、573MB |
28GB | (物理メモリ量-12GB)×2%+573.44MB | 物理メモリ28GBの時、901MB |
それ以上 | (物理メモリ量-28GB)×1%+901.12MB | 物理メモリ120GBの時、1,843MB |
前述のesxtop
で実際の値が1,839MBなのを確認した環境は、物理メモリ120GBです。最後の行の計算結果例が1,843MBで、だいたい一致しています。より正確には、esxtop
で表示されているVMKMEM/MB: 122484
の値、122,484MBから計算すると、1,843MBとなります。
これで机上計算からも、minfreeの値と、バルーニングが発生するメモリ空き容量を算出できました。
参考
- Mem.MinFreePct sliding scale function - VMware vSphere Blog
- Mem.MemMinFreePct calculation example | VMwarebits.com
- VMware vSphere: What's New [V5.5 to V6]研修資料
本ページ内容は作成者の個人的なメモです。内容を保証するものではありません。また作成者の所属組織等とは一切かかわりがありません。