企业存储技术 · 2023年08月15日

双路Xeon NUMA优化取舍:DaVinci 4K/8K视频编辑调色测试

目录

- 视频编辑/调色软件与Blackmagic DaVinci Resolve

- CPU/GPU的视频编解码加速支持

- 4K视频编码 (渲染) 测试

- 4K Blackmagic RAW视频编码 (渲染) 测试

- 8K视频编码 (渲染) 测试

- DaVinci Resolve 视频特效测试

- 双CPU工作站NUMA优化在影视后期制作中的利弊

接前文:《Xeon w9-3495X 56_核工作站测试(1):BenchMark解读与性能优化参考

Xeonw9-3495X56核工作站测试(2):CPU与GPU渲染之争结束了吗?

以上两篇我写的字数多了点,说实话搞得有点累。今天这个会深入一点到具体应用软件、场景的性能瓶颈分析,我尽量争取不写太枯燥。但我也相信,喜欢了解技术细节的朋友应该会有读下去的兴趣。

本文也是Xeon W-3400 CPU对比测试的第3篇。关于标题里提到的NUMA(非一致性内存访问),我曾经在《AMD EPYC2服务器片上NUMA设置&应用建议》中做过一些讨论,这次再看看Intel平台、工作站应用中的情况。

视频编辑/调色软件与Blackmagic DaVinci Resolve

记得好几年前,有次一家客户伙伴给出个项目,大概是要把一段BT.709、SDR的视频,倍线(扩大分辨率)并提高色域,转码为BT.2020、HDR标准。

客户说先转一段样片看看效果,当时我手头正好有几套机器和不同显卡,只是奔着半帮忙半练手的目的参与试试。当时简单拿Premiere试了下,好像还要加插件才能输出H.265格式;ffmpeg倒是对GPU编解码支持好,速度也还不错。当我们把转码输出后的视频发给客户,然后就没有然后了…

直到后来有一次我听贺老师的分享,里面提到一句:“如果要把较低色域、动态范围的视频,转换为高标准并真的看出效果提升,应该只能用DaVinci(达芬奇)来做…” 看来我当初在这方面还是太业余了:)

image.png

本次测试的针对方向是视频/广电这个行业,在应用软件的选择上,一开始我也尝试了较新版本的Premiere,简单跑了R3D、ProRes格式样片,在水银引擎(Adobe Mercury Playback Engine)下,GPU加速(即CPU卸载)的能力似乎比DaVinci要差一些?这大概就是新型软件对新硬件特性的优化,跟进得更快一些吧;老牌软件可能有更多的“历史包袱”要考虑吧。

image.png
我顺手还跑了下Blackmagic新版本的Disk Speed Test磁盘测速工具,只是在Dell Precision工作站上用普通单盘PCIe 4.0 NVMe SSD跑了一下。这里都能看到最高12K(横向分辨率12K、纵向6480)的视频尺寸——我想绝大多数国内客户还烧不动,所以本文也只是测到4K和8K。

从不同编码上来看,有损压缩的H.265显然最节省存储带宽;Blackmagic RAW(简称BRAW)和ProRes 422 HQ一般用于摄像机的原始素材格式,属于接近无损质量的压缩。BRAW与RED ONE的R3D格式类似,比ProRes文件压缩率较高,在同样的盘速下能跑到更高的读/写帧数(FPS);但处理时对CPU或GPU显卡资源的消耗也会更多。

上述这个测试只是5GB的文件大小,只能代表商用客户端(消费级)SSD的短时突发(SLC Cache区域)写入性能,它与SSD稳态性能之间的差别,可以参考《PCIe 4.0 SSD测试:接口、散热和CPU对性能的影响》。

CPU/GPU的视频编解码加速支持

image.png

在DaVinci Resolve软件的(视频)解码选项中,默认勾选了“使用GPU进行BRAW解码”、NVIDIA硬件加速解码H.264/H.265,以及为R3D使用GPU处理“解拜耳(Debayer)”——即R3D格式的另一部分实时解压缩默认使用CPU。而根据实际情况,特别是处理8K视频时,R3D解压缩对CPU的压力相当大;同时DaVinci对多GPU的支持又很好,在多块NV中高端显卡的情况下建议使用GPU“解拜尔并解压缩”。为了获得更好的整体性能,本文也是这样测试的。

image.png

上面图表是我以前做过的测试:不同码率/压缩比的8K视频需要的硬件处理资源也不一样。具体到R3D格式,压缩比较低(也就是质量较高)的CPU开销更大——像4:1和5:1的8K R3D视频,用2颗早期的Xeon 5115 10核CPU解压缩甚至都不能跑流畅?

