1,351 瀏覽數

RHEL5 KVM – VT-d

RedHat01
從 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
設定步驟如下:

  1. 修改核心選項:

    [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
    
  2. 建立新核心:

    [root@benjr ~]# make
    [root@benjr ~]# make modules_install
    [root@benjr ~]# make install
    

    目前我所使用的是 RHEL5.5 x64 的版本,這些 KVM 的 Direct I/O 基本上都已經包在核心中了,所以步驟 1 和 2 事實上都不需重新編譯核心了.

  3. 重新啟動系統(新的核心開啟)
    檢查一下 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 的系統都可以看到這段訊息.

  4. 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
    
  5. Load KVM modules:

    [root@benjr ~]# modprobe kvm
    [root@benjr ~]# modprobe kvm-intel
    

    預設這幾個模組都有預先載入,所以這動作也可免了.

  6. Assign device:
    透過 Virtual Machine Manager ( #virt-manager ) 的 Virtual Machine / Hardware / Add Hardware 就可以新增 Direct I/O 的裝置了.不過我手賤隨便的把一個尚未做過設定的裝置給指派給虛擬機,但神奇的是這裝置是可以用的.這一件事讓我一直百思不得其解.

發表迴響