メモリバルーン技術実験(Memory Balloon)


Memory Balloonに関する実験をしたところ、ネット上にある古いブログとは少し違うものがあることがわかり、実験手順や結果記録を整理しました.
1.カーネルコンパイル時のオプションを示す物理マシンの/boot/config-*ファイルでCONFIG_があるかどうかを検索VIRTIO_BALLOON=m、一般的には、現在のLinuxカーネルにはすでにこの構成があります.また、実行中のカーネルモジュールにvirtioがあるかどうかを確認します.balloon:
lsmod | grep virtio_balloon 
注:この検査の個人的な理解はhostに基づいているだけでなく、虚機に基づいている(下を参照).でも物理マシンでCONFIG_VIRTIO_BALLOON=yなので、grepでは何も出ません.
   
2.virshでQEMUモニタを実行するコマンド:
1)本物理マシン上の虚構状況を探し出し、そのIDの一つに注意する
virsh list 
さらに:
-Controllerノードで実行
Nova list、ダミーの名前が見えます(Name)
-Controllerノードで実行
Nova showでは、どの物理マシンで実行されているかなど、虚機の詳細が表示されます.
   
2)virsh qemu-monitor-commandを実行し、ダミーマシンの実際の割り当てメモリ量を確認する
virsh qemu-monitor-command 1 --hmp "info balloon"
なお、ここでの結果は、実際の割り当てメモリ量(balloon)を示しており、構成メモリ量ではない.例えば,ダミーマシンに4 GBのメモリを配置するが,実際の割り当て量は3 GBに設定することができ,これにより,より多くの1 GBが物理マシンで使用できるようになる.
   
3)ダミーメモリの実分配量を設定する
virsh qemu-monitor-command 1 --hmp "balloon 512"

例:2)で得られた結果が2048(デフォルトはMB)であると仮定し、本ステップで512とすると、このダミーマシンから1536 MBを物理マシンに使用させることを意味する.なお、この時点でダミーマシンでfree-mを実行すると、一部の古い文献では「totalは2048 MBであるが、usedは従来より1536 MB大きくなる」と言われているが、筆者の実際のテスト結果から見ると、比較的新しいバージョンでは(
Kernel 4.4.0,QEMU 2.5.0)はtotalで512 MBと直接表示されているがusedは変わっていない.すなわち,新版KVM/QEMUでは,ダミーtotal利用可能メモリが明確に減算されている.
   
また、virsh setmemコマンドを使用して、クライアントの実際の割り当てメモリ量(balloon)を動的に変更できます.
virsh setmem  
ここで最後のsizeの単位は
KB. MBと間違えて設定すると、ダミーに利用可能なメモリを小さな設定することに相当し、ダミークラッシュを引き起こす. 
   
3.2つの実験
ダミーマシンでlsmod|grep virtio_を実行balloon、虚機にはvirtioが含まれていることがわかります.balloonというKernelモジュールの.
このとき、ダミーで運転
rmmod virtio_balloonはカーネルモジュールをアンインストールします.
その後、hostでvirsh qemu-monitor-command 1--hmp「balloon 1024」を実行して、虚機totalの使用可能なメモリを1024 MB(虚機元totalメモリが2048 MBであると仮定)に調整し、虚機でfree-mを実行すると、虚機のtotalメモリが減少していないことがわかります.
最後に、ダミーで実行
modprobe virtio_balloonはカーネルモジュールをロードし、ダミーでfree-mを実行すると、ダミーメモリが1024 MBに自動的に減少することがわかります.
   
同様に、仮想マシンの元のtotalメモリが2048 MBであると仮定すると、「balloon 1024」を実行して1024 MBに減少したため、仮想マシンでvirtio_をアンインストールするballoonモジュールは、ダミーtotalメモリを2048 MBに復元する. 
(完)