Windows XP on KVM でIOをvirtio準仮想化

KVMで以前作成したWindowsXP仮想マシンのパフォーマンスを向上させるため、HDDとNICをvirtioで準仮想化します。

大概の事はこちらのStray Penguin - Linux Memo (KVM-3)で解説されていますのでこのエントリでは作業した内容と注意点を。なお、GUIでは画面上で設定できますのでそれを使うのも良いでしょう。

まず、Fedoraプロジェクトが公開しているWindows用のvirtioドライバをvirtioで準仮想化したいWindows上でダウンロードします。
Index of /pub/alt/virtio-win/latest/images
ISOなので、何らかの方法でWindowsXP上でマウントできるようにしておきましょう。
ここで一端Windowsのゲストマシンをシャットダウンします。
システムドライブをvirtioで使うには一端別のドライブが必要になるので適当に小さい容量の仮想HDDを作ります。

kvm-img create temp.img 1GB

次に、

virsh edit windowsゲストの名前

でゲストの設定を編集できます。
HDDやCDROMの設定が記述されている当たりで

<disk type="block" device="disk">
    <source />
    <target dev="vda" bus="virtio">
    </target>
</disk>

を付け加えます。書き換える必要がある所は適当に。


保存して、ゲストをスタート。
見慣れた 「新しいデバイスを発見しました」 というダイアログが出るので、ダウンロードしておいたISOをマウントし、viostor 中のXP用ドライバを選択してインストールします。

正しくインストールされたらゲストをシャットダウン

再びゲストの編集を設定します。今度は書き換えです。
上段がシステムディスク、下段がさっき作った一時用HDDです。

<disk type="block" device="disk">
    <source />
    <target dev="vda" bus="virtio">
    </target>
</disk>

<disk type="block" device="disk">
    <source />
    <target dev="vdb" bus="virtio">
    </target>
</disk>

んで、再びゲストを起動。再びドライバを選択するダイアログが出ると思いますが、放置すれば勝手に認識するはず。改めて指定しても良いでしょうが。

以上でHDDの作業は終了。

NICでvirtioを使用するために再びゲストをシャットダウン。
また設定を編集します。
NICの記述がある箇所を探し、以下の記述を既存のNICの記述されている範囲内に加えます。

<model type="virtio"></model>

そしてゲストを起動。この時点ではネットワークがつながってないのでKVMの機能であるVNCでつなぎましょう。
またドライバ選択のダイアログが出ますので、今度は NetKVM フォルダ内からXP用ドライバを選択してインストールします。

以上でNICも準仮想化完了です。

注意点としてはNICが別デバイスに置き換わりますのでIPアドレスの固定化設定などはされてない状態になりますので設定しなおさなければいけません。その際、IPアドレスかぶってるよという警告が出るかもしれませんが意味を理解した上でスルーしてください。

準仮想化した後で、特別ベンチマークをとったわけではありませんが理論的には早くならないわけがないので気分は良くなりますね!