繁体   English   中英

QEMU和KVM在虚拟机I / O中扮演什么角色?

[英]What role do QEMU and KVM play in virtual machine I/O?

我发现QEMU和KVM之间的界限非常模糊。 我发现有人说虚拟机是qemu进程,而其他人说kvm进程。 究竟是什么? QEMU和KVM在虚拟机I / O中扮演什么角色? 例如,当虚拟机执行PIO / MMIO时,是qemu还是kvm会捕获它并将其转换为硬件操作。 还是两者都有责任?

KVM:Linux内核中的代码,为使用CPU虚拟化的用户空间提供了友好的界面。 这包括用户空间可以调用的“创建CPU”,“运行CPU”等功能。对于完整的虚拟机,您需要具有一些可以使用此功能的用户空间代码。 通常是QEMU,或更简单的“ kvmtool”。 某些大型云提供商则拥有自己的自定义用户空间代码。

QEMU:模拟虚拟硬件,包括磁盘,内存,CPU,串行端口,图形和其他设备。 还提供了用于执行诸如启动,停止和迁移之类的机制(UI和一些可编程接口)的机制。 QEMU支持几种不同的“加速器”模式来处理CPU仿真:

  • TCG:纯仿真-可以在任何地方使用,但速度很慢
  • KVM:使用Linux内核的KVM API允许使用主机CPU硬件虚拟化支持来运行来宾代码
  • hax:与KVM类似,但使用Intel HAXM代码,该代码将在Windows主机上运行

从实现的角度来看,KVM和QEMU之间的界限非常清楚-KVM是宿主内核的一部分,而QEMU是单独的用户空间程序。 对于用户而言,通常不必关心边界在哪里,因为这是实现细节。

要回答有关MMIO会发生什么的问题:

  • 来宾进行MMIO访问
  • 这是由硬件捕获到主机内核的
  • 然后,主机内核(KVM)可能会自己模拟此MMIO访问,因为出于性能原因,内核中实现了一些设备。 这通常仅适用于中断控制器,也可能适用于iommu。
  • 否则,KVM将MMIO访问报告回给用户空间(即,向QEMU,kvmtool等)
  • 然后,用户空间可以使用其设备仿真代码来处理访问
  • 然后,用户空间将结果(例如要读取的数据返回)返回到内核
  • 内核根据需要更新vcpu的寄存器状态以完成指令的仿真
  • 然后内核按照以下指令恢复执行VM

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM