目录
7、搭建NVIDIA License Server(linux)
一、什么是vGPU?
vGPU,即虚拟GPU,是基于GPU的虚拟化技术,提供了在云服务器上搭载虚拟GPU的能力。
通过GPU虚拟化,多个虚机可以共享使用同一个物理GPU,可以降低成本、提升可扩展性。
二、为什么需要vGPU?
1、价格低
对用户来说,物理GPU价格偏高,针对GPU使用率不高的应用场景,选择vGPU更合适。
2、提高利用率
在云计算应用场景下,虚拟机需要使用vGPU实现VDI、循环计算等应用,出于成本考虑,一般不会让每个虚机都分配一个GPU硬件,此时就需要对GPU卡进行分片,即vGPU在hypervisor层实现GPU的虚拟化
3、应用场景灵活
vGPU可以针对不同类型的物理GPU卡,划分不同类型的粒度切割,根据应用场景选择不同类型不同粒度的vGPU卡,例如Tesla-T4、Tesla-V100分别适用于不同的场景。
三、架构及原理
四、Libvirt创建vGPU虚机
1、物理环境准备,服务器接入pGPU物理卡
BIOS开启vt-d(Internel I/O虚拟化技术);
配置raid,部署计算节点iso(基于CentOS7)
2、升级最新kernel、libvirt、qemu
1)systemd禁用ksm、ksmtuned
KSM(Kernel Samepage Merging)内核中的一种内存共享机制,2.6.32引入,允许系统通过合并相同内存页面,减少冗余。
2)kernel开启iommu
修改 /etc/default/grub, 在"GRUB_CMDLINE_LINUX ”选项中添加"intel_iommu=on iommu=pt"
重启服务器后,/sys/kernel/iommu_groups/目录不为空
3)reload driver
修改 /etc/default/grub , 在"GRUB_CMDLINE_LINUX ”选项的末尾添加“rdloaddriver=mlx5_core rdloaddriver=i40e rdloaddriver=ixgbe”
4)重新生成grub.cfg
grub2-mkconfig -o /boot/grub2/grub.cfg
5)设置内存大页
6)vfio相关驱动加载
在/etc/rc.local中初始化加载相关模块,或者直接执行以下命令生效:
modprobe vfio_pci
modprobe vfio_mdev
扩展:
mdev.ko是mdev core模块,包括了mdev的绝大多数核心功能。该模块在Device Model中定义了一种新的Bus即mdev总线,而vfio_mdev.ko则是定义了mdev总线上的一种Driver,用来实现和VFIO的对接,换句话说就是起到和vfio-pci驱动相同的作用。
7)重启使内核生效
验证是否生效的方法(现象顺序依赖):
物理机识别NVIDIA设备;
vifo设备正常加载;
iommu_groups目录不为空;
virsh命令可看到mdev设备
[root@compute-gpu vgpufile]# lspci | grep 3D
3d:00.0 3D controller: NVIDIA Corporation Device 1eb8 (rev a1)
3e:00.0 3D controller: NVIDIA Corporation Device 1eb8 (rev a1)
40:00.0 3D controller: NVIDIA Corporation Device 1eb8 (rev a1)
41:00.0 3D controller: NVIDIA Corporation Device 1eb8 (rev a1)
b1:00.0 3D controller: NVIDIA Corporation Device 1eb8 (rev a1)
b2:00.0 3D controller: NVIDIA Corporation Device 1eb8 (rev a1)
b4:00.0 3D controller: NVIDIA Corporation Device 1eb8 (rev a1)
b5:00.0 3D controller: NVIDIA Corporation Devic