在线视频市场持续快速增长,越来越多的人观看流媒体在线内容,实时视频的使用量正在飙升,为了能减少存储空间和提升网络带宽的利用率,视频编码压缩技术已经普遍被行业采用。如今的客户在视频流方面要求 360°的用户体验,除了友好的界面、简单的内容搜索方式,更重要的是接收低延迟无缓冲视频。为了满足如此高的流媒体标准,无论是个人内容提供商、初创企业和行业领先者,都开始意识到高弹性可扩展的云平台在高质量流媒体服务中不可替代的作用。借助云服务器,内容服务商可以在公有云中按需定制容量和算力,更轻松的应对突发的流量高峰和更灵活的控制成本。所以测试云服务器的编码能力有着确切的现实意义。
视频编码压缩技术有多个标准,根据Bitmovin视频开发者调查报告,自2017年,一直以来AVC/H.264 为主要的视频编解码标准,使用H.264受访者始终保持在90%以上,在2021年略有下降至83%。2020 年,42% 的受访者正在使用 HEVC,另有 47% 的受访者表示他们计划在2021年使用。实际在2021年,HEVC 的采用率增长到 49% ,尽管与2020年的采访数据有些差距,但增幅明显。
由此, 本文将基于便宜云服务器SR1云服务器(基于Ampere? Altra?处理器)对最为主流的编码标准H.264进行评测。 Ampere? Altra? 处理器是为云原生应用构建的完整片上系统 (SOC) 解决方案。其创新架构提供可预测的高性能、高能效和线性扩展,在多租户环境中具有最大一致频率和单线程内核。我们将与传统架构的便宜云服务器S6云服务器进行性能对比,结合成本因素,最终得出性价比的差异。
本次测试中,SR1和S6云实例配置如下:
我们将使用实现 H.264/MPEG-4 AVC 标准的开源库 libx264和ffmpeg来运行视频编码,测试基准借鉴了vbench,vbench 是一种针对在云上进行视频转码的benchmark, 也是视频即服务(Video as a Service)工作负载的测试基准。
vbench 提供的 15 个输入视频是从Youtube里经过K-means算法筛选,代表了不同分辨率、码率和熵特征的具有代表性的视频源。
除了视频源,vbench还定义了5中不同的场景:Upload, Live, VOD, Popular, Platform。每个场景对视频的码率和质量都有不同的要求,所以会采用不同的编码参数。该评测中采用Upload场景,Upload场景要求转码速度的同时不降低视频质量以便后续的进一步处理,所以采用ffmpeg Single Pass并设置Constant Rate Factor (CRF)=18来保证编码的视频质量。
为了最大化 ffmpeg 吞吐量,我们运行多个 ffmpeg 进程,数量等于云服务器的可用vCPU数量,同时使用GNU parallel来并行化所有的ffmpeg进程。为了减少磁盘IO带来的影响,ffmpeg 二进制文件以及所有输入和输出文件都存储在tmpfs上。最终以完成15个视频编码所需要的时间作为性能评价指标。
基本测试命令如下:
parallel-j${JOBS}=/opt/cloud/ffmpeg/bin/ffmpeg -threads ${THREADS} -y -i {} -c:v libx264 -preset medium -crf 18{.}.out.mkv </dev/null >&/dev/null ::: input/*.mkv
我们分别在SR1.2XLARGE32和S6.2XLARGE32实例上运行测试30次,然后对这30次的编码时间进行分析,以下表格是对平均时间,最大时间和最小时间的统计。
SR1.2xlarge32 | S6.2xlarge32 | |
---|---|---|
Average Time (s) | 58.35 | 65.14 |
Max Time (s) | 58.59 | 65.35 |
Min Time (s) | 58.21 | 65.06 |
可以看到,SR1和S6每次任务完成的时间都很稳定,完成15个视频编码所需要的平均时间,SR1比S6节省了10%,如果再考虑到价格因素,意味着每条视频的编码成本SR1将比S6节省约32%。
SR1的CPU处理器Ampere Altra采用的是单核单线程的设计,与x86相比一个显著的差异是在云实例中每个核都是物理核,而不是超线程下的一个线程。所以,SR1每个核的计算资源如L1和L2缓存都是独享的。当多核运行时,核间没有资源争夺,具有很强的抗干扰性。为验证该特性,我们采用另外一种方法,逐次增加核数,以获取不同核数下的每秒总帧数(fps)数据。总fps 随核数的关系如图所示。总fps 随核数的关系如图所示:
首先同样核数下,基于Altra的SR1实例的fps性能要高于基于x86的实例,而且明显地以线性增长。而对于基于x86的S6实例,可以看到单数核时和相邻偶数核时的性能增长非常小,也就是对于SR1实例的用户,购买的每个核都是物理核,也得到性能的回报;而x86架构的实例,用户购买的核数有一半是逻辑核,而这些逻辑核对整体性能的提升非常有限;理论上,基于物理核CPU的实例可以售卖单数vCPU的产品,而对于基于x86超线程的云实例,售卖的产品配置就只能是偶数核。这或许也是目前云产品都是偶数配置的原因之一。
我们分别在基于Ampere Altra CPU的实例SR1和基于x86 CPU的S6实例上进行了h.264编码的测试。无论是单纯的性能,还是综合性价比,SR1实例都优于S6,可以为用户节省30%以上的成本。同时,通过本次测试,我们也验证了单线程物理核设计相对传统超线程模式设计的独特优势,即性能随着核数的增加可线性扩展。
该评测中使用的x264和ffmpeg的版本,编译方法和参考链接如下。
软件 | 编译 |
---|---|
x264 | git clone https://code.videolan.org/videolan/x264.git cd x264 ./configure --disable-opencl --enable-pic --enable-shared --prefix=/opt/cloud/ffmpeg make -j `nproc` sudo make install-lib-shared |
ffmpeg | export PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/opt/cloud/ffmpeg/lib/pkgconfig git clone https://git.ffmpeg.org/ffmpeg.git cd ffmpeg ./configure --enable-gpl --enable-libx264?--disable-stripping?--prefix=/opt/cloud/ffmpeg make -j `nproc` sudo make install |
http://arcade.cs.columbia.edu/vbench/
https://www.videolan.org/developers/x264.html
https://slhck.info/video/2017/02/24/crf-guide.html
https://storage.googleapis.com/ugc-dataset/original_videos/Sports/1080P/Sports_1080P-0063.mkv
原创声明:本文系作者授权便宜云服务器开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权便宜云服务器开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。