来源:IBC 2021 主讲人:Thomas True 内容整理:张志宇 Thmos True 介绍了 NVDIA 最新研发的 ST2110 网络连接显示器,介绍了一些关键技术以及一些 Demo 展示。
目录
图1 动机1
这项工作受到两大行业趋势的推动。第一是向基于硬件的网络媒体系统的转变,这导致了软件定义的工作流程的出现。该工作流程允许快速重新配置资源,以最大限度地利用硬件和软件。第二是 GPU 虚拟化,使得工作站从办公桌转移到数据中心,以提供更安全、利用率更高、更易于维护的基础设施。在这种环境中,资产永远不会离开数据中心的范围,而虚拟用户应用程序通过 IP 网络交付给在笔记本电脑或小型计算机系统上运行的客户端上的一个或多个用户。
图2 动机2
并且在这种环境下,通过 SDI、HDMI 或 DP 物理连接到 GPU 的传统参考显示器通常无法正常工作,因为缺乏对 IO 接口的虚拟化支持或物理布线限制。因此,不再有 SDI、HDMI 或 DP 连接,只需要 TCP/IP 网络连接到桌面。为了在这样的网络环境中使用传统的参考显示器,一般需要一组电缆和转换器得到 ST2110 输出。
而我今天将要描述的网络连接显示器消除了这组电缆和转换器的使用。我们的解决方案为运行虚拟化或裸机的任何应用程序提供原生简单的 ST2110 输出。
图3 数据处理单元 DPU
我们解决方案的一个关键部分就是数据处理单元 DPU (Data Processing Unit) 。多年来,CPU 是大多数计算机系统中唯一的可编程组件,但最近,GPU 发挥了核心作用。GPU 最初用于提供丰富的实时图形,而并行处理能力使 GPU 成为各种加速计算任务的理想选择。因此,GPU 已经成为许多工作流程的必要条件。DPU 是以数据为中心的加速计算模型的第三大支柱。DPU 旨在跨 CPU 和 GPU 边界,在主机和不同工作流部分之间移动数据。因此,DPU 是数据中心中一类新的可编程处理器。
DPU 位于片上系统 (SoC) 中,它结合了三个组件,第一个是高性能软件可编程多核 CPU,通常基于广泛使用的 ARM 架构,与其他 SoC 组件紧密耦合。第二个是一种高性能网络接口,能够解析处理并以线速将数据传输到 GPU 和 CPU。第三是一组丰富的灵活且可编程的加速引擎,可提高应用程序性能。DPU 可以用作系统内的独立嵌入式处理器,也被整合到智能网卡或网络接口卡中。
图4 解决方案
在我们的解决方案中,我们将 DPU 与 GPU 结合起来创建一个网络连接显示器,这会在桌面上创建一个虚拟显示器。ST2110 输出流随后可以驱动高质量的网络附加参考显示器或直接插入广播切换器。GPU 渲染帧被 DPU 当作 ST2110-20 的流传输。OS 的音频流被当作 ST2110-30 的流传输。我们的解决方案既适用于裸机,也适用于数据中心的虚拟化。
图5 视频数据路径
ST2110-20 流的视频数据路径从未修改的应用程序开始。它使用 OpenGL、Vulkan 或 DirectX 在 GPU 上渲染帧。显示驱动程序将渲染命令传递给 GPU,GPU 将帧渲染到 VRAM 中,因此视频本质在 GPU 上的 VRAM 中。同时,显示驱动程序为所有数据包和主机内存构建 RTP 报头。然后 DPU 直接从 GPU 内存中对视频本质进行 DMA(直接记忆体存取)。然后,DPU 将来自主机内存的 DMA 数据报头与来自 GPU 设备内存的数据包有效负载交错,以便在适当时间传输这些数据包。
图6 音频数据路径
未修改的应用程序生成的所有 PCM 音频样本都被捕获到主机内存中的缓冲区中。同时,音频驱动程序构建 RTP 报头,也在主机内存中。标头和数据包负载被 DMA 到 DPU 中,然后 DPU 将报头与数据包有效负载交错,并在线路上作为 ST2110-30 流传输。
图7 整体架构
我们解决方案的整体架构如图 7 所示,我们拥有数据中心的 3 个支柱 —— GPU、DPU 和 CPU。在 GPU 上,我们有显示驱动程序用来发送渲染命令。音频端点设备驱动程序位于 CPU 之上。它从 Windows 操作系统获取音频样本。这些样本被放置在系统内存中的缓冲区中,然后被 DPU 读取,通过网络传输。整个架构使用 NMOS 进行控制,使用 PTP 进行同步。
图8 关键技术
我们的解决方案中有一些关键技术的支持。首先是 ST2110,选择 ST2110 的原因是它是一个行业标准,提供实时传输、PTP 同步等重要功能支持。
第二个关键技术是 GPU 和 DPU 之间的直接数据传输和拆分报头和有效数据负载的能力。这样 DPU 可以直接从 GPU 设备内存 DMA 视频帧本质有效负载数据,而无需将其复制回系统内存。这减少了 50% 的 PCle 总线数据交换并减少了主机内存的使用。最终,GPU 和 DPU 之间的传输延迟减少了,因为 DPU 可以直接从 GPU 设备内存中对视频本质进行 DMA。
支持我们解决方案的第三个关键技术是 DPU 时间服务。它让我们对系统配置、噪音和抖动有更好的容忍度。它为 PTP 提供主机资源的零消耗。并且它被开发为一个容器,与操作系统无关。最后一个关键技术为 Kernel Bypass,它增加了正在运行的实际应用程序的确定性和空闲 CPU 周期。
图9 音视频同步
因此将我们的解决方案集成到广播工作流中,需要通过与 PTP 媒体时钟对齐的 RTP 时间戳来同步视频和音频流。显示驱动程序发送带有 Windows 系统时间戳的渲染帧,音频端点发送带有 Windows 系统时间戳的音频缓冲区,它们必须通过与媒体时钟对齐的 RTP 时间戳同步。每个驱动程序都会调用一个 get_time() 函数,该函数调用 Get Time 服务,这是对在 ARM 上运行的 ptp4l 实例的调用,之后 DPU 返回 PTP 时间。在这之后,Windows 系统时间映射到 PTP 时间,这些 PTP 时间值构成了 DPU 插入相应数据包头的 RTP 时间戳的基础。
图10 控制技术
我们通过行业标准 SDP 文件提供初始设置和控制。显示驱动程序在启动时将自己注册为注册表中的 NMOS 发送节点,并附带描述网络显示输出传输参数的清单。从那时起,NMOS 接收器节点可以连接以接收传出的视频和音频流,用于显示或工作流中的进一步下游处理。
图11 Demo 1
这是网络连接显示器的 Demo 展示。在左边看到的是远程工作站的 Windows 桌面。在右边也是一个 Windows 桌面,但这实际上是一个查看器应用程序,在查看 ST2110-10 视频流和 ST2110-30 音频流,这是在我正在做演示的计算机上本地运行的,而左边的窗口是远程工作站的远程桌面。
图12 Demo 2
转到远程工作站的 Windows 桌面上打开设置,可以看到有两个显示器。我们可以看到显示 1 是物理连接的远程工作站的显示器,显示器 2 是连接的网络连接显示器。在视频中可以看到窗口在两个显示器间可以任意拖动,这里不方便贴图展示。
最后附上视频链接:
http://mpvideo.qpic.cn/0bc3daabgaaabiahmz72wvqvaggdcmmaaeya.f10002.mp4?dis_k=8ad46494580a7822eb6a489e4a87398b&dis_t=1645152992&vid=wxv_2251629139084656645&format_id=10002&support_redirect=0&mmversion=false