`

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

阅读更多

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)

 

           

(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

 

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

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

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

pci_stub

vfio

vfio_iommu_type1

vfio_pci

kvm

kvm_intel

 

(4)更新grub.cfg文件

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

 

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

 

 

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

 

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

 

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

 

 

 

(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 )

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

 

(9)查看pci设备信息

        使用命令:lspci -nn | grep NVIDIA

        如果不是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

        没有输出说明没有驱动.

       如果有输出信息如下:

       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/*

        执行命令进行绑定:

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

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

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

如果出现 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

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

available_filters=nova.scheduler.filters.all_filters

available_filters=nova.scheduler.filters.pci_passthrough_filter.PciPassthroughFilter

      [DEFAULT]修改此处

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

 

(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"} 

 

(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"}

 

(6)重启nova-compute服务

    执行命令:sudo service nova-compute restart

 

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

4.1  方法及步骤:

(1)创建主机聚合

 

(2) 创建Flavor 添加属性

 

(3) 创建云服务器

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

 

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

     执行命令:lspci -nn | grep NVIDIA

 

 

 

 

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics