qemu-kvm 内部ネットワーク

以下、ソースに添付のドキュメントより。

QEMU VLAN <------> Firewall/DHCP server <-----> Internet
             |         (10.0.2.2)
             |
             ----> DNS server (10.0.2.3)
             |
             ----> SMB server (10.0.2.4)

ここで言うVLANは、qemuの内部で複数のネットワークを作るためのもので
ホストOSのVLANとは関係が無さそう(できなそう)だ。

qemu-kvm Live Migration on Fedora10

前提条件

  • qemu-kvmコマンドのバージョンアップ

Fedora10 のインストール時に「仮想化」のパッケージを選択するとインストールされる qemu-kvm コマンドはバージョンが0.9.1で、
Live Migrationに必要な「-incoming」オプションをつけると

(qemu) Migration failed rc=201

となって無条件にLive Migrationが失敗してしまう(ように見えた)ので
qemu-kvmを0.10.5へバージョンアップする。
手順は上に書いた。
その他のパッケージはFedora10のデフォルトのまま。
KVMのバージョンはqemu-kvmによると(kvm-74)だそうな。

  • qemu-kvmが動作するマシンを2つ用意し、同一Networkセグメントに配置。

今回は

    • hostA: 192.168.0.1
    • hostB: 192.168.0.2

で行った。

  • Live Migration 元とLive Migration先の両方からアクセスできるストレージに仮想マシン(VM)のイメージを置く。

今回はNFSにおいたFedora10.imgを用いた。

Live Migration作業

  • hostAでVMを起動
/usr/local/bin/qemu-system_x86_64 -m 1024 -hda Fedora10.img -boot c -monitor stdio
  • hostBでLive Migrationの待ち受け準備
/usr/local/bin/qemu-system_x86_64 -m 1024 -hda Fedora10.img -boot c -monitor stdio -incoming tcp:0:4444

tcp:0:4444の0はアドレス(0.0.0.0)の省略。4444ポートでhostAからのコネクションを待ち受ける

  • hostAでLive Migrationに用いるNetwork帯域を設定
(qemu) migrate_set_speed 1g

どうやらこれで1GB/sまでの帯域を許可している?

  • hostAでLive Migration実行
(qemu) migrate -d tcp:192.168.0.2:4444

Migrationの状態の確認

(qemu) info migrate
Migration status: active

activeと出れば実行中。

失敗すると

(qemu) info migrate
Migration status: failed

完了すると

(qemu) info migrate
Migration status: completed

と出る。

Migration完了後はhostAのSDLウィンドウのタイトルが「QEMU」から「QEMU(Stopped)」へ変わる。
このウィンドウ(=qemu-kvmプロセス)は不要なので終了。
hostBでは逆で「QEMU(Stopped)」だったタイトルが「QEMU」へ変わり、
VMの画面が表示されるようになる。

qemu-kvm を 自分でビルド on Fedora10

ソースをダウンロード
http://sourceforge.net/projects/kvm

今日時点での最新版 qemu-kvm-0.10.5.tar.gz をダウンロード

解凍

tar zxf qemu-kvm-0.10.5.tar.gz

コンパイル

cd qemu-kvm-0.10.5
./configure && make && make install

/usr/local/bin に qemu-img, qemu-nbd qemu-system-x86_64 というバイナリが3つ出来上がる。
名前は異なるがqemu-system-x86_64 は qemu-kvm と同じもの。

NIC Bonding (Teaming) on Fedora10

/etc/modprobe.d ディレクトリにbondingというファイルを作る

alias bond0 bonding
options bond0 miimon=100 mode=0

miimonは「MII リンク監視を行う頻度をミリ秒単位で指定する」
modeは0〜6くらいまであってact-act, act-stbなどの挙動を決めている。
詳しくは以下のページ。
http://www.pochinet.org/linux0A044.htm

または/usr/share/doc/iputils-20071127/README.bondingファイルに
Linux Ethernet Bonding Driver HOWTO」があるのでそちらを参照。

/etc/sysconfig/network-scripts/ifcfg-bond0

DEVICE=bond0
BOOTPROTO=dhcp
ONBOOT=yes

上はDHCPでアドレス取得する例。
手動で設定する場合は以下:

DEVICE=bond0
BOOTPROTO=none
ONBOOT=yes
NETWORK=10.0.0.0
NETMASK=255.255.255.0
IPADDR=10.0.0.2
GATEWAY=10.0.0.1

以下、bondingされる物理NICの設定。
/etc/sysconfig/network-scripts/ifcfg-eth0

DEVICE=eth0
ONBOOT=yes
MASTER=bond0
SLAVE=yes
BOOTPROTO=none

/etc/sysconfig/network-scripts/ifcfg-eth1

DEVICE=eth1
ONBOOT=yes
MASTER=bond0
SLAVE=yes
BOOTPROTO=none

ここまで設定して

/etc/init.d/network restart

これでeth0とeth1を結合したbond0を使える。

KVM 準仮想化ドライバ virtio for Disk I/O

ディスクIO部分を完全仮想から準仮想にしてくれるらしい。

qemu-kvm のオプション

 -hda file.img -boot c

 -drive file=file.img,if=virtio,boot=on

に変えるだけ。
fedora10(x86_64 kernel2.6.27.24-170.2.68) on fedora10(x86_64 kernel2.6.27.24-170.2.68) で動作確認。
ただし、ゲストOSのLinux Kernelのversionが2.6.25以上じゃないと動かないらしい。
ゲストがLinuxじゃない場合はどうすればよいんだろう?

ゲストのFedora10をインストール中だが、やたら遅い。。
完全仮想の方が速い気がする。
ベンチマーク