欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

01.GPU云服务器直通方式实现

程序员文章站 2022-05-31 16:04:11
...

1、  设备环境

1.1  硬件环境:

  • • NF5280M5   4路服务器

    • NVIDIA Tesla V100

1.2软件环境:

  • • Ubuntu 16.04.5 LTS (GNU/Linux 4.15.0-36-generic x86_64)

    • Openstack Queens版本

2、   配置操作系统

2.1  方法及步骤:

(1)BIOS中打开硬件辅助虚拟化功能

         VT(VT-x)及VT-d支持,需要将相关支持设置为enable,默认开启

        路径:Processor—IIO Configuration—Intel@ VT for Directed I/O(VT-d)

 01.GPU云服务器直通方式实现
            
    
    博客分类: GPU服务器 GPUopenstackpassthoughNVIDIAV100 

           

(2)配置intel_iommu=on

        执行命令:sudo vi /etc/default/grub

        在GRUB_CMDLINE_LINUX_DEFAULT字段添加 intel_iommu=on iommu=pt rd.driver.pre=vfio-pci

        在GRUB_CMDLINE_LINUX字段添加 intel_iommu=on iommu=pt rd.driver.pre=vfio-pci

01.GPU云服务器直通方式实现
            
    
    博客分类: GPU服务器 GPUopenstackpassthoughNVIDIAV100 

 

(3)修改内核模块文件/etc/modules

       修改内核模块文件/etc/modules,里面列出的模块会在系统启动时自动加载。

       执行命令:vi  /etc/modules
       添加以下内容:

pci_stub

vfio

vfio_iommu_type1

vfio_pci

kvm

kvm_intel

01.GPU云服务器直通方式实现
            
    
    博客分类: GPU服务器 GPUopenstackpassthoughNVIDIAV100 

 

(4)更新grub.cfg文件

        执行命令:sudo update-grub 或使用sudo grub-mkconfig -o /boot/grub/grub.cfg

01.GPU云服务器直通方式实现
            
    
    博客分类: GPU服务器 GPUopenstackpassthoughNVIDIAV100 

 

(5)重启操作系统开启 Intel_iommu=on

 

 

(6)检查VT-d(AMD芯片时是 IOV)是否工作

 

       执行命令:dmesg | grep IOMMU 或 dmesg | grep -e DMAR -e IOMMU 检查VT-d(AMD芯片时是 IOV)是否工作。若没有相应输出(IOMMU  enabled 必须有),需要重新检查之前的步骤。

01.GPU云服务器直通方式实现
            
    
    博客分类: GPU服务器 GPUopenstackpassthoughNVIDIAV100 

 

7)添加黑名单

       添加黑名单,使卡不被占用。

 

       执行命令:sudo vim /etc/modprobe.d/blacklist.conf  

 

       最后添加内容:

 

#NVIDIA config

 

blacklist snd_hda_intel

 

blacklist amd76x_edac

 

blacklist vga16fb

 

blacklist nouveau

 

blacklist rivafb

 

blacklist nvidiafb

 

blacklist rivatv

 

 01.GPU云服务器直通方式实现
            
    
    博客分类: GPU服务器 GPUopenstackpassthoughNVIDIAV100 

 

(8)设置vfio并隔离用于直通的GPU

        在/etc/modprobe.d下添加文件vfio.conf

        执行命令:

        cd /etc/modprobe.d

       touch vfio.conf (创建文档)(如果出现touch: cannot touch 'vfio.conf': Permission denied 先执行sudo chmod -R 777 /etc/modprobe.d )

01.GPU云服务器直通方式实现
            
    
    博客分类: GPU服务器 GPUopenstackpassthoughNVIDIAV100 

        文档内写入内容:options vfio-pci ids=10de:1db6  (其中10de:1db6由9得来)

01.GPU云服务器直通方式实现
            
    
    博客分类: GPU服务器 GPUopenstackpassthoughNVIDIAV100 

 

(9)查看pci设备信息

        使用命令:lspci -nn | grep NVIDIA

01.GPU云服务器直通方式实现
            
    
    博客分类: GPU服务器 GPUopenstackpassthoughNVIDIAV100 

        如果不是NVIDIA的显卡,可以换自己显卡的关键字查询。重查询结果上注意查看自己独立显卡(也就是要直通的显卡)的设备ID和地址,形如: [10de 1b80] 和 [10de 10f0], 01.00.0和01.00.1。(Gefore显卡一般会集成一个声卡芯片)

        其中GPU设备各值含义:

             3b:00.0 和 86:00.0   以 ”bus:slot.func“ 格式来唯一标识一个 PCI 设备

             0302     设备模式     0300: Graphics -- 代表为图形模式 0302:Compute -- 则表明为计算模式

            10de    厂商识别字段(Vendor ID),10de代表此设备来自NVIDIA公司

            1db6   标明特定的设备,由厂商来分配

            a1     设备的版本识别代码,其值由厂商提供

 

(10)查看pci设备驱动

         执行命令:lspci -vv -s 3b:00.0 | grep driver

