Xen 2.0.6

XenVMWarecoLinuxのような仮想マシン提供技術で、ただしXen自体がホストOSになることとゲストOSをXen対応にする点が違う。面倒そうだけどパフォーマンスでは有利と言われている。
何が面倒って、検証用マシンを確保するのが面倒ですた。古いx386にも最新のx64にも対応してないので、中途半端な新鮮さのx686のマシンにメモリとHDDをそこそこ積んだものを用意しないといけない。

構成例

検証目的なのでネタっぽい構成例にしてみた。

ドメイン0:     適当 RAM32MB
ドメイン1〜54: RAM16MB,DISK2.8GB

前準備

  • マシンにDebianを適当に入れる
  • apt-get install curl iproute twisted debootstrap bridge-utils

インストール

  • http://www.cl.cam.ac.uk/Research/SRG/netos/xen/ から Stable binary release を取ってきて展開。
  • /boot/grub/menu.lst に下記のようなエントリを追加する。dom0_memにはメモリをKB単位で指定する。最低でも8MB,今回試してみたら16MB程度はいるみたいだ。
title Xen 2.0 / XenLinux 2.6
  kernel /boot/xen-2.0.gz dom0_mem=32768
  module /boot/vmlinuz-2.6-xen0 root=/dev/hda1 ro
  • TLS(Thread Local Storage)ライブラリを無効にする。 mv /lib/tls /lib/tls.disabled
  • modules.dep と initrd.img を作る。ぁーやっぱ色々足りないな。。
/bin/ls -1 /lib/modules|perl -ne 'chomp; system "depmod -eF /boot/System.map-$_ $_"'
/bin/ls -1 /lib/modules|perl -ne 'chomp; system "mkinitrd -o /boot/initrd.img-$_ $_"'
  • depmod -eF /boot/System.map-2.6.11.10-xen0 2.6.11.10-xen0 等としてmodules.depを更新する
  • リブート。うまくいけばxen本体と、次にdomain 0 (最初のゲストOS)がブートする。

仮想マシン用のディスクとファイルの準備

  • xenのバイナリ配布のカーネルにはLVMは入ってないようだ。今回は避ける。ただしユーザマニュアルにdisk = ['phy:vg/lvm1,sda2,w'] という記述はあるので、domain0で扱えるようにカーネルを調整すればいいのかもしれない。
  • fdiskでは/dev/hda60までしか作れない。

xenのdomain-からfdiskでパーティション操作を行うと

Calling ioctl() to re-read partition table.
WARNING: Re-reading the partition table failed with error 16: Device or resource busy.
The kernel still uses the old table.
The new table will be used at the next reboot.
Syncing disks.

と文句を言われる。

とりあえず以下の感じで54個のパーティションを切ってみた。

# デバイスノードを作る 63までだったか?
perl -e 'for(6..63){ (-e "/dev/hda$_") or system "mknod /dev/hda$_ b 3 $_"}'
# パーティションを作る。あ、60までしか作れないのか
perl -e 'print map{"n\nl\n\n+2800M\n"}(6..60);print"w\n"' |fdisk /dev/hda
# ここでリブート
reboot
# ファイルシステムをフォーマットする
perl -e 'for(6..60){ warn "# format hda$_\n";system "mkreiserfs -q /dev/hda$_"}'
# debianを入れる
mount /dev/hda6 /mnt
debootstrap sarge /mnt
(cd /mnt;tar cpzf ~/diskdata.tgz *)
umount /mnt
perl -e 'for(7..60){ warn "$_\n"; system "mount /dev/hda$_ /mnt ; (cd /mnt; tar xzf ~/diskdata.tgz ) ; umount /mnt"}'
# /lib/modulesと/bootをコピーする
perl -e 'for(6..60){ warn "$_\n";
 system join ";"
 	,"mount /dev/hda$_ /mnt"
 	,"cp -afu --target-directory=/mnt /boot"
 	,"cp -afu --target-directory=/mnt/lib /lib/modules"
 	,"sync"
 	,"umount /mnt"
 ;}'

