"KVM does not perform any emulation", is it true?

英語版WikipediaのKVMの項目に「KVM(カーネルモジュール)自身はエミュレーションを行なわない。」という記述がありました。

KVMをよく知っている人はご存知だと思いますが、これは誤りです。

KVMのソースコードを見てもらえるとわかると思いますが、現在のKVMは(性能を上げるため)一部のハードウェアのエミュレーションを行なっています。エミュレートしているのはPIC, PIT, I/O APIC, Local APICです。他のハードウェアのエミュレーションはqemuにやってもらっています。

なおqemu-kvmコマンドに-no-kvm-irqchip, -no-kvm-pitオプションを付けると、以前のようにエミュレーションをqemu側で実行させることができます。バグ報告で、「とりあえず-no-kvm-irqchip付けて実行するとどうなる?」とか「最新のKVMだとゲストが転けるんだけど、-no-kvm-irqchip付けると動いたよ」といったやり取りをたまに見かけます。ゲストOSがLinuxの場合はそういう話は少ないですが、他のOSだとたまに問題になってるみたいですね。