GPU虚拟化技术详解(附讲解视频)

GPU虚拟化技术:

1 GPU 和软件架构

GPU可以用于图形渲染,GPU 作为加速图形绘制的芯片时,它主要面向的产品主要是会集中在 PC 和游戏两个市场。也能够用于高性能计算领域(GPGPU)和编解码场景(子模块)等。

下图将软件系统中的 GPU 子系统抽象了几层概念,在 GPU 上的经典软件架构(不含虚拟化),分别适用到 通用计算领域图形渲染领域 两类场景。

GPU虚拟化技术详解(附讲解视频)

图:GPU 的典型软件架构(不含虚拟化)

2 GPU 和虚拟化

虚拟化使用软件在计算机硬件上创建抽象层,能够将单个计算机的硬件元素(包括处理器、内存、存储器等)分成多个虚拟计算机,通常称为虚拟机 (VM)。 GPU 虚拟化是系统软硬件模拟 GPU 资源,以支持虚拟机方案。

3 GPU 虚拟化需求

体现在资源共享和资源隔离两方面

资源共享的需求:GPU 性能越来越强大,需要多租户(多容器和多虚机)共享资源。应用场景如多屏车机、本地桌面虚机、远程桌面(桌面虚拟化)、云 GPU 虚机。
资源隔离的需求:要保证多租户互不影响,应用场景如显存隔离、算力隔离、故障隔离。

4 GPU 虚拟化技术

虚拟化技术实现体现三个层次,即用户层、内核层和硬件层。然后在根据技术的应用场景分为隔离场景(容器和虚机)和硬件场景(虚拟桌面、渲染和 AI 计算)两个维度,不同的技术可能仅适用它对应的的场景。技术实现可分类为:

  • 用户层:API 拦截和 API forwarding
  • 内核层:GPU 驱动拦截
  • 内核层:GPU 驱动半虚拟化:Para Virtualization
  • 硬件层:硬件虚拟化:Virtualization
  • 硬件层:SRIOV:Single Root I/O Virtualization
  • 硬件层:Nvidia MIG:Multi-Instance GPUGPU虚拟化技术详解(附讲解视频)

5 GPU 用户层虚拟化

1)本地 API 拦截和 API forwarding

  • 在用户态实现一个函数库,假设叫 libwrapper ,它要实现底层库的所有 API
  • 让 APP 调用这个 libwrapper => 如何实现?底层动态库 + 用dlopen打开
  • libwrapper 拦截用户的函数调用,对函数进行解析,然后使用参数去调用实际的底层库相同名称的函数
  • 调用完成后,libwrapper 把结果返回给 APP

GPU虚拟化技术详解(附讲解视频)2)远程 API forwarding

  • libwrapper 通过网络,去调用不同机器上的底层库
  • libwrapper 变成两部分,client 用于转发,和 server 用于接收和调用
  • 可以实现 GPU 池化(即多个 GPU 可以组成调用池,由多个 client 来调用),可以做到不具备 GPU 的机器能实现 GPU 的功能

GPU虚拟化技术详解(附讲解视频)3)半虚拟化 API forwarding

  • APP 和 libwrapper 运行在虚机中
  • libwrapper 通过半虚拟化方式(virtio)进行通讯,调用宿主机的底层库
  • 虚机的内核要实现 virtio frontend => 优化点? 虚机和宿主机共享内存加速数据传递
  • 宿主机的 hypervisor 实现 virtio backend
  • 宿主机完成底层库的调用

6 GPU 内核层虚拟化

1)内核模块通过设备文件拦截
内核拦截模块模拟一个设备文件,内核拦截模块将用户进程的访问转发到(真实的)驱动软件,然后将对应内核函数的返回解析,再返回用户态。

  • 通常底层库通过设备文件访问 GPU 驱动的功能,假设为 /dev/realgpu
  • 实现一个内核模块,输出模拟的设备文件给用户空间,假设为 /dev/realgpu
  • 把模拟的设备文件 bind mount 到容器里,伪装成真的设备文件 /dev/realgpu
  • APP 和底层库都在容器里运行,底层库访问伪装的设备文件 /dev/realgpu,此时所有访问被内核模块拦截

GPU虚拟化技术详解(附讲解视频)2)驱动半虚拟化
用户进程通过系统虚拟化层(hypervisor)提供的虚拟化接口,访问(真实的)虚拟化接口。

  • APP 和底层库都在虚机里
  • 虚机的 GPU 驱动实现半虚拟化接口,通过类似 hypercall 的方式,调用宿主机实际的 GPU 驱动
  • hypercall 切换 guest 到 hypervisor, hypervisor 通过内核中的驱动代理来访问实际的 GPU 驱动

