在 IBM 的官方網站有一份對於 I/O 虛擬化有很詳細的說明 http://www.ibm.com/developerworks/linux/library/l-pci-passthrough/ 並解釋了什麼是 PCI passthrough .大概的說明就是為了增加 I/O 的效能使用了一種叫做 device (or PCI) passthrough 的技術. 而這技術必須透過硬體來支援,不過在不同的處理器平台下有著不同的名稱 Intel (VT-d) 以及 AMD (IOMMU).
IBM 也藉由這四張圖來說明傳統以模擬硬體的方式以及真正以硬體的方式來支援 I/O 有什麼不同.
Platform device emulation
- Hypervisor-based device emulation
傳統虛擬機的 I/O 都是透過 VMM(或稱為 hypervisor) 所模擬出來的. - User space device emulation
第二種是 KVM(Kernel-based Virtual Machine) 所採取的虛擬化方式 其中 KVM 只負責虛擬化的部份,也就是 KVM 負責 VMM(Hypervisor) 的工作,至於模擬硬體裝置就獨立出來專門交給了 QEMU 來處理. ,不過 QEMU 只是存在 user space 的程式它必須透過 /dev/kvm 來和 kernel 與硬體溝通.
Device passthrough
- Passthrough within the hypervisor
Intel® Virtualization Technology(VT-d) 或是 AMD input/output memory management unit (IOMMU) 主要是透過內建於主機板的北橋晶片所提供的虛擬化技術.透過此一虛擬化的技術可讓虛擬機器針對週邊硬體等 I/O 等裝置做直接做存取 Directed I/O.IOMMU / VT-d 主要是透過 DMA remapping ,Address translation 和 Interrupt remapping 等技術.讓虛擬機直接存取真實的裝置,不管是網卡或是顯示卡以及硬碟裝置都不需要再透過 VMM 這一層.
這就是 Device passthrough.
- Passthrough with SR-IOV
雖然在 Intel VT-d 虛擬化技術中已經允許 VM 虛擬機可以直接和實體 I/O 連結.不過同時間上只能提供給單一虛擬機器來使用,所以在 Intel 的 I/O 虛擬中提供了一個解決方案 "Virtual Machine Direct Connect (VMDc)" .VMDc 使用了 PCI-SIG 的 Single Root I/O Virtualization (SR-IOV) 的技術. 透過 SR-IOV 這一項技術更進一步提升 VT-d 的功能.他可以同時讓多個 VM 虛擬機與實體 I/O 裝置同時建立通道(communication channels).在 Intel I/O 裝置虛擬化架構下 VT-c (Virtualization Technology for Connectivity) 主要由包含了兩個技術除了剛剛所談的 VMDc (Virtual Machine Direct Connect) 另外一個則是 VMDq (Virtual Machine Device Queues) 主要透過網卡晶片內建的 Layer 2 classifier / sorter 以取代由 VMM(或是 hypervisor) 所提供的虛擬 switch ,用以加速網路資料的傳送.
圖片出自於 http://www.ibm.com/developerworks/linux/library/l-pci-passthrough
One thought on “Linux virtualization and PCI passthrough”