全部必要なわけじゃないんだよな。。特定のカーネルのだけでいいはず

ドメイン設定ファイル

# cat /etc/xen/hda6
name = "hda6"
restart = 'never'
memory = 16
disk = [ 'phy:hda6,hda1,w' ]
nics=1
# vif = [ 'mac=aa:00:00:00:00:11, bridge=xen-br0' ]

kernel = "/boot/vmlinuz-2.6.11.10-xenU"
# ramdisk = "/boot/initrd.img-2.6.11.10-xenU"
root = "/dev/hda1 ro"
# Sets runlevel 4.
extra = "4"

#cpu = -1   # leave to Xen to pick
#dhcp="dhcp"
#netmask=
#gateway=
#hostname= "vm%d" % vmid
perl -e 'for $n (7..60){ @src=`cat hda6`; open(OUT,">hda$n"); for(@src){ s/hda6/hda$n/g; print OUT; }}'

ブート前に可能な設定作業

mv /lib/tls /lib/tls/disabled
/etc/hostname
/etc/hosts (localhost行の最初のエントリ)
/etc/resolv.conf
/etc/fstab
/etc/network/interfaces
/etc/apt/sources.list

ドメインの起動

# (まだ起動してないなら)
xend start
# 仮想マシンの開始
xm create hda6 -c
# 一覧
xm list
コンソールのデタッチは CTRL-] で、アタッチは xencons localhost <ポート番号> 

ドメインの初期作業

apt-get update
# timezoneなど
apt-get install ntpdate lv bzip2
tzconfig
rootパスワードの設定

xm balloon

xenは実行中のドメインのメモリ使用量減らすことができる。
ドメインの中のlinuxからはused memory が増えたように見える。
ただし、逆にドメインのメモリ使用量を増やすことはできないようだ。

dom0# xm balloon hda6 16
dom0# xm info
system                 : Linux
host                   : wiggin
release                : 2.6.11.10-xen0
version                : #1 Sun May 22 11:38:50 BST 2005
machine                : i686
cores                  : 1
hyperthreads_per_core  : 1
cpu_mhz                : 1836
memory                 : 1023
free_memory            : 865

guest# free
             total       used       free     shared    buffers     cached
Mem:         13996       7240       6756          0        316       2700
-/+ buffers/cache:       4224       9772
Swap:            0          0          0

dom0# xm balloon hda6 8
dom0# xm info
system                 : Linux
host                   : wiggin
release                : 2.6.11.10-xen0
version                : #1 Sun May 22 11:38:50 BST 2005
machine                : i686
cores                  : 1
hyperthreads_per_core  : 1
cpu_mhz                : 1836
memory                 : 1023
free_memory            : 873

guest# free
             total       used       free     shared    buffers     cached
Mem:         13996      13252        744          0        144        700
-/+ buffers/cache:      12408       1588
Swap:            0          0          0

dom0# xm balloon hda6 32
dom0# xm info
system                 : Linux
host                   : wiggin
release                : 2.6.11.10-xen0
version                : #1 Sun May 22 11:38:50 BST 2005
machine                : i686
cores                  : 1
hyperthreads_per_core  : 1
cpu_mhz                : 1836
memory                 : 1023
free_memory            : 865

guest# free
             total       used       free     shared    buffers     cached
Mem:         13996       7020       6976          0        252       2556
-/+ buffers/cache:       4212       9784
Swap:            0          0          0

ドメインごとの設定

# 用意するファイル
/etc/fstab
/resolv.conf
/apt/sources.list
/network/interfaces
/hostname
/hosts
# TLSの無効化
mv /lib/tls /lib/tls.disabled
# あと、ドメインの設定ファイル/etc/xen/... も

起動させた

