«Когда-то небольшой английский стартап был простой игрушкой для сборки PoS-терминалов. Затем — компонентом для умных датчиков, connected- и более сложных embedded-устройств, где без операционной системы уже не обойтись. Еще позже — основой для большинства мобильных устройств. И теперь каждый владелец смартфона знает, что под его капотом — ARM».

Здравствуй, Хабр! Меня зовут Игорь Лепихин, я руководитель направления аппаратного обеспечения в Selectel. Мы с коллегами уже писали про тестирование и сборки под ARM-архитектуры. Но почему именно ARM? И способен ли он обогнать Intel и AMD в сегменте серверной аппаратуры? Под катом как раз об этом и поговорим.

Тренд на открытую архитектуру


Что есть сейчас?


Пока все неплохо. Рынок делят Intel и AMD, под их глубоким капотом одно и то же процессорное ядро — x86-xx, а доминирующая концепция на рынке — Software-Defined Everything, SDx. Это значит, что любые бинарники бесконечно более сложные, чем сложные Hello world должны вести себя предсказуемо и серверное ПО, скомпилированного под AMD, должно работать на Intel и наоборот. Де-факто можно смело утверждать, что ядро x86-xx достигло своего полупроводникового дзена: любой серверный софт изначально пишут и оптимизируют именно под x86.

Не было бы печали если бы не вертикальная модели всего, что хоть как-то связано с x86. Как говорится, Windows тому свидетель…

Посмотрим, как развивались программно-аппаратные комплексы — серверные и десктопные ПК.


Эволюция платформ.

Начало и развитие платформ


В 70-80-х годах, когда люди осознали, что на центральных процессорах можно делать не только калькуляторы, бытовало мнение, что продав много персональных компьютеров, можно заработать много денег. Разработчики-энтузиасты думали, что все очень просто: покупаешь процессор Z80 или Motorola 6800, по документации разводишь плату, ставишь на нее периферию и можно продавать. Но это никто не покупал…

Потребителям было важно, чтобы компьютер поддерживал много прикладных программ, и чем больше — тем лучше. Но для них нужно какую-никакую, но операционную систему написать. И нанимает разработчик компьютера программиста, который знает Assembler (иногда C), чтобы тот написал ОС. Так и появились AmigaOS, Atari TOS, OpenVMS и другие.


Atari TOS. Источник.

У каждой ОС был свой бинарный интерфейс (ABI). И программист должен был не только помнить, для какой платформы он пишет офисный пакет, так еще и знать ABI. Потом все это собиралось в бандл и разработчик компьютера презентовал: «У меня новый процессор на 200 КГц быстрее и на 16 КБ больше по памяти, есть набор прикладных программ, которые можно запустить. Покупайте!»

Как итог: программист в тени, но счастлив, что к нему пришел разработчик компьютера и заказал программу. Рынок этого программиста ограничен штуками компьютеров, которые будут произведены и проданы. И он начинает задумываться: «Эх, если бы мой офисный пакет купил бы он, и он, и еще вон тот… Но у первого AmigaOS, у второго Atari, а у третьего IBM PC…»

Но невозможно же содержать столько специалистов, которые будут разрабатывать и поддерживать все комбинации платформа-ОС. Вдобавок аппаратные платформы стали достаточно мощными и сложными, фичи дешевле было разрабатывать в программной реализации. Поэтому и появилась концепция SDx и софт вышел на первый план: платформа должна быть ориентирована под него, не наоборот.


Развитие x86


Железо без софта — это просто красивый элемент интерьера, притом дорогой в производстве. Когда вендоры это поняли, началась гонка по разработке «архитектурного стандарта». Победителем вышел IBM PC со своей x86: архитектура получила распространение, обогнав остальные платформы за счет своего бандла с небольшой малоизвестной компанией Microsoft.

Программистов под x86 становилось все больше, для Motorola 68000 — меньше. Отдельная история про OS/2: она долго жила параллельно в этой же вертикальной вселенной. При всей нежности, которую я к этой системе испытываю, рынок сказал свое слово — и она тихо ушла, передав все лучшее в Windows NT. Наступила целая эпоха доминирования архитектуры x86.

С ПО, казалось бы, все очевидно: Windows на ПК, а Unix, Solaris и им подобные — на серверах. Но есть одно «но»: разработка стала доступней. Появились энтузиасты, готовые собирать софт самостоятельно, по книжкам. Примерно так и появился Linux и вообще концепция свободного ПО. Качество его, конечно, так себе: поддержка и багофикс стоили денег. И чтобы развивать подобные проекты, люди начали объединяться в сообщества — и свободное ПО стало развиваться семимильными шагами, предложив рынку альтернативу для закрытых решений.

