上一期,我们详细介绍了QEMU-KVM的交互通道IOCTL,这一“里应外合”的交互方式有如下好处:
1、策略与机制分离,加速的机制由KVM负责,而如何调用加速的机制由Qemu负责;
2、可以由Qemu设置多种内存模型,如UMA、NUMA等等;
3、方便Qemu对特殊内存的管理(如MMIO);
4、内存的分配、回收、换出等都可以采用Linux原有的机制,不需要为KVM单独开发;
5、兼容其他加速器模型(或者无加速器,单纯使用Qemu做模拟)。
但是,我们脑子里总是有一系列的问题,比如,到底这两者是怎么互动,才能创建、加载和运行一个虚拟机的。因为什么事情,只有落实到了代码层面,才能心里有底。这一期,我们将通过分析代码,详解一下。下面,先上几张图,对QEMU-KVM有个感性认识。
图一