# xm list
Name              Id  Mem(MB)  CPU  State  Time(s)  Console
Domain-0           0      120    0  r----    458.8
helix06           58       15    0  -b---      2.8    9658
helix07           59       15    0  -b---      1.1    9659
helix08           60       15    0  -b---      1.1    9660
helix09           61       15    0  -b---      1.1    9661
helix10           62       15    0  -b---      1.1    9662
helix11           63       15    0  -b---      1.1    9663
helix12           64       15    0  -b---      1.1    9664
helix13           65       15    0  -b---      1.1    9665
helix14           66       15    0  -b---      1.1    9666
helix15           67       15    0  -b---      1.1    9667
helix16           68       15    0  -b---      1.1    9668
helix17           69       15    0  -b---      1.1    9669
helix18           70       15    0  -b---      1.1    9670
helix19           71       15    0  -b---      1.1    9671
helix20           72       15    0  -b---      1.1    9672
helix21           73       15    0  -b---      1.1    9673
helix22           74       15    0  -b---      1.1    9674
helix23           75       15    0  -b---      1.1    9675
helix24           76       15    0  -b---      1.1    9676
helix25           77       15    0  -b---      1.1    9677
helix26           78       15    0  -b---      1.1    9678
helix27           79       15    0  -b---      1.1    9679
helix28           80       15    0  -b---      1.1    9680
helix29           81       15    0  -b---      1.1    9681
helix30           82       15    0  -b---      1.1    9682
helix31           83       15    0  -b---      1.1    9683
helix32           84       15    0  -b---      1.1    9684
helix33           85       15    0  -b---      1.1    9685
helix34           86       15    0  -b---      1.1    9686
helix35           87       15    0  -b---      1.1    9687
helix36           88       15    0  -b---      1.1    9688
helix37           89       15    0  -b---      1.1    9689
helix38           90       15    0  -b---      1.1    9690
helix39           91       15    0  -b---      1.1    9691
helix40           92       15    0  -b---      1.1    9692
helix41           93       15    0  -b---      1.1    9693
helix42           94       15    0  -b---      1.1    9694
helix43           95       15    0  -b---      1.1    9695
helix44           96       15    0  -b---      1.1    9696
helix45           97       15    0  -b---      1.1    9697
helix46           98       15    0  -b---      1.1    9698
helix47           99       15    0  -b---      1.1    9699
helix48          100       15    0  -b---      1.1    9700
helix49            1       15    0  -b---      1.1    9601
helix50            2       15    0  -b---      1.1    9602
helix51            3       15    0  -b---      1.1    9603
helix52            4       15    0  -b---      1.1    9604
helix53            5       15    0  -b---      1.1    9605
helix54            6       15    0  -b---      1.1    9606
helix55            7       15    0  -b---      1.1    9607
helix56            8       15    0  -b---      1.1    9608
helix57            9       15    0  -b---      1.1    9609
helix58           10       15    0  -b---      1.1    9610
helix59           11       15    0  -b---      1.1    9611
helix60           12       15    0  -b---      1.2    9612

wiggin:/etc/xen/mass-conf# hdparm -t /dev/hda
/dev/hda:
 Timing buffered disk reads:   10 MB in  3.07 seconds =   3.26 MB/sec

wiggin:/etc/xen/mass-conf# hdparm -v /dev/hda
/dev/hda:
 multcount    =  0 (off)
 IO_support   =  0 (default 16-bit)
 unmaskirq    =  0 (off)
 using_dma    =  0 (off)
 keepsettings =  0 (off)
 readonly     =  0 (off)
 readahead    = 256 (on)
 geometry     = 19929/255/63, sectors = 320173056, start = 0

wiggin:/etc/xen/mass-conf# hdparm -c 1 -d 1 /dev/hda
/dev/hda:
 setting 32-bit IO_support flag to 1
 setting using_dma to 1 (on)
 HDIO_SET_DMA failed: Operation not permitted
 IO_support   =  1 (32-bit)
 using_dma    =  0 (off)

wiggin:/etc/xen/mass-conf# hdparm -t /dev/hda
/dev/hda:
 Timing buffered disk reads:   16 MB in  3.18 seconds =   5.03 MB/sec

がー、カーネル握らないとIDEのDMAに対応できないのか