而当我把R3D解压缩也设置到GPU之后,用1-2块RTX 5000显卡可以线性地降低CPU占用率。

还记得曾听同行朋友说过:“_达芬奇用双__CPU__效果并不好,许多时候一颗CPU__就挺好…_” 针对这点,我想一方面是GPU在有些处理上比CPU效率更高;下文中我也会班门弄斧做点测试,来验证下有没有办法发挥双CPU:)

image.png
在交代下面的测试之前,我需要再重复一下测试平台。尽管使用了当前顶级的Intel Xeon w9-3495X CPU,但我手头只有A4000和2块RTX 5000显卡,根据我有限的认识,16GB显存在DaVinci里跑8K视频只是刚及格的水平。不差钱的客户,完全可以用两到多块NVIDIA RTX A6000乃至最新的RTX 6000 Ada(或者考虑1-2块GeForce RTX 3090等)。

为了尽量避免SSD盘速影响测试的可能,我在Precision 7920工作站老平台上也换成同样标准的新型号PCIe 4.0固态盘(此时由于主板PCIe 3.0速率限制,最多只能跑到 3xxx MB/s)。

image.png

如上图,我尝试在3块显卡的配置下播放多层8K R3D视频样片(还没有加特效)。

image.png

在这里限制跑更多视频层数的是GPU,理论上我们还可以增加显卡数量,或者提高单卡性能…

以上只是DaVinci软件里的一种场景,此时由于解拜尔和解压缩都设置为GPU,所以显卡性能和数量直接影响到处理的复杂度。无论7920还是7960工作站机型,都能在4K时间线分辨率设置下流畅回放4层8K视频素材。当我临时添加第4块显卡后,8K时间线下也能基本流畅处理到4层视频。当然我的测试条件有限,在实际生产环境中,还是推荐每块显卡都选择规格高一些的。

image.png

上面还是我测试用的Precision 7960 Tower工作站,双宽GPU显卡最多支持4块;如果是2.5-3槽位宽度散热器的显卡,有些应该可以支持2块。

以上初步的测试,只是一个把压力全部给到GPU的典型场景。视频编辑制作中面对的素材格式/编码还有许多种,DaVinci调色软件的各种特效也需要看看,包括最常用的降噪处理等。

image.png

上表是我简单整理的,DaVinci Resolve针对不同视频格式的编/解码加速硬件调用。除了我在前面提到过的显存容量、CUDA通用计算性能之外,还有一点影响显卡定位的就是专用视频加速单元NVENC和NVDEC的数量。大家可以在https://developer.nvidia.com/...网站查询(注意:有些硬件规格接近的NVIDIA RTX/Quadro专业显卡与GeForce游戏显卡,这一点上能看出区别)。

限于篇幅,这部分我先不展开讨论了,下面的重点是测试结果。

4K视频编码(渲染)测试

![Image]image.png

说实话上面图表的信息量有点大,我曾经想把数据再拆分,但发现还是没有统一对比分析方便。首先,我需要交代一下这个表的图例——也就是不同的测试硬件配置:

-上面2__项,在7920 Tower__工作站上只装1__颗Xeon 6242 CPU__,分别配1-2__块显卡;

-中间4__项,在7920__工作站配齐2__颗Xeon CPU__,分别配2-3__块显卡;一开始发现测试数据不够理想,然后又尝试了关闭NUMA__进行对比;

-下面2__项,在7960 Tower__工作站上用Xeon w9-3495X CPU 56__核CPU__,分别配2-3__块显卡。

第1个测试项目,H.264视频素材输出(渲染)到H.264。所有测试配置的FPS帧数没有明显差别,可见单块GPU的NVDEC或NVENC编解码性能成为了瓶颈,这时换更强CPU或者加多块显卡起不到作用。

第2项测试,H.264素材输出(渲染)到DNxHR高品质。单Xeon 6242 16核CPU时,1或2块显卡(此时应该是CPU有瓶颈)看不出差别;甚至在双Xeon 16核默认打开NUMA设置时,用2-3块显卡也没有提高;

而当我关闭NUMA之后,双Xeon 6242在这里发挥出了更高性能;但进一步将显卡从2块增加到3块,或者提高到56核CPU则没再看到显著变化。结合前面一项测试,我初步判断还是遇到了单块显卡NVDEC的瓶颈,如果换成定位更高的A5000、A6000或者新一代Ada架构显卡,则用于DNxHR编码的CPU/GPU资源才可能进一步发挥。

第3项测试,ProRes 4:2:2素材输出(渲染)到H.264。各种不同硬件配置又没有拉开差距,此时的瓶颈应该是单块显卡的NVENC编码性能。

第4项测试,ProRes 4:2:2素材输出(渲染)到DNxHR高品质。这里就考验CPU的能力了,显卡数量对结果没有明显影响;双CPU同样需要关闭NUMA才能发挥性能;Xeon w9-3495X CPU 56核CPU,比2颗Xeon 6242 16核跑出的FPS高了接近45%。

第5项测试,R3D素材输出(渲染)到H.264。这个操作基本全是靠GPU干活,无论解码还是编码。结果主要与显卡数量相关,Precision 7960感觉在3x GPU时还有进一步的潜力,不过这时又接近单卡H.264 NVENC编码的瓶颈了。

第6项测试,R3D素材输出(渲染)到DNxHR高品质。此时DNxHR的编码性能不是瓶颈,压力还是出在多显卡的解拜耳和解压缩处理上,所以FPS帧数与前面一项测试都相差不多。

4K Blackmagic RAW视频编码 (渲染)测试

image.png

上面图表的2项测试,视频源素材都是DaVinci东家自己的Blackmagic RAW格式。在输出到H.264时,显卡从1块增加到2块之后,就不再有明显的提升了。此时应该又是单GPU的NVENC性能瓶颈。

而在输出为DNxHR高品质时,单颗Xeon 6242 CPU在2块显卡时已经开始“捉襟见肘”;双CPU同样需要关闭NUMA才能匹配双GPU的BRAW解码加速;而2块和3块显卡时最好的表现,则是在配合Xeon w9-3495X CPU时跑出来的。

8K视频编码(渲染)测试

image.png

在4K视频测试之后我们再来看8K,渲染输出的性能对比大体上相似,下面我重点解释一下不同之处。

第1个测试项目,H.265视频素材输出(渲染)到H.264,DaVinci的时间线分辨率为4K。多显卡并不总是比单显卡跑得更快,甚至2块GPU比1块时还要慢点;新工作站平台上的Xeon w9-3495X CPU跑出了更好一些的表现。

第2个测试项目,H.265视频素材输出(渲染)到DNxHR高品质,仍然是4K时间线分辨率。对比结果数值与前面一项相当接近,反映出瓶颈应该主要在于GPU的解码性能。

第3、4测试项目,看来是把前两项的时间线分辨率提高到了8K。其中H.265 to H.264并没有明显变化(因为瓶颈在于源视频解码)。

而H.265 to DNxHR HQ则不同了,此时更多看CPU的DNxHR编码性能——8K输出计算量更大,所以不同CPU配置拉开差距。双Xeon 6242如果默认打开NUMA比单CPU还慢一些,也是要禁用NUMA才有提升;Xeon w9-3495X 56核比2颗16核CPU提速40%以上。

第5、7两项测试,分别是在4K和8K时间线的R3D to H.264输出,性能基本上与GPU数量成正比。

第6、8两项测试,则是在4K和8K时间线的R3D to DNxHR HQ输出。4K分辨率输出时,与R3D to H.264的性能基本一致,说明瓶颈在于GPU处理R3D解拜耳和解压缩。而在8K输出时,我看到GPU数量和不同CPU配置都能影响到性能,只有Xeon w9-3495X CPU所在平台才能配合3块显卡的充分发挥。

DaVinci Resolve 视频特效测试

image.png

上面图表是达芬奇里的不同特效测试,普遍依赖GPU的性能,并且对多显卡优化好。

前面2项都属于Temporal NR时域降噪测试。

image.png

关于TNR降噪的效果,我记得部分Latitude商用笔记本的“AI摄像头”也宣传过。虽然上图能看出明显的改善,但毕竟只是用于普通视频会议这样的民用级水平。而DaVinci软件的降噪则是要达到电影大片级的质量,当然还有4K、8K分辨率等更高要求。

第3项Film Grain(胶片颗粒)特效,可以被用于模拟老式照片或电影的外观;第4项Spatial NR(空域降噪)特效,只在每一帧图像内部处理噪声;第5项Lens Blur x5(5倍镜头模糊)特效。虽然它们的性能也是随着GPU数量而变化,但也呈现出一个共同特点——就在我以为DaVinci使用双CPU关闭NUMA就可以万事大吉时,却发现部分特效在达到3块或以上显卡时,这一设置改变反而严重影响了性能。这是什么原因呢?稍后我试着讨论一下。

第6项Lens Flare(镜头炫光)特效、第8项Face Refinement(人脸改善)特效测试结果,除了GPU的影响之外,Xeon w9-3495X CPU所在的Precision 7960工作站平台也能跑出一些优势,可能与显卡的高速PCIe 4.0总线接口等因素有关(受限于当前显卡,主板的PCIe 5.0插槽还是跑在4.0速率)。

