4

我知道 qemu-kvm 在 KVM 中进行设备仿真。qemu-kvm 是否在主机的用户空间中执行?因此,当遇到 kick 函数时,它会通过对 hypervisor 的 hypercall 退出 VM,然后 hypervisor 将其移交给主机用户空间中的 qemu-kvm。接下来,在完成所需的事情后,qemu-kvm 将传输到管理程序,然后管理程序返回到 VM。所以这意味着有两个系统调用,一个来自 VM--> Hypervisor 和 qemu-kvm--> Hypervisor?这些是发生的步骤还是我错了?如果有关于这类东西的任何文档,请给我链接。非常感谢...

谢谢,巴拉

4

4 回答 4

2

我更熟悉在 x86 架构上工作的 KVM 部分,所以尝试在 KVM 的 x86 实现中解释这一点。

在 x86 架构中,KVM 利用 CPU 的功能来分离管理程序和访客模式。在 Intel 术语中,它们分别是 VMX 根模式和非根模式。

VM条目(管理程序-> VM)由KVM使用VMLAUNCH指令触发,所有客人需要的信息在内核模式下填充到CPU的VMCS中。只有从 qemu-kvm 调用到 kvm 内核模块的系统调用。

虚拟机退出发生在客户操作系统正在处理超出其权限的事情时,例如访问物理硬件或发生中断。之后,发出 VM 条目,CPU 再次更改为非 root 模式以执行来宾代码。总之,VM退出(VM -> hypervisor)是由HW自动完成的,相应的退出原因和信息会记录在VMCS中。KVM 然后检查 VMCS 以确定其下一步。VM -> 管理程序没有系统调用。

大多数设备仿真都基于用户空间,其中 qemu-kvm 可以利用现有的 qemu 代码。但是,某些设备直通技术(例如 Intel VT-d)允许来宾直接通过 IOMMU 或其他方式访问硬件。这可以带来更强大的性能,尤其是在高速网络设备上。

如果要挖掘源代码,我建议先关注 CPU 虚拟化(Intel VT-x),它位于linux/arch/x86/kvm/vmx.c. 英特尔软件开发人员指南也对 VT 进行了全面介绍。

于 2013-09-03T05:26:03.853 回答
2

kvm 是由一家名为qumranet的以色列公司创立的。这些介绍性论文是这些人写的,推荐阅读:

基于内核的虚拟机技术:http ://www.fujitsu.com/downloads/MAG/vol47-3/paper18.pdf KVM:基于内核的虚拟化驱动程序: http://www.linuxinsight.com/files/kvm_whitepaper。 pdf

KVM 使用 QEMU 进行 I/O 仿真,本文对此进行了说明。它将帮助您了解从客户机模式切换到主机模式的工作原理、切换背后的原因、qemu 如何在用户空间完成 I/O 仿真以及它如何切换回客户机。这些都是优秀的、简短的论文。

于 2012-06-26T10:50:18.123 回答
1

我发现很好。至少对于基础知识。希望能帮助到你。

于 2011-11-15T07:02:46.003 回答
0

qemu-kvm 是否在主机的用户空间中执行?是的,这也是一个性能瓶颈,并且正在开发解决它的方法。查看用于网络的 PCI SR-IOV NIC 和用于光纤通道的 NPIV。它们都是为细分 I/O 控制器设计的特殊硬件,因此 KVM/qemu 可以将 VM 附加到控制器上的专用通道。

所以这意味着有两个系统调用,一个来自 VM--> Hypervisor 和 qemu-kvm--> Hypervisor?我不确定,但我认为存在跨越用户内核空间边界的设备中断而不是系统调用。

也许这份文档会对您有所帮助:

http://www.linux-kvm.org/wiki/images/4/42/Kvm-device-assignment.pdf

于 2010-10-19T20:40:56.860 回答