Как работает AWS Graviton3?
API7.ai
June 7, 2022
Предыстория
AWS выпустила последнее семейство процессоров на базе ARM — AWS Graviton в конце мая 2022 года — AWS Graviton3. Согласно официальным данным AWS, по сравнению с процессором Graviton2, основанным на передовой технологии памяти DDR5, процессор Graviton3 может обеспечить повышение производительности до 25%, до 2x производительности операций с плавающей запятой и на 50% более высокую скорость доступа к памяти; Graviton3 также использует на 60% меньше энергии на том же экземпляре EC2 того же типа.
А как обстоят дела с реальными данными? Давайте возьмем в качестве примера API Gateway с интенсивным сетевым вводом-выводом и посмотрим, как работает AWS Graviton3. Здесь мы используем Apache APISIX для проведения тестов производительности на серверных средах AWS Graviton2 (C6g) и AWS Graviton3 (C7g).
Apache APISIX — это облачный, высокопроизводительный, масштабируемый API-шлюз. Основанный на NGNIX+LuaJIT и etcd, по сравнению с традиционными API-шлюзами, APISIX обладает функциями динамической маршрутизации и горячей загрузки плагинов, что особенно подходит для управления 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
Согласно предыдущим операциям, на основе официального скрипта, установка и тестирование совместимости APISIX на процессоре AWS Graviton3 были успешно завершены. Давайте посмотрим на производительность Apache APISIX на AWS Graviton2 (C6g) и AWS Graviton3 (C7g).
Для простоты в этом тесте в APISIX включен только один Worker, и все данные тестирования производительности выполняются на одноядерном процессоре.
Сценарий 1: Один вышестоящий сервер
Используется один вышестоящий сервер без каких-либо плагинов. В основном тестируется производительность APISIX в режиме чистого прокси-сервера.
# apisix: 1 worker + 1 upstream + no plugin # register route 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: Один вышестоящий сервер + два плагина
Используется один вышестоящий сервер и два плагина. В основном тестируется производительность APISIX при включении двух основных плагинов, потребляющих производительность, limit-count и prometheus.
# apisix: 1 worker + 1 upstream + 2 plugins (limit-count + prometheus) # register route 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 } } }'
Сравнение данных
В вышеуказанных двух сценариях были проведены соответствующие тесты и сравнения на двух уровнях обработки запросов и времени задержки. Результаты следующие:
- Сравнение QPS

- Сравнение задержек


Из вышеуказанных данных также видно, что в сценарии вычислений с интенсивным сетевым вводом-выводом, таком как API Gateway, AWS Graviton3 повышает производительность на 76% по сравнению с AWS Graviton2, при этом снижая задержку на 38%. Эти данные даже лучше, чем официальные данные, предоставленные AWS, упомянутые в начале (увеличение производительности на 25%).
Итог
Эта статья в основном использует Apache APISIX для сравнения производительности AWS Graviton3 и AWS Graviton2. Видно, что в сценарии вычислений с интенсивным сетевым вводом-выводом API-шлюза AWS Graviton3 можно назвать настоящим монстром производительности. Конечно, также рекомендуется много практиковаться и ожидать больше тестовых данных для вычислительно-интенсивных проектов в будущем.