AWS EC2 上使用ARM64架构的Gravition CPU注意点

1,095 阅读3分钟

背景

AWS Graviton是AWS自研的基于ARM架构的CPU,转为云服务器工作场景做了优化。相比传统的Intel/AMD X64架构的CPU,Graviton有下面的几个主要的优势:

  1. 性价比更高: 在AWS上,基于AWS Graviton的EC2比Intel X64 CPU单位成本低20%左右
  2. 单核性能更好: Graviton采用物理核心设计,相比X64的超线程技术(每个物理核心有2个超线程),单线程的性能更好
  3. 绿色节能

目前大量的客户使用了Graviton来运行他们的工作负载,在降低整体使用成本低同时提升了程序的性能

典型的用户案例:

此外Graviton与其他云服务商的ARM计算实例相比,性能也更胜一筹,详情见三大云厂商 ARM 架构服务器性能对比

问题

当我们在使用AWS Graviton CPU的时候,很多客户喜欢直接把现有的程序直接由Intel/AMD CPU搬迁到AWS Graviton CPU上,然后发现性能表现不如预期,这主要是下面的原因:

  1. ARM架构在服务器上出现的时间不太久,很多软件为ARM的优化不足
  2. 用户现有的程序大多比较老旧,当时开发的时候ARM在服务器领域还没出现
    1. 可以考虑最新的为ARM优化后的版本,现在这些开源软件基本都做了针对性的优化
    2. 可以考虑使用最新的SDK重新编译/运行自己的程序

各种语言的解决方案和参考

首先是aws-graviton-getting-started非常详细的描述了各种主要场景下的优化和适配建议。此外ARM Community Blog是ARM官方的Blog,也非常值得一读。

我在使用Graviton CPU的过程中,针对不同的情况,我们也可以具体的分析。在使用时先到具体软件的官网检查它们对ARM的支持情况或者直接找AWS解决方案架构师进行询问,比如Introducing the AWS Graviton Ready Program for Graviton-Enabled Software Products

Java

建议使用AWS corretto jdk,同时建议使用JDK11或者JDK17,这些新版本的JDK为ARM做了很多的性能优化。如果你使用JDK8的话能运行,但是可能有些程序运行性能不佳,无法充分发挥Graviton的性能。

PHP

建议使用PHP7.4以上或者PHP8,这些最新的版本为ARM做了非常好的优化

Go

建议使用Go 1.18更新的版本

Python

建议使用python 3.7及以后的版本,最好是python 3.10

Redis

建议使用AWS ElastiCache ARM版本代替自建的Redis;如果自建建议使用Redis 5以及更新的版本。

MySQL

建议使用AWS RDS MySQL或者AWS Aurora MySQL ARM版本代替自建的MySQL;如果自建建议使用MySQL 8以及更新的版本