searchusermenu
  • 发布文章
  • 消息中心
点赞
收藏
评论
分享
原创

显卡SR-IOV技术介绍

2023-03-28 11:29:56
467
0

1. 简介

SR-IOV,即单根虚拟化。Intel在早期为了支持虚拟化环境,在CPU和PCI总线上提供了三层虚拟化技术,分别是:

  • 基于CPU的虚拟化技术VT-x。Intel VT-x可以让一个CPU工作起来像多个CPU在并行运行,从而使得在一台物理服务器内可以同时运行多个虚拟机,能够降低多个虚拟机之间的资源争夺和限制,在硬件上极大的改善虚拟机的性能和安全。
  • 基于PCI总线实现的IO虚拟化技术VT-d。Intel VT-d是一种基于北桥芯片的硬件辅助虚拟化技术,通过再北桥中内置DMA虚拟化和IRQ虚拟化硬件,实现了新型的IO虚拟化方式,Intel VT-d能够在虚拟环境中大大提升I/O的性能。
  • 基于网络的虚拟化技术VT-c。

SR-IOV技术,属于VT-d虚拟化的一个分支,要实现SR-IOV功能,需要硬件支持SR-IOV,主板BIOS中开启VT-d和PCIe SR-IOV技术。SR-IOV标准将一个PCIe控制器虚拟化成多个PCIe设备,并且每个设备可以直接分配给一个虚拟机,允许在虚拟机之间高效共享PCIe设备,并且它是在硬件中实现的,可以获得能够与本机性能媲美的I/O性能。

SR-IOV分两种功能(function),物理功能(Physical Function,PF)和虚拟功能(virtual Function,VF)。PF包含完整的PCIe功能,包括SR-IOV的扩张能力,该功能用于SR-IOV的配置和管理,PF能像普通PCI设备那样被发现、管理和配置。VF包含轻量级的PCIe功能,它只能处理I/O,包含数据移动所需要的最小必要资源。每个VF都是从PF中分离出来的,每个物理硬件都有一个VF数据的限制,一个PF,能被虚拟成多个VF用于分配给多个虚拟机。一旦在PF中启用了SR-IOV,就可以通过PF的总线、设备和功能编号访问各个VF的PCI配置空间。每个VF都具有一个PCI内存空间用于映射器寄存器集,VF设备驱动程序对寄存器进行操作以启用其功能,并且显示为实际存在的PCI设备。

2. GPU SR-IOV技术

在云计算领域,SR-IOV在网络I/O虚拟化这一方面用的比较多,该技术通过将SR-IOV功能集成到物理网卡上,将单一的物理网卡虚拟成多个VF接口,每个VF接口都有单独的虚拟PCIe通道,这些虚机的PCIe通道共用物理网卡的PCIe通道。每个虚拟机可以占用一个或多个VF接口,这样虚拟机就可以直接访问自己的VF接口,而不需要Hypervisor的协调干预,从而大幅度提升网络吞吐性能。

随着应用场景从单一依赖CPU的计算单元拓展到多种体系架构,异构计算场景的应用对GPU、FPGA等专业计算芯片提出虚拟化和上云的强烈要求。2016年,AMD公司发布了全球首款支持SR-IOV虚拟化的专业显卡FirePro S7150,之后AMD公司又发布了MI25显卡,目前市场上能支持SR-IOV虚拟化的GPU显卡就这两款,S7150针对的是图像渲染的客户群体,而MI25针对的是机器学习、AI的用户群体。

 

GPU SR-IOV技术的本质也是把一个PCI卡资源(PF)拆分成多个小份(VF),这些VF依然是符合PCI规范的endpoint设备,每个VF都带有自己的Bus/Slot/Function号,IOMMU/VTD在收到这些VF的DMA请求的过程中,可以顺利查找IOMMU 2层翻译表实现GPA到HPA的地址转换,这一点和Intel 的GVT-g虚拟化技术、Nvidia的GRID

vGPU技术都有本质的区别。GVT-g和GRID vGPU并不依赖IOMMU,其分片虚拟化的方案是在宿主机端实现地址转换和安全检查。由于SR-IOV多了一层IOMMU的地址访问保护,在安全性上要优于GVT-g和GRID vGPU的。在性能上,SR-IOV要比GRID的mdev分片虚拟化损失更小,大概只有5%左右的损失。由于SR-IOV在性能上的优越性和其安全性,后续其他GPU厂商可能也会推出GPU SR-IOV的方案。在英伟达Tesla T4显卡中,其实已经能看到SR-IOV这个Capability,但由于Nvidia主推的GRID vGPU方案,厂家并不提供SR-IOV相关的技术支持。

