interrupt - KVM如何处理物理中断?

标签 interrupt kvm

我正在为 VM 的 IO 进行 KVM 优化。我看过KVM代码,通常所有的物理中断都会导致VMexit进入KVM。然后主机的IDT会处理相应的物理中断。我的问题是 KVM 如何决定是否向 guest 注入(inject)虚拟中断?在什么情况下它会向 guest 注入(inject)虚拟中断?

谢谢

最佳答案

在 kvm 的文档中,这是关于何时可以注入(inject)虚拟中断的内容。这是链接http://os1a.cs.columbia.edu/lxr/source/Documentation/kvm/api.txt
查看第 905 行。
我认为 struct kvm_run 结构可以控制应用程序如何制作 VM
行为。使用cscope并在源代码中搜索字符串request_interrupt_window,您将了解kvm如何查看何时进入guest以注入(inject)中断。另外通过api.txt文件非常有帮助。

干杯

已编辑
这是主机向 guest 注入(inject)中断的一个示例。
假设 GUEST VM 中存在页面错误

  • 这会导致 VMEXIT
  • Hypervisor/KVM 处理 VMEXIT
  • 它通过VMCS控制结构查看VMEXIT的原因,发现有缺页。
  • 主机/KVM 负责内存虚拟化,所以它检查是否导致页面错误
  • 因为该页面未分配给 GUEST,在这种情况下,它会调用 HOST 内核中的 alloc_page 并执行 VMENTRY 以恢复 GUEST 执行。
  • 或者映射被 GUEST OS 删除,在这种情况下,KVM 使用 VMCS 控制结构作为与 的通信媒介。注入(inject)虚拟中断 没有 14 会导致 GUEST 内核处理页面错误。

  • 这是主机插入虚拟中断的一个示例。当然,还有很多其他方法/理由可以这样做。
    您实际上可以配置 VMCS 以使 guest 在执行 后执行 VMEXIT每条指令这可以使用 MONITOR TRAP FLAG 来完成。

    关于interrupt - KVM如何处理物理中断?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10826261/

    相关文章:

    java - 中断正在运行的线程

    c - 运行 ISR 直到 X 发生

    testing - XEN 与 KVM 的状态,用于内部虚拟服务器场(如现场农场)

    c - 工作队列启动、中断和从未完成导致 CPU 停顿

    多线程程序的C++定时器中断

    c - 如何使用汇编获取BIOS时间?

    配置网桥后 ubuntu KVM guest 没有网络连接

    windows - 使用 AMT 基础架构设置 Intel VPro

    c - 在KVM中拦截RDTSC指令

    virtual - 在KVM中如何将VM克隆到具有不同磁盘空间的VM