亚马逊AWS官方博客

使用 Graviton 4 构建 UE5 Dedicated Server 获得极致性价比

Unreal Engine 和 Graviton 介绍

Epic Games 是业界领先的互动娱乐公司和 3D 引擎技术提供商。 虚幻引擎(Unreal Engine,简称 UE)是先进的开源实时 3D 创作工具之一,为包括《堡垒之夜 Fortnite》在内的一些大型游戏提供动力,也被各行各业的创作者所使用。

Amazon Web Services Graviton 是 Amazon 子公司 Annapurna Labs 设计的一系列 ARM64 架构的 CPU。与 X86-64 的 CPU 相比,Graviton 的 CPU 能耗更低、CPU 时钟频率更稳定,同时避免了 SMT 切换的开销。2018 年 Amazon Web Services 发布了第一款 Graviton 实例 A1,这是第一款主流云厂商大规模部署的 ARM 实例。在之后的 2020 年和 2022 年,Amazon Web Services 陆续发布了 Graviton 2Graviton 3 的实例 6g7g,性价比逐步提升(相较于 6 系的 X86 实例分别提升 40% 和 65%)。

而在今年发布的最新的 Graviton 4 实例,则是迄今为止 Amazon Web Services 为各种 workload 设计的最强大并且最高效节能的 CPU。Graviton 4 的实例 R8g 相较于 Graviton 3 的实例 R7g 有大约 30% 的性能提升。早在 2023 年 re:Invent 上,R8g 实例刚刚 preview 的时候,就有超过 100 家客户将他们的 workload 部署在 R8g 上进行测试,并且获得了显著的性能提升,其中就包括 Epic Games。

Epic Games 早在 2021 年就在他们的游戏《堡垒之夜》中大规模使用 Graviton 的案例,在他们的测试中显示,即使是延迟要求最高的那一类游戏,Graviton 3 的实例 C7g 也非常适合,并且还有显著的性价比提升。而在最新的 Graviton 4 实例的测试中,他们发现性能相较于 Graviton 3 更强。目前 Epic Games 已使用了上万个 Graviton 的芯片来承载他们的游戏业务,Graviton 给 Epic Games 带来的价值不仅限于《堡垒之夜》这一款游戏,还包含了所有用 Unreal Engine 构建 Dedicated Server 的游戏。

本文将通过使用 Lyra Starter Game 压测 UE5 Dedicated Server 在不同实例的上的性能表现,来介绍使用 Graviton 4 在 UE5 Dedicated Server(简称 DS) 应用场景下带来的性价比优势。

测试结论

Graviton 4 的实例在 UE Dedicated Server 应用场景下:

  1. 相较于 Graviton 3 有约 25+% 的性价比提升(均使用优化参数编译)
  2. 相较于Intel Sapphire Rapids 和 AMD Genoa 有 30%~35% 的性价比提升
  3. 使用 Graviton 针对 C/C++ 的优化参数来编译 Dedicated Server 对性能提升约 10%~25%

测试方法

此次压测使用 Lyra Starter Game 项目,通过增加 AI Bot 和 GameClient 的方式来增加 Dedicated Server(简称 DS) 的负载,通过对比不同机型以及不同参数编译出的 DS 在 server full 的情况下的 CPU 使用率和 帧率(FPS) 来对比性能。

在 Dedicated Server 运行时,除了通常会关注的服务器 CPU、内存、IO 和网络等指标外,还会关注游戏内的帧率(FPS),帧率的大小反应了游戏内玩家的体验,帧率越小体验越差。此次测试也将 FPS 作为性能指标综合进行评估。

测试指标

  1. DS CPU 使用率(聚合 15min 的 CPU 平均使用率)
  2. Server full 的对局中玩家稳定的 FPS 的数值(由于不同场景中 FPS 的数值有所不同,尽可能选择相同场景的稳定 FPS)

测试环境准备

服务端

  1. UE5 Dedicated Server 打包设置 50 Bots
  2. UE5 打包编译 4 种 Dedicated Server 进行对比:
    1. LinuxServer:X86 机型的 Linux Server
    2. LinuxArm64Server:默认参数编译的 ARM 机型的 Linux Server
    3. LinuxArm64Server-neoverse-v1:使用 Graviton 3 优化参数编译的 ARM 机型的 Linux Server
    4. LinuxArm64Server-neoverse-v2:使用 Graviton 4 优化参数编译的 ARM 机型的 Linux Server
  3. 总共 4 种机型进行测试:
    1. r7i.2xlarge:第四代 Intel Xeon Scalable 处理器 Sapphire Rapids,8 核 64G
    2. r7a.2xlarge:第四代 AMD EPYC 处理器 Genoa,8 核 64G
    3. r7g.2xlarge:Graviton 3 处理器,8 核 64G
    4. r8g.2xlarge:Graviton 4 处理器,8 核 64G
  4. 其中 r7g 和 r8g 的机型分别使用默认参数和优化参数编译的 DS 进行对比
  5. 一共 6 台 DS 进行测试:r7i, r7a, r7g-default, r7g-opt, r8g-default, r8g-opt
  6. 在服务端的 6 台机器上配置 CloudWatch Agent,用以统计每台机器上每个 CPU 核心的使用率