Тем временем в дата-центрах внезапно оказалось, что RISC-архитектура отвечает потребностям серверного сегмента. К этому времени стало понятно, что задача сервера — быстро принять, обработать и передать данные. Для этого не нужна трехэтажная математика на FPU, достаточно быстро и параллельно оперировать с пакетами данных до 1 КБ. С этим хорошо справляется RISC.

С помощью RISC и его суперскалярности достигли высокой эффективности в обработке данных. Для сравнения: операция умножения на RISC занимала 1 такт, а не десятки, как в случае x86. Также на базе RISC появилось много архитектур — например, PowerPC, SPARC и DEC Alpha (Alpha Silicon) — да-да, именно кластер из пары сотен Alpha Silicon красиво «утопил» Титаник — и для каждой из них была своя Unix-сборка (или Solaris, хотя это одно и то же). Спасибо C и нативным компиляторам: несложный для того времени серверный софт пересобрать под новую платформу не представляло труда.

Однако x86 становилась дешевле, а поддержка платных сборок на других аппаратных платформах — дороже. И в какой-то момент произошло всего «не x86» из серверного сегмента. Роста производительности новых чипов хватало, специалистов на x86 все больше. Поэтому архитектура закрепилась и в серверном сегменте.

Плюс тогда возник тренд на открытость: начали открывать исходники бывших Unix-систем, а железо стало отделяться от софта. Linux занял доминирующую позицию со своей бизнес-моделью «хочешь — плати, не хочешь — мучайся сам».

Что сегодня? Оказывается, зарабатывать можно не только на продаже софта, но и на сборке и обработке информации, притом гораздо больше. Яркий пример — модель с техподдержкой за деньги. Специалист продает информацию о том, что нужно сделать клиенту для решения своей проблемы.

Но если информация стоит денег, ее нужно защитить, чтобы у третьих лиц не было к ней доступа. А как могут украсть информацию? Да просто понаставят «закладки» в банковском ПО, в американских чипах, и личный счет обнулится. Это, конечно, преувеличение, но доля правды есть. Поэтому формируется тренд на открытость, чтобы любой независимый эксперт мог посмотреть внутрь программы и hw-архитектуры и подтвердить, что «закладок» нет и информация уходит куда надо

Несмотря на тренд, до сих пор остаются закрытыми Microsoft и коммерческие серверные Unix-сборки. Но! — в персональном сегменте ноутбуки и десктопные устройства все больше уступают мобильным, где на свободном и открытом Linux «крутятся» библиотеки AOSP. Как минимум, их исходный код можно скачать, проанализировать и проверить, сколько на уровне ОС «закладок».

Как появился ARM и какое у него будущее


Решения на базе x86 закрыты: у рядового пользователя и даже профессионального разработчика программно-аппаратных комплексов нет доступа к большей части информации об архитектуре. Вы можете купить только процессор синего или красного цвета, выбрать чипсет и установить в плату, сделанную под конкретного вендора. Но возникают вопросы…

Что за firmware, которое регулярно обновляют Intel на своих чипсетах? Почему не раскрывает ни функционал, ни исходный код? Отсутствие ответов на эти вопросы продолжает подкидывать дрова в костер открытости архитектуры.

Разработчики подумали: «Как было бы хорошо взять ядро (систему команд), прикрутить желаемый конвейер, драйверы интерфейсов и поставить на производство там, где захочу». Но эта концепция невозможна для x86. Но к тому моменту уже был ARM и с ним таких проблем не было, поэтому он укоренился.

ARM — это только ядро, причем в виде документации. Пользователь покупает систему команд и получает рекомендации, как и с какими конвейерами, системами питания и драйверами внешних интерфейсов ее использовать. А после — выбирает технический процесс и производителя.

К слову, можно и на Микроне в Москве сделать ARM v9-based процессор. Но все существующие IP-блоки нужно будет написать самостоятельно под 90-нм процесс. Правда, процессор получится очень большой…

Что будет с платформами в будущем. Сегодня самая открытая трендовая архитектура — RISC-V. И среди моих коллег есть мнение, что она может состояться как standalone-ядро центральных процессоров от нескольких открытых вендоров. Или привести к созданию application specific-ядер и потери бинарной совместимости между процессорами на базе RISC-V.

Я же думаю, что Intel останется как нишевой продукт для специфического применения и legacy-задач, которые никуда не денутся. Для примера: PPC и DEC Alpha до сих пор можно встретить внутри устройств, а Motorola 6800 вообще используют в самолетах Boeing. Массовой станет архитектура на базе ARM, а RISC-V пройдет путь от встраиваемых устройств до серверов и потеснит ARM в далеком будущем. Тренд на использование открытого ПО сохранится — ждем, когда в Microsoft откроют исходники Windows 11.


ARM в серверном сегменте: области применения, проблемы и перспективы


Наверное, сейчас можно сказать, что серверный сегмент — это апогей развития любой аппаратной платформы, любого процессорного ядра. Решение должно быть надежным, масштабируемым и быстрым в обработке данных.

Серверные процессоры на базе ARM сейчас появляются не так массово, как чипы для персональных устройств. Тут их можно разделить на две категории: свободные решения для разработки и проприетарные — от компаний, управляющих дата-центрами.

  • Проприетарные: Graviton от AWS, Yitian от Alibaba
  • Свободные: Ampere, Kunpeng от Huawei

Тот факт, что AWS и Alibaba вкладываются в разработку собственных чипов, добавляет оптимизма насчет перспектив ARM. Кто разрабатывает сами серверы для AWS и Alibaba — неизвестно. Возможно, они делают это самостоятельно или через подрядчиков. Если через них, то есть шанс найти дизайн-гайды и взять такой сервер на тест.

Альтернатива проприетарным чипам — открытые решения. Сегодня Ampere активно продвигает свои чипы и догоняет по характеристикам Graviton от AWS. Gigabyte и Inspur на этих процессорах уже доступны в различных конфигурациях — их можно протестировать и арендовать в Selectel.

Непонятна ситуация с Huawei. Их Kunpeng, будучи неплохим решением, похоже, стал жертвой вертикального бамбукового стержня: и чип, и сам сервер разрабатывают только в Huawei. Возможно, как любят в Поднебесной, сначала будет удовлетворен внутренний спрос, а зачем уже компания выйдет на открытый рынок. Мы пытались протестировать платформу в 2020 году, но на тот момент, наверное, не все были к этому готовы.

Резюмируя: готовые решения на ARM только появляются. Вот, как развивается на них спрос в дата-центрах:


Сомнений нет, что драйвером ARM являются AWS и Alibaba, которые заявляют, что к 2025 году 25% всех новых инстансов будут на ARM. Не отстают и Azure c Google, которые прогнозируют то же самое, но пока что не разрабатывают собственные чипы, а используют труды Ampere. Google вообще планирует отказаться от инстансов на x86 в течение десяти лет.

AWS, конечно, опережает Ampere и идет в ногу с новыми продуктами на x86, например по поддержке DDR5 и PCIe5. Ampere только сейчас выходит на рынок с этими решениями, тогда как AWS еще летом объявил, что его новые инстансы поддерживают эти новые стандарты.

Кто использует ARM


Сервер привезли, собрали и поставили — надо его как-то продавать. Большинству клиентов нет разницы, какая архитектура сверкает у них под капотом. Но для сервис-провайдеров смена архитектуры может обернуться проблемой с несовместимостью аппаратной платформы и программного обеспечения. Поэтому должны быть серьезные причины перехода: новая архитектура должна решать пользовательские задачи, ведь продавать только количества ядер уже не получится.

С решением проблем с совместимостью аппаратной платформы и ПО помогут компании вроде AWS. Уже сейчас компания публикует перечни клиентов, которые выбрали решения на базе ARM — от глубокой инженерной разработки и тяжелого финтеха, до стриминговых и Nginx-серверов. Мы собрали статистику, проанализировали перечни и получили такое распределение:


80% клиентов на ARM используют Java, V8 и Python — все, что на базе виртуальных машин. Оставшиеся 20% — инструменты, написанные на компилируемых языках.

Проблемы платформы в дата-центрах


Чтобы Java работала на ARM, нужно портировать ее виртуальную машину JVM. И то же самое сделать с V8, если нужно запустить приложение на JavaScript, или PVM, если приложение на Python. Тогда можно получить прирост производительности, за который клиенты готовы платить, судя по данным AWS.

Трудности возникают с софтом из оставшихся 20%. Потому что он написан на компилируемых языках. И если JVM — это один большой бинарник, который достаточно один раз портировать, то софт на базе C++ — это один большой и много маленьких бинарников для решения узких бизнес-задач, которые нужно портировать по отдельности. И gcc --arch=aarch64 работает тут почти никогда, поэтому и возникают основные сложности.

