Первым делом стоит подчеркнуть, что BFK 3.1 — это программно-аппаратный комплекс (но по привычке будем называть его просто платой) для разработчиков, а не основа для построения конечных продуктов. Никто в здравом уме не будет использовать её, грубо говоря, для сборки системы. Во-первых, получится неоправданно дорого. Во-вторых, затея эта довольно бессмысленна. Нет, плата нужна для разработки и отладки программного обеспечения, ну и для оценки производительности самого процессора и совместимости его с другим оборудованием. Сравнивать её с одноплатными микрокомпьютерами вроде Raspberry Pi или Cubieboard тоже некорректно, хотя формально она к ним близка.
Аналогичные инструменты разработки предлагают и другие создатели процессоров. В зависимости от типа и оснащения они могут стоить от сотни-другой до тысяч и тысяч долларов. Важно то, что это первая плата с процессором Baikal-T1, которая доступна уже не узкому кругу лиц и организаций, как было раньше, а практически всем. Да, стоит она немало — 40 тысяч рублей. Дорого, но меньшую цену с учётом относительно небольшого объёма производства компания пока предложить не может. Кроме того, покупатели после регистрации продукта получит доступ к закрытой библиотеке инженерной документации. Также они получат схемотехнический проект платы в формате Altium Designer, что существенно ускорит и упростит процесс создания собственных программно-аппаратных решений на базе плат BFK 3.1 и процессоров «Байкал-Т1».
Плата «Байкал» BFK 3.1
Собственно плата оснащена процессором с базовой обвязкой. Почти все интерфейсы процессора выведены на плату. Не хватает разве что порта 10GbE. Сама плата имеет размеры 229 × 191 мм (FlexATX). На ней присутствуют два порта SATA-3 (контроллер версии 3.1), один разъём SO-DIMM для модуля памяти DDR3-1600, два гигабитных порта Ethernet RJ-45, один разъём USB 2.0 Type A, два USB-порта Mini-B (нужны для отладки), один разъём PCI-E 3.0 x4. Есть 40-контактная гребёнка выводов GPIO (основной контроллер 32-битный).
Для питания нужен любой блок питания ATX 2.0 мощностью от 200 ватт. Это значение явно дано с запасом, даже с учётом потребления устройств PCI-E и SATA. На плате есть отдельные кнопки для включения/отключения и сброса питания. Процесс запуска системы предельно прост: устанавливаем модуль памяти, подключаем БП, соединяем ПК с верхним портом mini-USB, запускаем любимый эмулятор терминала с поддержкой COM-портов (может понадобиться драйвер для самого моста). Ну и всё, жмём кнопку ON и выбираем в меню загрузчика нужный пункт.
На плате есть два модуля NOR-памяти объёмом 16 и 32 Мбайт. Первый из них загрузочный, в нём находится собственно прошивка. Тут всё стандартно: U-Boot + Linux-ядро + минимальный образ с BusyBox. Также возможна загрузка по сети с сервера NFS или TFTP. Для встраиваемых систем этого достаточно. В этом случае конечный продукт — это относительно компактная плата с уже напаянными RAM и ROM нужного объёма и заранее подготовленная и оптимизированная под конкретный спектр задач программное окружение. Для примера можно посмотреть на те же домашние роутеры.
Второй вариант работы с платой — запуск полноценной ОС. Именно им и воспользуемся для тестов. Разработчики предлагают слегка модифицированный вариант Debian 9 с ядром из SDK. Обратите внимание, что сами они не занимаются пересборкой всего софта. Используются готовые репозитории mipsel-ветки Debian, так что оптимизаций под конкретно этот процессор нет. Впрочем, есть ещё и сборки Astra Linux Special Edition для устройств «Таволга Терминал» 2BT1, в которых установлен тот же процессор «Байкал-Т1». Но их, увы, никто в открытый доступ не выкладывает. Также ожидается поддержка Alt Linux и Buildroot и есть возможность запуска OpenWRT/LEDE.
Для запуска Debian необходимо взять образы ядра, прошивки и ramdisk из SDK. В сам SDK также входят вспомогательные инструменты для кросс-компиляции, скрипты для сборки ROM-образа и подготовленная ВМ для QEMU, где можно предварительно отладить свои программы. Работу с Debian 9 на BFK 3.1 пока что нельзя назвать идеально гладкой: после установки придётся покопаться с настройками и доустановить часть ПО, но особых проблем с этим нет. Жаль только, что полноценной документации к плате пока также не существует: кое-что придётся выяснять опытным путём или спрашивать напрямую у разработчиков.
Для тестов к плате были подключены древний по нынешним меркам накопитель Kingston SSDNow V для ОС и модуль памяти DDR3L-1600 ёмкостью 4 Гбайт производства Samsung. Однако для знакомства с возможностями процессора этого хватит. Есть ещё один нюанс — из-за особенностей контроллера видна не вся память, что есть в модуле SO-DIMM. Другой важный момент касается базовой сборки тестовых программ из исходных кодов: всё это проделывалось непосредственно на BFK 3.1. Там, где это необходимо, указаны ключи компилятора.
Процесс сборки, надо сказать, не всегда безболезненный. Где-то пришлось покопаться с параметрами оптимизации, чтобы достичь лучшего результата. Что-то успешно собиралось, но при исполнении падало или вело себя некорректно. Временами вообще возникало ощущение, что разработчики о существовании отличных от x86-платформ не подозревают. И это касается не только ПО. В частности, в PCI-E, скорее всего, не заработают современные GPU, так как, по словам создателей, почти все они требуют наличия UEFI/BIOS x86. Также могут возникнуть проблемы с устройствами, у которых внутри используется, например, мост PCI ↔ PCI-E.
Характеристики процессора «Байкал-Т1»
Для начала короткая справка о самом процессоре. «Байкал-Т1» имеет два 32-битных ядра на архитектуре P5600 Warrior (MIPS32 Release 5) с аппаратной поддержкой виртуализации. Каждое ядро получило L1-кеш данных и инструкций объёмом 64 Кбайт. На оба ядра приходится один общий L2-кеш ёмкостью 1 Мбайт. Также у каждого ядра есть свой FPU-блок c поддержкой 128-бит SIMD. Ядра, L2 и FPU работают на одной частоте: 1,2 ГГц. Процессор способен исполнять до четырёх целочисленных операций, до двух операций над числами с плавающей запятой двойной точности или четырёх одинарной точности за такт. То есть теоретическая пиковая производительность составляет 4,8 Гфлопс FP64 (2 ядра 1,2 ГГц × 2 FP64) или 9,6 Гфлопс FP32. Однако на практике для раскрытия потенциала (как любят выражаться в комментариях) необходимы и ручная оптимизация кода, и компилятор, «знающий» об особенностях FPU/SIMD.
В реальности же, к примеру, неоптимизированная версия Linpack, собранная открытым GCC, выдаёт результат на порядок меньше ожидаемого. Ситуация, вообще говоря, вполне нормальная для новых или специфичных (вроде того же «Эльбруса») архитектур. Это следует учитывать при оценке результатов, приведённых ниже. Ещё один важный момент касается нашумевших уязвимостей Meltdown и Spectre. Вычислительные блоки в MIPS32r5 суперскалярны и умеют делать внеочередное исполнение инструкций, но о глубокой спекулятивности явно не говорится. Разработчики ядра выпустили предупреждение о возможном наличии Spectre (но не Meltdown) в «чистых» ядрах P5600/P6600. По словам создателей, в случае «Байкала-Т1» официальный код проверки на наличие уязвимости не срабатывает, но со стопроцентной уверенностью говорить о её отсутствии пока рано. В планах организация отдельного хакатона для проверки безопасности процессора.
С остальными компонентами ядра общаются по шине AXI. Все высокоскоростные интерфейсы имеют поддержку DMA. Собственно одноканальный контроллер памяти поддерживает DDR3-1600 с ECC. Максимальный поддерживаемый CPU объём RAM равен 8 Гбайт. Есть ещё один нюанс — контроллер памяти имеет шину данных шириной 32 бит и 8 бит ECC и поддерживает работу с микросхемами памяти шириной от 8 до 32 бит. Для готовых изделий с уже напаянными подходящими модулями проблем нет, а вот плата у обычных SO-DIMM «увидит» только половину заявленного объёма, так как наружу они «смотрят» обычно 64-бит интерфейсом. Ну и скорость работы, очевидно, будет ниже — до 6,4 Гбайт/с.
Из интересных блоков, которые есть в CPU, можно выделить сопроцессор собственной разработки, который позволяет, например, ускорить шифрование по стандартам ГОСТ (но не только) и 10-гигабитный контроллер. Последний, как уже отмечалось выше, требует отдельный мезонин с SFP-портом. Это сделано для снижений итоговой цены BFK 3.1, да и для разработки этот порт нужен далеко не всем. Остальные блоки лицензированы у компаний MIPS, Imagination Technologies и Synopsys. На внутреннее строение чипа можно полюбоваться здесь.
Для питания процессор требует напряжение 0,95 В, а заявленная потребляемая мощность составляет не более 5 ватт. Во время тестов CPU прогревался до 60 с небольшим градусов Цельсия. Активное охлаждение для него не требуется, однако в закрытом корпусе наличие радиатора лишним не будет. Частота ядер динамически регулируется в диапазоне от 200 до 1500 МГц, но это требует поддержки со стороны ОС, так что пока в текущей сборке Debian частоту можно задать при старте системы. В любом случае во время работы при малой нагрузке одно ядро автоматически может отключаться полностью. Производится «Байкал-Т1» на фабриках TSMC по 28-нм техпроцессу. Сам по себе он стоит $65. Также важно отметить, что данная модель изначально разрабатывалась не только и не столько для госзаказчиков. Она, по задумкам и надеждам создателей, должна приглянуться и обычным коммерческим потребителям, которые создают продукты для гражданского сектора.
Тест CoreMark
Перейдём непосредственно к тестам. Первый в очереди CoreMark — специализированный бенчмарк, который используется для оценки производительности процессоров и SoC встраиваемых систем. Собственно говоря, именно с анонса нового рекорда в CoreMark Imagination Technologies и начала рассказ о преимуществах ядра MIPS P5600 Warrior. Правда, речь шла об одиночном ядре, которое к тому же на тот момент существовало только в виде симуляции на FPGA и работало на частоте 20 МГц. Тогда речь шла о рекорде в значении CoreMark на мегагерц на ядро: 5,61, но в реальности стоит рассчитывать на значение около 5. Разработчики даже указывали на бо́льшую эффективность P5600 в сравнении с десктопными CPU Intel. Формально «Байкал-Т1» является лидером в пересчёте на мегагерц и мегагерц/ядро. На практике же для достижения производительности в абсолютных величинах производители не чураются экстенсивных методов, увеличивая частоты и число ядер.
CoreMark | |||||||
Модель | Архитектура | Частота, МГц | Ядра | CoreMark | CoreMark/МГц | CoreMark/ядро | CoreMark/МГц/ядро |
ARM Cortex-A15 | ARM Cortex-A15 | 1700 | 2 | 15908,00 | 9,36 | 7954,00 | 4,68 |
Samsung Exynos 4412 | ARM Cortex-A9 | 1400 | 4 | 15399,42 | 11,00 | 3849,86 | 2,75 |
Baikal T-1 (3DNews, precomp) | MIPS P5600 | 1200 | 2 | 13052,51 | 10,88 | 6526,26 | 5,44 |
Baikal T-1 (3DNews, опт.) | MIPS P5600 | 1200 | 2 | 13039,36 | 10,87 | 6519,68 | 5,43 |
Baikal T-1 (оф. тест) | MIPS P5600 | 1200 | 2 | 12364,00 | 10,30 | 6182,00 | 5,15 |
Intel Core 2 Duo T5500 | x86-64 | 1660 | 2 | 12095,88 | 7,29 | 6047,94 | 3,64 |
Baikal T-1 (3DNews, б/опт.) | MIPS P5600 | 1200 | 2 | 11988,45 | 9,99 | 5994,23 | 5,00 |
Nufront NuSmart 2816 | ARM Cortex-A9 | 2000 | 2 | 11661,19 | 5,83 | 5830,60 | 2,92 |
AMD E350 | x86-64 | 1600 | 2 | 10987,00 | 6,87 | 5493,50 | 3,43 |
TI Sitara AM57xx | ARM Cortex-A15 | 1500 | 2 | 10976,40 | 7,32 | 5488,20 | 3,66 |
Intel Atom E3827 | x86-64 | 1743 | 2 | 10820,91 | 6,21 | 5410,46 | 3,10 |
VIA Nano X2 L4350 | x86-64 | 1600 | 2 | 9104,01 | 5,69 | 4552,01 | 2,85 |
TI OMAP4460 | ARM Cortex-A9 | 1200 | 2 | 6357,78 | 5,30 | 3178,89 | 2,65 |
NVIDIA Tegra 2 | ARM Cortex-A9 | 1000 | 2 | 5866,39 | 5,87 | 2933,20 | 2,93 |
Allwinner A20 | ARM Cortex-A7 | 1000 | 2 | 2086,23 | 2,09 | 1043,12 | 1,04 |
Увы, база результатов CoreMark собирается не слишком аккуратно, так что пришлось вручную подбирать тесты двухъядерных чипов, которые имели бы близкие к показателям «Байкала-Т1» частоты и явное указание на то, что в тесте используются два потока. Для сравнения был добавлен один четырёхъядерный образец, и это неслучайно. Вообще, ранжировать результаты можно сразу по нескольким критериям. Однако тут же появляется масса нюансов. Во-первых, решения и ARM, и MIPS лицензируются сторонним компаниям, так что реализация одного и того же дизайна может значительно различаться. Во-вторых, многое зависит от оптимизации и самого кода, и его сборки, и среды исполнения.
Для нашего базового теста использовался GCC 6.3 со следующими опциями: -O3 -DMULTITHREAD=2 -DUSE_PTHREAD -funroll-all-loops -fgcse-sm -fgcse-las -finline-limit=1000 -mhard-float -mtune=p5600. В тестах самих разработчиков использована в том числе и коммерческая среда Sourcery CodeBench. Здесь и далее в таблицах приняты следующие обозначения: «оф. тест» — для результатов, выложенных на сайте разработчиков; «precomp» — для запусков бинарных файлов бенчмарков, присланных создателями CPU; «б/опт.» — собственные сборки из исходных кодов с применением открытых средств и указанием ключей; «опт.» — кросс-компиляция силами SDK и коммерческих утилит по «рецептам» от разработчиков. При ручной оптимизации можно добиться лучших показателей, что очень хорошо заметно в таблице с результатами. Однако перед нами не стоит задача перебирать ключи и копаться в коде. А вот разработчикам софта для «Байкала-Т1» определённо придётся этим заниматься на регулярной основе.
Классические бенчмарки
Из того же документа можно взять и результаты классических бенчмарков «старой школы». Тест Stream для оценки пропускной способности памяти был собран для одного потока со следующими ключами: -mtune=p5600 -O2 -funroll-all-loops. Результат примерно вдвое меньше, чем теоретическая скорость работы RAM.
Stream (1 поток), Мбайт/c | ||||
Copy | Scale | Add | Triad | |
Оф. тест | 3119,2 | 3109,9 | 2466,9 | 2467,7 |
3DNews, precomp | 3255,8 | 3287,9 | 2481,0 | 2503,1 |
3DNews, опт. | 3255,6 | 3290,2 | 2480,9 | 2503,1 |
3DNews, б/опт. | 3295,9 | 3284,4 | 2509,3 | 2485,8 |
Всё вышесказанное про CoreMark относится и к Dhrystone2 (целочисленные вычисления), который в базе был собран с минимумом ключей: -O3 -funroll-all-loops -mtune=p5600. Увы, как и в примерах выше, база измерений не блещет чистотой и аккуратностью. Для сравнения были взяты некоторые результаты для 32-битных вычислений с явным указанием на наличие оптимизаций. К сожалению, для них не указаны конкретные модели или хотя бы поколения CPU. Кроме того, дело осложняется наличием TurboBoost или аналогичных техник кратковременного (а тест этот как раз непродолжительный) увеличения базовой частоты процессора, что смазывает общую картину. Опять-таки в тесте повторяется ситуация с CoreMark — в пересчёте на мегагерц производительность у P5600 неплохая.
Dhrystone 2 | ||||
Модель | Архитектура | Частота, МГц | DMIPS | DMIPS/МГц |
Intel Core i7 3930K (32-бит, разгон) | x86-64 | 4730 | 13877,00 | 2,93 |
AMD Phenom II (32 бит) | x86-64 | 3000 | 6676,00 | 2,23 |
Baikal-T1 (3DNews, precomp) | MIPS P5600 | 1200 | 4433,17 | 3,69 |
Baikal-T1 (3DNews, опт.) | MIPS P5600 | 1200 | 4432,27 | 3,69 |
Baikal-T1 (оф. тест) | MIPS P5600 | 1200 | 4398,00 | 3,67 |
Intel Pentium 4 | x86 | 3066 | 4012,00 | 1,31 |
AMD Athlon XP | x86 | 2080 | 3700,00 | 1,78 |
Baikal-T1 (3DNews, б/опт.) | MIPS P5600 | 1200 | 3650,40 | 3,04 |
Intel Atom x5-Z8300 (32-бит) | x86-64 | 1840 | 3044,00 | 1,65 |
Broadcom BCM2837 (32-бит, Rpi 3) | ARM Cortex-A53 | 1200 | 2469,00 | 2,06 |
Broadcom BCM2836 (32-бит, Rpi 2) | ARM Cortex-A7 | 900 | 1667,00 | 1,85 |
Но другие современные CPU повышают её и наращиванием частоты, и поддержкой 64-битных инструкций, и числом ядер заодно. В Whetstone всё то же самое, только разница от увеличения потоков и задействования векторных инструкций ещё разительнее. Ах да, для сборки всего этого добра пришлось слегка подкорректировать код, убрав несущественные вызовы на x86-ассемблере и проверки на наличие x86-расширений, которые нужны только лишь для идентификации CPU.
Whetstone (32-бит, FP32) | ||||||
Модель | Архитектура | Потоков | Частота, МГц | MWIPS | MWIPS/МГц | MWIPS/МГц/ядро |
AMD Phenom X4 | x86-64 | 2 | 3000 | 5141,00 | 1,71 | 0,86 |
Baikal-T1 (3DNews, б/опт.) | MIPS P5600 | 2 | 1200 | 1025,00 | 0,85 | 0,43 |
Baikal-T1 (оф. тест) | MIPS P5600 | 2 | 1200 | 1213,00 | 1,01 | 0,51 |
Baikal-T1 (3DNews, precomp) | MIPS P5600 | 2 | 1200 | 1226,00 | 1,02 | 0,51 |
Baikal-T1 (3DNews, опт.) | MIPS P5600 | 2 | 1200 | 1227,00 | 1,02 | 0,51 |
Intel Atom | x86-64 | 2 | 1600 | 1182,00 | 0,74 | 0,37 |
Intel Core 2 Duo | x86-64 | 2 | 2400 | 4270,00 | 1,78 | 0,89 |
Intel Core i7-4820K | x86-64 | 2 | 3900 | 7312,00 | 1,87 | 0,94 |
Для быстрой проверки работы гигабитных сетевых адаптеров использовалась утилита iperf 3.1.3, которая показала, что для односторонних подключений скорость совпадает с положенными 940 Мбит/с, а вот в дуплексе, увы, скорость была на уровне 1,2 Гбит/с. Разработчики объясняют это тем, что для получения полноценной производительности необходимо сделать небольшой тюнинг на программном уровне.
Phoronix Test Suite
А вот эта затея уже попахивает безумием, так как PTS в целом не предназначен для такого рода систем. Сборка происходит непосредственно на тестируемой машине, так что в случае с «Байкалом-Т1» это просто мучительно долго, как и исполнение большинства тестов. Собственно, из набора исключены тесты, которые или так и не смогли скомпилироваться, или исполнялись бы неприлично долго даже на «взрослых» ПК. С первой проблемой, по идее, можно справиться вручную, подгоняя параметры сборки. Но повторимся, что, во-первых, такой задачи не было, а во-вторых, нельзя забывать, что результаты тестов вряд ли достигают максимально возможных значений.
Все результаты тестирования доступны по этой ссылке. Строго говоря, все проведённые тесты — это скорее задел на будущее, чтобы потом можно было посмотреть, насколько лучше стали (или не стали) результаты после работы над системой сборки и/или оптимизаций, а вот прямо сейчас всё это сравнивать особо не с чем. Из любопытного можно привести только несколько случайно совпавших по конфигурации бенчмарков с китайскими процессорами Loongson Godson 3A3000 (4 ядра @ 1,5 Гц, L2-кеш 1 Мбайт, L3-кеш 8 Мбайт, 28 нм, 30 Вт). Оба CPU схожи в том, что у них новая архитектура и проблемы с оптимизацией кода для него. Пока что китайцы впереди с большим отрывом по абсолютным показателям, но в пересчёте на ядра, МГц и потребление всё чуть менее однозначно.
Заключение
Отрадно, что отечественные разработчики смогли небольшой командой и в разумные сроки воплотить в «железе» SoC на современной архитектуре с неплохими характеристиками и возможностями. К тому же она не ориентирована строго на госзаказ и не стоит заоблачных денег. Это действительно здорово, кто бы что ни говорил. Но успех (или провал) реально удастся оценить только через год-два — всё зависит от того, кто и в каких объёмах будет использовать SoC в своих продуктах. Прямо сейчас публично рассказано только о некоторых из них. О терминале «Таволга» уже говорилось в самом начале, хотя он-то как раз является примером устройства для госслужб, равно как и DEPO Neos Twin. Промышленные ПК представлены моделями Fastwell CPС516 и CPC313, а также модулем SF-BT1. Близкими по духу к ним являются система ЧПУ «Ресурс-30» и модуль для работы с микромеханическими элементами оптических и лазерных систем от ЦИФ МГУ. Кроме того, анонсированы маршрутизаторы NSG-3000 и некие точки доступа РАЙТЕК, которые упомянуты на сайте производителя. Всё это типичные примеры областей применения «Байкала-Т1». Хотелось бы ещё увидеть решения NAS/SAN, IoT и SDR.
Впрочем, тут дело уже не в «железе». Сам CPU действительно неплох, особенно при оценке его относительной, а не абсолютной производительности. Да, самый трудный этап позади. Однако на текущий момент всё ещё немало «софтовых» проблем и шероховатостей. Если говорить конкретно о BFK3.1, то, на мой взгляд, у неё очень слабая документация. Глобально же вопрос другой: кто будет «затачивать» ПО под эту архитектуру? Кто даст инструменты, максимально упрощающие этот процесс? Будет ли достаточно сильное сообщество программистов? Например, та же поддержка аппаратной виртуализации, о которой было вскользь упомянуто в описании CPU, появилась только летом прошлого года, с релизом ядра Linux 4.12. Ну и в целом интересно, что будет дальше с MIPS. Пять лет назад выбор именно этой архитектуры был весьма разумным. А вот сейчас? Вопрос, вопрос…