还有第7项Optical Flow - 50% Enhanced Better(光流特效,50%增强),在DaVinci里显卡从1块增加到2块都没啥提高,但加到3块GPU时却有翻倍以上的性能。这里我再次看到因为NUMA关闭带来的负面影响。

双CPU工作站NUMA优化在影视后期制作中的利弊
image.png

当前主流的Intel、AMD CPU都集成了内存控制器和PCIe控制器,这样在多路CPU时扩展性也能提高。不过也带来了NUMA(非一致性内存访问),以及PCIe连接的亲和优化“问题”。

当我们禁用NUMA设置时,Node Interleave即两边的内存交错分配地址给全部CPU统一使用,而忽略物理上的位置和访问性能的差异。前文提到我们在测试中发现了DaVinci有些视频编码能因此发挥出双CPU的加速效果;而在PCIe x16显卡达到3块及以上时,Intel Xeon Scalable 第1/2代平台(如上图)一般就需要把GPU插在2颗CPU各自的PCIe通道上。

而此时如果默认NUMA打开,GPU到系统内存的访问应该可以优先在本地Node(就近CPU范围)内解决;而NUMA关闭后,GPU到DIMM内存访问就无法避免要跨CPU之间的UPI连接——我猜测就是这一点影响到了DaVinci特效测试的性能。

image.png

在Dell Precision 7920 Tower工作站上,位于主板下方的5个PCIe插槽连接到CPU0,而顶部的2个PCIe x16则连接到CPU1。此时可能有朋友会说,大多数视频编辑/调色应用客户配2块双宽高端显卡也够了吧?

也有些道理吧,这样就没有GPU跨CPU扩展连接的问题,那么如果单个CPU的性能在28核基础上加强,是不是我们就不需要第二颗CPU了呢?别忘了Xeon Scalable 1/2代CPU只有48 lane的PCIe 3.0的控制器,而视频应用往往需要再插一块采集卡,可能还有雷电卡或者万兆/25Gb以太网卡连接存储,或者再加一块SDI输出到监视器… 这样7920工作站的7个插槽就不嫌多了吧。

image.png

相比之下,新一代的Precision 7960 Tower工作站支持的单路Xeon W-3400 CPU,支持112个PCIe lane、最多56核设计。该主板提供8个PCIe插槽,并且不存在跨CPU Socket的内存NUMA优化取舍,以及PCIe插卡跨Multi-Root连接的情况。

扩展阅读:《单路为王?Intel Xeon W-3400、2400工作站平台预览

image.png

还有一点不应该回避,我在《关于第四代Intel Xeon Scalable的一些技术思考》也讨论过服务器CPU的XCC和MCC设计。上图中的工作站Xeon W-3400系列也属于XCC 4个Die互连的架构,如今达到56核这种规模,包括AMD EPYC等也存在插槽内的NUMA效应,跨Die之间的通信效率如何呢?

我前面的测试就是一个证明吧。其实我还尝试过把3块显卡调整到不同的PCIe x16插槽组合,至少跑本文这些测试,在Dell Precision 7960 Tower工作站上基本看到一致的性能结果。

小结&鸣谢

在DaVinci这个比较高度的GPU优化应用中,我们仍然不能忽视CPU及工作站平台的影响。当然不同的视频编辑/调色软件对硬件需求也有些区别,包括国内的大洋、索贝、新奥特等大厂都有自己研发的软件,我相信这些与DaVinci之间在技术上也有相通之处吧。

最后感谢我以前的同事&朋友小赵和小胖、还有贺老师…等等,是他们帮我从一穷二白提高到今天对这个行业的技术理解能力。本文希望给超高清视频制作用户、从业者一点点参考。笔者水平有限,欢迎各路专家在下面拍砖指正。

本系列测试还想不想看第4篇?敬请期待…

作者:唐僧 huangliang
原文:企业存储技术

推荐阅读

欢迎关注企业存储技术极术专栏,欢迎添加极术小姐姐微信(id:aijishu20)加入技术交流群,请备注研究方向。
推荐阅读
关注数
5557
内容数
237
关注存储、服务器、图形工作站、AI硬件等方面技术。WeChat:490834312
目录
极术微信服务号
关注极术微信号
实时接收点赞提醒和评论通知
安谋科技学堂公众号
关注安谋科技学堂
实时获取安谋科技及 Arm 教学资源
安谋科技招聘公众号
关注安谋科技招聘
实时获取安谋科技中国职位信息