Дело еще в том, что C++ и его очередной убийца Rust обретают новую жизнь. Сегодня основной cash-flow — это обработка данных, то есть, например базы данных. И когда мы что-то достаем из таблицы через SQL-запрос, запускается нативный код, написанный когда-то на C. Если мы хотим обучить нейронку, то используем библиотеки вроде Tensorflow. Да, Python хоть и портирован на ARM, но это всего лишь интерфейс, а его ядро — нативный код на C++. То же самое и с играми, разработанными на Unity и Unreal.

В общем, весь performance critical — это нативный код и пока нет предпосылок, чтобы JVM или — кхм — V8 приближались по производительности. В том, что обработка данных, AI и ML будут развиваться, сомнений нет. И вряд ли можно утверждать, что доля нативных приложений останется на таком низком уровне. Технически нужно быть готовыми, что настанет день, когда 99% клиентов, будут использовать серверы на ARM. Возможно, я преувеличил, но проверить нужно.

Я часто сравниваю сервер на ARM с автомобилем на водородной ячейке. Вряд ли его купят, если просто поставить в автосалон. Его купят, если ты расскажешь, как и где эти водородные ячейки заправлять и сколько это будет стоить. Вот этим мы и занимаемся: проверяем и рассказываем клиентам, с чем они могут столкнуться на новой платформе и как выйти в профит.

В силу специфики бизнес-модели, ARM не может контролировать, где и как используется его технология. Свобода выбора стимулирует конкуренцию и развитие «обвязок» вокруг основного ядра. Никто не может запретить взять DDR-контроллер от компании A, а PCIe — от компании B. Проблема в том, что для каждого такого устройства нужно писать драйвер. И если вендор об этом не позаботился — нанять свою команду и потратить несколько лет на разработку.

Нельзя вытащить чип одного производителя и поставить в плату другой. Должна быть отдельная сборка операционной системы, которая поддерживает всю специфику периферии процессора. Мы пока не наблюдали глобальных проблем при запуске generic-ядра, но танцев с бубном там было много. И никто не гарантирует, что следующий разработчик не захочет добавить в серверный чип, например, микроконтроллер для включения ядер в определенной последовательности или управления нагрузкой. Если такое случится, танцы с бубном придут уже в серверный сегмент. Хотя сегодня есть более масштабный класс проблем.

Приложения под ARM нужно глубоко тестировать


Нативной платформой для коммерческого софта является x86. Перед релизом софт тестируется — и только потом выходит в продакшен. Для 80% пользователей достаточно подтвердить работоспособность JVM, V8 и PVM. Но насколько хорошо сами виртуальные машины протестированы под ARM?

Дело в том, что x86 и ARM отличаются принципиально по своей архитектуре. Если x86 — это CISC-ядро, где каждое поколение пополняется очередной uber-инструкцией, то ARM — это RISC-машина: инструкций мало, они все одной длины и выполняют элементарные действия. Задача JVM — сгенерировать исполняемый бинарный код для целевой архитектуры, который должен отражать бизнес-логику приложения. В x86 этот процесс отточили за 30 лет почти идеально.

Отличается ли работа JVM на ARM? И если да, то насколько? Это еще предстоит узнать. А ведь помимо JVM есть еще V8, Python и другие машины…

Проблемы с версиями VM и библиотек под ARM


Один из наших клиентов, который тестировал ARM в Selectel Lab, столкнулся в отсутствует в Arch библиотеки libc, которая поддерживает C++20, тогда как Arch на x86 содержит правильную библиотеку. Да, вопрос решили, но переходом на Ubuntu, где библиотека была. И таких кейсов еще очень много, поэтому нужно проверять, соответствуют ли версии для x86 версии для aarch64. И равносилен ли их заявленный функционал и стабильность работы под пользовательской нагрузкой.

Отдельная история с legacy-кодом на C/C++, который уже не поддерживается, но существует в зависимостях библиотек и ПО. Проблема в том, что исходники не всегда можно найти. А если вы их нашли, то к ним обязательно нет мануалов. Поэтому иногда проще разработать что-то свое, а после — протестировать.

Возможно, есть смысл запускать legacy-библиотеки через эмуляторы. Но здесь пока без результатов. Мы только планируем посмотреть, что будет с производительностью при таком сценарии.

Поведение видеокарт с ARM нестабильно


Большая часть клиентов, решающая задачи AI и ML, использует видеокарты. И на первый взгляд кажется, что ничего не предвещает беды: центральный процессор просто обменивается данными с видеокартой по шине PCIe. Какая разница, какой использовать процессор?

Разница будет даже в случае, если использовать другую операционную систему. И это не говоря уже об архитектуре аппаратной платформы — в нашем случае ARM. Яркий пример — OpenCV, при работе с которым нужна тонкая настройка последовательности команд, которая зависит от выбранной архитектуры. Простой перекомпиляцией драйвера проблему не решить: нужно менять архитектуру приложения.


