Linux 如何在kvm中进行设备仿真

Linux 如何在kvm中进行设备仿真,linux,linux-kernel,kvm,qemu,Linux,Linux Kernel,Kvm,Qemu,我知道qemu kvm在kvm中进行设备仿真。qemu kvm是否正在主机的用户空间中执行?因此,当遇到kick函数时,它通过hypercall退出VM进入hypervisor,然后hypervisor将其移交给 主机用户空间中的qemu kvm。下一步,在完成所需的 然后,qemu kvm传输到虚拟机监控程序,然后传输到 虚拟机监控程序返回到虚拟机。这意味着有两个系统调用,一个 从VM-->虚拟机监控程序和qemu kvm-->虚拟机监控程序?这些是步骤吗 那是真的还是我错了?如果有任何关于

我知道qemu kvm在kvm中进行设备仿真。qemu kvm是否正在主机的用户空间中执行?因此,当遇到kick函数时,它通过hypercall退出VM进入hypervisor,然后hypervisor将其移交给 主机用户空间中的qemu kvm。下一步,在完成所需的 然后,qemu kvm传输到虚拟机监控程序,然后传输到 虚拟机监控程序返回到虚拟机。这意味着有两个系统调用,一个 从VM-->虚拟机监控程序和qemu kvm-->虚拟机监控程序?这些是步骤吗 那是真的还是我错了?如果有任何关于 这些东西,请给我链接。非常感谢你

谢谢,
Bala

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

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

也许本文档将对您有所帮助:


我觉得不错。至少是基本的。希望能有所帮助。

kvm是由一家名为的以色列公司创办的。这些介绍性论文由这些人撰写,建议阅读:

基于内核的虚拟机技术: KVM:基于内核的虚拟化驱动程序:

KVM使用QEMU进行I/O仿真,本文对此进行了解释。
它将帮助您了解从来宾模式到主机模式的切换是如何工作的,切换背后的原因,qemu如何在userspace进行I/O仿真,以及它如何切换回来宾模式。这些都是非常好的简短论文。

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

在x86体系结构中,KVM利用CPU的功能来分离虚拟机监控程序和来宾模式。在英特尔术语中,它们分别是VMX根模式和非根模式

KVM使用VMLAUNCH指令启动VM条目(hypervisor->VM),并在内核模式下将所有来宾所需信息填入CPU的VMC中。从qemu kvm到kvm内核模块只调用一个系统调用

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

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


如果您想了解源代码,我建议您首先关注CPU虚拟化(Intel VT-x),它位于
linux/arch/x86/kvm/vmx.c
。《英特尔软件开发人员指南》还全面介绍了VT。

@Lekensteyn感谢您的编辑。。。。真的很惊讶有些人是多么在乎整洁,希望我能从现在起保持我的答案干净。