從 RHEL 5.4 64bite 開始 Redhat 就開始支援 KVM,到了新版的 Red Hat Enterprise Linux 6 其虛擬化也只剩下 KVM( Kernel-based Virtual Machine) ,RHEL6 已經將 Xen 移除了,所以目前 RHEL 會以 KVM 為主,目前他也支援 VT-d 的功能,在 KVM 的官方網站有詳細的說明 http://www.linux-kvm.org/page/How_to_assign_devices_with_VT-d_in_KVM
設定步驟如下:
-
修改核心選項:
[root@benjr ~]# make menuconfig set "Bus options (PCI etc.)" -> "Support for DMA Remapping Devices" to "*" set "Bus options (PCI etc.)" -> "Enable DMA Remapping Devices" to "*" set "Bus options (PCI etc.)" -> "PCI Stub driver" to "*" optional setting: set "Bus options (PCI etc.)" -> "Support for Interrupt Remapping" to "*" exit/save
-
建立新核心:
[root@benjr ~]# make [root@benjr ~]# make modules_install [root@benjr ~]# make install
目前我所使用的是 RHEL5.5 x64 的版本,這些 KVM 的 Direct I/O 基本上都已經包在核心中了,所以步驟 1 和 2 事實上都不需重新編譯核心了.
-
重新啟動系統(新的核心開啟)
檢查一下 DMAR ,IOMMU 是否載入核心[root@benjr ~]# dmesg | grep -e DMAR -e IOMMU … DMAR:DRHD base: 0x000000feb03000 flags: 0×0 IOMMU feb03000: ver 1:0 cap c9008020e30260 ecap 1000 …
- DMAR = DMA Remapping
- IOMMU = input/output memory management unit
If you get no output you'll need to fix this before moving on. Check if your hardware supports VT-d and check that it has been enabled in BIOS.
NOTE: If you still get an error "No IOMMU found." Check dmesg for errors suggesting your BIOS is broken.
基本上只要有支援 VT,VT-d 的系統都可以看到這段訊息. -
unbind device from host kernel driver
[root@benjr ~]# lspci -n 04:00.0 0200: 1425:0030
[root@benjr ~]# echo "1425 0030" > /sys/bus/pci/drivers/pci-stub/new_id [root@benjr ~]# echo 0000:04:00.0 > /sys/bus/pci/devices/0000:04:00.0/driver/unbind [root@benjr ~]# echo 0000:04:00.0 > /sys/bus/pci/drivers/pci-stub/bind
-
Load KVM modules:
[root@benjr ~]# modprobe kvm [root@benjr ~]# modprobe kvm-intel
預設這幾個模組都有預先載入,所以這動作也可免了.
-
Assign device:
透過 Virtual Machine Manager ( #virt-manager ) 的 Virtual Machine / Hardware / Add Hardware 就可以新增 Direct I/O 的裝置了.不過我手賤隨便的把一個尚未做過設定的裝置給指派給虛擬機,但神奇的是這裝置是可以用的.這一件事讓我一直百思不得其解.
沒有解決問題,試試搜尋本站其他內容