我正在为VM的IO进行KVM优化。我已经读过KVM代码,通常所有的物理中断都会导致VMexit进入KVM。然后主机的IDT将处理相应的物理中断。我的问题是KVM如何决定是否向客户注入虚拟中断?在什么情况下它会向访客注入一个虚拟中断?
由于
答案 0 :(得分:3)
在kvm的文档中,这是关于何时可以注入虚拟中断的内容。下面是http://os1a.cs.columbia.edu/lxr/source/Documentation/kvm/api.txt的链接
看第905行。
我认为struct kvm_run结构可以控制应用程序如何创建VM
使用cscope并在源代码中搜索字符串request_interrupt_window,您将了解kvm如何看到何时进入guest虚拟机注入中断。同时通过api.txt文件它非常有用。
干杯
EDITED
这是主持人向客人注入中断的一个例子
假设GUEST VM中存在页面错误
这是主机插入虚拟中断的一个示例。当然,还有很多其他方式/理由可以这样做 您可以在执行每条指令之后配置VMCS以使guest虚拟机执行VMEXIT,这可以使用MONITOR TRAP FLAG完成。
答案 1 :(得分:1)
我想你是指分配的设备中断(而不是模拟的中断或virt-IO中断,它们不是直接从物理设备转发给guest虚拟机)。 对于分配的设备的每个irq,调用request_threaded_irq并注册kvm_assigned_dev_thread以在每次中断时调用。如您所见,然后调用kvm_set_irq,并且如上所述,如果中断被屏蔽,则会发生唯一的合并。在x86中,中断可以被rflags.if,mov-SS屏蔽,因为TPR不允许中断传递或由于服务中断具有更高的优先级。 KVM必须遵循架构定义,以免给客人带来惊喜。