Мы сталкивались с нестабильным поведением видеокарт и до конца не понимаем, как это решить. Поэтому пока клиенты с видеокартами останутся на x86.

Если ARM нагрянет завтра, что делать?


При внедрении новой платформы есть некая точка невозврата. Так было с x86, когда появилось много специалистов, готовых разрабатывать ПО под эту платформу. Ожидаю, что то же самое произойдет с ARM-платформой. Особенно учитывая, что сегодня доминирующий сегмент персональных устройств — это не ПК, а мобильные телефоны и планшеты на базе платформы ARM, под которую нужно разрабатывать новый софт.

Для серверного рынка точка невозврата наступит тогда, когда стоимость ARM-платформы сравняется с решением на x86, а после — станет еще дешевле.

Сегодня ARM только начинают появляться на рынке, поэтому об адекватности цены речи не идет. Но представим, что точка невозврата уже наступила.

Готовы ли наши клиенты к переходу на новую платформу?


Чтобы ответить на этот вопрос, нужно много тестировать. И хоть все приложения нам проверить не удастся, мы можем опереться на опыт AWS.

Клиенты AWS уже несколько лет разрабатывают и используют базы данных, мессенджеры и прочие веб-сервисы под ARM. С ними платформа справляется на отлично: если каждый веб-сокет работает в отдельном физическом потоке, приложение не использует сложные команды, а конвейер суперскалярен, то на ARM веб-сервер будет работать быстрее, чем на x86.

Если клиенту нужно запустить на ARM-сервере приложение, протестированное AWS, можно смело хоститься у нас. Но сначала бесплатно, чтобы проверить работоспособность системы, а после — арендовать полноценный инстанс на ARM.

Если клиенту нужно запустить специфическое приложение, сначала мы его протестируем и сравним тестовые метрики, чтобы понять, оптимально ли разворачивать инстанс на ARM.

Другая схема взаимодействия с клиентами, которые используют нативный код. В отчетах AWS есть кейсы на базе FFMPEG для транскодирования видео и Tensorflow для ML. А также кейсы использования ARM для развертывания игровых серверов. Если вы попадаете в одну из этих групп, будем взаимодействовать по такой схеме:


Для клиентов, которые используют нативный код с legacy-библиотеками и непроверенные AWS приложения, мы предлагаем другой сценарий. Если код написан на Go или Rust, а не на C/C++, мы поможем конвертировать его через LLVM — низкоуровневый аналог JVM, а после — перенести на ARM. Если клиент использует C/C++, то можно использовать либо эмуляторы, либо это будет та ниша, где x86 останется навсегда.

Что мы успели протестировать


Время ARM только начинается, поэтому тестов у нас не очень много, но первые результаты уже есть. Например, мы протестировали 80-ядерный ARM-процессор Ampere Altra. С результатами можно ознакомиться в нашей статьей.

Ниже мы собрали несколько интересных versus-тестов, в которых наши клиенты сравнили ARM-конфигурации с альтернативными на x86. Для тестов мы использовали такую сборку:

  • материнская плата GIGABYTE MP32-AR1-00,
  • 16 плашек ОЗУ по 16 ГБ (Micron DDR4 3200 МГц ECC),
  • 2 SSD-накопителя Micron_5300 на 480 ГБ,
  • NVMe-диск на 1 ТБ M.2 SSD (GIGABYTE GP-AG41TB).

Три GPU подключены для проверки работы PCIe-линий при полной загрузке.

Еще немного о железе ↓
Режим: UEFI

Архитектура: aarch64

System Information:

Operating System Ubuntu 22.04.1 LTS 5.15.0-50-generic aarch64

Model GIGABYTE E252-P30-00

Motherboard GIGABYTE MP32-AR1-00

Processor Information

Name ARM ARMv8

Topology 1 Processor, 1 Core, 80 Threads

Identifier ARM implementer 65 architecture 8 variant 3

part 3340 revision 1

Base Frequency 3.00 GHz

Тестирование веб-приложения


К нам обратился клиент, у которого есть веб-приложение на базе Clickhouse, PostgreSQL и Redis, запущенных в Docker-контейнерах с ограничениями по ОЗУ до 2 ГБ (для Redis – 1 ГБ).
ОС
Ubuntu server 22.04
ПО

— Docker (в режиме swarm) (v20)

— Nginx (v1.18)

Образы docker
— Clickhouse (v22.8)

— Postgresql (v15)

— Redis(v7)

— Nodejs (v16.18.1)

