KVM虛擬化win10顯卡直通一例

一、硬件及需求

聯(lián)想SR650 2x5218,64G,3x1.2T SAS HDD,顯卡RTX2080

因?yàn)閷?duì)系統(tǒng)要求必須是windows,windows server系統(tǒng)沒有顯卡驅(qū)動(dòng),win10又沒有對(duì)應(yīng)的服務(wù)器硬件驅(qū)動(dòng),嘗試安裝windows10,使用windows server2019驅(qū)動(dòng),系統(tǒng)安裝安裝完成后,驅(qū)動(dòng)問題導(dǎo)致系統(tǒng)藍(lán)屏,重啟,無法正常使用

只能使用centos+kvm部署win10虛擬機(jī),顯卡采用直通模式,可以正常安裝顯卡驅(qū)動(dòng)。

二、部署過程

1、安裝centos7.8,安裝過程省略

英文安裝,virt-manager圖形界面中文會(huì)顯示亂碼
centos版本:CentOS-7.8-x86_64-DVD-2003
采用的自動(dòng)分區(qū),不過手動(dòng)更合適。

[root@localhost ~]# df -h
Filesystem              Size  Used Avail Use% Mounted on
devtmpfs                  32G    0  32G  0% /dev
tmpfs                    32G    0  32G  0% /dev/shm
tmpfs                    32G  11M  32G  1% /run
tmpfs                    32G    0  32G  0% /sys/fs/cgroup
/dev/mapper/centos-root  50G  2.3G  48G  5% /
/dev/sda2              1021M  210M  811M  21% /boot
/dev/sda1                200M  12M  189M  6% /boot/efi
/dev/mapper/centos-home  2.1T  24G  2.1T  2% /home
tmpfs                    6.3G    0  6.3G  0% /run/user/0
2、安裝kvm

2.1設(shè)置橋接網(wǎng)絡(luò),名稱為br0連接到eno1變?yōu)榈絙r0
yum -y install bridge-utils

配置br0的網(wǎng)絡(luò)參數(shù),對(duì)照自己的網(wǎng)卡,配置自己的ip

cat > /etc/sysconfig/network-scripts/ifcfg-br0 << EOF
DEVICE=br0
ONBOOT=yes
BOOTPROTO=static
NM_CONTROLLED=no
IPADDR=192.168.31.88
NETMASK=255.255.255.0
GATEWAY=192.168.31.1
DNS1=114.114.114.114
USERCTL=no
TYPE=Bridge
EOF

修改eno1的網(wǎng)絡(luò)參數(shù)

cat > /etc/sysconfig/network-scripts/ifcfg-eno1 << EOF
DEVICE=eno1
ONBOOT=yes
BRIDGE=br0
EOF

重啟網(wǎng)絡(luò)
systemctl restart network


重啟網(wǎng)絡(luò)后ssh連接新設(shè)置的ip
檢查主機(jī)機(jī)是否支持kvm
egrep '(vmx|svm)' /proc/cpuinfo

2.2安裝kvm

systemctl start libvirtd

查看kvm版本,UEFI模式安裝windows需要升級(jí)kvm

virsh # version
Compiled against library: libvirt 3.0.0
Using library: libvirt 3.0.0
Using API: QEMU 3.0.0
Running hypervisor: QEMU 2.8.1

2.3更新qemu-kvm

wget http://rpmfind.net/linux/centos/7.8.2003/extras/x86_64/Packages/centos-release-qemu-ev-1.0-4.el7.centos.noarch.rpm
yum install -y centos-release-qemu-ev-1.0-4.el7.centos.noarch.rpm
wget http://rpmfind.net/linux/centos/7.8.2003/extras/x86_64/Packages/centos-release-virt-common-1-1.el7.centos.noarch.rpm
yum install -y centos-release-virt-common-1-1.el7.centos.noarch.rpm
 sed -i -e "s/enabled=1/enabled=0/g" /etc/yum.repos.d/CentOS-QEMU-EV.repo
yum --enablerepo=centos-qemu-ev -y install qemu-kvm-ev
 systemctl restart libvirtd

