在non-root下收到external-interrupt处理流程
-
通常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.
-
对于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.
-
如果我们通过修改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,这中间还有很多问题需要解决,没有这么简单. -
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__

本文链接:https://www.cnblogs.com/haiyonghao/p/14440764.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角【推荐】一下。您的鼓励是博主的最大动力!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律