我的問題是關於中斷,以及在guest虛擬機在KVM中執行時如何交給他們?客戶正在執行時發生中斷時會發生什麼?
可以說當kvm調用vmentry或vmresume時,客人代碼開始執行。現在當一個外部中斷髮生定時器中斷時,guest會引起一個vmexit。在Vmexit之後,kvm中的下一條指令將執行或主機中斷調用者被調用。如果kvm中的下一條指令被調用,則kvm可以做任何想要的操作,然後調用相應的主機中斷處理程序。
謝謝,
我的問題是關於中斷,以及在guest虛擬機在KVM中執行時如何交給他們?客戶正在執行時發生中斷時會發生什麼?
可以說當kvm調用vmentry或vmresume時,客人代碼開始執行。現在當一個外部中斷髮生定時器中斷時,guest會引起一個vmexit。在Vmexit之後,kvm中的下一條指令將執行或主機中斷調用者被調用。如果kvm中的下一條指令被調用,則kvm可以做任何想要的操作,然後調用相應的主機中斷處理程序。
謝謝,
在Intel VT-X,所有的中斷導致陷阱到宿主操作系統。然後,主機將決定是否中斷是:
對於本身(在這種情況下,它就會進行處理,可能導致KVM坐不定期相當長的一段時間);或
對於來賓,在這種情況下,它會通知KVM有關該中斷。然後,KVM會將中斷注入到guest虛擬機中。 (請注意,這部分KVM以內核模式運行;但我認爲您仍然認爲這是KVM)。
無論哪種情況,主機操作系統都會首先進行控制。
有點不相干,但VT-x的一個擴展使我們虛擬化的人更快樂,如果某些中斷可以直接發送給guest虛擬機,避免陷入主機陷阱(以及相關的性能損失)。唉,這似乎還沒有成爲現實。
感謝您的回答。關於你的第二點,我認爲這可能是有一個passthru設備時完成的。由於主機不知道它,訪客中斷處理程序將被始終調用。 – zombie 2011-02-01 17:21:54
它會一直運行在內核進程下,爲什麼用戶空間進程或權限對內核空間有什麼要求? – leppie 2011-02-01 09:28:16