一、硬件条件

首先要确定主板和CPU都支持虚拟化技术,在BIOS将VT-d、VT-x设置成enable。

以Intel为例:

VT:  Intel Virtualization Technology

VT-d:  Intel VT for Directed I/O

 

双显卡支持,一块主机用,另一块虚拟机用(一块集显,一块独立理论可以,未测试)。

二、检查支持选项

a、确认内核是否支持iommu

cat /proc/cmdline | grep iommu有输出则正常

如果没有输出,将intel_iommu=on添加到grub启动文件当中

编辑grub文件 :vim /etc/default/grub

kvm显卡透传(centos)_kvm

更新grub文件:grub2-mkconfig -o /boot/grub2/grub.cfg

 

b、确认VT-D是否正常

dmesg | grep -e DMAR -e IOMMU有箭头标的输出则正常

kvm显卡透传(centos)_虚拟化_02

 

c、测试是否支持虚拟化(VT)

egrep -o '(vmx|svm)' /proc/cpuinfo查看是否有输出,有输出则正常。

三、禁用虚拟机使用的显卡驱动

lspci命令查看显卡有两组设备,每组两个,一个显卡一个声卡。两个显卡分别是A卡Radeon RX550和N卡GeForece GT 705。

kvm显卡透传(centos)_centos_03

禁用虚拟机要使用的显卡驱动,计划禁用N卡驱动,然后划给虚拟机使用。

查看显卡GeForece GT 705使用的驱动:

lspci -vv -s 07:00.0 | grep driver   可以看到GT705显卡驱动为nouveau,禁用此显卡。查看显卡所带声卡使用的驱动

lspci -vv -s 07:00.1 | grep driver    可以看到声卡驱动为snd_hda_intel,禁用此声卡驱动。编辑blacklist.conf文件,将上面两个驱动放入此文件。

 

vim /etc/modprobe.d/blacklist.conf

kvm显卡透传(centos)_经验分享_04

vim /usr/lib/modprobe.d/dist-blacklist.conf

去掉禁用blacklist radeonfb

加上一行options nouveau modeset=0

 

备份原来的 initramfs nouveau image镜像

mv /boot/initramfs-$(uname -r).img /boot/initramfs-$(uname -r)-nouveau.img  

 

创建新的 initramfs image镜像

dracut /boot/initramfs-$(uname -r).img $(uname -r)  

四、显卡加载vfio驱动

a、加载vfio模块

modprobe vfio

modprobe vfio-pci

b、从主机卸载两个N卡

virsh nodedev-detach pci_0000_07_00_0

virsh nodedev-detach pci_0000_07_00_1

lspci -vv -s 07:00.0 | grep driver  查看是否加载vfio

lspci -vv -s 07:00.1 | grep driver  查看是否加载vfio

kvm显卡透传(centos)_centos_05

五、安装ovmf

1、配置firmware的yum源

wget http://www.kraxel.org/repos/firmware.repo -O /etc/yum.repos.d/firmware.repo

2、安装ovmf

yum install edk2.git-ovmf-x64

3、配置 libvirtd以启用UEFI

vim /etc/libvirt/qemu.conf

kvm显卡透传(centos)_虚拟化_06

确认好ovmf安装路径。文件OVMF_CODE-pure-efi.fd和OVMF_VARS-pure-efi.fd是否存在

4、重启libvirtd

systemctl restart libvirtd

六、安装win10系统

见之前博客https://blog.csdn.net/hutiewei2008/article/details/85986652

安装之后使用virt-manager,添加要透传的显卡。或者修改配置文件,或者命令。

七、编译配置跳过显卡驱动校验

解决Windows中安装完显卡驱动显示驱动异常43的问题。

virsh edit win10-3

os标签中添加

<loader readonly='yes' type='pflash'>/usr/share/edk2.git/ovmf-x64/OVMF_CODE-pure-efi.fd</loader>

<nvram template='/usr/share/edk2.git/ovmf-x64/OVMF_VARS-pure-efi.fd'>/var/lib/libvirt/qemu/nvram/win10_VARS.fd</nvram>

features标签中添加

hyperv 标签中<vendor_id state='on' value='0123456789ab'/>

<kvm>

      <hidden state='on'/>

</kvm>

kvm显卡透传(centos)_kvm_07