客户端

  1. Bot 客户端:打包 Lyra Starter Game 的 LinuxClient,服务器启动后用 headless 的方式(-nullRHI 参数)连接服务端
  2. 体验客户端:打包 Lyra Starter Game 的 WindowsClient(Development),用于在 DS 高负载时在服务器进行体验,并查看 FPS
  3. 对于每个 DS 各启动 20 个 xlarge 承载 Bot 客户端来连接服务器,共 120 台 c7i.xlarge LinuxClient

测试过程

启动服务端

由于 Dedicated Server 运行在单个 CPU 核上,本次测试使用 taskset 命令将 Dedicated Server 进程绑定在特定的核上运行,方便监控统计并且避免不同 CPU 核心的上下文切换。

分别在六台机器上运行 Dedicated Server 并将服务端日志写入到本地文件 server.log,命令大致如下:

taskset -c 6 /home/ec2-user/performance-test-bot50/LinuxArm64Server/LyraServer-Arm64.sh -log &> ~/server.log &
  1. taskset -c 6:指定进程运行在 CPU6 上
  2. LinuxArm64Server 是 UE5 打包的默认参数的 ARM 机型 LinuxServer,不同的机器上运行不同的 LinuxServer

服务端成功启动后,会默认监听 7777 UDP 端口,可以通过在外部机器上运行以下命令测试端口是否可达

nc -uv x.x.x.x 7777

启动体验客户端

先将体验客户端连接到 DS,避免 Bot 客户端占满所有资源导致体验客户端无法登录。

用类似以下命令启动体验客户端并连接 DS

C:\Users\Administrator\Desktop\package\WindowsClient\LyraClient.exe x.x.x.x:7777 -WINDOWED -ResX=800 -ResY=450

WindowsClient 就是 UE 打包的 Development Windows Client

在游戏中按下 ` 键打开 console,输入 stat fps 将帧率打印在客户端右上方,类似如下

启动 Bot 客户端

通过 python boto3 ssm.sent_command 对 120 台客户端执行命令,核心逻辑如下

def start_bot(bot_instance_id, server_ip):
    ssm = boto3.client('ssm')
    response = ssm.send_command(
        InstanceIds=[bot_instance_id],
        DocumentName='AWS-RunShellScript',
        Parameters={
            'commands': ['runuser -l ubuntu -c "/home/ubuntu/LinuxClient-Developer/LyraClient.sh %s:7777 -nullRHI"' % server_ip]
        }
    )
    print(response)
  1. 不同的 bot 访问不同的 server_ip(每个 server 分配 20 个 bot client)
  2. LinuxClient-Developer 是 UE 打包的 LinuxClient
  3. 在 Ubuntu 的机器上用 ubuntu 用户运行 LinuxClient(LinuxClient 有一些依赖无法用 root 运行)

Bot 客户端连到 DS 后会对 DS 增加很高的负载,同时可以看到服务端打印出 server full,类似如下

此时压测已开始,用体验客户端在游戏内进行测试,并且记录 FPS。

测试数据统计

r7i.2x r7a.2x r7g.2x default r7g.2x opt r8g.2x default r8g.2x opt
CPU Usage 78.92% 74.30% 97.34% 90.36% 76.01% 75.50%
FPS 31.8 32.68 30.2 35.2 35.23 37.2
Performance score
(Idle cpu + FPS)
52.88 58.38 32.86 44.84 59.22 61.7
On-Demand Hourly Cost 0.5292 0.6086 0.4284 0.4284 0.47128 0.47128
Performance price score 99.92 95.93 76.7 104.67 125.66 130.92

可以看到 Graviton 4 的实例配合编译优化,可以获得更高的性价比。

在对局最激烈的过程中,聚合 15min CPU 的平均值如下

总结

Epic Games 和 Amazon Web Services 的合作,在 UE 引擎上支持 ARM 架构的编译,帮助广大 UE 的开发者可以很方便地享受到 Graviton 实例带来的性价比。而使用 Amazon Web Services 最新发布的 Graviton 4 实例,让 UE Dedicated Server 运行的性价比进一步提升。

本文介绍了通过 Lyra Starter Game UE5 Dedicated Server 在不同机型上压测的性能表现,展示了 Graviton 4 实例在 UE Dedicated Server 应用下的极致性价比,欢迎更多的 UE 开发者测试 Amazon Web Services Graviton 4 实例并感受它带来的性价比提升。

本篇作者

王睿

亚马逊云科技高级解决方案架构师,曾就职于网易游戏和腾讯,从事过 SRE 以及 Game SDE,在游戏和云计算行业有丰富的实践经验。

汤力嘉

亚马逊云科技高级解决方案架构师,负责基于亚马逊云科技的云计算方案的架构设计,在游戏、多媒体方向有丰富部署实践经验。