HardWare
Direct access vendor
Intel, VT for Directed I/O - 由板子及其BIOS所支援 (VT-d)
AMD-V
PCI
PCI-e
input–output memory management unit (IOMMU)
讓 VM 可以透過直接記憶體存取 (DMA) 與中斷重對映 (interrupt remapping) 的方式,直接取用各種 I/O 周邊,像是網路卡、顯示卡與磁碟控制卡等。這個方式又稱為 PCI passthrough。
IOMMU 的記憶體位址轉換技術,可以讓周邊設備定址到整個記憶體位址,進而減少在周邊與主記憶體之間的 buffer 記憶體空間的需求,還可以保護作業系統的記憶體,免於惡意的軟硬體的侵害。
要完全達成 IOMMU 的功能除了需要 CPU 的支援外,仍需要主機板的晶片組、BIOS 或 UEFI 韌體的支援。
PCI
I/O Hub
屬於 PCI 裝置類型:
Network cards (wired or wireless)
SCSI adapters
Bus controllers: USB, PCMCIA, I2C, FireWire, IDE
Graphics and video cards
Sound cards
顯卡似乎不行
一般 SATA 或者 SAS 等類型的硬碟的控制器都是直接接入到 PCI 或者 PCI-E 匯流排的,所以也可以將硬碟作為普通的PCI裝置直接分配個客戶機。需要注意的是,當分配硬碟時,實際上將其控制器作為一個整體分配到客戶機中,因此需要在硬體平臺上至少有另兩個或者多個SATA或者 SAS控制器。(不然一個guest os就會直接獨佔??)
PCI-passthrough
(1)在 BIOS 中開啟 Intel VT-d (2)在 Linux kenel 中啟用 PCI Pass-through 新增 intel_iommu=on 到 /boot/grub/grub.conf 檔案中。(在我的 RedHat Linux 6上,該檔案是 /boot/grub.conf) (3)重啟系統,使得配置生效
裝置直接分配讓客戶機的優勢和不足
好處:在執行 I/O 操作時大量減少甚至避免 VM-Exit 陷入到 Hypervisor 中,極大地提高了效能,可以達到幾乎和原生系統一樣的效能。VT-d 克服了 virtio 相容性不好和 CPU 使用頻率較高的問題。
不足:(1)一臺伺服器主機板上的空間比較有限,因此允許新增的 PCI 和 PCI-E 裝置是有限的。大量使用 VT-d 獨立分配裝置給客戶機,讓硬體裝置數量增加,這會增加硬體投資成本。(2)對於使用 VT-d 直接分配了裝置的客戶機,其動態遷移功能將受限,不過也可以使用熱插拔或者libvirt 工具等方式來緩解這個問題。
不足的解決方案:(1)在一臺physical host上,僅少數 I/O 如網路效能要求較高的guest os使用 VT-d直接分配裝置,其他的使用純模擬或者 virtio 已達到多個客戶機共享同一個裝置的目的 (2)對於網路I/O的解決辦法,可以選擇 SR-IOV 是一個網卡產生多個獨立的虛擬網卡,將每個虛擬網卡分配個一個客戶機使用。
SR-IOV
VT-d的效能非常好,但是它的物理裝置只能分配給一個客戶機使用。為了實現多個虛機共享一個物理裝置,並且達到直接分配的目的,PCI-SIG 組織釋出了 SR-IOV (Single Root I/O Virtualization and sharing) 規範,它定義了一個標準化的機制用以原生地支援實現多個客戶機共享一個裝置。不過,目前 SR-IOV (單根 I/O 虛擬化)最廣泛地應用還是網卡上。 SR-IOV 使得一個單一的功能單元(比如,一個乙太網埠)能看起來像多個獨立的物理裝置。一個帶有 SR-IOV 功能的物理裝置能被配置為多個功能單元。SR-IOV 使用兩種功能(function):
物理功能(Physical Functions,PF):這是完整的帶有 SR-IOV 能力的PCIe 裝置。PF 能像普通 PCI 裝置那樣被發現、管理和配置。
虛擬功能(Virtual Functions,VF):簡單的 PCIe 功能,它只能處理I/O。每個 VF 都是從 PF 中分離出來的。每個物理硬體都有一個 VF 數目的限制。一個 PF,能被虛擬成多個 VF 用於分配給多個虛擬機器。
Hypervisor 能將一個或者多個 VF 分配給一個虛機。在某一時刻,一個 VF 只能被分配給一個虛機。一個虛機可以擁有多個 VF。在虛機的作業系統看來,一個 VF 網卡看起來和一個普通網卡沒有區別。SR-IOV 驅動是在核心中實現的。 網卡 SR-IOV 的例子:
2.2 SR-IOV 的條件 1. 需要 CPU 支援 Intel VT-x 和 VT-D (或者 AMD 的 SVM 和 IOMMU) 2. 需要有支援 SR-IOV 規範的裝置:目前這種裝置較多,比如Intel的很多中高階網卡等。 3. 需要 QEMU/KVM 的支援。
RedHat Linux 6.0 官方只完整測試了下面的幾款 SR-IOV 網卡:
Intel® 82576NS Gigabit Ethernet Controller ( igb 驅動)
Intel® 82576EB Gigabit Ethernet Controller ( igb 驅動)
Intel® 82599ES 10 Gigabit Ethernet Controller ( ixgbe 驅動)
Intel® 82599EB 10 Gigabit Ethernet Controller ( ixgbe 驅動)
Last updated
Was this helpful?