
Proxmox で起動する。Debian 12 VM 1台の実質メモリーコストは約150MBだった
12GBの古いThinkPadでProxmox VMを20台起動して測ってみた
Proxmoxで仮想マシンを動かすには、どのくらいメモリーが必要なのだろう。
一般には、VMを何台も動かすなら16GB、32GB、あるいはそれ以上のメモリーが欲しいと言われる。カリンちゃん自身も、自宅のメインProxmoxサーバーには48GBを搭載している。
ところが今回、メモリー12GBの古いThinkPadで実際に測定してみたところ、少し意外な結果になった。
ほぼ同一構成のDebian 12 VMの場合、2台目以降の1台あたりの実質的な物理メモリー増加量は、およそ150MBだった。
これは、VMに割り当てたメモリー容量とはかなり違う数字である。
実験環境
使用したPCは2012~2013年頃のThinkPad Edge E430。
主な構成は以下の通り。
CPU:Core i7-3632QM
4コア8スレッド
メモリー:12GB
Proxmox VE 9.2
ストレージ:1TB SSHD
有線LAN:1GbE
アイドル時消費電力:約11W
VMにはDebian 12系のcloud imageを使用した。
各VMの設定は、
2 vCPU
メモリー2GB
balloon最小512MB
ディスク16GB
VirtIO NIC
QEMU Guest Agent有効
とした。
VM 700から719まで、合計20台をほぼ同一構成で作成した。
VMが0台の場合
まず、VMをすべて停止した状態を測定した。
Mem total 11GiB
used 1.9GiB
available 9.4GiBつまり、この環境ではProxmoxホストそのものが、おおむね2GB弱のメモリーを使用している。
これを基準値とした。
Debian VMを1台起動
VMを1台だけ起動すると、
used 2.4~2.6GiB
available 8.7~8.9GiBとなった。
最初の1台については、ホスト側の増加量はおよそ500~700MBだった。
VM内部から見ると、搭載メモリーは約1979MBと認識されている。
つまり、ゲストOSからはほぼ2GBのRAMが存在するように見えている。
10台では約3.7GB
同じDebian VMを10台起動し、KSMがある程度収束した状態では、
used 3.7GiB
available 7.6GiBとなった。
VMなしの1.9GiBと比較すると、10台のVMによる増加は約1.8GiBである。
単純平均では、
約180MB/台
となる。
さらに、最初の1台はQEMUなどの初期コストが大きいため、2台目以降だけを見ると、増加量はおおむね150MB前後だった。
20台でも約5.1GB
さらに20台まで増やした。
起動直後は、
used 6.7GiB
available 4.6GiBだった。
しかしKSMのスキャンが進むにつれ、使用量は減少した。
最終的には、
used 5.1GiB
available 6.2GiB程度まで低下した。
20台のVMには、それぞれ2GBずつ割り当てている。
したがって設定上の仮想RAM総量は、
2GB × 20台 = 40GB
である。
物理メモリーは12GBしかない。
それでも、アイドル状態の20台を同時に動作させることができた。
10台増やして増えたのは約1.4GB
特に興味深かったのは、10台と20台の比較である。
10台:
used 3.7GiB20台:
used 5.1GiB差は約1.4GiB。
つまり追加した10台のVMが消費した物理RAMは、
約140MB/台
だった。
別の区間でもおおむね140~150MB程度となっており、今回の条件では、
同一構成のDebian VMを1台追加するメモリーコストは約150MB
と考えてよさそうだった。
なぜ2GBのVMが150MBで済むのか
主な理由はKSMである。
KSMはKernel Samepage Mergingの略で、複数VMに存在する同一内容のメモリーページを検出し、一つにまとめるLinuxの仕組みである。
今回の20台は、同じDebianから作ったクローンである。
OS本体、ライブラリ、未使用領域など、多くの内容が一致している。
そのためKSMとの相性が非常によかった。
20台稼働時には、
pages_sharing: 約75万ページまで増加した。
4KiBページとして計算すると、KSMによる節約量は約2.9GBに達した。
一方、ballooningについては、各VM内部の MemTotal が約1979MBのままだった。
少なくとも今回のアイドル状態では、VMを512MBまで縮めるような動きは確認されなかった。
したがって、今回の大幅な節約は主にKSMによるものと考えられる。
「2GBのVMが150MBで動く」という意味ではない
ここは注意が必要である。
今回分かったのは、
アイドル状態で、ほぼ同じDebian VMを追加した場合の限界コストが約150MB
ということだ。
VM内でアプリケーションが大量の固有データを書き始めれば、そのページは他のVMと共有できない。
例えば各VMが1GBずつ別々のデータを実際に使用すれば、その分だけ物理メモリーも必要になる。
したがって、
「150MBあれば2GB分の処理ができる」
という意味ではない。
それでも12GBは想像以上に実用的だった
今回の実験で一番印象が変わったのはここだった。
12GBという容量は、Proxmox用としては少ない部類に見える。
しかし10台のDebian VMを起動した状態でも、
availableは約7GB
残っていた。
20台でも、KSM収束後には、
約6GB
がavailableとして残った。
もちろん実際のサービスを入れれば消費量は増える。
それでも、個人が自宅で試すような小規模なOSSを数個動かす用途なら、12GBでもかなり現実的だと思う。
16GBあれば、さらに余裕がある。
結論
今回の実測では、
Proxmoxホスト:約1.9GB
そして、
同一構成のDebian VMを追加するコスト:約140~150MB/台
となった。
2GB割り当てのDebian VMを20台起動しても、KSM収束後のホスト全体の使用量は約5.1GBだった。
これは、「VMを10台使うなら20GB、30GBのメモリーが必要」という単純計算が成立しないことを示している。
必要なメモリー量を決めるのは、VMの台数そのものではない。
そのVMが実際に何をするかである。
今回のような軽いLinux VMを中心に使うのであれば、12GBでもかなり遊べる。
そして16GBあれば、Proxmoxを試すための環境としては、思っていた以上に十分なのかもしれない。