查看更新后的kvm版本

virsh # version
Compiled against library: libvirt 4.5.0
Using library: libvirt 4.5.0
Using API: QEMU 4.5.0
Running hypervisor: QEMU 2.12.0

2.4安裝OVMF
OVMF“是一個(gè)為UEFI支持虛擬機(jī)的項(xiàng)目”。

 #REPO
 vi /etc/yum.repos.d/kraxel.repo
 # create new
 [qemu-firmware-jenkins]
 name=firmware for qemu, built by jenkins, fresh from git repos
 baseurl=https://www.kraxel.org/repos/jenkins/
 enabled=0
 gpgcheck=0
 #RPM Install
 yum --enablerepo=qemu-firmware-jenkins -y install OVMF

 #check ovmf directory
ls /usr/share/OVMF/

 #QEMU配置以啟用UEF
vim /etc/libvirt/qemu.conf
 nvram = [
  "/usr/share/OVMF/OVMF_CODE.secboot.fd:/usr/share/OVMF/OVMF_VARS.fd",
 ]

 #重啟libvirtd服務(wù)
 service libvirtd restart

2.5安裝win10
使用圖形界面安裝,xshell的xmanager工具
virt-manager

2.5.1選擇UEFI模式,暫不配置顯卡直通



2.5.2如果硬盤或者CD/ROM報(bào)錯(cuò)不支持IDE模式不支持,請(qǐng)更改成SATA模式



2.5.3網(wǎng)卡橋接模式

2.5.4vnc連接配置,選擇vncserver,否則可能看不到虛擬機(jī)畫面,vnc客戶端配置raw模式,否則可能很卡


2.6顯卡直通
2.6.1開啟iommu
IOMMU(i/o memory management unit)。iommu有兩大功能:控制設(shè)備dma地址映射到機(jī)器物理地址(dmar),中斷重映射(intremap)(可選)
確認(rèn)內(nèi)核是否支持iommu
cat /proc/cmdline | grep iommu有輸出則正常
如果沒有輸出,將intel_iommu=on添加到grub啟動(dòng)文件當(dāng)中
編輯grub文件 :
vim /etc/default/grub

GRUB_TIMEOUT=5
GRUB_DISTRIBUTOR="$(sed 's, release .*$,,g' /etc/system-release)"
GRUB_DEFAULT=saved
GRUB_DISABLE_SUBMENU=true
GRUB_TERMINAL_OUTPUT="console"
GRUB_CMDLINE_LINUX="intel_iommu=on crashkernel=auto spectre_v2=retpoline rd.lvm.lv=centos/root rd.lvm.lv=centos/swap rhgb quiet"
GRUB_DISABLE_RECOVERY="true"

重新生成內(nèi)核
grub2-mkconfig -o /boot/efi/EFI/centos/grub.cfg

再次驗(yàn)證內(nèi)核支持iommu

[root@localhost ~]# cat /proc/cmdline | grep iommu
BOOT_IMAGE=/vmlinuz-3.10.0-1127.19.1.el7.x86_64 root=/dev/mapper/centos-root ro intel_iommu=on crashkernel=auto spectre_v2=retpoline rd.lvm.lv=centos/root rd.lvm.lv=centos/swap rhgb quiet LANG=zh_CN.UTF-8

有輸出即正常
驗(yàn)證VT-D是否啟用
dmesg |grep -e DMAR -e IOMMU


ps:如果沒有的開啟的解決辦法

http://www.itdecent.cn/p/035287ba9acb

2.6.2禁用服務(wù)器上的RTX2080顯卡驅(qū)動(dòng)

#查看NVIDIA顯卡設(shè)備
[root@localhost ~]# lspci -nnk | grep -i nvidia
86:00.0 VGA compatible controller [0300]: NVIDIA Corporation TU104 [GeForce RTX 2080 SUPER] [10de:1e81] (rev a1)
        Subsystem: NVIDIA Corporation Device [10de:13a0]
86:00.1 Audio device [0403]: NVIDIA Corporation TU104 HD Audio Controller [10de:10f8] (rev a1)
        Subsystem: NVIDIA Corporation Device [10de:13a0]
