Возможно, вы заметили, что есть много шума о ARM VS X86. Я бы сказал главным образом из-за новых MacBook с Apple Clibon. Но если вы являетесь пользователем AWS, вы, возможно, заметили, что Amazon некоторое время Amazon на базе EC2 на какое-то время.
Мотивация
На данный момент существует 2-го поколения AWS Graviton Processors и доступны экземпляры EC2 T4G, M6G, C6G и R6G и их варианты с локальным хранением SSD на основе NVME, которые обеспечивают до 40% лучшей ценовой производительности над сопоставимым током поколения X86- Основанные экземпляры [1]. Из моих SRE/DEVOPS инженера перспективы потенциал 40% снижение AWS EC2 Билла кажется очень интересным.
В нашей компании Big Portion нашего EC2 используется для запуска Elasticsearch. В течение 2020 года мы смогли переместить большинство нашего сервера на elasticsearch 7, поэтому тот факт, что поскольку elasticsearch 7.8.0 ARM и архитектура Aarch64 официально поддерживается [2], была для нас довольно интересными новостями. Мне кажется лучшим вариантом, чтобы начать тестирование экземпляров руки в нашей инфраструктуре на Elasticsearch, потому что:
- Поддерживается (нам не нужно строить версию ARM на себя)
- У нас есть много серверов Elasticsearch (одно развертывание может охватывать большую часть инфраструктуры)
- Elasticsearch распределен (вы можете начать с 1 сервера в кластере и медленно продолжить в преобразовании)
- Elasticsearch выполняет множество параллельных задач, поэтому он может воспользоваться реальными физическими ядрами вместо логических ядер (одновременная многопоточность в чипсах Intel и AMD X86)
Настраивать
Я обнаружил, что есть хороший ориентирный инструмент для установки Elasticsearch Setup Esrally
[3] С несколькими ориентирами для разных случаев использования [4] . Установите и запустите ориентир в настройках по умолчанию на Ubuntu 20.04 довольно легко.
Установить
sudo apt-get install build-essential python3-dev openjdk-11-jdk python3-pip python3 -m pip install esrally --user
Бегать
AMD64.
export JAVA_HOME="/usr/lib/jvm/java-11-openjdk-amd64" ./.local/bin/esrally configure ./.local/bin/esrally --distribution-version=7.8.0
ARM64.
export JAVA_HOME="/usr/lib/jvm/java-11-openjdk-arm64" ./.local/bin/esrally configure ./.local/bin/esrally --distribution-version=7.8.0
Экземпляры EC2
К моим тестам я решил использовать трек по умолчанию (ориентир) GeOnames
С настройками по умолчанию. Инстанции семейств EC2 были T3 (Intel на основе X86), T3A (AMD на основе X86) и T4G (на основе ARM) Все они в среднем размере (2 ядра VCPU и 4 ГБ ОЗУ) с неограниченными кредитами ЦП. Выбранные EBS для всех экземпляров составляли 30 ГБ объемом GP3 с 3000 IOPS (COUNT IOPS по умолчанию для GP3). Расход памяти процесса Java был ~ 1,5 ГБ, поэтому 4 ГБ в порядке для рекомендуемого соотношения 50:50 между кучей и кэшем файлов [5] .
Intel Xeon Platinum 8000 | 4 | 2 | $0.0456 | 3,1 ГГц | T3.Medium. |
AMD EPYC 7000. | 4 | 2 | $0.0408 | 2,5 ГГц | T3A.Medium. |
AWS Graviton2. | 4 | 2 | $0.0368 | 2,5 ГГц | T4G.Medium. |
* По требованию Европа (Ирландия) [6]
Результаты
Средняя пропускная способность (выше лучше)
Количество операций, которые Elasticsearch могут выполняться в течение определенного периода времени, обычно в секунду. [7]
индекс-приложение | Документы / S. | 16336.30 | 11865.30 | 20130.90 |
индекс-статистика | OPS / S. | 90.06 | 90.06 | 90.07 |
Узел-статистика | OPS / S. | 90.09 | 90.07 | 90.10 |
По умолчанию | OPS / S. | 50.04 | 50.04 | 50.04 |
срок | OPS / S. | 100.08 | 100.06 | 100.08 |
фраза | OPS / S. | 110.06 | 110.05 | 110.06 |
Country_agg_uncached | OPS / S. | 1.41 | 1.17 | 1.65 |
country_agg_cached. | OPS / S. | 100.05 | 100.04 | 100.05 |
прокручивать | Страницы / С. | 20.04 | 20.03 | 20.04 |
выражение | OPS / S. | 0.80 | 0.74 | 1.02 |
безболезненно_static | OPS / S. | 0.56 | 0.46 | 0.78 |
безболезненно_dynamic | OPS / S. | 0.58 | 0.47 | 0.78 |
decay_geo_gauss_function_score. | OPS / S. | 0.77 | 0.66 | 0.80 |
decay_geo_gauss_script_score. | OPS / S. | 0.73 | 0.61 | 0.80 |
field_value_function_score. | OPS / S. | 1.50 | 1.50 | 1.50 |
field_value_script_score. | OPS / S. | 1.23 | 1.10 | 1.50 |
cars_terms. | OPS / S. | 0.55 | 0.43 | 0.76 |
bard_filtered_terms. | OPS / S. | 0.55 | 0.47 | 0.81 |
bard_probited_terms. | OPS / S. | 0.56 | 0.48 | 0.84 |
desc_sort_population | OPS / S. | 1.50 | 1.50 | 1.50 |
asc_sort_population. | OPS / S. | 1.50 | 1.50 | 1.50 |
asc_sort_with_after_population. | OPS / S. | 1.50 | 1.50 | 1.50 |
desc_sort_geonameid | OPS / S. | 6.02 | 6.02 | 6.02 |
desc_sort_with_after_geonameId. | OPS / S. | 2.65 | 2.67 | 3.59 |
ASC_SORT_GEONAMEID | OPS / S. | 6.02 | 6.02 | 6.02 |
ASC_SORT_WITH_AFTER_GEONAMEID | OPS / S. | 3.19 | 3.17 | 4.22 |
90-е процентильное задержка (ниже лучше)
Период времени между представлением запроса и получение полного ответа. Он также включает в себя время ожидания, то есть время запроса протягивает ожидание до тех пор, пока он не будет готов к обслуживанию elasticsearch. [7]
индекс-статистика | РС | 4.56241 | 4.78031 | 4.44132 |
Узел-статистика | РС | 4.47714 | 5.34818 | 4.15083 |
По умолчанию | РС | 4.61649 | 5.09174 | 4.41905 |
срок | РС | 3.63299 | 4.28009 | 3.64795 |
фраза | РС | 5.17816 | 6.07525 | 4.47468 |
Country_agg_uncached | РС | 124891.00000 | 166506.00000 | 94687.30000 |
country_agg_cached. | РС | 3.34225 | 4.02981 | 3.04555 |
прокручивать | РС | 670.81900 | 765.98000 | 570.69700 |
выражение | РС | 217096.00000 | 247556.00000 | 138891.00000 |
безболезненно_static | РС | 320471.00000 | 431436.00000 | 179742.00000 |
безболезненно_dynamic | РС | 304484.00000 | 427699.00000 | 179525.00000 |
decay_geo_gauss_function_score. | РС | 89906.50000 | 150580.00000 | 74991.40000 |
decay_geo_gauss_script_score. | РС | 105799.00000 | 182819.00000 | 71880.20000 |
field_value_function_score. | РС | 633.79800 | 672.88200 | 445.35700 |
field_value_script_score. | РС | 43596.90000 | 71071.80000 | 608.36600 |
cars_terms. | РС | 266805.00000 | 412260.00000 | 117055.00000 |
bard_filtered_terms. | РС | 261997.00000 | 353390.00000 | 94404.30000 |
bard_probited_terms. | РС | 255688.00000 | 336764.00000 | 81920.80000 |
desc_sort_population | РС | 226.38900 | 300.21000 | 222.33700 |
asc_sort_population. | РС | 231.23700 | 346.52400 | 217.20900 |
asc_sort_with_after_population. | РС | 319.70900 | 441.59100 | 321.49400 |
desc_sort_geonameid | РС | 62.33390 | 85.29280 | 32.14760 |
desc_sort_with_after_geonameId. | РС | 61356.70000 | 60678.60000 | 32569.20000 |
ASC_SORT_GEONAMEID | РС | 22.83960 | 41.67980 | 16.00420 |
ASC_SORT_WITH_AFTER_GEONAMEID | РС | 42734.50000 | 43248.40000 | 20625.20000 |
90-е место процентиля (ниже лучше)
Период времени между началом запроса Обработка и получение полного ответа. Эта метрика может быть легко перепутана с Задержка
Но не включает время ожидания. Это то, что большинство инструментов тестирования нагрузки относятся к «задержке» (хотя это неверно). [7]
индекс-статистика | РС | 2.93328 | 3.53074 | 2.61744 |
Узел-статистика | РС | 3.30236 | 4.06215 | 3.09698 |
По умолчанию | РС | 2.83038 | 3.68959 | 2.44764 |
срок | РС | 2.70983 | 3.10945 | 2.59679 |
фраза | РС | 4.11032 | 4.67643 | 3.54806 |
Country_agg_uncached | РС | 707.67700 | 847.52500 | 608.29600 |
country_agg_cached. | РС | 2.12763 | 2.60659 | 1.84201 |
прокручивать | РС | 665.93600 | 764.75300 | 568.91200 |
выражение | РС | 1249.61000 | 1364.56000 | 998.85400 |
безболезненно_static | РС | 1770.04000 | 2149.38000 | 1302.50000 |
безболезненно_dynamic | РС | 1723.03000 | 2135.88000 | 1305.81000 |
decay_geo_gauss_function_score. | РС | 1318.65000 | 1531.22000 | 1268.05000 |
decay_geo_gauss_script_score. | РС | 1373.07000 | 1635.57000 | 1257.33000 |
field_value_function_score. | РС | 632.53500 | 669.61300 | 443.95100 |
field_value_script_score. | РС | 821.20200 | 915.69800 | 607.47500 |
cars_terms. | РС | 1801.00000 | 2290.12000 | 1291.52000 |
bard_filtered_terms. | РС | 1788.23000 | 2092.46000 | 1213.08000 |
bard_probited_terms. | РС | 1767.71000 | 2038.35000 | 1166.24000 |
desc_sort_population | РС | 225.35300 | 298.99600 | 220.65600 |
asc_sort_population. | РС | 229.82800 | 345.71300 | 215.47500 |
asc_sort_with_after_population. | РС | 317.48400 | 440.44900 | 319.92900 |
desc_sort_geonameid | РС | 61.14970 | 83.03990 | 31.05030 |
desc_sort_with_after_geonameId. | РС | 380.07800 | 379.30000 | 295.56700 |
ASC_SORT_GEONAMEID | РС | 21.48470 | 39.62020 | 15.29170 |
ASC_SORT_WITH_AFTER_GEONAMEID | РС | 314.37000 | 316.44200 | 250.03600 |
Заключение
Соотношение средней пропускной способности (выше лучше)
T3.Medium.
Как 1,00, линии, где пропускная способность была одинаковой для всех 3 экземпляров, были удалены.
Country_agg_uncached | 1.0 | 0.83 | 1.17 |
выражение | 1.0 | 0.93 | 1.28 |
безболезненно_static | 1.0 | 0.82 | 1.39 |
безболезненно_dynamic | 1.0 | 0.81 | 1.34 |
decay_geo_gauss_function_score. | 1.0 | 0.86 | 1.04 |
decay_geo_gauss_script_score. | 1.0 | 0.84 | 1.10 |
field_value_script_score. | 1.0 | 0.89 | 1.22 |
cars_terms. | 1.0 | 0.78 | 1.38 |
bard_filtered_terms. | 1.0 | 0.85 | 1.47 |
bard_probited_terms. | 1.0 | 0.86 | 1.50 |
desc_sort_with_after_geonameId. | 1.0 | 1.01 | 1.35 |
ASC_SORT_WITH_AFTER_GEONAMEID | 1.0 | 0.99 | 1.32 |
средние значения | 1.0 | 0.87 | 1.30 |
Давайте поговорим о задачах, где существует некоторая разница между экземплярами. Задачи с одинаковыми значениями, вероятно, ограничены CPU.
Мы можем видеть 87% производительности, когда мы сравним T3A.Medium
с T3.Medium
Отказ Это, вероятно, ожидается, что поскольку рацион между 2,5 ГГц для AMD и 3,1 ГГц для Intel составляет ~ 81%. Обе значения предназначены для тактовой скорости Turbo CPU, поэтому реальная тактовая частота может быть немного отличной и может быть небольшая разница в IPC. Цена T3A.Medium
90% T3.Medium.
Таким образом, производительность на цену незначительно в пользу экземпляров на основе Intel.
Теперь интересная часть T4G.Medium
против T3.Medium
Отказ На 30% больше возможностей для рук достаточно удивительны для меня, и когда мы объединяем это с более низкой ценой на 20%, производительность на цену удивительна. Трудно сказать, сколько может эластично использовать пользу от SMT на Intel и AMD-процессоры против настоящих ядер на AWS Graviton2, но это может быть объяснение, почему экземпляр Graviton2 имеет 30% более высокой оценки, чем Intel, а на 50% больше, чем AMD. Я с нетерпением жду возможности делать больше тестов и, возможно, попробуйте добавить несколько Graviton2 в наш нынешний эластичный поиск кластер для проверки некоторых сценариев реального мира.
Источники
[1] https://aws.amazon.com/ec2/graviton/
[2] https://www.elastic.co/blog/elasticsearch-on-arm.
[3] https://github.com/elastica/rually
[4] https://github.com/elastic/rally-tracks
[6] https://aws.amazon.com/ec2/pricing/on-demand/
[7] https://esraly.readtheDoc.io/en/stable/summary_report.html.
Оригинал: «https://dev.to/brabemi/aws-graviton2-and-elasticsearch-the-first-impression-5c46»