Tips:默认已安装好OpenStack相关必要组件并可以正常运行的情况下,本文只涉及GPU 虚拟化的相关配置说明。
一 配置GPU Passthrough的系统相关设置
在BIOS中enable VT-x, VT-d, Onboard VGA. Onboard VGA 的enable可以避免一些错误的出现,具体参考Not only for miners GPU integration in Nova environment.
编辑文件 /etc/modules, 添加以下内容:
pci_stub
vfio
vfio_iommu_type1
vfio_pci
kvm
kvm_intel
对于Intel芯片:
GRUB_CMDLINE_LINUX_DEFAULT=“intel_iommu=on”
对于AMD芯片:
GRUB_CMDLINE_LINUX_DEFAULT=“iommu=pt iommu=1”
update-grub
blacklist snd_hda_intel
blacklist amd76x_edac
blacklist vga16fb
blacklist nouveau
blacklist rivafb
blacklist nvidiafb
blacklist rivatv
root@computer1:~# lspci -nn | grep NVIDIA
04:00.0 VGA compatible controller [0300]: NVIDIA Corporation Device [10de:1b06] (rev a1)
04:00.1 Audio device [0403]: NVIDIA Corporation Device [10de:10ef] (rev a1)
05:00.0 VGA compatible controller [0300]: NVIDIA Corporation Device [10de:1b06] (rev a1)
05:00.1 Audio device [0403]: NVIDIA Corporation Device [10de:10ef] (rev a1)
相关参数解释参考OpenStack 企业私有云的若干需求(1):Nova 虚机支持 GPU
options vfio-pci ids=10de:1b06,10de:10ef
update-initramfs -u
重启服务器
验证:
root@computer1:~$ lspci -nnk -d 10de:1b06
04:00.0 VGA compatible controller [0300]: NVIDIA Corporation Device [10de:1b06] (rev a1)
Subsystem: Micro-Star International Co., Ltd. [MSI] Device [1462:3609]
Kernel driver in use: vfio-pci
Kernel modules: nvidiafb, nouveau
05:00.0 VGA compatible controller [0300]: NVIDIA Corporation Device [10de:1b06] (rev a1)
Subsystem: Micro-Star International Co., Ltd. [MSI] Device [1462:3609]
Kernel driver in use: vfio-pci
Kernel modules: nvidiafb, nouveau
显示结果中"Kernel driver in use: vfio-pci"说明已经配置成功,接下来是OpenStack的配置过程。
如果经过以上步骤设备仍然被占用,可以根据文后参考资料中的最后两篇文章解绑设备。
二 OpenStack的相关配置
[DEFAULT]
scheduler_default_filters = RetryFilter, AvailabilityZoneFilter, RamFilter, ComputeFilter, ComputeCapabilitiesFilter, ImagePropertiesFilter, ServerGroupAntiAffinityFilter, ServerGroupAffinityFilter, PciPassthroughFilter
scheduler_available_filters = nova.scheduler.filters.all_filters
重启nova-scheduler服务
[pci]
alias = { “name”: “nvidia1080”, “product_id”: “1b06”, “vendor_id”: “10de”, “device_type”: “type-PCI” }
重启nova-api服务
[pci]
passthrough_whitelist = { “vendor_id”: “10de”, “product_id”: “1b06” }
alias = {
“name”: “nvidia1080”,
“product_id”: “1b06”,
“vendor_id”: “10de”,
“device_type”: “type-PCI”
}
重启nova-compute服务
三 验证
openstack flavor create --public --ram 2048 --disk 20 --vcpus 2 m1.large
openstack flavor set m1.large --property pci_passthrough:alias=‘nvidia1080:2’
nvidia1080 即为alias中的那么, 2为GPU的数量。
openstack server create --flavor m1.large --image cirros-0.3.5-x86_64-uec --wait test-pci
$ lspci -k
…
00:05.0 Class 0300: 10de:1b06
00:06.0 Class 0300: 10de:1b06
…
四 NVIDIA显卡的问题
因为NIVIDIA显卡的驱动会检测是否跑在虚拟机里,如果在虚拟机里驱动就会出错,所以我们需要对显卡驱动隐藏hypervisor id。在OpenStack的Pile版本中的Glance 镜像引入了img_hide_hypervisor_id=true的property,所以可以对镜像执行如下的命令隐藏hupervisor id:
$ openstack image set IMG-UUID --property img_hide_hypervisor_id=true
通过此镜像安装的instance就会隐藏hypervisor id。
如果是Pike之前的版本, 可以参考Consumer-grade GPUs in an OpenStack system (NVIDIA GPUs)这篇文章的做法。
可以通过下边的命令查看hypervisor id是否隐藏:
$ cpuid | grep hypervisor_id
hypervisor_id = "KVMKVMKVM "
hypervisor_id = "KVMKVMKVM "
上边的显示结果说明没有隐藏,下边的显示结果说明已经隐藏:
作者:hhzzk
来源:CSDN
原文:https://blog.csdn.net/wangjinruifly/article/details/79620075
版权声明:本文为博主原创文章,转载请附上博文链接!