— Swarmpit (для оркестрации docker контейнеров)

Клиентские приложения
Backend

  • Node.js
  • фреймворк Express 4

Frontend

  • Node.js
  • фреймворк Nuxt2 (Vue 2.7) в режиме генерации статических веб-страниц

Тестовая сборка на ARM.

Мы протестировали его приложение на нативном для ARM стеке и сравнили со сборкой из двух серверов на базе x86_64 с виртуализацией KVM. Один сервер использовался для баз данных, другой — для приложений.
Сервер для баз данных
CPU
Intel Xeon E5 (Sandy Bridge), 4 ядра по 2.4 ГГц
ОЗУ
5 ГБ
ОС
Ubuntu Server 20.04
Сервер для приложений
CPU
Intel Xeon E5 (Sandy Bridge), 4 ядра по 2.4 ГГц
ОЗУ
3 ГБ
ОС
Ubuntu Server 20.04
Сборка на базе x86_64.

Тестировали с помощью сервиса k6.io и эмулирование соединения 50 клиентов в течение 6 минут. Получили следующие результаты:
Приложение
Платформа
Выполнено запросов
Запросы с ошибкой
Среднее число соединений в сек
P95, мс
Backend
x86_64
19870
0
73,33
731
arm
28322
0
89,33
127
Frontend
x86_64
546
0
3.67
34559
arm
4962
0
24
3215
Да, поколения сравниваемых платформ разные. Мы сравнили не самые топовые модели, но результаты заставляют задуматься. Думаем, что десятикратный рост производительности на ARM обусловлен эффективностью работы конвейеров ARM-процессоров.

→ Клиент планирует использовать ARM в продакшене.

Сравнение с десктопным процессором


Насколько корректно тестировать серверный и десктопный процессоры? В данном тесте — вполне.

Клиент ограничил количество потоков в Ampere Altra Q80-30 и протестировал его на собственных тестовых приложениях, сравнив с десктопным процессором AMD Ryzen 9 3900X. И хоть были проблемы с отсутствием библиотек libstdc-версии, нам удалось пересобрать код и запустить тестирование. Вот, что из этого получилось:
x86
ARM
CPU
AMD Ryzen 9 3900X (12 ядер, 24 потока)
Ampere Altra Q80-30
ОС
Ubuntu 22.10
Ubuntu 22.10
Тест однопоточной производительности
561
328
Тест многопоточной производительности
304 (23 threads)
24444 (79 threads) 7549 (23 thread)
Тестирование в 7z b
2184 3750 81904
6683 3825 256644
В однопоточном режиме на клиентских тестах ARM проигрывает, но при хорошем распараллеливании сильно вырывается вперед. Самые неоднозначные результаты в бенчмарках 7z: ARM уступает, если пересчитывать на потоки. И это притом, что у AMD потоки виртуальные. Почему именно так — неизвестно, нужно разбираться.

→ По результатам тестирования клиент решил повременить с переходом на ARM до тех пор, пока производительность платформы в его задаче не вырастет.

Тестирование обработки текста


К нам пришел клиент, который занимается «умной» обработкой текста на базе самописного ПО. Он хотел сравнить производительность Xeon Gold 2Gen с нашей ARM-конфигурацией. И предварительно даже описал ожидаемые результаты.
Конфигурация тестируемого сервера
Конфигурация для сравнения
Usecase
Окружение
Ampere Altra q80-30 processor, 2256GB Ram,2x480GB SSD
2 x Intel Xeon Gold 6258R, 768GB Ram, 2x1.9TB NVME SSD
Установили собственные обработчики текстов, такие же как стоят и на наших x86 серверах.
Oracle Linux 8
Ожидаемый результат: ARM получил 881 «попугаев», а Intel Xeon Gold 2Gen — 777 на синтетических тестах (13%).

Фактический результат: 80 ядер ARM обработали текст быстрее, чем 56 ядер и 112 потоков Xeon Gold 2Gen.

Обработчик текста написан на Rust и на Erlang. Пересобрали под ARM легко с помощью LLVM и добились производительности на 13% больше, чем у Xeon Gold 2Gen. Многоядерность ARM-процессоров делает свое дело. Здесь еще сыграл вопрос стоимости. За меньшие деньги клиент может получить более производительное железо.

→ Клиент готов перейти на ARM-платформу, но также хочет протестировать и 128-ядерный процессор.

Выводы и перспективы


Результаты тестов в лаборатории Selectel противоречивы. Для баз данных и веб-серверов ARM Ampere Altra превосходит близкие по производительности конфигурации на Intel и AMD. Но показатели сильно зависят тестируемого приложения.

Нужно помнить, что сегодня x86 — это стандарт для софта. ARM выигрывает за счет своей физической многоядерности и приложений, в которых она важна. Когда речь заходит об однопоточном режиме, ARM сдает в позициях.

Мы продолжаем наши исследования и верим в скорое пришествие ARM-технологий в серверный сегмент. Нам нужно больше юзкейсов и примеров тестирования на реальной нагрузке. Возможно, получится найти ниши, на которых ARM показывает исключительный рост в производительности. Возможно есть ряд задач для которых x86 навсегда останется единственным и неповторимым. Велком к нам — будем тестить вместе!

Возможно, эти тексты тоже вас заинтересуют:

Это вам не x86_64. Проблемы сборки Arch Linux под ARM-архитектуру и как мы их решали
Tinder по интересам, «Морской Boy» и сегментация КТ-снимков: 10 студенческих идей, которые стали проектами
8 книг по PostgreSQL: от баз данных с «нуля» для самоучек до руководства про БД в облаках

Комментарии (20)


  1. Mike_666
    00.00.0000 00:00
    +7

    Не, уже не ARM, грядёт эпоха RISC-V.


    1. igor_lepikhin Автор
      00.00.0000 00:00
      +3

      Не поверишь, скоро будет у нас пара игрушек на RISC-V;-). Почему игрушек... Тут в новостях прошло, что юго-восточные партнеры сервер на RISC-V придумали и утверждают, что там запускается... LibreOffice:-). Воттт. Поэтому, вдимо пока игрушка.


    1. jershell
      00.00.0000 00:00
      +1

      Было бы неплохо, но там своих проблем хватает. Железа мало и очень мало. Порты "условные", в рамках тестирования окружения обнаружилось, что java в docker не работает, просто падает и всё, nodejs, pvm, и т.д. поддержаны далеко не полностью и не всегда официально, а то, что вроде как поддерживается (docker), установить нельзя, на офф сайтах просто нет бинарай, приходится собирать руками. Это достаточно сложно, наличие открытых исходников не дают гарантии успеха, тот же aapt2 вроде и открыт, но проблемы со сборкой заняли у меня около 2-х недель. При этом приятно было обнаружить, что все что на rust и go, собирается и работат без проблем. В целом в направлении софтовой поддержки сейчас идет очень большая и активная работа.


  1. zloylemon
    00.00.0000 00:00
    +4

    Спасибо за интересную статью, результаты тестов заставляют задуматься


    1. igor_lepikhin Автор
      00.00.0000 00:00
      +1

      И то ли еще будет... В однопоточке все прям не очень здорово (еще тесты подошли). Но там где надо много физически (не HT, при всем уважении) разделенных задач, ARM сильно впереди.


  1. ITCarn
    00.00.0000 00:00
    +1

    Образы Debian/ Ubuntu/ CentOS и т.п. которые предлагают хостинги - они оригинальные или пересобранные/оптимизированные под сервера хостера ?

    Почему ни один хостер РФ не предлагает для установки образы российских линукосов типа ALT Linux - есть какая-то общая причина ?


    1. igor_lepikhin Автор
      00.00.0000 00:00
      +1

      Образы оригинальные с оптимизацией под внутреннюю инфраструктуоу датацентра. Пересборкой самого ядря мы не занимались. Вообще, @evseenkolev, может дать более развернутый камент как непосредственный участник процесса.

      По Вашему второму вопросу: у нас есть звездный линукс (Astra:-)) - она в процессе для ARM.


    1. evseenkolev
      00.00.0000 00:00
      +1

      Привет! В случае выделенных серверов в Selectel мы никак не модифицируем установочные образы.

      По поводу российских линуксов - Игорь немного проспойлерил :) Мы действительно готовим Astra Linux для выделенных серверов, но пока я не могу сказать, когда будет готово.


  1. Ava256
    00.00.0000 00:00
    +3

    Все ожидаемо в тесте с Sandy Bridge.Рост производительности на порядок виден на фронтенде, так как там задачи обычно легковесные и увеличение количества ядер сразу увеличивает количество обрабатываемых запросов.Для бэкенда значительного прироста не наблюдается.А вообще конечно, показатели взяты с потолка и сказать по ним можно только то, что на каких-то задачах возможен рост производительности и это совершенно не значит, что этот рост будет везде.Вы тоже это в выводах предусмотрительно пишите.


    1. igor_lepikhin Автор
      00.00.0000 00:00
      +1

      Спасибо за камент. Ну да. Уже видно, что АРМ зайдет туда, где хорошо параллелятся задачи (и на бэке такие могут быть, отчего нет - какая-нить матричная математика и что-то подобное). Наблюдаем, что таких задач все больше и больше. И статистика конкурентов "оттуда" о том же говорит.


      1. flashmozzg
        00.00.0000 00:00
        +1

        Сравнивали бы тогда с 64-96 ядерными эпиками, а не интеловским старьём.


  1. Alexey2005
    00.00.0000 00:00
    +2

    А толку-то, что архитектура ARM открыта. Ведь в устройства устанавливается не какая-то абстрактная архитектура, а вполне конкретный SoC. И вот тут в плане открытости ARM-SoC'и просто сосут у аналогичных под x86. Степень вендорной огороженности (в том числе тех самых бинарных блобов-firmware) намного выше.

    Что ARM очень выгодна вендорам, которые и пытаются её впарить потребителям, это как раз понятно. А вот ради чего пользователям отказываться от гораздо более открытой и главное универсальной платформы, на которой запускается вообще всё - это вопрос. Пока что кроме лютого маркетинга ARM нечем похвастаться.


    1. thevlad
      00.00.0000 00:00
      +2

      ARM не открытая, там надо занести значительные деньги чтобы делать свой дизайн под их ISA. И не все ARM это SoC. Никто не мешает взять процессорное ARM ядро навесить на него PCI-E шину и ставить, что-то распространенное с уже готовыми линукс драйверами.


    1. igor_lepikhin Автор
      00.00.0000 00:00
      +2

      ARM - конструктор. За IP ядра ты платишь деньги. Дальше - хочешь бери открытые нетлисты каких-нить DDRx интерфесов, хочень покпай, хочешь вообще сам разрабатывай. Вендор вундервафли на ARM выкидывает BSP, обязательно, куда включена низкоуровневая поддержка всего окружения ядра. Там же и сборка Линукса, оптимизированная. То есть ARM дает возможность конкурировать на уровне железа, оставляя за собой только унифицированность ядра (по сути системы команд). Дальше - свобода. В теории (и на практике, например для embedded устройств или тех же мобил) это приводит к конкуренции, что неплохо.

      По пользовательскому применению, ты совершенно прав. Я тоже пишу, что пользователю надо объяснить, зачем ему переход. Но в датацентре, пользователь это сами мы:-). И мы себе это объясняем на основе метрик полезности для клиента и собственных затрат на переход и освоение новой платформы. Кому-то заходит, кому-то нет:-).

      Давай к нам в лабу, потестим, подумаем;-).


  1. mvv-rus
    00.00.0000 00:00
    +2

    Сильно не понравился пролог, который про историю ОС и платформ: неправильного там много. Возможно - потому что отсчет ведется от первых ПК, как будто до них ничего не было. А ведь платформы были и раньше: начиная, как минимум,с IBM System 360 - первой AFAIK платформой с единой системой команд и единым системным ПО. Не говоря уж об отдельных копьютерах - прричем и до System 360 у IBM встречалась и аппаратная эмуляция старых компьютеров на новых.
    Ну, и незаслуженно забыта совместимость на уровне исходного кода - а ведь такая совместимось являлась основой популярности Unix. Ведь в ту эпоху исходные тексты программ часто были доступны.

    Может пролог в таком виде лучше вообще убрать? Он ведь для раскрытия основной темы статьи, в общем-то, не нужен.


  1. beeruser
    00.00.0000 00:00
    +2

     ARM выигрывает за счет своей физической многоядерности и приложений, в которых она важна. Когда речь заходит об однопоточном режиме, ARM сдает в позициях.

    Не ARM, а конкретное ядро, которое вы тестировали.

    От архитектуры тут мало что зависит. Микроархитектура N1 базируется на Cortex-A76 (2018г) и сильно уступает современным ядрам от той же компании ARM, не говоря уже о ядрах Apple.


  1. SamOwaR
    00.00.0000 00:00
    +1

    Тест однопоточной производительности 561/328

    Тест многопоточной производительности 304/24444 (79 threads) 7549 (23 thread)

    ИМХО тут закралась какая-то ересь. Как многопоточка х86 может быть меньше однопоточки?


    1. Maxim_Evstigneev
      00.00.0000 00:00
      +1

      полагаю, это разные "попугаи"


      1. SamOwaR
        00.00.0000 00:00
        +1

        Да нет, это они единичку пропустили, т.е. должно было быть что-то типа 1304/24444


  1. ivankudryavtsev
    00.00.0000 00:00
    +3

    Тема многообещающая, но раздел "Как появился ARM и какое у него будущее" просто бессвязная каша. Дальше даже читать расхотелось.