Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/joomla/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux kernel 在执行guest时,中断会发生什么?_Linux Kernel_Virtualization_Intel_Kvm - Fatal编程技术网

Linux kernel 在执行guest时,中断会发生什么?

Linux kernel 在执行guest时,中断会发生什么?,linux-kernel,virtualization,intel,kvm,Linux Kernel,Virtualization,Intel,Kvm,我的问题是关于中断,以及当来宾在KVM中执行时如何处理中断 假设kvm调用vmentry或vmresume时,来宾代码开始执行。现在,当外部中断(如计时器中断)发生时,来宾将导致vmexit。Vmexit之后,将执行kvm中的下一条指令,或者将调用主机中断调用者。如果kvm中的下一条指令被调用,那么kvm可以做任何它想做的事情,然后调用适当的主机中断处理程序 谢谢,在英特尔VT-x上,所有中断都会导致主机操作系统陷入陷阱。然后,主机将确定中断是否为: 对于自身(在这种情况下,它将处理它,可能导

我的问题是关于中断,以及当来宾在KVM中执行时如何处理中断

假设kvm调用vmentry或vmresume时,来宾代码开始执行。现在,当外部中断(如计时器中断)发生时,来宾将导致vmexit。Vmexit之后,将执行kvm中的下一条指令,或者将调用主机中断调用者。如果kvm中的下一条指令被调用,那么kvm可以做任何它想做的事情,然后调用适当的主机中断处理程序


谢谢,

在英特尔VT-x上,所有中断都会导致主机操作系统陷入陷阱。然后,主机将确定中断是否为:

  • 对于自身(在这种情况下,它将处理它,可能导致KVM在相当长的一段时间内处于非计划状态);或

  • 对于来宾,在这种情况下,它将通知KVM中断。然后,KVM将依次将中断注入来宾。(注意,KVM的这一部分运行在内核模式中,但我假定您仍然认为这是KVM)。

在任何一种情况下,主机操作系统都首先控制


有些不相关,但VT-x的一个扩展会让我们虚拟化的人更开心,那就是如果某些中断可以直接发送到客户机,避免主机陷入陷阱(以及相关的性能损失)。唉,这似乎还没有出现。

它总是在内核进程下运行,为什么用户空间进程或权限与内核空间有任何关系?谢谢你的回答。关于你的第二点,我认为它可能是在有一个直通设备的情况下完成的。由于主机不知道,因此将始终调用来宾中断处理程序。当前在VT-x上,所有中断都会被捕获到主机中,如果合适,主机必须将它们转发给来宾。不幸的是,这会导致真正的性能问题,并且有望在稍后的VT-x版本中得到英特尔的改进。Re:您建议的改进,如果中断到达时来宾当前未运行会发生什么情况?如果来宾未运行,您仍会将陷阱带入主机;进一步的中断将被掩盖,直到客人下一次被安排(并且中断被处理)。但是,当来宾运行时,您可以避免这些无关的陷阱并获得性能提升。启用APIC后,来宾中断的可能性是否会降低?