デバイスエミュレータとしてのQemuのソースコードを簡単に見てみた

Qemuにライブマイグレーション機能のパッチが投稿されたという話を聞いて、はじめてソースコードを体系的に見てみた。Qemuのコードのネーミングセンスはなかなかすごくて、名前はほとんど考えずに作っているとしか思えない。
さて、メインルーチンは、いわずと知れたvl.cである。ここで、main関数やmain_loop関数が定義されている。しかも、ゲストVMの保存とロードなどsavevm/loadvmなどまで定義してあるため、一万行近い大ファイルとなっている。
そして、ハードウェアデバイスは、hwディレクトリ以下に定義されている。こちらのコードは、まだ読みやすくhw/irq.cやacpi/pciなど、目的がはっきりしている。また、VGAドライバ(cirrus_vga.c)なども、このディレクトリで定義される。そして、デバイスはQEMUMachine構造体でまとめて、qemu_register_machine@vl.cで登録される。
QEMUMachine構造体は、hw/pc.cが一つの例である。Qemuの派生バージョンであるXenのioemu(現在は、ioemu-remoteとして別ディレクトリに移動してしまったが)も、XenPV用構造体およびXenFV用構造体を定義している。
関係ないけど、Qemuを使っているKVM(Kernel-based VM)では、すでにライブマイグレーションはサポートされている。なので、今回のQemuのライブマイグレーションは、他のVMにも対応できるように一般化されたことがうり。
ちなみに、Qemuのコードツリーのgitweb版は以下である。
http://git.kernel.dk/?p=qemu.git;a=summary