ホスト側でメモリスワップファイルを設けている。
ゲストに割り当てられたメモリの一部を、ホスト側でメモリスワップファイルに書き出しているようだ。
これはデフォルトの動作である。
しかし、ゲストに割り当てられるメモリを全てホスト物理メモリから与えてやり、メモリスワップファイルを無効にすることができる。
これによって、ゲストマシンの高速動作を期待できる。
また、SSDを使っている場合にはスワップファイルへの書き込みによるディスク劣化を防げるのだろう。
スワップを使わないようにする設定は、vSphere Clientで行える。
今回扱った仮想マシンのバージョンは、8だった。
<手順>
1、対象の「仮想マシン」をシャットダウンしておく。
2、対象の「仮想マシン」を右クリックし、「設定の編集(E)」を開く。
3、「リソース」タブを開き「メモリ」を選択して、右欄の「リソース割り当て」で、
「すべてのゲスト メモリを予約(ロック)」にチェックを入れ、「OK」をクリックする。
設定後、仮想マシンを起動させた。(物理メモリに余裕がなければ、エラーで起動しなかった。)
例えば、2.5GBのメモリを割り当てていた仮想マシンでは、
設定前ではスワップファイルの大きさが2.4GBだったのに対し、設定によってそのサイズは、0になった。
○設定前(スワップファイル有効時)
-rw------- 1 root root 50.0M vmx-guestos-xxxxxxxxxx-1.vswp
-rw------- 1 root root 2.4G guestos-yyyyyyyy.vswp
○設定後(スワップファイル無効時)
-rw------- 1 root root 50.0M vmx-guestos-xxxxxxxxxx-1.vswp
-rw------- 1 root root 0 guestos-yyyyyyyy.vswp
ただし、50メガバイトのファイルはそのままだった。
そして仮想マシンの動作は、体感であるが軽快になったと思う。
◎ちなみに、変更を行った仮想マシンの設定ファイル(.vmxファイル)上には、次の項目が追記されていた。
前述の通りvSphere Clientを使って設定できるので、.vmxファイルを直接操作する必要はない。tools.syncTime = "FALSE"
unity.wasCapable = "FALSE"
sched.mem.min = "2500"
sched.mem.pin = "TRUE"
(注意)
ホストメモリが十分ではない場合、ゲストマシンの起動が許可されない。次のようにエラーになる。
ぎりぎりでは駄目みたい。
仮想マシンのパワーオンに失敗しました。
仮想マシンをパワーオンできませんでした: メモリ リソースの許可チェックに失敗しましたリソース管理設定の詳細については、VMware ESX リソース管理ガイドを参照してください。
グループ vm.236833: 仮想マシン vmm0:guestos-yyyyyyyy のメモリ割り当てパラメータが無効です。(分: 640000、最大: -1、minLimit: -1、共有: -1、単位: pages)
グループ vm.236833:仮想マシンを受け入れられません:メモリ の受け入れチェックが失敗しました。要求された予約: 667609 pages
(参考)
Migrating to ESXi 5 Worth the Trip
< http://wfcastle33.wordpress.com/2011/11/02/migrating-to-esxi-5-worth-the-trip/ > 2011年12月25日