実践!仮想化ソフトウェア 2010 Updates

第5回 Fedora 13で最新のLinux KVMに触れてみよう

この記事を読むのに必要な時間:およそ 3 分

強化されたvirshコマンド

Fedora 13に収録されているvirshコマンドはバージョン0.8.2となり,CentOS 5.5に収録されているバージョン0.6.3に比べて44ものオプションが追加されています。先述のネットワークインターフェース関連の設定もvirshコマンドから実行可能となっており,コマンドで操作できる内容がより充実してきたと言えます。

新しい機能すべてを紹介するのは大変ですので,ここではdomjobinfoとdomjobabortの2つのオプションについて簡単に解説します。これらのオプションは,仮想マシンのマイグレーションに関する内容になります。

ちなみに,virshからマイグレーションを行うには次のようにコマンドを実行します。

# virsh migrate 仮想マシン名 qemu+ssh://移動先ホスト名/system

※ライブマイグレーションを行う場合は--liveを付記する

domjobinfo

# virsh domjobinfo 仮想マシン名

このオプションは仮想マシンのマイグレーションの状態を表示します。仮想マシンのライブマイグレーションを実行している途中で実行すると,仮想マシンのデータの転送状況が表示されます。

# virsh domjobinfo vm01
Job type:         Unbounded   
Time elapsed:     23763        ms
Data processed:   495.160 MB
Data remaining:   579.109 MB
Data total:       1.016 GB
Memory processed: 495.160 MB
Memory remaining: 579.109 MB
Memory total:     1.016 GB

domjobabort

このオプションは実行中のマイグレーションを中止させます。中止すると,仮想マシンは移動元のホストに残ったまま動作を続けます。

# virsh domjobabort VM名

vhost_net機能を試す

vhost_netは,通常のネットワーク仮想化よりもシステムコール回数を減らしてオーバーヘッドを減らすことを目的としたカーネルモジュール実装です。この機能はKernel 2.6.33で組み込まれ,Fedora 13をはじめとした最新のLinuxで利用することが可能です。

vhost_netを有効にする

有効にするには「vhost_net」カーネルモジュールを読み込みます。

# modprobe vhost_net

lsmodコマンドで,モジュールが読み込まれたことを確認します。

# lsmod | grep vhost_net
vhost_net              21253  0 
macvtap                 6980  1 vhost_net
tun                    13854  3 vhost_net

仮想マシンの仮想NICオプションでvhost_netを有効にした状態で起動すると,有効にした仮想NICの数だけvhost_netのカウントが増えていきます。それでは,仮想マシンを起動してみましょう。

vhost_netを有効にして仮想マシンを起動する

現状では,仮想マシンマネージャーでvhost_netを有効にして仮想マシンを起動することはできないようですので,コマンドを直接実行して仮想マシンを起動します。はじめに,仮想マシンマネージャーで通常通りVMを起動し,psコマンドで実行コマンドを取得してテキストエディタに貼り付けます。

# ps auxww | grep qemu-kvm

不要なパラメータを取り除きつつ,vhost_netを有効にするための「vhost=on」パラメータを「-net」のオプション部分に追記します。赤文字が取り除くパラメータ,青文字が追記する部分です。

/usr/bin/qemu-kvm -S -M fedora-13 -enable-kvm -m 1024 -smp 1,sockets=1,cores=1,threads=1 -name FedoraVM1 -uuid 74b52e50-b95e-569e-1f04-85101152e6e3 -nodefaults -chardev socket,id=monitor,path=/var/lib/libvirt/qemu/FedoraVM1.monitor,server,nowait -mon chardev=monitor,mode=readline -rtc base=utc -boot c -drive file=/var/lib/libvirt/images/FedoraVM1.img,if=none,id=drive-virtio-disk0,boot=on,format=raw -device virtio-blk-pci,bus=pci.0,addr=0x4,drive=drive-virtio-disk0,id=virtio-disk0 -device virtio-net-pci,vlan=0,id=net0,mac=52:54:00:89:50:ba,bus=pci.0,addr=0x5 -net tap,fd=40,vlan=0,name=hostnet0,vhost=on -chardev pty,id=serial0 -device isa-serial,chardev=serial0 -usb -device usb-tablet,id=input0 -vnc 127.0.0.1:0 -vga cirrus -device AC97,id=sound0,bus=pci.0,addr=0x6 -device virtio-balloon-pci,id=balloon0,bus=pci.0,addr=0x3

上記パラメータで仮想マシンを実行する前に,2つのスクリプトを/etcの中に作成する必要があります。これは,仮想マシンがネットワークに接続するために必要なスクリプトになります。まず,次のスクリプトを「/etc/qemu-ifup」ファイルとして作成します。パーミッションは755です。

#!/bin/sh
echo "Bringing up $1 for bridged mode..."
ifconfig $1 0.0.0.0 promisc up
echo "Adding $1 to br0..."
brctl addif br0 $1

同じく「/etc/qemu-ifdown」ファイルを作成します。こちらのパーミッションを755にします。

#!/bin/sh
echo "Removing $1 to br0..."
brctl delif br0 $1
echo "Shutting down $1..."
ifconfig $1 down

スクリプトの設置が完了したら,仮想マシンを起動してみましょう。またlsmodコマンドを実行し,vhost_netのカウントが増えていることを確認してください。

パフォーマンスの確認

vhost_netを有効にすると,TCP_RR(単位時間あたりに送受信されるTCPのデータ数)が改善されます。TCP_RR値のベンチマークを行うにはNetperfを使用します。公式サイトよりソースコードをダウンロードして,コンパイルして使用することが可能です。

ベンチマークは,仮想化環境とは別にマシンを1台用意し,別のマシンから仮想化環境上のVMに対してベンチマークを実行します。パラメータは次のようになります。

# netperf -H VMのIPアドレス -t TCP_RR -c -C -l 30

私が社内のサーバと10Gbのイーサネットカードを使用したベンチマークを実施したところ,ほぼ誤差の範囲となり,残念ながら目に見えて大きく改善されるわけではありませんでした。

ベンチマークの詳細は以前イベントで発表したスライドがありますので,ご興味がある方はこちらも合わせて参照してください。

日本仮想化技術株式会社 公開資料
URL:http://VirtualTech.jp/handout/

まとめ

KVMの基本的な部分に関してはCentOS 5でも概ね簡単に管理することができましたが,Fedora 13ではより細かい部分での使い勝手が向上しているように感じました。

vhost_netについてはわかりやすく改善されている例が紹介できませんでしたが,環境によっては大きく改善される可能性もありますので,皆さんも秋の夜長にベンチマークなどはいかがでしょうか。

著者プロフィール

大内明(おおうちあきら)

1988年生まれ,北海道根室市出身。日本仮想化技術株式会社 技術部所属。主にVMware製品やLinux KVMの検証・構築を担当。バックアップも少々。サーバを見ること・触ることが好きで,社長の宮原と共にヤフオクの出物探しに燃えている。 個人ではIntel AtomマシンでXen環境を構築して自宅サーバを運用している。このサーバにCD-ROMドライブを外付けして「ハムスター用リモート給餌装置」や「エアコンリモート操作装置」を作るといったネタが,ごく一部の人たちにウケている。