ARM сервера — более производительные и более дешёвые
В этом году Apple потрясла рынок десктопных процессоров чипом Apple M1 и устройствами на нём. Похожее событие произошло в мире облачных вычислений в прошлом году. AWS выпустили новый тип сервера на собственных ARM процессорах Graviton2. По заявлениям Amazon, соотношение производительности к цене у новых процессоров на 40% выше, чем у аналогов на x86. Ещё одно недавнее обновление — сервера Amazon RDS (облачный сервис, предоставляющий сервера баз данных) на Graviton2. Я запустил несколько бенчмарков и нагрузочный тест реального бэкенд приложения, чтобы проверить настолько ли хороши сервера на ARM процессорах и узнать какие проблемы совместимости могут возникнуть.
Производительность
Я сравнивал сервера типов t4g.small (ARM) и t3.small (x86) на AWS. На момент написания статьи цена за 1 час на x86 сервер составляет $0.0208, а на ARM сервер — $0.0168. Сервер на ARM на 20% дешевле.
Сперва я провёл нагрузочный тест при помощи wrk, запустив на серверах свежую установку recap.dev
Это шаблон docker-compose с 4 процессами. Веб-сервер, принимающий запросы и сохраняющий их в RabbitMQ и отдельный фоновый процесс, сохраняющий запросы группами по 1000 в PostgreSQL.
Я запускал wrk на сервере t3.2xlarge, находящемся в том же регионе, используя следующую команду:
wrk -t24 -c1000 -d300s -s ./post.lua
Она непрерывно посылает запросы в течение 5 минут, используя 24 потока и 1000 HTTP соединений.
Результат для сервера t4g.small (ARM):
24 threads and 1000 connections
Thread Stats Avg Stdev Max +/- Stdev
Latency 473.53ms 53.06ms 1.96s 81.33%
Req/Sec 115.83 96.65 494.00 71.32%
620751 requests in 5.00m, 85.84MB read
Socket errors: connect 0, read 0, write 0, timeout 225
Requests/sec: 2068.48
Transfer/sec: 292.90KB
Для сервера t3.small (x86):
24 threads and 1000 connections
Thread Stats Avg Stdev Max +/- Stdev
Latency 600.28ms 70.23ms 2.00s 72.53%
Req/Sec 92.77 82.25 404.00 70.26%
488218 requests in 5.00m, 67.51MB read
Socket errors: connect 0, read 0, write 0, timeout 348
Requests/sec: 1626.87
Transfer/sec: 230.37KB
Сервер на ARM обслужил на 27% больше запросов в секунду в среднем на 26% быстрее.
Затем я запустил несколько бенчмарков из набора тестов Phoronix.
В тесте pts/compress-7zip-1.7.1 t4g.small (ARM) выдал 6833 MIPS, а сервер t3.small (x86) — 5029 MIPS. ARM сервер был производительнее на 35%.
Сервер на ARM процессоре также завершил бенчмарк pts/c-ray быстрее более чем в 2 раза. 958 секунд ушло у сервера на x86 процессоре против 458 секунд у сервера с ARM процессором.
Я также запустил несколько тестов pts/ramspeed, измеряющих пропускную способность ОЗУ при выполнении различных операций.
Тип бенчмарка | t4g.small (ARM) | t3.small (x86) |
Add/Integer | 50000 МБ/c | 13008 МБ/c |
Copy/Integer | 58650 МБ/c | 11772 МБ/c |
Scale/Integer | 31753 МБ/c | 11989 МБ/c |
Triad/Integer | 36869 МБ/c | 12818 МБ/c |
Average/Integer | 44280 МБ/c | 12314 МБ/c |
Add/Floating Point | 49775 МБ/c | 12750 МБ/c |
Copy/Floating Point | 58749 МБ/c | 11694 МБ/c |
Scale/Floating Point | 58721 МБ/c | 11765 МБ/c |
Triad/Floating Point | 49667 МБ/c | 12809 МБ/c |
Average/Floating Point | 54716 МБ/c | 12260 МБ/c |
Вкратце, ОЗУ на сервере t4g.small с процессором Graviton2 была быстрее от 3 до 5 раз.
Если смотреть только на производительность, переход на ARM сервера это одни преимущества. Больше производительности за меньшие деньги.
Совместимость
Безусловно, один из самых больших вопросов при переходе с одной архитектуры процессоров на другую это совместимость программного обеспечения.
Некоторая часть ПО уже перекомпилирована для ARM процессоров. Например, Docker был доступен в форматах .rpm и .deb, как и большая часть образов (да, образы Docker требуют пересборки для разных архитектур). Однако, docker-compose не был скомпилирован для ARM процессоров, что вылилось в несколько часов сборки различных зависимостей из исходного кода. Скорее всего, ситуация улучшится в будущем, когда сервера на ARM станут более распространены. Сейчас, однако, в некоторых случаях, переход на ARM может принести больше затрат, чем преимуществ.
Зато сервера Amazon RDS на Graviton2 не требуют никакой настройки и позволяют получить все преимущества серверов на ARM процессорах без проблем с совместимостью.
Ввиду преимуществ ARM процессоров мы также собрали Docker образы recap.dev для архитектур arm/v7 и arm64.