3. 在KVM下实现SR-IOV虚拟化

AMD S7150是一款在kvm环境下支持GPU SR-IOV虚拟化的显卡,要实现这一功能,需要显卡厂家提供相关的内核驱动。

1、AMD提供的相关内核模块为gim,是开源的,可以在github直接下载,下载链接:https://github.com/GPUOpen-LibrariesAndSDKs/MxGPU-Virtualization,下载好后,通过make && make install编译安装,会在/etc目录下面生成gim_config配置文件,通过这个配置文件,可以设定将一个PF分成多少个VF,目前最大仅支持16个VF。

2、安装好上述内核驱动后,需要禁用系统默认的amd显卡驱动,在/usr/lib/modprobe.d/dist-blacklist.conf中,添加以下内容:

重启服务器,确认amd相关模块被禁用,执行下面命令无任何输出即可。

3、加载gim内核模块

通过运行modprobe命令,加载gim模块:

modprobe gim

如果正常的话,这个时候就可以看到生成的AMD虚拟显卡,每个虚拟显卡都有对应的PCI地址,这些虚拟显卡都可以当成普通的PCI设备分配给虚拟机使用。

4. GPU SR-IOV的调度策略

GPU SR-IOV也是一个分时复用的策略,GPU分时复用与CPU在进程间的分时复用是一样的概念。一个简单的调度就是把一个GPU的时间按照特定时间段分片,每个VM拿到特定的时间片。在这些时间片段中,这个VM享用GPU的硬件的全部资源。包括Nvidia的GRID vGPU方案、Intel 的GVT-g虚拟化方案在内,目前所有的GPU虚拟化方案都是采用了分时复用的方法。但不同的GPU虚拟化方案在时间片的切片中会采用不同的方法。有些方案会在一个GPU Context的当前BatchBuffer/CMDBuffer 执行结束之后启动调度,并把GPU交由下一个时间片的所有者。而有些方案则会严格要求在特定时间片结束的时候切换,强行打断当前GPU的执行,并交予下一个时间片的所有者。这种方式确保GPU资源被平均分摊到不同VM。AMD的GPU SRIOV采用的后一种方式。

0条评论
作者已关闭评论
向****达
1文章数
0粉丝数
向****达
1 文章 | 0 粉丝
向****达
1文章数
0粉丝数
向****达
1 文章 | 0 粉丝
原创

显卡SR-IOV技术介绍

2023-03-28 11:29:56
467
0

1. 简介

SR-IOV,即单根虚拟化。Intel在早期为了支持虚拟化环境,在CPU和PCI总线上提供了三层虚拟化技术,分别是:

  • 基于CPU的虚拟化技术VT-x。Intel VT-x可以让一个CPU工作起来像多个CPU在并行运行,从而使得在一台物理服务器内可以同时运行多个虚拟机,能够降低多个虚拟机之间的资源争夺和限制,在硬件上极大的改善虚拟机的性能和安全。
  • 基于PCI总线实现的IO虚拟化技术VT-d。Intel VT-d是一种基于北桥芯片的硬件辅助虚拟化技术,通过再北桥中内置DMA虚拟化和IRQ虚拟化硬件,实现了新型的IO虚拟化方式,Intel VT-d能够在虚拟环境中大大提升I/O的性能。
  • 基于网络的虚拟化技术VT-c。

SR-IOV技术,属于VT-d虚拟化的一个分支,要实现SR-IOV功能,需要硬件支持SR-IOV,主板BIOS中开启VT-d和PCIe SR-IOV技术。SR-IOV标准将一个PCIe控制器虚拟化成多个PCIe设备,并且每个设备可以直接分配给一个虚拟机,允许在虚拟机之间高效共享PCIe设备,并且它是在硬件中实现的,可以获得能够与本机性能媲美的I/O性能。

SR-IOV分两种功能(function),物理功能(Physical Function,PF)和虚拟功能(virtual Function,VF)。PF包含完整的PCIe功能,包括SR-IOV的扩张能力,该功能用于SR-IOV的配置和管理,PF能像普通PCI设备那样被发现、管理和配置。VF包含轻量级的PCIe功能,它只能处理I/O,包含数据移动所需要的最小必要资源。每个VF都是从PF中分离出来的,每个物理硬件都有一个VF数据的限制,一个PF,能被虚拟成多个VF用于分配给多个虚拟机。一旦在PF中启用了SR-IOV,就可以通过PF的总线、设备和功能编号访问各个VF的PCI配置空间。每个VF都具有一个PCI内存空间用于映射器寄存器集,VF设备驱动程序对寄存器进行操作以启用其功能,并且显示为实际存在的PCI设备。

