CentOS5のXen3.0.3でDomain-0のメモリを指定する

Xenで仮想サーバをたくさんたててWebサーバやらストレージサーバやらにしているML115に、開発用の仮想サーバを追加して起動したら、全ての仮想サーバにネットワーク通信ができなくなった。Domain-0のコンソールには以下のようなエラーメッセージが繰り返し出続けている。

printk: 4 messages suppressed.
xen_net: Memory squeeze in netback driver.

新しく立ち上げた仮想サーバをshutdownすると正常に戻る。別の仮想サーバをひとつ落とした上で新しい仮想サーバを立ち上げると大丈夫。どうも何かのリソース問題にぶつかったようだ。

以前ほとんど同じような現象に遭遇したときは、loopbackデバイスの不足だった。その時は/etc/modprobe.confにoptions loop max_loop=16と書いて解決したが、今回は16台も起動していないので別の問題のようだ。ちなみに/etc/xen/にあるDomain-Uの設定ファイルで仮想ディスクをfile:として設定すると loopbackデバイスを消費するが、tap:aio:で設定すると消費しないらしい。

いろいろ調べてみると、Domain-0のメモリをあらかじめ起動にカーネルパラメータで指定しておくとこの問題は回避できるらしい。/boot/grub/grub.confのkernel行に以下のようにdom0_mem=○○Mと追記する。

title CentOS (2.6.18-92.1.6.el5xen)
        root (hd0,0)
        kernel /xen.gz-2.6.18-92.1.6.el5 dom0_mem=768M
        module /vmlinuz-2.6.18-92.1.6.el5xen ro root=/dev/VolGroup00/LogVol00 
        module /initrd-2.6.18-92.1.6.el5xen.img

いままで特にメモリ指定はしていなかったので、Domain-0は最初はがっぽりとメモリを割り当てられていて、Domain-Uを立ち上げるたびにメモリが減っていった。これはこれで便利だなと思っていたが、そのあたりにバグがあったのかもしれない。似たような現象がXen3.2にあげたら直ったというような情報もあったが、当方では未確認。