gpt4 book ai didi

linux - kvm 中如何进行设备模拟

转载 作者:可可西里 更新时间:2023-11-01 11:50:53 27 4
gpt4 key购买 nike

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

谢谢,巴拉

最佳答案

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

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

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

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

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

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

关于linux - kvm 中如何进行设备模拟,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3125019/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com