メインコンテンツへスキップ
見出し画像

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.7GiB

    20台:

    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を試すための環境としては、思っていた以上に十分なのかもしれない。

    こちらの記事もおすすめ


     
     

    Karin

     
     
    自家用ソフト(非売品)開発者。AIと古い機械をつないで遊んでいます。ChatGPTやCodexを工具に、電子工作、自宅サーバー、Androidアプリ、OpenWrt移植などに挑戦中。自分や家族が使いたいものを、日曜大工のように作っています。ノウハウはできるだけ無料で共有します。

    あなたへのおすすめ