背景
AWS Graviton是AWS自研的基于ARM架构的CPU,转为云服务器工作场景做了优化。相比传统的Intel/AMD X64架构的CPU,Graviton有下面的几个主要的优势:
- 性价比更高: 在AWS上,基于AWS Graviton的EC2比Intel X64 CPU单位成本低20%左右
- 单核性能更好: Graviton采用物理核心设计,相比X64的超线程技术(每个物理核心有2个超线程),单线程的性能更好
- 绿色节能
目前大量的客户使用了Graviton来运行他们的工作负载,在降低整体使用成本低同时提升了程序的性能
典型的用户案例:
此外Graviton与其他云服务商的ARM计算实例相比,性能也更胜一筹,详情见三大云厂商 ARM 架构服务器性能对比
问题
当我们在使用AWS Graviton CPU的时候,很多客户喜欢直接把现有的程序直接由Intel/AMD CPU搬迁到AWS Graviton CPU上,然后发现性能表现不如预期,这主要是下面的原因:
- ARM架构在服务器上出现的时间不太久,很多软件为ARM的优化不足
- 用户现有的程序大多比较老旧,当时开发的时候ARM在服务器领域还没出现
- 可以考虑最新的为ARM优化后的版本,现在这些开源软件基本都做了针对性的优化
- 可以考虑使用最新的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的性能。
- Java on Graviton
- Java on Arm processors: Understanding AArch64 vs. x86
- Java on Arm: The AArch64 hardware, software, cloud, and JDK
- The status of Java on Arm
- How Zomato Boosted Performance 25% and Cut Compute Cost 30% Migrating Trino and Druid Workloads to AWS Graviton
- GCP, AWS, and Azure ARM-Based Server Performance Comparison
- Java Vector API on AArch64
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以及更新的版本