手把手带你体验 Amazon Graviton2 的高性价比!文末有惊喜
近日,Amazon Graviton2 支持的 Amazon EC2 M6g 实例正式发布,“g”代表“Amazon Graviton2”,这是亚马逊云科技的第二代基于 ARM 架构的芯片,由 Annapurna Labs(亚马逊子公司)利用 64 位 ARM Neoverse N1 微架构设计,根据 ARM 官网资料可以得知这个 ARM 第一款数据中心定位的 CPU 架构。Amazon Graviton2 的 M6g 实例和亚马逊云科技第一代基于 ARM Cortex-A72 微架构的 A1 实例相比整数性能最高提升 7 倍。
在 Amazon EC2 M6g 推出后不久 M6gd、R6g、R6gd、C6g、C6gd、T4g、C6gn 等系列实例连续推出,目前基于 Amazon Graviton2 的实例已经有 69 款之多,支持的 region 数量也在不断扩大。亚马逊云科技诸多托管服务如 Amazon RDS,Amazon EMR,Amazon Elasticache,Amazon EKS 也陆续 GA 了基于 Amazon Graviton2 的实例支持。这些托管服务方便客户直接享受到 Amazon Graviton2 的高性价比,从正式发布新闻稿可以看到, Apache Spark 的 EMR 运行时与 Amazon EC2 M6g 实例的组合可将总成本降低多达 76% 并将性能提高 3.6 倍。Amazon Graviton2 实例最高可以为 RDS 开源数据库提供 35% 的性能改进和 52% 的性价比提高。Amazon Graviton2 成为了 Amazon ElastiCache 默认选项,可实现高达 45% 的性价比提升。
在 Amazon Graviton2 官网和公开案例中我们已经可以发现众多行业客户开始采用。在 Web 应用、游戏、高性能运算、EDA 设计、媒体编解码、数据分析、数据库、内存缓存以及微服务等领域, Amazon Graviton2 均实现了大幅的性价比提升。
探索 Amazon Graviton2 高性价比
让我们简单分析下 Amazon Graviton2 的性价比优势。
首先从价格角度,以美西 oregon 区域为例,同样是 4vCPU/16GB 内存的通用型实例,M5.xlarge(按需价格 0.192 USD/小时)M6g.xlarge(按需价格 0.154 USD/小时),后者价格便宜约 20%。另外 Amazon Graviton2 同样支持 Spot 请求、RI 预留、Savings Plans 等帮助客户降低成本。
其次技术角度先从 vCPU 角度来看,M5.xlarge 的 4vCPU 和所有主流公有云一样是 4 个超线程,虽然 M5.xlarge 是租户独享 2 个物理 core 上的 4 个超线程,有天然的安全和稳定性优势,但是毕竟超线程共享 L2 缓存等资源带来的性能提升有限,而 Amazon Graviton2 不存在 x86 平台的超线程,每个 vCPU 都是独立的物理核心,因此均为亚马逊云科技主流产品的 4 物理核心的 M6g.xlarge 比 2 物理核心 4 超线程的 M5.xlarge 具备天然的性能优势(4 物理核心对 2 物理核心)。
最后技术角度再简单从 Amazon Graviton2 以及 ARM Neoverse N1 设计角度看,Amazon Graviton2 基于 TSMC(台积电) 7nm 工艺,单颗 CPU 包括了 64 个物理核心(64 个 vCPU)高于亚马逊云科技 5 代实例单 CPU 24-48 物理核心,并且所有核心通过 mesh 结构互联,而且因为 Amazon Graviton2 无 NUMA 设计,每个内核访问其它内核与内存的路径一致,CPU 核心访问内存享有一致性延迟,这也就是诸如 Redis、mysql、hadoop 等应用可以获得令人印象深刻的性能提升的原因之一。
如何开始使用 Amazon Graviton2
Amazon Graviton2 的使用也很简单,对于托管服务只需在实例选择阶段选择 Amazon Graviton2 系列实例即可,另外 Amazon RDS、Amazon Elasticache 等还可以把当前 X86 实例直接切换为 Amazon Graviton2 实例。
对于 Amazon EC2 自建服务,需要在操作系统选择界面时候选择 ARM 64 位版本即可(这里包括您熟悉的 Amazon Linux 2、Redhat、Ubuntu、SUSE Linux、Fedora、FreeBSD、Debian 等)。你会发现常用软件包和之前使用的安装方式相同(yum,apt-get,pip,npm…),尽管某些应用程序可能需要重新编译,但是基于解释语言(例如 Java ,NodeJS ,Python ,Go) 可以未经修改地运行。对于编译型语言,比如 C 语言、C++语言,或者 Python 中部分基于 C 语言开发的工具库等少数情况,您需要重新编译或调试代码,这部分建议参考 github 上的 aws-graviton-getting-started 网站。
下面分别以 Amazon Linux 2 和 Ubuntu18.04 为例演示 Amazon EC2 自建系统的主要开发工具和依赖环境的构建过程,考虑大量新版本软件针对 ARM 做了性能优化,尽量用较高版本如 php7.4 以上。
第一部分
Amazon Linux 2(由亚马逊云科技提供长期技术支持并免费提供的 Linux 分支,内核做了深度安全和性能优化,支持免费的内核实时补丁,操作上近似 Red Hat 7 )参考步骤如下:
$ sudo yum update -y #升级内核和重要补丁
$ sudo reboot #内核更新后需要重启系统
$ uname -r #查看内核版本,当前为 4.14.200-155.322.amzn2.aarch64
$ sudo yum groupinstall -y “Development Tools” #安装开发工具包
$ sudo amazon-linux-extras enable golang1.11 corretto8 php7.4 python3.8 ruby2.6 #这个会输出 amazon-linux-extras 命令告诉我们要安装那些软件包(这里采用 Extras 库,也支持 EPEL 外部源)
$ yum clean metadata
$ sudo yum install -y golang java-1.8.0-amazon-corretto \
php-cli php-pdo php-fpm php-json php-mysqlnd \
python38 ruby ruby-irb rubygem-rake rubygem-json rubygems
下面让我们检查一下刚刚安装的工具版本:
$ go version
go version go1.13.15 linux/arm64
$ java -version
openjdk version “1.8.0_272”
OpenJDK Runtime Environment Corretto-8.272.10.3 (build 1.8.0_272-b10)
OpenJDK 64-Bit Server VM Corretto-8.272.10.3 (build 25.272-b10, mixed mode)
#Amazon Corretto 是开源 Java 开发工具包 (OpenJDK),是 OpenJDK 的可靠版本并通过 TCK 认证, Corretto 包括安全修复和性能增强,垃圾回收调度,防止内存不足的情况,以及改进的监视,报告和线程管理,并提供长期支持,亚马逊在内部以数千种生产服务运行 Corretto。
$ php -v
PHP 7.4.11 (cli) (built: Oct 21 2020 19:12:31) ( NTS )
Copyright (c) The PHP Group
Zend Engine v3.4.0, Copyright (c) Zend Technologies
$ python3.8 -V
Python 3.8.5
$ ruby -v
ruby 2.6.6p146 (2020-03-31 revision 67876) [aarch64-linux]
第二部分
Ubuntu18.04 参考步骤如下
$ sudo apt update #apt 和 apt-get 相同(后面会分别展示)
$ sudo reboot #如果有内核更新,需要重启系统(当前没有)
$ uname -r #查看内核版本,当前为 5.4.0-1029-aws ,update 前后并没有变化
$ sudo apt install -y build-essential #安装开发工具包 gcc、make 等
方法一
如果基于 ppa 源请参考下面步骤,以 PHP 和 python 为例:
$ sudo apt -y install software-properties-common #用于添加 ppa 源
$ sudo add-apt-repository ppa:ondrej/php # PPA 含 PHP7.4
$ sudo apt update
$ sudo apt -y install php7.4
$ php -v
PHP 7.4.12 (cli) (built: Oct 31 2020 17:04:09) ( NTS )
Copyright (c) The PHP Group
Zend Engine v3.4.0, Copyright (c) Zend Technologies
with Zend OPcache v7.4.12, Copyright (c), by Zend Technologies
$ sudo add-apt-repository ppa:deadsnakes/ppa # PPA 含 python3.8
$ sudo apt-get update
$ sudo apt-get install python3.8
$ python3.8 -V
Python 3.8.6
方法二
如果基于传统方式安装请参考下面步骤,以 Corretto 为例:
$ curl https://apt.corretto.aws/coretto.key | sudo apt-key add –sudo add-apt-repository ‘deb https://apt.corretto.aws stable main’
首先导入 Corretto 公有密钥,将存储库添加到系统列表
$ sudo apt update
$ sudo apt install -y java-1.8.0-amazon-corretto-jdk #如果希望基于 java8 环境
$ java -versionopenjdk version “1.8.0_275”OpenJDK Runtime Environment Corretto-8.275.01.1 (build 1.8.0_275-b01)OpenJDK 64-Bit Server VM Corretto-8.275.01.1 (build 25.275-b01, mixed mode) $ sudo apt install -y java-11-amazon-corretto-jdk #如果希望基于 java11 环境 $ $java -version
openjdk version “11.0.9.1” 2020-11-04 LTS
OpenJDK Runtime Environment Corretto-11.0.9.12.1 (build 11.0.9.1+12-LTS)
OpenJDK 64-Bit Server VM Corretto-11.0.9.12.1 (build 11.0.9.1+12-LTS, mixed mode)
第三部分
Amazon Linux 2 下 Redis 的安装基本过程
$ sudo yum install gcc tcl -y #安装 gcc 编译器和 redis test 所需 tcl 组件。
$ wget http://download.redis.io/releases/redis-6.0.9.tar.gz #官网下载所需版本
$ tar xzf redis-6.0.9.tar.gz #解压缩
编译阶段,这里有 2 个选择,选择(1)使用默认的 jemalloc
$ cd redis-6.0.9/deps #进入这个目录
$ make hiredis jemalloc linenoise lua geohash-int
$ cd .. #回到 redis 主目录
$ make
选择(2)使用 MALLOC
$ cd redis-6.0.9
$ make MALLOC=libc
安装完毕可以运行下面测试
$ make test #验证 redis 安装成功,底部可以提到:“\o/ All tests passed without errors!”
$ ./src/redis-server & #后台运行 redis 服务
$ ./src/redis-cli #运行 redis 客户端
127.0.0.1:6379> ping #测试 redis 工作正常
PONG
另外还可以运行 redis 自带测试工具 ./src/redis-benchmark 进行性能测试
第四部分
Ubuntu18.04 下 Redis 的安装基本过程
$ sudo apt update
$ sudo apt install build-essential tcl -y
$ wget http://download.redis.io/releases/redis-6.0.9.tar.gz
$ tar xzf redis-6.0.9.tar.gz
$ cd redis-6.0.9
$make
有兴趣的朋友可以对比测试下亚马逊云科技 5 代实例和 Amazon Graviton2 系列实例,看看在相同 vCPU 下,您的应用性能提升是否满意。
作者介绍:
梁海峰,亚马逊云科技资深解决方案架构师,专注于基础架构平台。从事 IT 售前解决方案工作 20 年,在 Unix 和 X86 平台架构,虚拟化建设,存储解决方案、备份和容灾建设等有丰富经验。目前在亚马逊云计算服务商业客户,协助客户上云、优化架构和成本。
评论