2. GPU SR-IOV技术

在云计算领域,SR-IOV在网络I/O虚拟化这一方面用的比较多,该技术通过将SR-IOV功能集成到物理网卡上,将单一的物理网卡虚拟成多个VF接口,每个VF接口都有单独的虚拟PCIe通道,这些虚机的PCIe通道共用物理网卡的PCIe通道。每个虚拟机可以占用一个或多个VF接口,这样虚拟机就可以直接访问自己的VF接口,而不需要Hypervisor的协调干预,从而大幅度提升网络吞吐性能。

随着应用场景从单一依赖CPU的计算单元拓展到多种体系架构,异构计算场景的应用对GPU、FPGA等专业计算芯片提出虚拟化和上云的强烈要求。2016年,AMD公司发布了全球首款支持SR-IOV虚拟化的专业显卡FirePro S7150,之后AMD公司又发布了MI25显卡,目前市场上能支持SR-IOV虚拟化的GPU显卡就这两款,S7150针对的是图像渲染的客户群体,而MI25针对的是机器学习、AI的用户群体。

 

GPU SR-IOV技术的本质也是把一个PCI卡资源(PF)拆分成多个小份(VF),这些VF依然是符合PCI规范的endpoint设备,每个VF都带有自己的Bus/Slot/Function号,IOMMU/VTD在收到这些VF的DMA请求的过程中,可以顺利查找IOMMU 2层翻译表实现GPA到HPA的地址转换,这一点和Intel 的GVT-g虚拟化技术、Nvidia的GRID

vGPU技术都有本质的区别。GVT-g和GRID vGPU并不依赖IOMMU,其分片虚拟化的方案是在宿主机端实现地址转换和安全检查。由于SR-IOV多了一层IOMMU的地址访问保护,在安全性上要优于GVT-g和GRID vGPU的。在性能上,SR-IOV要比GRID的mdev分片虚拟化损失更小,大概只有5%左右的损失。由于SR-IOV在性能上的优越性和其安全性,后续其他GPU厂商可能也会推出GPU SR-IOV的方案。在英伟达Tesla T4显卡中,其实已经能看到SR-IOV这个Capability,但由于Nvidia主推的GRID vGPU方案,厂家并不提供SR-IOV相关的技术支持。

3. 在KVM下实现SR-IOV虚拟化

AMD S7150是一款在kvm环境下支持GPU SR-IOV虚拟化的显卡,要实现这一功能,需要显卡厂家提供相关的内核驱动。

1、AMD提供的相关内核模块为gim,是开源的,可以在github直接下载,下载链接:https://github.com/GPUOpen-LibrariesAndSDKs/MxGPU-Virtualization,下载好后,通过make && make install编译安装,会在/etc目录下面生成gim_config配置文件,通过这个配置文件,可以设定将一个PF分成多少个VF,目前最大仅支持16个VF。

2、安装好上述内核驱动后,需要禁用系统默认的amd显卡驱动,在/usr/lib/modprobe.d/dist-blacklist.conf中,添加以下内容:

重启服务器,确认amd相关模块被禁用,执行下面命令无任何输出即可。

3、加载gim内核模块

通过运行modprobe命令,加载gim模块:

modprobe gim

如果正常的话,这个时候就可以看到生成的AMD虚拟显卡,每个虚拟显卡都有对应的PCI地址,这些虚拟显卡都可以当成普通的PCI设备分配给虚拟机使用。

4. GPU SR-IOV的调度策略

GPU SR-IOV也是一个分时复用的策略,GPU分时复用与CPU在进程间的分时复用是一样的概念。一个简单的调度就是把一个GPU的时间按照特定时间段分片,每个VM拿到特定的时间片。在这些时间片段中,这个VM享用GPU的硬件的全部资源。包括Nvidia的GRID vGPU方案、Intel 的GVT-g虚拟化方案在内,目前所有的GPU虚拟化方案都是采用了分时复用的方法。但不同的GPU虚拟化方案在时间片的切片中会采用不同的方法。有些方案会在一个GPU Context的当前BatchBuffer/CMDBuffer 执行结束之后启动调度,并把GPU交由下一个时间片的所有者。而有些方案则会严格要求在特定时间片结束的时候切换,强行打断当前GPU的执行,并交予下一个时间片的所有者。这种方式确保GPU资源被平均分摊到不同VM。AMD的GPU SRIOV采用的后一种方式。

文章来自个人专栏
文章 | 订阅
0条评论
作者已关闭评论
作者已关闭评论
0
0