nvidia gpu直通kvm虚机配置
1. 确认服务器中是否安装了gpu显卡,执行lspci -nn | grep -i nvidia,显示如下内容,说明存在GPU,如果没有lspci命令,执行yum install -y sysstat3b:00.0 3D controller [0302]: NVIDIA Corporation GV100GL [Tesla V100 PCIe 16GB] [10de:1db4] (rev a1)
1. 确认服务器中是否安装了gpu显卡,
执行lspci -nn | grep -i nvidia,显示如下内容,说明存在GPU,如果没有lspci命令,执行yum install -y sysstat
3b:00.0 3D controller [0302]: NVIDIA Corporation GV100GL [Tesla V100 PCIe 16GB] [10de:1db4] (rev a1)
86:00.0 3D controller [0302]: NVIDIA Corporation GV100GL [Tesla V100 PCIe 16GB] [10de:1db4] (rev a1)
2. 修改/etc/default/grub文件
向GRUB_CMDLINE_LINUX加入"intel_iommu=on modprobe.blacklist=nouveau",例如:
$ vi /etc/default/grub
# line 6: add (if AMD CPU, add [amd_iommu=on])
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="rd.lvm.lv=centos/root rd.lvm.lv=centos/swap rhgb quiet intel_iommu=on modprobe.blacklist=nouveau"
GRUB_DISABLE_RECOVERY="true"
之后执行:
grub2-mkconfig -o /boot/grub2/grub.cfg
对应efi模式引导的则执行:
grub2-mkconfig -o /boot/efi/EFI/centos/grub.cfg
再执行reboot重启服务器,重启后执行
dmesg | grep -E "DMAR|IOMMU"
dmesg | grep -i nouveau
检查IOMMU是否生效,nouveau是否已被禁用
3. 配置VFIO
格式为:echo "options vfio-pci ids=vendor-ID:device-ID" > /etc/modprobe.d/vfio.conf
本例子中,执行:
echo "options vfio-pci ids=10de:1db4" > /etc/modprobe.d/vfio.conf
echo 'vfio-pci' > /etc/modules-load.d/vfio-pci.conf
游戏显卡所属的设备较多,需要将一块卡所属的其他设备一起配置vfio
之后,执行reboot重启服务,重启后,执行
$ lspci -nnk -d 10de:
3b:00.0 3D controller [0302]: NVIDIA Corporation GV100GL [Tesla V100 PCIe 16GB] [10de:1db4] (rev a1)
Subsystem: NVIDIA Corporation Device [10de:1306]
Kernel driver in use: vfio-pci
Kernel modules: nouveau
出现:Kernel driver in use: vfio-pci说明配置正确
4. 注意:如果已经安装nvidia的驱动
需要解除绑定,相当比较麻烦,我这里直接卸载nvidia的驱动了事,执行命令为:
nvidia-uninstall
yum remove `rpm -qa|grep -i nvidia` -y
yum remove `rpm -qa|grep -i cuda` -y
如果不能卸载驱动,可以参考
5. 安装kvm、qemu
yum install -y qemu-kvm qemu-key-tools virt-manager libvirt virt-install python-virtinst bridge-utils
wget http://mirror.centos.org/centos/7/extras/x86_64/Packages/centos-release-virt-common-1-1.el7.centos.noarch.rpm
wget http://mirror.centos.org/centos/7/extras/x86_64/Packages/centos-release-qemu-ev-1.0-4.el7.centos.noarch.rpm
rpm -ivh centos-release-virt-common-1-1.el7.centos.noarch.rpm centos-release-qemu-ev-1.0-4.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
6. 安装OVMF
#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配置
vim /etc/libvirt/qemu.conf
nvram = [
"/usr/share/OVMF/OVMF_CODE.secboot.fd:/usr/share/OVMF/OVMF_VARS.fd",
]
#重启libvirtd服务
service libvirtd restart
7. 创建网桥
如果创建虚拟机过程中遇到报错:Cannot get interface MTU on 'br0': No such device,说明br0的网桥没有创建,执行如下命令:
virsh iface-bridge eth0 br0
8. 创建虚拟机
注意:--host-device 3b:00.0中, 3b:00.0是从lspci -nn|grep -i nvidia中获得的gpu设备地址
virt-install --name=cpu_test --boot uefi --machine q35 --virt-type=kvm --hvm --ram=8196 --vcpus=4 --network bridge=br0,model=virtio --graphics vnc,port=5916 --disk path=/data/var/kvm/images/centos7.img,size=60 --os-type=linux --cdrom=/home/CentOS-7-x86_64-DVD-1810.iso --host-device 3b:00.0 --debug
虚拟机安装完成后,进入其界面执行lspci -nn|grep -i nvidia,显示出结果,说明直通kvm虚拟机创建成功
9. ERROR CODE 43
#编辑VM XML
virsh edit win
#修改第一行
<domain type='kvm'>
#为
<domain type='kvm' xmlns:qemu='http://libvirt.org/schemas/domain/qemu/1.0'>
#找到<features>节点,添加内容
<features>
...
<kvm>
<hidden state='on'/>
</kvm>
...
</features>
#找到</device>节点,在device后添加内容
<qemu:commandline>
<qemu:arg value='-cpu'/>
<qemu:arg value='host,hv_time,kvm=off,hv_vendor_id=null'/>
</qemu:commandline>
#重启VM
virsh destroy win
virsh start win
参考:https://www.jianshu.com/p/8074abc26b88
https://www.server-world.info/en/note?os=CentOS_7&p=kvm&f=10
https://wiki.archlinux.org/index.php/PCI_passthrough_via_OVMF_(%E7%AE%80%E4%BD%93%E4%B8%AD%E6%96%87)
更多推荐



所有评论(0)