我知道qemu-kvm在KVM中执行设备仿真。 qemu-kvm是否在主机的用户空间中执行? 所以当遇到踢脚function时,通过超级调用退出虚拟机进入虚拟机pipe理程序,然后虚拟机pipe理程序切换到主机用户空间的qemu-kvm。 接下来,在完成所需的事情之后,qemu-kvm转移到pipe理程序,然后转移到虚拟机。 所以这意味着有两个来自VM的系统调用 – > Hypervisor和qemu-kvm – > Hypervisor? 这些步骤是发生还是我错了? 如果有关于这些东西的任何文档,请给我链接。 非常感谢你…
谢谢,巴拉
我更熟悉x86架构上的KVM部分,所以试着在KVM的x86实现中解释一下。
在x86架构中,KVM利用CPU的功能来分离管理程序和访客模式。 在英特尔方面,它们分别是VMX根和非根模式。
虚拟机入口(虚拟机管理程序 – >虚拟机)由KVM用VMLAUNCH指令触发,所有客户需要的信息都在内核模式下填充到CPU的VMCS中。 从qemu-kvm到kvm内核模块只调用一个系统调用。
当客户操作系统正在处理超出其权限的事情时(例如访问物理硬件或发生中断),VM退出发生。 之后,发出VM条目并且CPU再次变为非根模式以执行客人代码。 综上所述,虚拟机退出(虚拟机 – >虚拟机管理程序)是由硬件自动完成的,相应的退出原因和信息将在虚拟机中重新记录。 KVM然后检查VMCS以确定其下一步。 没有系统调用VM – >管理程序。
大多数设备模拟都基于用户空间,qemu-kvm可以利用现有的qemu代码。 然而,某些设备直通技术(如英特尔VT-d)允许访客通过IOMMU或其他方式直接访问硬件。 这可以带来更强大的性能,特别是在高速网络设备上。
如果你想挖掘源代码,我建议首先关注CPU虚拟化(Intel VT-x),它位于linux/arch/x86/kvm/vmx.c
英特尔软件开发者指南也对VT进行了全面的介绍。
我发现这很好。 至少为基础。 希望能帮助到你。
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仿真以及如何切换回客户机。 这些是优秀的,简短的论文。
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