- Intel的CPU要有支援VT-D
- AMD的CPU要有支援AMD-VI
- 主機板也是要選用有支援VT-D/AMD-VI功能,才可以使用VFIO功能
直接去Intel官網查CPU型號,找到以下技術且為YES就表示你的CPU有支援VT-D
接下來就要看主機板有沒有支援VT-D/AMD-VI,以國內4家華碩、微星、技嘉、華擎來說
依我使用的是Z77/H77晶片為例
- 華碩:BIOS完全沒有支援VT-D功能,要X79、X99等級以上才有
- 微星:BIOS大部份都有支援VT-D
- 華擎:BIOS大部份都有支援VT-D
- 技嘉:BIOS少部份支援,如UD5H、D3H等,剩下也是要X79、X99等級以上才有
不然BIOS想要有VT-D功能建議買微星或華擎的
#確定你硬體都有支援後在開始實作VFIO功能
########################################################
1. 把核心有關VFIO的都編譯起來之後重開機
2. 在/etc/modules加入以下模組
pci_stub vfio vfio_iommu_type1 vfio_pci kvm kvm_intel
3. 在/etc/default/grub加入以下參數
GRUB_CMDLINE_LINUX_DEFAULT="quiet splash intel_iommu=on vfio_iommu_type1.allow_unsafe_interrupts=1"
4. 執行以下指令
# update-grub
5. 重新開機
# shutdown -r now
接下來要設定給QEMU使用的顯卡
1. 使用 lspci -nn 觀察你所安裝的顯卡
01:00.0 VGA compatible controller [0300]: NVIDIA Corporation G98 [GeForce 8400 GS Rev. 2] [10de:06e4] (rev a1) <-- HOSTGPU: 8400GS 02:00.0 VGA compatible controller [0300]: NVIDIA Corporation Device [10de:13c2] (rev a1) <-- GUESTGPU: GTX 970 02:00.1 Audio device [0403]: NVIDIA Corporation Device [10de:0fbb] (rev a1) <-- GTX 970 aduio
2. 在/etc/initramfs-tools/modules加入QEMU要用的GPU,如下指令
pci_stub ids=10de:13c2,10de:0fbb
3. 再執行以下指令
# update-initramfs -u
4. 重新開機
# shutdown -r now
5. 輸入 dmesg | grep pci-stub 指令後,會看到底下訊息
[ 1.834707] pci-stub: add 10DE:13C2 sub=FFFFFFFF:FFFFFFFF cls=00000000/00000000 [ 1.834715] pci-stub 0000:02:00.0: claimed by stub [ 1.834720] pci-stub: add 10DE:0FBB sub=FFFFFFFF:FFFFFFFF cls=00000000/00000000 [ 1.834724] pci-stub 0000:02:00.1: claimed by stub
6. /etc/vfio-pci.cfg 建立這檔案,並加入在上面使用 lspci -nn 查到的顯卡
0000:02:00.0 0000:02:00.1
7. 接下來建立啟動虛擬機的script檔,我的script檔叫vm1
#!/bin/bash configfile=/etc/vfio-pci.cfg MEMORY=4096 HDA=win8.img MAC="DE:AD:BE:CF:EC:B9" BRIDGE=br10 VGA=02:00.0 vfiobind() { dev="$1" vendor=$(cat /sys/bus/pci/devices/$dev/vendor) device=$(cat /sys/bus/pci/devices/$dev/device) if [ -e /sys/bus/pci/devices/$dev/driver ]; then echo $dev > /sys/bus/pci/devices/$dev/driver/unbind fi echo $vendor $device > /sys/bus/pci/drivers/vfio-pci/new_id } modprobe vfio-pci cat $configfile | while read line;do echo $line | grep ^# >/dev/null 2>&1 && continue vfiobind $line done qemu-system-x86_64 -enable-kvm -m $MEMORY -cpu host,kvm=off \ -smp 4,sockets=1,cores=4,threads=1 \ -vga none \ -boot c \ -device vfio-pci,host=$VGA,x-vga=on \ -device vfio-pci,host=02:00.1 -drive file=win8.img,format=raw \ -net nic,macaddr=$MAC -net nic,model=e1000 -net bridge,br=$BRIDGE
8. 把vm1權限改成755
# chmod 755 vm1
9. 這樣就可以直接執行vm1
# ./vm1
沒有留言:
張貼留言