我发现QEMU和KVM之间的界限非常模糊。我发现有人说虚拟机是一个qemu进程,而其他人说是一个kvm进程。究竟是什么? QEMU和KVM在虚拟机I / O中扮演什么角色?例如,当vm执行PIO / MMIO时,是qemu还是kvm会捕获它并将其转换为硬件操作。或两者都有责任?
答案 0 :(得分:3)
KVM:Linux内核中的代码,它为用户空间提供友好的界面,以便使用CPU虚拟化。这包括用户空间可以调用“创建CPU”,“运行CPU”等的功能。对于完整的虚拟机,您需要有一些可以使用它的用户空间代码。这通常是QEMU,或更简单的“kvmtool”;一些大型云提供商有自己的自定义用户空间代码。
QEMU:模拟虚拟硬件,包括磁盘,内存,CPU,串行端口,图形和其他设备。还提供了启动,停止和迁移等操作的机制(UI和一些可编程接口)。 QEMU支持几种不同的“加速器”模式,用于处理CPU仿真:
从实现的角度来看,KVM和QEMU之间的界限非常明确--KVM是主机内核的一部分,而QEMU是一个单独的用户空间程序。对于用户,您通常不必关心边界的位置,因为这是一个实现细节。
回答有关MMIO会发生什么的问题: