在non-root下收到external-interrupt处理流程

  1. 通常external-interrupt会引起vmexi,如果该external-interrupt就是给Guest的,那么hypervisor就会向Guest注入一个virtual Interrupt,那么哪个irq会被注入呢?(即在Guest IDT indexing的Interrupt vector). KVM怎么知道注入哪个irq?(利用host irq和guest irq一对一定义来实现吗)

    对于软件模拟的device和半虚拟化的device, 引起vmexit的physical irq和注入到Guest的virtual irq之间没有直接的一对一定义.

    qemu负责模拟虚拟设备,当被模拟的虚拟设备向guest发出中断时,qemu会利用kvm向guest注入一个virtual Interrupt.

    不论physical Interrupt是否引起vmexit(在guest-mode arrive的Interrupt会引起,在root-mode arrive的Interrupt不会引起),该physical Interrupt都是由Host的Linux 内核处理的,也就是说,physical Interrupt总是被host consumed.

    例如, host中的中断可能会触发一些IO回调函数,或者释放一个由于qemu中的同步IO而阻塞的线程,但是qemu不会将physical interrupt映射到virtual Interrupt.然后,根据qemu模拟虚拟设备的方式,它可能会在设备完成IO操作(例如调用回调函数)后注入virtual interrupt.

  2. 对于assined到guest的device, hypervisor会将irq deliver给Guest. 通过tracing code, 我发现host的IRQ与Guest的IRQ(guest interrupt vector in IDT)不同, 那么KVM是怎样确定到底需要使用哪个Interrupt vector的呢?

    对与device assignment, 这种情况下肯定会有一对一的physical Interrupt和virtual Interrupt,但是他们不需要完全是同一个vector. KVM会对physical Interrupt vector number到virtual Interrupt vector number做一个转换,当physical Interrupt arrived, KVM会向Guest deliver一个vitual Interrupt.

  3. 如果我们通过修改VMCS的“external-interrupt exiting” flag,使external Interrupt不导致vmexit,那么在physical Interrupt到达的时候会发生什么?CPU会使用guest IDT来回应physical Interrupt吗?如果是这样,KVM能将CPU重定向,使其使用另一个IDT给guest吗?(通过修改IDTR)

    可以,这是我们早就开始做的一个研究,研究: ELI: Bare-metal
    performance for I/O virtualization
    ,这中间还有很多问题需要解决,没有这么简单.

  4. guest IDT在哪?guest IDT是由qemu在初始化vcpu和registers期间配置的吗(寄存器包含IDTR吗)?

    guest IDT在guest地址空间中, guest IDT由guest自身建立, kvm只是通过硬件IDTR虚拟化出来一个virtual IDTR给guest.

翻译自: https://www.spinics.net/lists/kvm/msg73762.html


__EOF__

本文作者EwanHai
本文链接https://www.cnblogs.com/haiyonghao/p/14440764.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角推荐一下。您的鼓励是博主的最大动力!
posted @   EwanHai  阅读(461)  评论(0编辑  收藏  举报
编辑推荐:
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律
点击右上角即可分享
微信分享提示