01.GPU云服务器直通方式实现
            
    
    博客分类: GPU服务器 GPUopenstackpassthoughNVIDIAV100 

        没有输出说明没有驱动.

       如果有输出信息如下:

       lspci -vv -s 3b:00.0 | grep driver

       >Kernel driver in use: nouveau    (ubuntu系统为显卡绑定的默认驱动)

       lspci -vv -s 01:00.1 | grep driver

     >Kernel driver in user: snd_hda_intel (显卡上附带的集成声卡的默认驱动)

 

(11)将PCI设备相关驱动解绑

        如果(10)中出现执行后有输出,需进行设备解绑

执行命令:(每个卡都要解绑)

     echo 0000: 3b:00.0 > /sys/bus/pci/devices/0000\:3b\:00.0/driver/unbind
     echo 0000:01:00.1 > /sys/bus/pci/devices/0000\:01\:00.1/driver/unbind

 

(12)将PCI设备绑定到VFIO

       引入VFIO 用户态驱动框架,向用户提供配置IOMMU接口,实现PCI设备在虚拟化场景透传。

       解绑设备 (命令执行上面11),并绑定到VFIO:

      加载VFIO执行命令:

          sudo modprobe vfio

          sudo modprobe vfio-pci

       执行完重启系统,重新启动主机并检查GPU是否在不同的IOMMU组中隔离,以及

      正在使用vfio驱动程序.

       执行命令检查GPU是否在不同的IOMMU组中隔离:

            find /sys/kernel/iommu_groups/*/devices/*

01.GPU云服务器直通方式实现
            
    
    博客分类: GPU服务器 GPUopenstackpassthoughNVIDIAV100 

        执行命令进行绑定:

           echo 10de 1db6 > /sys/bus/pci/drivers/vfio-pci/new_id

01.GPU云服务器直通方式实现
            
    
    博客分类: GPU服务器 GPUopenstackpassthoughNVIDIAV100 

       查看驱动是否绑定(每个卡都要看一下),执行命令:

           lspci -vv -s 3b:00.0 | grep driver

01.GPU云服务器直通方式实现
            
    
    博客分类: GPU服务器 GPUopenstackpassthoughNVIDIAV100 

如果出现 Kernel driver in use : vfio-pci 说明绑定成功。

 

3、      配置openstack

3.1  方法及步骤:

(1)配置nova-scheduler (controller节点),编辑文件 /etc/nova/nova.conf

            [scheduler]  没有修改,用的默认

              scheduler_driver=nova.scheduler.filter_scheduler.FilterScheduler

01.GPU云服务器直通方式实现
            
    
    博客分类: GPU服务器 GPUopenstackpassthoughNVIDIAV100 

        [filter_scheduler] 默认有,此处没有修改

available_filters=nova.scheduler.filters.all_filters

available_filters=nova.scheduler.filters.pci_passthrough_filter.PciPassthroughFilter

01.GPU云服务器直通方式实现
            
    
    博客分类: GPU服务器 GPUopenstackpassthoughNVIDIAV100 

      [DEFAULT]修改此处

scheduler_default_filters=RamFilter,ComputeFilter,AvailabilityZoneFilter,ComputeCapabilitiesFilter,ImagePropertiesFilter,PciPassthroughFilter

01.GPU云服务器直通方式实现
            
    
    博客分类: GPU服务器 GPUopenstackpassthoughNVIDIAV100 

 

(2)重启nova-scheduler 服务

        执行命令:sudo service nova-scheduler restart

 

(3)配置nova-api (controller节点),编辑文件 /etc/nova/nova.conf:  

        [PCI]  添加内容

alias = {"name":"nvidia_v100","product_id":"1db6","vendor_id":"10de","device_type":"type-PCI"} 

01.GPU云服务器直通方式实现
            
    
    博客分类: GPU服务器 GPUopenstackpassthoughNVIDIAV100 

 

(4)重启nova-api服务

        执行命令:sudo service nova-api restart

 

(5)配置nova-compute(compute 节点),编辑文件/etc/nova/nova.conf:

        [PCI] 添加内容

 passthrough_whitelist = { "vendor_id":"10de","product_id":"1db6" }   

alias = {"name":"nvidia_v100","product_id":"1db6","vendor_id":"10de","device_type":"type-PCI"}

01.GPU云服务器直通方式实现
            
    
    博客分类: GPU服务器 GPUopenstackpassthoughNVIDIAV100 

 

(6)重启nova-compute服务

    执行命令:sudo service nova-compute restart

 

4、     创建GPU服务器验证绑定

4.1  方法及步骤:

(1)创建主机聚合

01.GPU云服务器直通方式实现
            
    
    博客分类: GPU服务器 GPUopenstackpassthoughNVIDIAV100 

 

(2) 创建Flavor 添加属性

01.GPU云服务器直通方式实现
            
    
    博客分类: GPU服务器 GPUopenstackpassthoughNVIDIAV100 

 

(3) 创建云服务器

  执行命令: openstack server create --network vlan-161 --image ecs-ubuntu1604-x64-20181220 --flavor 513dfb0c-132b-4fb9-903a-ffd131cce6d7 test-gpu-1

01.GPU云服务器直通方式实现
            
    
    博客分类: GPU服务器 GPUopenstackpassthoughNVIDIAV100 

 

(4)进入创建的GPU服务器验证挂载

     执行命令:lspci -nn | grep NVIDIA

01.GPU云服务器直通方式实现
            
    
    博客分类: GPU服务器 GPUopenstackpassthoughNVIDIAV100