基于 Amazon Graviton2 Arm 架构处理器的 Amazon EC2 C6g 实例为转码工作负载带来更高的性价比...

背景介绍

亚马逊云科技与2020年6月11日全新推出了两个基于 Amazon Graviton 2 处理器的新实例系列:C6g 和 R6g,在之前已发布的 M6g 基础之上,对于客户在亚马逊云科技上构建基于 Arm 的原生应用程序,拥有了更加丰富的选择,同时为在 Amazon EC2 中运行的工作负载提供了出色的性价比。所有基于Amazon Graviton2 的实例都建立在 Amazon Nitro 系统之上,该系统是亚马逊云科技设计的硬件和软件的集合,实现了多租户隔离,专用网络和快速的本地存储。这些实例提供高达19 Gbps 的 Amazon Elastic Block Store(EBS) 带宽和高达25 Gbps 的网络带宽。M系列实例是旨在解决各种通用工作负载的实例类型,例如应用程序服务器,游戏服务器,中型数据库,缓存集群、Web 应用等。C 系列实例非常适合计算密集型工作负载,例如高性能计算(HPC),批处理,广告平台,视频编码,游戏,科学建模,分布式数据分析和基于CPU的机器学习推理等。R 系列实例非常适合内存密集型工作负载,例如开源数据库,内存中的缓存或实时大数据分析等。

为了展示 Amazon EC2 C6g 实例为转码工作负载所带来的更好的性价比,我们使用 FFmpeg 最新版本(4.3)对 C5 以及 C6g 实例的转码性能做了详细的对比测试。

Amazon Graviton 系列处理器简介

Amazon Graviton 2处理器基于64位 Arm Neoverse 内核打造,由亚马孙云科技设计的定制芯片提供支持,该芯片使用先进的7纳米制造技术构建。Graviton 2处理器的内核具备64 KB L1高速缓存和1 MB L2高速缓存,包括双 SIMD 单元,与第一代 Graviton 处理器相比,浮点性能提高了1倍,性能提升 7 倍、计算内核数量增加 4 倍,缓存增加 2 倍,内存速度提升 5 倍。这不仅针对高性能计算工作负载,还支持 int8 / fp16数字格式,以加快机器学习推理工作负载。每个 vCPU 都是一个物理核心,非同步多线程技术(SMT),同时每个物理内核通往内存和其他物理内核的路径都是相同的,因此也避免了 NUMA 问题的出现。有8个 DDR4内存通道以3200 MT / s 的速度运行,可提供超过200 GB / s 的峰值内存带宽。与基于 x86 架构的 M5,C5和R5 系列的 Amazon EC2实例相比相比,基于Graviton 2 处理器的实例类型可提供高达40%的性价比优势。

测试机型成本对比

以本次测试机型为例,在Amazon us-ease-1 (N. Virginia) 区域,相同配置的 C6g 实例比 C5 实例价格低20%:

测试环境

测试系统以及环境信息

测试环境搭建(Amazon EC2 C6g)

安装编译依赖工具包

1sudo apt-get -y update && \
2sudo DEBIAN_FRONTEND=noninteractive apt-get upgrade -yq && \
3sudo apt-get -y install cmake && \
4sudo apt-get -y install pkg-config && \
5sudo apt-get install software-properties-common && \
6sudo apt-get install git -y && \
7sudo apt-get install gcc-arm* -y && \
8sudo apt-get install aarch64* -y

同步,编译并安装 libx264

1wget https://download.videolan.org/x264/snapshots/x264-snapshot-20191217-2245.tar.bz2 && \
2tar jxvf x264-snapshot-20191217-2245.tar.bz2 && \
3cd x264-snapshot-20191217-2245 && \
4mkdir build && \
5cd build && \
6../configure --enable-static --enable-shared \
7--host=aarch64-linux --extra-cflags="-march=native" && \
8make && \
9sudo make install

同步,编译并安装 FFmpeg

 1git clone https://github.com/FFmpeg/ffmpeg.git && \
 2cd ffmpeg && \
 3mkdir build && \
 4cd build && \
 5../configure --cross-prefix=aarch64-linux-gnu- \
 6    --enable-cross-compile --target-os=linux \
 7    --arch=aarch64 --prefix=/usr/local/ffmpeg \
 8    --enable-gpl --enable-ffmpeg --enable-libx264 \
 9    --enable-nonfree --enable-swscale --enable-pthreads \
10    --disable-armv5te --disable-armv6 --disable-armv6t2  \
11    --extra-cflags="-I/usr/local/include -march=native" \
12    --extra-ldflags=-L/usr/local/lib  --extra-libs=-ldl  --enable-pic && \
13make && \
14sudo make install && \
15export PATH="/usr/local/ffmpeg/bin:$PATH"

添加 libx264 路径

1vim /etc/ld.so.conf

在配置文件中增加如下内容来添加 FFmpeg 库路径

1/usr/local/ffmpeg/lib

保存退出后,运行以下命令使配置生效

1ldconfig

测试环境搭建(Amazon EC2 C5)