例如,车机中的 GPU 虚拟化。基于 type 1 的 hypervisor 虚拟化技术,支持多个 Guest。

7 GPU 硬件层虚拟化

虚拟化需要软件和硬件结合才能实现,其中需要硬件的支持的部分包括

  • 支持 CPU 和内存的硬件虚拟化
  • 支持 IOMMU
    • DMA remapping和Interrupt remapping
    • 硬件隔离和页表机制

8 GPU 全虚拟化

该方案实现了将整个 GPU 透传给虚拟,严格来说不算虚拟化领域,因为无法实现 GPU 资源共享。

  • 虚机的 GPU 驱动,不需要做任何修改,基本上访问的是真实的硬件资源
  • 整个 GPU 透传给虚机,性能损耗最小
  • 因为无法实现 GPU 资源共享,一般认为不属于GPU 虚拟化

9 参考资料

[bvideo bv=”1gT411J7SE”][/bvideo]

原创文章,作者:AIRF,如若转载,请注明出处:http://www.ai-rf.com/index.php/2023/05/29/gpu%e8%99%9a%e6%8b%9f%e5%8c%96%e6%8a%80%e6%9c%af%e8%af%a6%e8%a7%a3%ef%bc%88%e9%99%84%e8%ae%b2%e8%a7%a3%e8%a7%86%e9%a2%91%ef%bc%89/

(0)
AIRFAIRF
上一篇 2023年5月18日 下午5:05
下一篇 2023年5月29日

相关推荐

  • 服务器图形正常显示后变为NO SIGNAL

    前景描述 20台服务器安装操作系统时,有一台总提示无法正常安装,在BIOS自检界面异常的卡   排查 由于自检非常卡且无异常报错,于是更换主板后自检可以快速过了 但是安装…

    硬件天地 2023年9月5日
  • 浪潮NF8480 M5服务器HBA卡BUG处理

    前景提示 浪潮8480M5型号服务器在安装Redhat7.6操作系统并安装存储多路径软件后重启服务器报错导致系统无法进入 处理方法 1.更新HBA卡驱动1.1 安装需要提前安装开发…

    硬件天地 2021年12月30日
  • RAID卡一致性检查 概念解读

    相关原理解释 PR(Patrol Read):硬盘巡读功能,针对阵列卡下组建RAID 的HDD 盘(SSD 默认是关闭的)。RAID 卡下发verify 指令给硬盘,硬盘FW 对物…

    硬件天地 2025年2月20日
  • U盘安装Windows Server 2016入坑篇

    windows server版安装报错吗???安装提示cannot open the required file X:Sourceslinstall.wim????不用慌直接为你解…

    硬件天地 2023年7月17日
  • GPU卡虚拟化技术的优劣势对比

    号 方案类型 代表产品 方案概述 优势 劣势 1 Mdev框架 vGPU 属于时分的共享产品。它通过vfio-mdev提供了一个隔离性非常高的的硬件环境,主要面向的是虚拟机产品。其…

    硬件天地 2023年8月3日
  • Raid卡工具-arcconf工具常用命令(适用与Ctrl+H)

    查看controller和硬盘信息 arcconf getconfig <controller id> 例:arcconf getconfig 1 查看controll…

    硬件天地 2024年7月30日
  • Storcli工具使用方法(附管理工具)

    使用storcli64工具进行查看RAID状态:# ./storcli64 /c0 show 使用storcli64工具进行删除RAID: # ./storcli64 /c0 /v…

    硬件天地 2021年12月29日
  • 物理服务器多块硬盘故障

    一.问题描述 生产环境中某操作系统并插网线后在系统下网口状态为DOWN,HBA卡网卡口状态显示正常,但无法与光纤交换机进行互信 二.排查问题 查看服务器网卡灯是否正常闪烁查看网线与…

    硬件天地 2021年11月21日
  • IPMI管理工具使用方法

    前言 最近需要对多台服务进行控制,通过服务器的 BMC 控制台去控制太麻烦,服务器刚好支持 IPMI 协议,这里记录下常用的几条命令备忘。 什么是 IPMI 智能平台管理接口(In…

    硬件天地 2021年12月31日
  • uefi和legacy的区别有哪些

    我也是因为这两天安装Windows系统时,硬盘大于4T且默认安装使用的MBR模式,导致RAID的4T空间只能分出2T的空间,最后把服务器模式更改为UEFI,并且需要把U盘的格式从N…

    2023年3月7日

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注