亚马逊AWS官方博客
基于 AWS Graviton2 Arm 架构处理器的 Amazon EC2 C6g 实例为转码工作负载带来更高的性价比
背景介绍
AWS 与2020年6月11日全新推出了两个基于 AWS Graviton 2 处理器的新实例系列:C6g 和 R6g,在之前已发布的 M6g 基础之上,对于客户在 AWS 上构建基于 Arm 的原生应用程序,拥有了更加丰富的选择,同时为在 Amazon EC2 中运行的工作负载提供了出色的性价比。 所有基于 AWS Graviton2 的实例都建立在 AWS Nitro 系统之上,该系统是 AWS 设计的硬件和软件的集合,实现了多租户隔离,专用网络和快速的本地存储。 这些实例提供高达19 Gbps 的 Amazon Elastic Block Store(EBS) 带宽和高达25 Gbps 的网络带宽。 M 系列实例是旨在解决各种通用工作负载的实例类型,例如应用程序服务器,游戏服务器,中型数据库,缓存集群, Web 应用等。C 系列实例非常适合计算密集型工作负载,例如高性能计算 (HPC),批处理,广告平台,视频编码,游戏,科学建模,分布式数据分析和基于 CPU 的机器学习推理等。R 系列实例非常适合内存密集型工作负载,例如开源数据库,内存中的缓存或实时大数据分析等。
实例大小 | vCPU | 内存 (GiB) | 网络带宽 (Gbps) | EBS带宽 (Mbps) |
M6g / R6g / C6g | M6g / R6g / C6g | |||
medium | 1 | 4/ 8 / 2 | Up to 10 | Up to 4,750 |
large | 2 | 8 / 16 / 4 | Up to 10 | Up to 4,750 |
xlarge | 4 | 16 / 32 / 8 | Up to 10 | Up to 4,750 |
2xlarge | 8 | 32 / 64 / 16 | Up to 10 | Up to 4,750 |
4xlarge | 16 | 64 / 128 / 32 | Up to 10 | 4,750 |
8xlarge | 32 | 128 / 256 / 64 | 12 | 9,000 |
12xlarge | 48 | 192/ 384 / 96 | 20 | 13,500 |
16xlarge | 64 | 256 / 512 / 128 | 25 | 19,000 |
metal | 64 | 256 / 512 / 128 | 25 | 19,000 |
为了展示 Amazon EC2 C6g 实例为转码工作负载所带来的更好的性价比,我们使用 FFmpeg 最新版本(4.3)对 C5 以及 C6g 实例的转码性能做了详细的对比测试。
AWS Graviton 系列处理器简介
AWS Graviton 2处理器基于64位 Arm Neoverse 内核打造,由 AWS 设计的定制芯片提供支持,该芯片使用先进的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%的性价比优势。
AWS Graviton 第一代 | AWS Graviton 第二代 | |
ISA | ARM V8 | ARM V8.2 |
微架构 | Cortex-A72 | Neoverse N1 |
核心数 | 4 * 4 | 64 |
线程数 | 16 | 64 |
主频 | 2.3 GHz | 2.5 GHz |
L1i Cache | 48 KB * 16 | 64 KB * 64 |
L1d Cache | 32 KB * 16 | 64 KB * 64 |
L2 Cache | 2 MB * 4 | 1 MB * 16 |
L3 Cache | 无 | 32 MB 共享 |
BogoMIPS | 166.66 | 243.75 |
工艺 | 26纳米 | 7纳米 |
支持指令集 | 8个 | 17个 |
测试机型成本对比
以本次测试机型为例,在 AWS us-ease-1 (N. Virginia) 区域,相同配置的 C6g 实例比 C5 实例价格低20%:
实例大小 | >配置 | C5 按需实例价格 $/小时 | C6g 按需实例价格 $/小时 |
4xlarge | 16 core 32 GB | 0.68 | 0.544 |
测试环境
测试系统以及环境信息
机型 | C5.4xlarge | C6g.4xlarge |
CPU | Intel Xeon Platinum 8000 | AWS Graviton 2 |
主频 | 3.4 GHz | 2.5 GHz |
微架构 | Skylake | Neoverse N1 |
配置 | 16 Core 64 GB | 16 Core 64 GB |
OS | Debian 10 | Debian 10 |
内核版本 | Linux version 4.19.0-9-amd64 | Linux version 4.19.0-9-arm64 |
GCC | gcc (Debian 8.3.0-6) 8.3.0 | gcc (Debian 8.3.0-6) 8.3.0 |
测试软件版本 | FFmpeg 4.3 | FFmpeg 4.3 |
测试环境搭建(Amazon EC2 C6g)
安装编译依赖工具包
sudo apt-get -y update && \
sudo DEBIAN_FRONTEND=noninteractive apt-get upgrade -yq && \
sudo apt-get -y install cmake && \
sudo apt-get -y install pkg-config && \
sudo apt-get install software-properties-common && \
sudo apt-get install git -y && \
sudo apt-get install gcc-arm* -y && \
sudo apt-get install aarch64* -y
同步,编译并安装 libx264
wget https://download.videolan.org/x264/snapshots/x264-snapshot-20191217-2245.tar.bz2 && \
tar jxvf x264-snapshot-20191217-2245.tar.bz2 && \
cd x264-snapshot-20191217-2245 && \
mkdir build && \
cd build && \
../configure --enable-static --enable-shared \
--host=aarch64-linux --extra-cflags="-march=native" && \
make && \
sudo make install
同步,编译并安装 FFmpeg
git clone https://github.com/FFmpeg/ffmpeg.git && \
cd ffmpeg && \
mkdir build && \
cd build && \
../configure --cross-prefix=aarch64-linux-gnu- \
--enable-cross-compile --target-os=linux \
--arch=aarch64 --prefix=/usr/local/ffmpeg \
--enable-gpl --enable-ffmpeg --enable-libx264 \
--enable-nonfree --enable-swscale --enable-pthreads \
--disable-armv5te --disable-armv6 --disable-armv6t2 \
--extra-cflags="-I/usr/local/include -march=native" \
--extra-ldflags=-L/usr/local/lib --extra-libs=-ldl --enable-pic && \
make && \
sudo make install && \
export PATH="/usr/local/ffmpeg/bin:$PATH"
添加 libx264 路径
vim /etc/ld.so.conf
在配置文件中增加如下内容来添加 FFmpeg 库路径
/usr/local/ffmpeg/lib
保存退出后,运行以下命令使配置生效
ldconfig
测试环境搭建(Amazon EC2 C5)
安装编译依赖工具包
sudo apt-get -y update && \
sudo DEBIAN_FRONTEND=noninteractive apt-get upgrade -yq && \
sudo apt-get -y install \
autoconf \
automake \
build-essential \
cmake \
git-core \
libass-dev \
libfreetype6-dev \
libsdl2-dev \
libtool \
libva-dev \
libvdpau-dev \
libvorbis-dev \
libxcb1-dev \
libxcb-shm0-dev \
libxcb-xfixes0-dev \
pkg-config \
texinfo \
wget \
zlib1g-dev
安装 FFmpeg 库
sudo apt-get install nasm -y && \
sudo apt-get install yasm -y && \
sudo apt-get install libx264-dev -y && \
sudo apt-get install libnuma-dev -y && \
sudo apt-get install libvpx-dev -y && \
sudo apt-get install libfdk-aac-dev -y && \
sudo apt-get install libmp3lame-dev -y && \
sudo apt-get install libopus-dev -y
同步,编译并安装 FFmpeg
git clone https://github.com/FFmpeg/ffmpeg.git && \
mkdir -p ~/ffmpeg_build ~/bin
cd ~/ffmpeg && \
PATH="$HOME/bin:$PATH" PKG_CONFIG_PATH="$HOME/ffmpeg_build/lib/pkgconfig" ./configure \
--prefix="$HOME/ffmpeg_build" \
--pkg-config-flags="--static" \
--extra-cflags="-I$HOME/ffmpeg_build/include" \
--extra-ldflags="-L$HOME/ffmpeg_build/lib" \
--extra-libs="-lpthread -lm" \
--bindir="$HOME/bin" \
--enable-gpl \
--enable-libfreetype \
--enable-libx264 \
--enable-version3 \
--enable-nonfree && \
PATH="$HOME/bin:$PATH" make && \
sudo make install
测试方法
本次测试选取了 5 个公开的视频序列进行转码测试,每个视频序列有不同的场景特征。源视频序列均为 h.264编码的1080p视频,帧率为24f,码率为16Mbps,测试过程会分别转码为不同规格的输出视频,同时转码5路,尽量压满 CPU 的情况下,测试 FFmpeg 平均转码倍速(转码倍速越高,代表转码性能越强),转码输出 VMAF 视频质量分数(VMAF 分数越高,转码输出质量越好),以及转码输出文件大小(转码输出文件越小,压缩率越高)。
Codec | 分辨率 | 帧率 | 码率 | |
输出1 | h.264 | 1920×1080 | 24f | 4000Kbps |
输出2 | h.264 | 1280×720 | 24f | 2500kbps |
输出3 | h.264 | 960×480 | 24f | 900Kbps |
转码测试使用两种不同的 profile,分别是质量优先 (High Quality) 和速度优先 (Low Latency),具体参数如下:
质量优先 (High Quality):
ffmpeg -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):
ffmpeg -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 质量分数对比
转码压缩率对比
测试结果详细数据
crowd-run-1080p-24f-16Mbps High Quality | 1920*1080-24f-4Mbps | 1280*720-24f-2.5Mbps | 800*480-24f-0.9Mbps | ||||
c5.4x | c6g.4x | c5.4x | c6g.4x | c5.4x | c6g.4x | ||
转码 1 路 | CPU利用率 | 88% | 88% | 85% | 81% | 69% | 60% |
转码倍速 | 3.09 | 3.21 | 5.37 | 5.18 | 8.57 | 7.15 | |
转码 5 路 | CPU利用率 | 99% | 99% | 98% | 98% | 96% | 97% |
转码倍速 | 0.64 | 0.7 | 1.14 | 1.21 | 2.05 | 2.19 | |
VMAF质量分数 | 76.31 | 76.36 | 63.05 | 62.86 | 34.2 | 33.74 | |
转码能力(路数*倍速) | 3.2 | 3.5 | 5.7 | 6.05 | 10.25 | 10.95 | |
文件大小(MB) | 73.8 | 74 | 43.9 | 43.6 | 15.6 | 15.3 |
crowd-run-1080p-24f-16Mbps Low Latency | 1920*1080-24f-4Mbps | 1280*720-24f-2.5Mbps | 800*480-24f-0.9Mbps | ||||
c5.4x | c6g.4x | c5.4x | c6g.4x | c5.4x | c6g.4x | ||
转码 1 路 | CPU利用率 | 87% | 87% | 83% | 77% | 67% | 57% |
转码倍速 | 3.51 | 3.58 | 5.96 | 5.52 | 8.96 | 7.23 | |
转码 5 路 | CPU利用率 | 98% | 98% | 97% | 98% | 96% | 97% |
转码倍速 | 0.72 | 0.78 | 1.26 | 1.34 | 2.2 | 2.33 | |
VMAF质量分数 | 75.36 | 75.44 | 62.5 | 62.11 | 33.96 | 33.44 | |
转码能力(路数*倍速) | 3.6 | 3.9 | 6.3 | 6.7 | 11 | 11.65 | |
文件大小(MB) | 76.3 | 76.3 | 47.7 | 47.7 | 17.2 | 17.2 |
life-1080p-24f-16Mbps High Quality | 1920*1080-24f-4Mbps | 1280*720-24f-2.5Mbps | 800*480-24f-0.9Mbps | ||||
c5.4x | c6g.4x | c5.4x | c6g.4x | c5.4x | c6g.4x | ||
转码 1 路 | CPU利用率 | 82% | 82% | 78% | 69% | 58% | 50% |
转码倍速 | 3.75 | 3.84 | 6.34 | 5.55 | 9.17 | 7.2 | |
转码 5 路 | CPU利用率 | 99% | 99% | 98% | 98% | 97% | 96% |
转码倍速 | 0.81 | 0.89 | 1.4 | 1.51 | 2.49 | 2.62 | |
VMAF质量分数 | 94.18 | 94.22 | 87.11 | 87 | 66.83 | 66.81 | |
转码能力(路数*倍速) | 4.05 | 4.45 | 7 | 7.55 | 12.45 | 13.1 | |
文件大小(MB) | 72.2 | 72.4 | 45.6 | 45.1 | 15.8 | 15.7 |
life-1080p-24f-16Mbps Low Latency | 1920*1080-24f-4Mbps | 1280*720-24f-2.5Mbps | 800*480-24f-0.9Mbps | ||||
c5.4x | c6g.4x | c5.4x | c6g.4x | c5.4x | c6g.4x | ||
转码 1 路 | CPU利用率 | 81% | 82% | 76% | 64% | 55% | 46% |
转码倍速 | 4.28 | 4.35 | 7.04 | 5.75 | 9.57 | 7.2 | |
转码 5 路 | CPU利用率 | 99% | 99% | 98% | 97% | 97% | 96% |
转码倍速 | 0.93 | 1.01 | 1.59 | 1.69 | 2.71 | 2.84 | |
VMAF质量分数 | 93.8 | 93.8 | 86.44 | 86.42 | 65.78 | 65.65 | |
转码能力(路数*倍速) | 4.65 | 5.05 | 7.95 | 8.45 | 13.55 | 14.2 | |
文件大小(MB) | 78.7 | 78.7 | 49.2 | 49.2 | 17.7 | 17.7 |
old-town-1080p-24f-16Mbps High Quality | 1920*1080-24f-4Mbps | 1280*720-24f-2.5Mbps | 800*480-24f-0.9Mbps | ||||
c5.4x | c6g.4x | c5.4x | c6g.4x | c5.4x | c6g.4x | ||
转码 1 路 | CPU利用率 | 83% | 83% | 80% | 71% | 62% | 55% |
转码倍速 | 3.59 | 3.66 | 6.1 | 5.38 | 8.9 | 7.21 | |
转码 5 路 | CPU利用率 | 99% | 99% | 97% | 98% | 97% | 96% |
转码倍速 | 0.78 | 0.85 | 1.34 | 1.43 | 2.3 | 2.4 | |
VMAF质量分数 | 94.28 | 94.29 | 88.04 | 88.03 | 70.72 | 70.71 | |
转码能力(路数*倍速) | 3.9 | 4.25 | 6.7 | 7.15 | 11.5 | 12 | |
文件大小(MB) | 53.2 | 53.2 | 34.1 | 34 | 12.8 | 12.7 |
old-town-1080p-24f-16Mbps Low Latency | 1920*1080-24f-4Mbps | 1280*720-24f-2.5Mbps | 800*480-24f-0.9Mbps | ||||
c5.4x | c6g.4x | c5.4x | c6g.4x | c5.4x | c6g.4x | ||
转码 1 路 | CPU利用率 | 83% | 83% | 78% | 67% | 61% | 52% |
转码倍速 | 4.09 | 4.15 | 6.72 | 5.61 | 9.42 | 7.29 | |
转码 5 路 | CPU利用率 | 99% | 99% | 97% | 98% | 97% | 96% |
转码倍速 | 0.88 | 0.96 | 1.49 | 1.58 | 2.5 | 2.59 | |
VMAF质量分数 | 94.03 | 94.04 | 87.86 | 87.86 | 70.4 | 70.4 | |
转码能力(路数*倍速) | 4.4 | 4.8 | 7.45 | 7.9 | 12.5 | 12.95 | |
g4dn.2x/c5.4x(16c32g) | 4.98 | 6.52 | 3.64 | ||||
文件大小(MB) | 76.3 | 76.3 | 47.7 | 47.7 | 17.2 | 17.2 |
park-joy-1080p-24f-16Mbps High Quality | 1920*1080-24f-4Mbps | 1280*720-24f-2.5Mbps | 800*480-24f-0.9Mbps | ||||
c5.4x | c6g.4x | c5.4x | c6g.4x | c5.4x | c6g.4x | ||
转码 1 路 | CPU利用率 | 83% | 83% | 81% | 75% | 64% | 56% |
转码倍速 | 3.5 | 3.53 | 6.03 | 5.51 | 8.94 | 7.23 | |
转码 5 路 | CPU利用率 | 99% | 99% | 97% | 97% | 97% | 97% |
转码倍速 | 0.75 | 0.81 | 1.3 | 1.38 | 2.3 | 2.39 | |
VMAF质量分数 | 68.28 | 68.34 | 58.22 | 58.21 | 34.28 | 34.26 | |
转码能力(路数*倍速) | 3.75 | 4.05 | 6.5 | 6.9 | 11.5 | 11.95 | |
文件大小(MB) | 56.1 | 56.2 | 34.2 | 34.1 | 12.5 | 12.5 |
park-joy-1080p-24f-16Mbps Low Latency | 1920*1080-24f-4Mbps | 1280*720-24f-2.5Mbps | 800*480-24f-0.9Mbps | ||||
c5.4x | c6g.4x | c5.4x | c6g.4x | c5.4x | c6g.4x | ||
转码 1 路 | CPU利用率 | 83% | 83% | 80% | 73% | 62% | 53% |
转码倍速 | 3.79 | 3.81 | 6.46 | 5.69 | 9.29 | 7.3 | |
转码 5 路 | CPU利用率 | 98% | 99% | 98% | 97% | 97% | 95% |
转码倍速 | 0.8 | 0.87 | 1.42 | 1.48 | 2.44 | 2.5 | |
VMAF质量分数 | 68.65 | 68.78 | 58.67 | 58.75 | 34.38 | 34.4 | |
转码能力(路数*倍速) | 4 | 4.35 | 7.1 | 7.4 | 12.2 | 12.5 | |
文件大小(MB) | 76.3 | 76.3 | 47.7 | 47.7 | 17.2 | 17.2 |
sunflower-1080p-24f-16Mbps High Quality | 1920*1080-24f-4Mbps | 1280*720-24f-2.5Mbps | 800*480-24f-0.9Mbps | ||||
c5.4x | c6g.4x | c5.4x | c6g.4x | c5.4x | c6g.4x | ||
转码 1 路 | CPU利用率 | 86% | 85% | 83% | 78% | 66% | 57% |
转码倍速 | 3.26 | 3.33 | 5.7 | 5.38 | 8.93 | 7.27 | |
转码 5 路 | CPU利用率 | 99% | 99% | 98% | 98% | 97% | 96% |
转码倍速 | 0.68 | 0.74 | 1.22 | 1.31 | 2.24 | 2.34 | |
VMAF质量分数 | 98.81 | 98.84 | 97.95 | 97.96 | 88.78 | 88.6 | |
转码能力(路数*倍速) | 3.4 | 3.7 | 6.1 | 6.55 | 11.2 | 11.7 | |
文件大小(MB) | 66.4 | 67.1 | 41.6 | 41.4 | 13.7 | 13.5 |
sunflower-1080p-24f-16Mbps Low Latency | 1920*1080-24f-4Mbps | 1280*720-24f-2.5Mbps | 800*480-24f-0.9Mbps | ||||
c5.4x | c6g.4x | c5.4x | c6g.4x | c5.4x | c6g.4x | ||
转码 1 路 | CPU利用率 | 85% | 85% | 81% | 71% | 61% | 52% |
转码倍速 | 3.7 | 3.77 | 6.46 | 5.72 | 9.35 | 7.28 | |
转码 5 路 | CPU利用率 | 99% | 99% | 98% | 97% | 97% | 97% |
转码倍速 | 0.78 | 0.85 | 1.4 | 1.48 | 2.46 | 2.6 | |
VMAF质量分数 | 98.63 | 98.66 | 97.63 | 97.58 | 87.96 | 87.87 | |
转码能力(路数*倍速) | 3.9 | 4.25 | 7 | 7.4 | 12.3 | 13 | |
文件大小(MB) | 76.3 | 76.3 | 47.7 | 47.7 | 17.2 | 17.2 |
测试结论
测试结果表明,在与 Amazon EC2 C5 实例的对比测试中,C6g 展示了对于转码工作负载更高的性价比,结论如下:
- 在不同转码场景和分辨率输出测试中,多路转码在 CPU 满载的情况下,C6g 比 C5 实例整体转码性能提升了5%~10%,转码输出分辨率越高,性能提升越明显
- 考虑到 C6g 比 C5 机型价格便宜20%,对于转码的工作负载,C6g 比 C5 实例的性价比提升了30%~35%
- C6g 与 C5 实例转码输出结果的视频质量以及文件大小几乎相同
- FFmpeg 新版本(4.3及以上)针对 Arm 架构 CPU 做了优化,相对老版本提高了单路转码 CPU 占用率