安装编译依赖工具包

 1sudo apt-get -y update && \
 2sudo DEBIAN_FRONTEND=noninteractive apt-get upgrade -yq && \
 3sudo apt-get -y install \
 4  autoconf \
 5  automake \
 6  build-essential \
 7  cmake \
 8  git-core \
 9  libass-dev \
10  libfreetype6-dev \
11  libsdl2-dev \
12  libtool \
13  libva-dev \
14  libvdpau-dev \
15  libvorbis-dev \
16  libxcb1-dev \
17  libxcb-shm0-dev \
18  libxcb-xfixes0-dev \
19  pkg-config \
20  texinfo \
21  wget \
22  zlib1g-dev

安装 FFmpeg 库

1sudo apt-get install nasm -y && \
2sudo apt-get install yasm -y && \
3sudo apt-get install libx264-dev -y && \
4sudo apt-get install libnuma-dev -y && \
5sudo apt-get install libvpx-dev -y && \
6sudo apt-get install libfdk-aac-dev -y && \
7sudo apt-get install libmp3lame-dev -y && \
8sudo apt-get install libopus-dev -y

同步,编译并安装 FFmpeg

 1git clone https://github.com/FFmpeg/ffmpeg.git && \
 2mkdir -p ~/ffmpeg_build ~/bin
 3cd ~/ffmpeg && \
 4PATH="$HOME/bin:$PATH" PKG_CONFIG_PATH="$HOME/ffmpeg_build/lib/pkgconfig" ./configure \
 5  --prefix="$HOME/ffmpeg_build" \
 6  --pkg-config-flags="--static" \
 7  --extra-cflags="-I$HOME/ffmpeg_build/include" \
 8  --extra-ldflags="-L$HOME/ffmpeg_build/lib" \
 9  --extra-libs="-lpthread -lm" \
10  --bindir="$HOME/bin" \
11  --enable-gpl \
12  --enable-libfreetype \
13  --enable-libx264 \
14  --enable-version3 \
15  --enable-nonfree && \
16PATH="$HOME/bin:$PATH" make && \
17sudo make install

测试方法

本次测试选取了 5 个公开的视频序列进行转码测试,每个视频序列有不同的场景特征。源视频序列均为 h.264编码的1080p视频,帧率为24f,码率为16Mbps,测试过程会分别转码为不同规格的输出视频,同时转码5路,尽量压满 CPU 的情况下,测试 FFmpeg 平均转码倍速(转码倍速越高,代表转码性能越强),转码输出 VMAF 视频质量分数(VMAF 分数越高,转码输出质量越好),以及转码输出文件大小(转码输出文件越小,压缩率越高)。

转码测试使用两种不同的 profile,分别是质量优先 (High Quality) 和速度优先 (Low Latency),具体参数如下:

质量优先 (High Quality):

1ffmpeg -i <INPUT> -c:v libx264 -c:a copy -preset medium -b:v <BITRATE> -bufsize <BITRATE*2> -vf scale=<W:H> -profile:v high -tune psnr -threads <vCPU*2> -vsync 0 <OUTPUT>

速度优先 (Low Latency):

1ffmpeg -i <INPUT> -c:v libx264 -c:a copy -preset fast -b:v <BITRATE> -bufsize <BITRATE/FRATE> -vf scale=<W:H>  -profile:v high -g 999999 -x264opts no-sliced-threads:nal-hrd=cbr -tune psnr -threads <vCPU*2> -vsync 0 <OUTPUT>

测试结果

测试结果对比

在图表中,不同颜色柱状图代表不同机型的转码倍速值,左侧纵轴为不同的转码源文件以及不同的转码 profile,质量优先 (High Quality) 速度优先 (Low Latency):

1080p 转码能力(倍速)对比

720p 转码能力(倍速)对比

480p 转码能力(倍速)对比

VMAF 质量分数对比

转码压缩率对比

测试结果详细数据

测试结论

测试结果表明,在与 Amazon EC2 C5 实例的对比测试中,C6g 展示了对于转码工作负载更高的性价比,结论如下:

  • 在不同转码场景和分辨率输出测试中,多路转码在 CPU 满载的情况下,C6g 比 C5 实例整体转码性能提升了5%~10%,转码输出分辨率越高,性能提升越明显

  • 考虑到 C6g 比 C5 机型价格便宜20%,对于转码的工作负载,C6g 比C5 实例的性价比提升了30%~35%

  • C6g 与 C5 实例转码输出结果的视频质量以及文件大小几乎相同

  • FFmpeg 新版本(4.3及以上)针对 Arm 架构 CPU 做了优化,相对老版本提高了单路转码 CPU 占用率

本篇作者

李智雪

亚马逊云科技解决方案架构师

负责亚马逊云科技的云计算方案架构的咨询和设计,同时致力于亚马逊云科技的云服务在互联网行业以及媒体行业应用和推广。加入亚马逊云科技之前曾就职于微软、爱立信等公司,有十余年媒体行业以及解决方案架构师从业经验。


听说,点完下面4个按钮

就不会碰到bug了!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值