AWS Graviton3のパフォーマンスはどうなのか?
API7.ai
June 7, 2022
背景
AWSは2022年5月末に最新のARMベースのAWS GravitonプロセッサファミリーであるAWS Graviton3をリリースしました。AWSの公式データによると、Graviton2プロセッサと比較して、Graviton3プロセッサは最先端のDDR5メモリ技術に基づき、最大25%の性能向上、最大2倍の浮動小数点演算性能、および50%高速なメモリアクセス速度を提供できます。また、Graviton3は同じタイプのEC2インスタンスで60%少ないエネルギーを消費します。
では、実際のデータはどうでしょうか?ネットワークIOが集中するAPI Gatewayを例に、AWS Graviton3の性能を見てみましょう。ここでは、Apache APISIXを使用して、AWS Graviton2(C6g)とAWS Graviton3(C7g)のサーバー環境で性能比較テストを行います。
Apache APISIXは、クラウドネイティブで高性能かつスケーラブルなAPIゲートウェイです。NGINX+LuaJITとetcdに基づいており、従来のAPIゲートウェイと比較して、動的ルーティングとプラグインのホットロード機能を備えており、クラウドネイティブアーキテクチャ下でのAPI管理に特に適しています。
インストールとデプロイ
ARM64チップを搭載したサーバーを準備します。ここではAmazon EC2 C7g(現在このモデルのみがAWS Graviton3を搭載)を選択し、オペレーティングシステムはUbuntu 20.04を選択します。
Dockerのインストールを忘れずに行います:
sudo apt-get update && sudo apt-get install docker.io
Apache APISIXは最新バージョンのARM64イメージをリリースしており、Dockerを使用してワンクリックでデプロイできます。詳細な手順は以下の通りです。
- etcdを起動
sudo docker run -d \
--name etcd -p 2379:2379 -e ETCD_UNSUPPORTED_ARCH=arm64 \
-e ETCD_LISTEN_CLIENT_URLS=http://0.0.0.0:2379 \
-e ETCD_ADVERTISE_CLIENT_URLS=http://0.0.0.0:2379 \
rancher/coreos-etcd:v3.4.16-arm64
- APISIXを起動
sudo docker run --net=host -d apache/apisix:2.14.1-alpine
- ルートを登録
curl "http://127.0.0.1:9080/apisix/admin/routes/1" \
-H "X-API-KEY: edd1c9f034335f136f87ad84b625c8f1" -X PUT -d '
{
"uri": "/anything/*",
"upstream": {
"type": "roundrobin",
"nodes": {
"httpbin.org:80": 1
}
}
}'
- テスト
curl -i http://127.0.0.1:9080/anything/das
HTTP/1.1 200 OK
.....
AWS Graviton2とAWS Graviton3の性能比較
前述の操作に基づき、公式のスクリプトを使用して、AWS Graviton3プロセッサ上でのAPISIXのインストールと互換性テストを無事に完了しました。それでは、Apache APISIXがAWS Graviton2(C6g)とAWS Graviton3(C7g)上でどのような性能を発揮するかを見てみましょう。
簡略化のため、このテストではAPISIXで1つのWorkerのみを有効にし、以下の性能テストデータはすべてシングルコアCPUで実行されています。
シナリオ1: 単一のアップストリーム
単一のアップストリームを使用し、プラグインなし。主にAPISIXの純粋なプロキシバックエンドモードでの性能をテストします。
# apisix: 1 worker + 1 upstream + no plugin
# ルートを登録
curl http://127.0.0.1:9080/apisix/admin/routes/1 -H 'X-API-KEY: edd1c9f034335f136f87ad84b625c8f1' -X PUT -d '
{
"uri": "/hello",
"plugins": {
},
"upstream": {
"type": "roundrobin",
"nodes": {
"127.0.0.1:1980":1
}
}
}'
シナリオ2: 単一のアップストリーム + 2つのプラグイン
単一のアップストリームを使用し、2つのプラグインを有効にします。主に、limit-count
とprometheus
という2つのコア性能消費プラグインが有効な場合のAPISIXの性能をテストします。
# apisix: 1 worker + 1 upstream + 2 plugins (limit-count + prometheus)
# ルートを登録
curl http://127.0.0.1:9080/apisix/admin/routes/1 -H 'X-API-KEY: edd1c9f034335f136f87ad84b625c8f1' -X PUT -d '
{
"uri": "/hello",
"plugins": {
"limit-count": {
"count": 2000000000000,
"time_window": 60,
"rejected_code": 503,
"key": "remote_addr"
},
"prometheus": {}
},
"upstream": {
"type": "roundrobin",
"nodes": {
"127.0.0.1:1980":1
}
}
}'
データ比較
上記の2つのシナリオにおいて、リクエスト処理と遅延時間の2つのレベルから関連するテストと比較を行いました。結果は以下の通りです:
- QPS比較
- 遅延比較
上記のデータからもわかるように、API GatewayのようなネットワークIOが集中する計算シナリオでは、AWS Graviton3はAWS Graviton2と比較して性能を76%向上させ、遅延を38%削減しています。このデータは、冒頭で述べたAWSの公式データ(25%の性能向上)よりも優れています。
まとめ
本記事では、主にApache APISIXを使用してAWS Graviton3とAWS Graviton2の性能を比較しました。API GatewayのようなネットワークIOが集中する計算シナリオでは、AWS Graviton3は性能モンスターの特性を示すことがわかります。もちろん、多くの実践を推奨し、今後さらに多くの計算集中型プロジェクトのテストデータを期待しています。