86:00.2 USB controller [0c03]: NVIDIA Corporation TU104 USB 3.1 Host Controller [10de:1ad8] (rev a1)
        Subsystem: NVIDIA Corporation Device [10de:13a0]
86:00.3 Serial bus controller [0c80]: NVIDIA Corporation TU104 USB Type-C UCSI Controller [10de:1ad9] (rev a1)
        Subsystem: NVIDIA Corporation Device [10de:13a0]
#根據(jù)上面顯示的顯卡設(shè)備編號(hào),查看顯卡驅(qū)動(dòng)
lspci -vv -s 86:00.0 | grep driver
lspci -vv -s 86:00.1 | grep driver
lspci -vv -s 86:00.2 | grep driver
lspci -vv -s 86:00.3 | grep driver
#顯示有3個(gè)驅(qū)動(dòng)nouveau,snd_hda_intel,xhci_hcd

在服務(wù)器主機(jī)上禁用顯卡設(shè)備
vi /etc/modprobe.d/blacklist.conf
添加

blacklist nouveau
blacklist snd_hda_intel
blacklist xhci_hcd

vim /usr/lib/modprobe.d/dist-blacklist.conf
加上一行options nouveau modeset=0


PS:其他情況可能還需要去掉禁用另外一張顯卡,我這里沒有去掉

備份原來的 initramfs nouveau image鏡像
mv /boot/initramfs-$(uname -r).img /boot/initramfs-$(uname -r)-nouveau.img

創(chuàng)建新的 initramfs image鏡像
dracut /boot/initramfs-$(uname -r).img $(uname -r)

2.6.3顯卡加載vfio驅(qū)動(dòng)
加載vfio模塊

modprobe vfio
modprobe vfio-pci

從服務(wù)器卸載4個(gè)顯卡設(shè)備

virsh nodedev-detach pci_0000_86_00_0
virsh nodedev-detach pci_0000_86_00_1
virsh nodedev-detach pci_0000_86_00_2
virsh nodedev-detach pci_0000_86_00_3

驗(yàn)證顯卡設(shè)備是否加載vfio-pci驅(qū)動(dòng),加載成功

[root@localhost ~]# lspci -vv -s 86:00.0 | grep driver
        Kernel driver in use: vfio-pci
[root@localhost ~]# lspci -vv -s 86:00.1 | grep driver
        Kernel driver in use: vfio-pci
[root@localhost ~]# lspci -vv -s 86:00.2 | grep driver
        Kernel driver in use: vfio-pci
[root@localhost ~]# lspci -vv -s 86:00.3 | grep driver
        Kernel driver in use: vfio-pci

2.6.4 win10虛擬機(jī)添加NVDIA顯卡



同時(shí)可以添加服務(wù)器的USB設(shè)備直通
ps:需要另外配置下,參考鏈接

https://www.it610.com/article/1297569124670578688.htm

添加后,關(guān)機(jī)重啟


三、顯卡驅(qū)動(dòng)安裝

要安裝顯卡驅(qū)動(dòng),需要修改虛擬機(jī)win10的配置文件
否則顯卡驅(qū)動(dòng)安裝過程中自檢會(huì)報(bào)錯(cuò)ERROR CODE 43,驅(qū)動(dòng)不允許安裝在虛擬機(jī)上。

#編輯VM XML
virsh edit win 10

#修改第一行
<domain type='kvm'>
#為
<domain type='kvm' xmlns:qemu='http://libvirt.org/schemas/domain/qemu/1.0'>

#找到<features>節(jié)點(diǎn),添加內(nèi)容
<features>
... 
  <kvm>
    <hidden state='on'/>
  </kvm>
...
</features>

#找到</device>節(jié)點(diǎn),在device后添加內(nèi)容
<qemu:commandline>
  <qemu:arg value='-cpu'/>
  <qemu:arg value='host,hv_time,kvm=off,hv_vendor_id=null'/>
</qemu:commandline>

#重啟VM
virsh destroy win10
virsh start win10

重啟即可安裝驅(qū)動(dòng)




AID64測(cè)試


最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容