2010-06-26 59 views
3

我知道qemu-kvm在KVM中執行設備仿真。 qemu-kvm是否在主機的用戶空間中執行?因此,當遇到kick函數時,它通過超級調用退出虛擬機,然後虛擬機管理程序切換到主機用戶空間中的qemu-kvm中的 。接下來,在完成所需的 之後,qemu-kvm轉移到管理程序,然後轉移到虛擬機。所以這意味着VM有兩個系統調用 - > Hypervisor和qemu-kvm - > Hypervisor?這些步驟是 發生還是我錯了?如果有任何有關 這些東西的文檔,請給我鏈接。非常感謝您......設備仿真如何在kvm中完成

感謝, 巴拉

回答

0

在主機的用戶空間正在執行的QEMU-KVM?是的,這也是一個性能瓶頸,並且有很多方法正在開發中。查看用於網絡的PCI SR-IOV NIC和用於光纖通道的NPIV。它們都是專用於細分I/O控制器的專用硬件,因此KVM/qemu可以將VM附加到控制器上的專用通道。

所以這意味着有兩個來自VM的系統調用 - >管理程序和qemu-kvm - >管理程序?我不確定,但我認爲有設備中斷穿越用戶內核空間邊界而不是系統調用。

也許該文件將你有點幫助:

http://www.linux-kvm.org/wiki/images/4/42/Kvm-device-assignment.pdf

1

我發現this好。至少爲基礎。希望能幫助到你。

1

kvm由一家名爲qumranet的以色列公司開創。這些介紹論文被那些傢伙寫的,並推薦閱讀:

基於內核的虛擬機技術:http://www.fujitsu.com/downloads/MAG/vol47-3/paper18.pdf KVM:基於內核的虛擬化驅動程序:http://www.linuxinsight.com/files/kvm_whitepaper.pdf

KVM使用QEMU爲I/O仿真是在論文中解釋。 它將幫助您瞭解從客戶機到主機模式的切換是如何工作的,切換背後的原因,用戶空間中qemu如何完成I/O仿真以及切換回客戶機的方式。這些都是優秀的簡短論文。

+0

@Lekensteyn感謝您的編輯....真的很驚訝於有些人關心整潔,希望我會保持我的答案從現在開始。 – Deepthought 2014-03-10 19:25:19

2

我更熟悉x86架構上的KVM部分,所以試着在KVM的x86實現中解釋一下。

在x86架構中,KVM利用CPU的功能來分離管理程序和訪客模式。在英特爾方面,它們分別是VMX根和非根模式。

虛擬機入口(虛擬機管理程序 - >虛擬機)由KVM使用VMLAUNCH指令觸發,並在內核模式下將所有訪客需要的信息填充到CPU的VMCS中。從qemu-kvm到kvm內核模塊僅調用系統調用。

虛擬機退出發生在客戶操作系統正在處理超出其權限的事情時,例如訪問物理硬件或發生中斷。之後,發出VM條目並且CPU再次變爲非根模式以執行客人代碼。總之,虛擬機退出(虛擬機 - >虛擬機管理程序)由硬件自動完成,相應的退出原因和信息將在VMCS中記錄。 KVM然後檢查VMCS以確定其下一步。沒有系統調用VM - >管理程序。

大多數設備仿真都基於qemu-kvm可以利用現有qemu代碼的用戶空間。然而,某些設備直通技術(如英特爾VT-d)允許訪客通過IOMMU或其他方式直接訪問硬件。這可以爲高速網絡設備帶來更強大的性能。

如果您想挖掘源代碼,我建議首先關注CPU虛擬化(Intel VT-x),它位於linux/arch/x86/kvm/vmx.c。英特爾軟件開發人員指南也對VT進行了全面介紹。