8 仮想マシンモニタ KVM

上川純 一

PIC

KVM という仮想マシンモニタがあります。 これは、 Intel VT, もしくは、 AMD-V 対応のプロセッ サ*21 の 仮想化対応機能を活用するための仕組です。 2006 年末の時点では、 kvm はデバイスドライバとして実装されており、 /dev/kvmとして実装されています。

8.1 使いかた

PIC

Linus Kernel 2.6.20 以降ではカーネル側の機構は標準で入っているようです。 *22 Debian で KVM を利用する際の手順を説明します。

apt-get install kvm でパッケージをインストールします。 kvm コマンドがインストールされます。 これが kvm 向けに 変更された qemu です。

udev が作成してくれる /dev/kvm にアクセスできるようにします。 デフォルトは root:kvm 660*23 で、 root のみがアクセスできる設定になっています。 ユーザを kvm グループに追加すればよいでしょう。

# adduser dancer kvm

CPU の VT 機能はデフォルトで on になっていない場合があるので、 on にします。 これはマシンによって違うようです。 通常 BIOS で設定します。 旧モデルの MacBook の場合は EFI 上で必要なコマンドを発行することになります。 *24

以上で、 kvm コマンドを利用して VT の恩恵にあずかることができるようになります。 コマンドラインなどは qemu 互換、 むしろ qemu そのものを利用しているので、 qemu と同じように動かすことができます。

8.2 実行例

kvm を活用していろいろと試してみましょう。 qemu 用のディスクイメージを作成し、 適当なディストリビューションのディ スクイメージを利用して、 インストールします。 おそらく、 -monitor コマンドで stdio をモニタにするほうが便利で しょう。

$ qemu-img create -f qcow hda 10G
$ kvm -hda hda -cdrom /home/iso/RHEL4-U4-i386-AS-disc1.iso
   -boot d -m 512 -monitor stdio
(qemu) change cdrom /home/iso/RHEL4-U4-i386-AS-disc2.iso
(qemu) change cdrom /home/iso/RHEL4-U4-i386-AS-disc3.iso
(qemu) change cdrom /home/iso/RHEL4-U4-i386-AS-disc4.iso
(qemu) change cdrom /home/iso/RHEL4-U4-i386-AS-disc5.iso
(qemu) change cdrom /home/iso/RHEL4-U4-i386-AS-disc1.iso
(qemu) eject cdrom

ここでは某 CDROM が 5 枚あるディストリビューションを例にとっていますが、 CDROM が 5 枚あっても、 qemu モニ ターにて CDROM を入れ換えながら GUI 操作を行うことで無事にインストール完了します。 リブートするとこ ろでゲスト OS がカーネルパニックを起こしますが、 そこは適当に kvm 自体を起動しなおせば問題ありま せん。

$ kvm -hda hda  -boot c -m 512 -monitor stdio -localtime  \
 -redir tcp:2222::22

8.3 ベンチマークしてみた

qemu を使った場合と kvm を使った場合の速度比較をしてみました。 まず、 ユーザ空間で完結する例として単純に while で ループを回すだけのプログラムです。 qemu の場合は 6s かかったものが、 kvm の場合は 0.6s で完了しま した。

8.4 パフォーマンスの見えかた

kvm を実行しているホスト OS からどのように見えるのか確認してみましょう。 kvm の仕組だと、 システムコールを実行して 処 理 を 行 う こ と に な る の で し ょう 。

mpstat -P ALL 1 の出力を一部みてみると、 一つの CPU のシステム時間がとられているように見えます。

00 時 28 分 51 秒  CPU   %user   %nice    %sys %iowait    %irq   %soft  %steal   %idle    intr/s
00 時 28 分 52 秒  all    0.00    0.00   50.00    0.50    0.00    0.50    0.00   49.00   1421.78
00 時 28 分 52 秒    0    0.00    0.00   92.08    0.00    0.00    0.99    0.00    6.93    430.69
00 時 28 分 52 秒    1    0.00    0.00    6.93    0.99    0.00    0.00    0.00   91.09    991.09

topコマンドで見た場合には、 kvm は通常のプロセスと同様に CPU 時間を消費し、 メモリを消費しているように見え ます。

  PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND
 3746 dancer    25   0  308m 252m 246m R   82 25.7 100:36.60 kvm
 2512 root      10  -5     0    0    0 S    0  0.0   0:11.32 kjournald
 2806 root      15   0  2556  932  804 S    0  0.1   1:09.36 syslogd

iostat 1 /dev/dm-1 の出力を確認してみます。 ゲスト OS のディスク IO によってホスト OS のディスク IO が発生して いるのが見れます。

avg-cpu:  %user   %nice %system %iowait  %steal   %idle
           0.00    0.00   42.50   42.00    0.00   15.50

Device:            tps   Blk_read/s   Blk_wrtn/s   Blk_read   Blk_wrtn
dm-1            805.94       102.97      6400.00        104       6464

8.5 他との比較

Xen, qemu, qemu+kqemu, openvz, vserver, user-mode-linux などと機能を比較してみましょう。 と思ったらすでにやられて いたので、 この URL を参照してください。 http://virt.kernelnewbies.org/TechComparison

デビアン勉強会
_____PIC Debian 勉 強 会 資 料

2007 年 1 月 20 日  初版第 1 刷発行
東 京 エ リ ア Debian 勉強会 (編集・印刷・発行)
_____________