AWS Graviton3のパフォーマンスはどうなのか?

API7.ai

June 7, 2022

Ecosystem

背景

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管理に特に適しています。

Apache APISIX

インストールとデプロイ

ARM64チップを搭載したサーバーを準備します。ここではAmazon EC2 C7g(現在このモデルのみがAWS Graviton3を搭載)を選択し、オペレーティングシステムはUbuntu 20.04を選択します。

Amazon EC2

Dockerのインストールを忘れずに行います:

sudo apt-get update && sudo apt-get install docker.io

Apache APISIXは最新バージョンのARM64イメージをリリースしており、Dockerを使用してワンクリックでデプロイできます。詳細な手順は以下の通りです。

  1. 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
  1. APISIXを起動
sudo docker run --net=host -d apache/apisix:2.14.1-alpine
  1. ルートを登録
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
    }
  }
}'
  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-countprometheusという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つのレベルから関連するテストと比較を行いました。結果は以下の通りです:

  1. QPS比較

QPS

  1. 遅延比較

Latency

比較表

上記のデータからもわかるように、API GatewayのようなネットワークIOが集中する計算シナリオでは、AWS Graviton3はAWS Graviton2と比較して性能を76%向上させ、遅延を38%削減しています。このデータは、冒頭で述べたAWSの公式データ(25%の性能向上)よりも優れています。

まとめ

本記事では、主にApache APISIXを使用してAWS Graviton3とAWS Graviton2の性能を比較しました。API GatewayのようなネットワークIOが集中する計算シナリオでは、AWS Graviton3は性能モンスターの特性を示すことがわかります。もちろん、多くの実践を推奨し、今後さらに多くの計算集中型プロジェクトのテストデータを期待しています。

Tags: