«А там точно нет закладок?» — чтобы точно ответить на этот вопрос про любую железку иностранного происхождения, рано или поздно надо сделать её самому. Так появились процессоры «Эльбрус». Несмотря на то, что они далеко не такие современные, как могли бы быть, они всё чаще появляются не только в прессе, но и на практике. Мы взяли сервер на «Эльбрус-8С» у партнёров из «НОРСИ-ТРАНС» и протестировали его под нагрузкой для оценки использования в реальных задачах. Цель — понять, сможем ли мы в разрезе 15 лет использовать эти ядра для производств (это тех самых, где АСУ ТП оркестрирует Пентиум II MMX).  Сразу скажу главное: в расчёте на процессорный такт они либо равны, либо немного превосходят процессоры Intel на целевых задачах — во многом из-за архитектуры VLIW (а не RISC). Но вот только частоты у них существенно меньше, конечно. Существенно — это не в два и не в четыре, а в разы. То есть рыночная перспектива у них основана на «ящиках» (то есть закрытых компаниях). Доступа к новейшим технологиям производства процессоров в стране нет, поэтому ситуация такова. Но прогресс возможен. Закрытость самих разработок (потому что у них, в принципе, только одно назначение, связанное с государственной безопасностью) тоже не помогает развитию программной части, поэтому вокруг архитектуры «Эльбрусов» не так много ПО. Тем не менее целостную картину уже можно получить.  Чтобы условия были максимально приближены к рабочим, взяли приложения из «Эльбрус Линукс», из них выбрали базовые и наиболее показательные среды с разными профилями нагрузки. В итоге в тестовый стек вошли:    Базы данных реляционные (PostgreSQL). Балансировщики (Nginx). Резидентная система управления базами данных класса NoSQL Redis. Шины данных (RabbitMQ). Плюс — сделали классический 7-Zip. Обычно по нему понятно, корректно ли сработали остальные тесты и можно ли доверять их результатам.    Внутри тестов задали наборы команд с разными параметрами. Мы подобрали параметры так, чтобы нагрузить по максимуму именно процессоры, а не сравнивать диски, оперативную память и другие компоненты.   Стартовали со сравнения баз данных: Интеловый сервер vs один «Эльбрус». Производительность Intel оказалась в семь раз выше, чем на «Эльбрусе». Как позже выяснилось, даёт о себе знать влияние дисковых подсистем. Да, на «Эльбрусе» они слабее (минус RAID). Зато дистрибутив Linux, что стоит на «Эльбрусах», в самом деле хорошо оптимизирован и, на первый взгляд, стабильнее, чем на Интелах.  Интересно, что если на одном из серверов Интела некоторые тесты до конца не дошли, выдавая ошибки, то на «Эльбрусах» такой проблемы не было. Это так, к слову.  Абсолютное большинство представленных на рынке процессоров, включая процессоры наиболее распространённых семейств х86-64 и ARM, используют архитектуру RISC с различными расширениями, реализованными аппаратно. Эти расширения дают возможность давать процессору относительно инструкции, и эти инструкции будут выполнены оптимальным образом. При этом большая часть работы по «распараллеливанию» вычислений выполняется во время исполнения кода, и, таким образом, расходует ресурсы центрального процессора. Отечественные процессоры семейства «Эльбрус» построены на базе архитектуры VLIW (very long instruction word — очень длинная машинная команда). Эта архитектура позволяет в рамках одной процессорной команды выполнять большое количество операций. VLIW-команда содержит в себе сразу несколько операций для параллельного выполнения ядром процессора. Ядро процессора «Эльбрус-8С» имеет шесть 64-битных FMA устройств, что позволяет выполнять до 12 FP64 FLOP за такт.  Сама VLIW-команда должна быть сформирована на этапе компиляции, и во время выполнения ресурсы ЦПУ используются строго по назначению. В принципе такой подход должен обеспечивать более высокую производительность вычислений. Однако данная архитектура более чувствительна к качеству выполняемого кода, формируемого как программистами, так и компилятором. Таким образом, преимущества этой архитектуры станут видны только по мере формирования стека ПО, оптимизированного для выполнения на данном семействе процессоров. Архиватор 7-Zip имеет встроенный режим тестирования LZMA и относительно просто переносится на любые платформы. Это сделало его популярным механизмом сравнения для самых разных платформ. В режиме тестирования ПО 7-Zip выдаёт значения MIPS (миллионы операций в секунду) для компрессии и декомпрессии. Кроме того, режим тестирования умеет нагружать чётко указанное количество ядер и выдавать результаты в расчёте на одно ядро. В общем случае компрессия представляет собой более алгоритмически сложную задачу, и для неё логично получать более низкие значения рейтинга, чем для декомпрессии. Из общедоступных результатов тестирования видно, что это правило соблюдается для большинства семейств процессоров, но не соблюдается для процессоров Intel. Данная зависимость подчёркивает, что исходный код архиватора явно оптимизирован под архитектуру x86-64 как наиболее распространённую. Синтетический тест 7-Zip загружает процессоры вычислительной работой на 100 %. Процессоры Intel при этом разгоняются практически до максимальных значений. С учётом этого, данный тест демонстрирует практический паритет производительности в пересчёте на одно ядро с частотой 1 ГГц. Производительность компрессии в полтора раза выше на процессорах Intel (за счёт оптимизации кода), при декомпрессии — выигрыш производительности демонстрирует процессор «Эльбрус». Ниже привожу средние значения соотношения Intel/«Эльбрус».  Для более объективного сравнения помимо синтетического теста проводятся дополнительные тесты сжатия файлов. Файлы формируются с помощью генератора случайных чисел. В качестве тестовых примеров созданы два файла, размером 1ГБ каждый. Такой размер выбран для того, чтобы операции компрессии/декомпрессии занимали ощутимое время, но при этом не испытывали значительного влияния дисковой подсистемы. Первый файл полностью заполнен генератором случайных чисел, поэтому практически несжимаемый. Второй же файл сформирован из 1024 одинаковых файлов размером 1МБ, таким образом архиватор может его сжать примерно в 1000 раз.  Тип теста (команда операционной системы)  for f in rand1G rand1024M; do time 7za -mmt1 a $f.7z $f > 7za.$f.log 2>&1 ; mv $f $f.0; time 7za -mmt1 x $f.7z $f > 7zx.$f.log 2>&1; done Тип процессора Эльбрус-8С1 Intel(R) Xeon(R) Gold 6230 CPU @ 2.10GHz (50657) Intel(R) Xeon(R) Gold 6134 CPU @ 3.20GHz Intel(R) Xeon(R) Gold 6230 CPU @ 2.10GHz (50657) Intel(R) Xeon(R) Gold 6230 CPU @ 2.10GHz (50657) Операционная система ElbrusOS CentOS Astra Linux CentOS Astra Linux Компрессия 1,с 1106,18 347,5 402 325,1 364,64 Декомпрессия 1,с 7,22 1,02 1,21 0,99 1,06 Компрессия 2,с 248,65 93,59 100,57 89,59 95,54 Декомпрессия 2,с 9,3 1,16 1,32 1,13 1,5             Компрессия 677,41 220,54 251,28 207,35 230,09 Декомпрессия 8,26 1,09 1,26 1,06 1,28 Компрессия на 1 ядро 1ГГц 812,89 860,12 928,99 808,65 897,35 Декомпрессия на 1 ядро 1ГГц 9,91 4,24 4,66 4,14 4,99 Компрессия, %   94,51 87,50 100,52 90,59 Декомпрессия, %   233,91 212,60 239,47 198,62 Тесты реальной работы 7-Zip показывают заметное различие в производительности — «Эльбрус» медленнее почти в 1,9 раза, причём при компрессии скорости практически одинаковые, а при декомпрессии — «Эльбрус» в 2,2 раза медленнее. Это объясняется более медленной работой оперативной памяти и подсистемы ввода-вывода сервера на базе «Эльбрус». Тестирование ApacheBench (ab) из пакета ПО Apache httpd. Для тестов были сгенерированы три файла разного размера (1КБ, 1МБ и 100МБ). Тестовые сценарии включали одновременное скачивание этих файлов заданным количеством (50 и 150) виртуальных пользователей. После выполнения 50000 скачиваний тест останавливался и фиксировалось среднее значение запросов в секунду.      Расшифровка Time for test Количество клиентов Объем файла Эльбрус-8С1 Intel(R) Xeon(R) Gold 6230 CPU @ 2,10GHz (50657) Intel(R) Xeon(R) Gold 6230 CPU @ 2,10GHz (50657) Intel(R) Xeon(R) Gold 6230 CPU @ 2,10GHz (50657)     ElbrusOS CentOS CentOS Astra Linux 50 1kB 9,75 4,24 2,89 1,15 50 1MB 107,03 15,47 18,09 8,06 50 100MB 8712,11 1258,17 1042,64 803,75 150 1kB 11,98 4,16 2,55 1,27 150 1MB 99,24 14,95 14,87 8,82 150 100MB 8811,40 1247,27 1058,15 928,49 Расшифровка Requests per second Количество клиентов Объем файла Эльбрус-8С1 Intel(R) Xeon(R) Gold 6230 CPU @ 2,10GHz (50657) Intel(R) Xeon(R) Gold 6230 CPU @ 2,10GHz (50657) Intel(R) Xeon(R) Gold 6230 CPU @ 2,10GHz (50657)     ElbrusOS CentOS CentOS Astra Linux 50 1kB 5129,48 11783,83 17307,50 43317,87 50 1MB 467,17 3231,49 2764,04 6200,19 50 100MB 5,74 39,74 47,96 62,21 150 1kB 4175,35 12022,11 20809,85 39321,72 150 1MB 503,84 3344,43 3362,97 5669,27 150 100MB 5,67 40,09 47,25 53,85 Для корректного сравнения процессоров между собой в левой части таблицы приведены полученные в результате тестов значения Requests per second в перерасчёте на 1 ядро частотой 1 ГГц: В правой части таблицы приведены соотношения производительности Intel/«Эльбрус» для соответствующих процессоров Intel.  Для унификации посчитано среднее значение для разных процессоров: Тест отдачи данных по протоколу http показал результаты, сходные с тестом практической работы 7-Zip, «Эльбрус» примерно в 1,8 раза медленнее конкурентов. Тестируем pgbench из дистрибутива PostgreSQL. Оно создаёт тестовую базу данных и выполняет набор запросов, типичных для OLTP систем. Результатом выполнения тестов является число транзакций в секунду (tps). Тесты отличаются количеством одновременно работающих клиентов (50 и 150) и количеством потоков СУБД (2 и 32). Каждый тест измерял общее количество транзакций, выполненное за десять минут. Тестирование базы данных оказалось провальным для процессоров «Эльбрус» — они показали результат в 2,6 раз хуже конкурентов. Однако следует принимать во внимание, что между конкурентными платформами Intel тест дал также заметно разные результаты. Это связано с тем, что тест данной СУБД затрагивает множество подсистем сервера и в большой степени зависит от производительности дисковой подсистемы. Производителям серверных платформ на базе «Эльбрус», возможно, следует уделить больше внимания интеграции различных компонентов. Для корректного сравнения процессоров между собой в левой части таблицы приведены полученные в результате тестов значения tps (including connections establishing) — Transactions-per-second в перерасчёте на 1 ядро частотой 1 ГГц: В правой части таблицы приведены соотношения производительности Intel/«Эльбрус» для соответствующих процессоров Intel.  Для унификации посчитано среднее значение для разных процессоров: Redis представляет собой базу данных «ключ-значение». Её производительность оценивается количеством атомарных операций в секунду. Redis-benchmark входит в состав пакета Redis. Для сравнения проводятся тесты, отличающиеся количеством одновременных потоков (50 и 1000), фактором параллелизма (2 и 32) и длиной сообщения (100 и 1000000 байт). В ходе тестов выполняются только 2 атомарные операции (set и get).  Тесты Redis с различной нагрузкой показывают большой разброс результатов, однако средние значения укладываются в обычный диапазон — «Эльбрус» медленнее примерно в 1,5 раза. Для корректного сравнения процессоров между собой в левой части таблицы приведены полученные в результате тестов выводы команд SET и GET в перерасчёте на 1 ядро частотой 1 ГГц: В правой части таблицы приведены соотношения производительности Intel/«Эльбрус» средние для процессоров Intel.  Итоговое соотношение производительности: RabbitMQ — это шина гарантированной (асинхронной) доставки сообщений. В составе пакета нет собственных средств тестирования производительности, поэтому тесты проводятся специальным софтом. В ходе тестов создаётся определённое количество «передатчиков» (publishers) и «приёмников» (consumers) сообщений, которые обмениваются сообщениями различной длины. В результате тестов фиксируется количество посланных и принятых сообщений в секунду (sending/receiving rate). Эта группа тестов наиболее сильно нагружает процессоры (все ядра грузятся на 100 %). Результаты тестов подтверждают выводы большинства остальных тестов, процессоры «Эльбрус» медленнее процессоров Интел в среднем в 1,4 раза. Для корректного сравнения процессоров между собой в левой части таблицы приведены значения sending/receiving rate в перерасчёте на 1 ядро частотой 1 ГГц: В правой части таблицы приведены соотношения производительности Intel/«Эльбрус» средние для процессоров Intel.  Итоговое соотношение производительности: Большинство тестов показывают незначительное отставание процессоров «Эльбрус» в пересчёте на 1 ядро на частоте 1ГГц. Но благодаря технологии Turbo Boost при сравнении реальных результатов процессоры Intel демонстрируют втрое лучшую производительность на каждое ядро. Результаты реальных многоядерных процессоров отличаются пропорционально, т. е. сервер с двумя 20-ядерными процессорами Intel(R) Xeon(R) Gold 6230 CPU на частоте 2,10 ГГц показывает результаты в среднем в семь раз лучше, чем сервер с четырьмя 8-ядерными процессорами «Эльбрус» на частоте 1,2 ГГц. Развитие процессоров «Эльбрус» в плане увеличения количества ядер и тактовой частоты в ближайшем будущем, скорее всего, не изменит картину кардинально.  При этом «Эльбрусы» работают явно медленнее из-за того, что софт написан не для VLIW, требующей совершенно другого подхода и дисциплины кода, и компиляции.   Как по мне, то в целом «Эльбрус» удачный процессор, но кое-что можно и усовершенствовать. Разработчики процессора нам обещают, что 16С будет отставать всего лишь на несколько лет, а виртуализация будет работать не только программно и кое-как. По крайней мере, в 16С на прототипе показывают, что всё это уже работает. Выглядит это всё очень обнадёживающе. Сейчас наложенные средства ИБ в критичных для страны точках дают такой оверхед, что от производительности самого сервера ничего не остаётся. Люди работают чуть ли не по телефонной линии. «Эльбрус» для конкретно этих задач даёт плюс, поскольку иностранный процессор и наложенные средства на единицу производительности в итоге могут получаться дороже, чем просто отечественный процессор. То есть всё же можно строить на них серверы. У нашего сервера Яхонт-УВМ Э12 весьма неплохие результаты, для работы он включает практически всё необходимое: аппаратный RAID на SAS/SATA-дисках, поддержку NVME и RDMA/ROCE. А на базе плат (процессор распаян на материнке без возможности замены) можно собирать серверы любого масштаба и формата. Тем более, что коллеги из «НОРСИ-ТРАНС» вот-вот должны вытащить из печки новые сервера Паладин-Х16, с двумя процессорами «Эльбрус-16С» на борту.  А если представить, что разработчик «дёшево и сердито» завалит российский рынок новыми «Эльбрусами», то традиционным процессорам придётся немного потесниться. В нынешних ЦОДах часто узкое место не процессор, а память или диск (если не считать научные числодробилки и майнинг).    Пишите, если есть вопросы не для комментариев, — вот моя почта: SerVerchenov@croc.ru. Руководитель практики ИТ-консалтинга