BananaNAS — портативный NAS из одноплатника

Краткий обзор существующих решений

Большое количество разнообразных одноплатников или Single Board Computer (SBC), все чаще оснащаются PCIe интерфейсом, выведеным на FPC или M.2. Как правило количество лэйнов (lane) PCIe и максимально достижимая скорость зависят от конкретного процессора, установленного на SBC. Самые известные SBC, такие как Raspberry Pi 5, Orange Pi 5, Radxa Rock 5x, Banana BPI-Mx и другие, применяют ARM процессоры с контроллером PCIe Gen2 и PCIe Gen3. При этом у некоторых процессоров, например RK35xx, есть как комбинированные PCIe хосты для подключения USB3, SATA и PCIe Gen2, так и специализированные PCI Gen3.

Наличие PCIe интерфейса значительно расширяет возможности любого SBC по подключению самых разнообразных устройств. Чем больше портов может предоставить встроенный контроллер PCIe, тем больше устройств можно подключить. Если же портов окажется недостаточно, то можно добавить чип (микросхему) коммутатора PCIe.

Существует достаточно большое количество как просто проектов, так и законченных устройств на базе подобных SBC с применением PCIe. Уровень технической реализации и схемотехнических решений тоже разнообразен, хотя не стоит забывать, что речь идет про устройства с интерфейсом от 5Гбит/с до 8Гбит/с на лэйн.Чтобы как-то помочь энтузиастам с разработкой, Raspberry PI даже составило специальный документ — A 16-way PCIe FFC Connector Specification. Документ очень хороший получился, в результате теперь чего только не подключают к этому SBC, начиная от NVME и заканчивая AI ускорителями.

В отличие от Raspberry PI, китайские производители SBC, не предлагают подобных документов в помощь разработчикам. Хотя часто процессоры, которые они применяют, во многом выигрывают у процессора Raspberry PI. Поэтому, приходится ориентироваться исключительно на свой опыт, китайскую документацию и специализированные форумы.

О самом проекте портативного NAS

Чтобы как-то помочь в деле создания устройств на базе китайских одноплатников, хотелось бы поделиться своим опытом по разработке портативного NAS на основе платы Banana Pi BPI-M7:

Внешний вид и состав интерфейсов BPI-M7

Внешний вид и состав интерфейсов BPI-M7

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

Ключевые особенности проекта — поддержка двух NVME M.2 в режиме 2×2 lanes и габаритные размеры, сопоставимые с пачкой сигарет:

Общий вид BananaNAS

Общий вид BananaNAS

Два диска позволяют создать RAID 0 или RAID 1 в зависимости от того, что больше важно, надежность хранения или объем данных. Можно просто использовать два отдельных диска. В любом случае, даже понимая, что область применения это очень важная тема, в этой статье хочется остановиться все таки больше на технических вопросах.

Устройство портативного NAS

Одноплатник BPI-M7 построен на полноценном процессоре RK3588, у которого 4 лэйна PCIe Gen3 выведены на M.2 M-key для подключения одного NVME диска размером 2280:

Типовое подключение NVME диска

Типовое подключение NVME диска

Для подключения двух дисков пришлось разбить интерфейс на два отдельных интерфейса. Такая возможность существует благодаря тому, что процессор  RK3588 поддерживает режим 2×2 lanes, другими словами, два отдельных порта по два лэйна PCIe Gen3 в каждом порту. В теории даже два лэйна позволяют обмениваться с диском на скорости 16Гбит/с или 2ГБайт/с, что не мало:

Плата модуля дисков и адаптер

Плата модуля дисков и адаптер

Проблемы и решения

На языке технической документации, требуется установить режим без агрегации и без бифуркации:

Пример разделения шины PCIe Gen3 на два порта

Пример разделения шины PCIe Gen3 на два порта

Такой режим задается соответствующим полем [2:0] регистра pcie30_phy_mode. Если изначально для режима агрегации значение этого поля задавалось как 3«b100, то в данном случае необходимо его поменять на 3«b000:

Режимы работы PCIe из TRM Rockchip

Режимы работы PCIe из TRM Rockchip

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

Нужные пины, а это PEWAKE#, CLKREQ# и PERST#, уже задействованы для других целей. Однако, это не такая большая проблема, потому что часть этих пинов, такие как PEWAKE# и CLKREQ# является опцией, а оставшийся PERST# можно сформировать самим, либо управляя специальным пином уже как GPIO, либо добавив цепь аппаратного сброса. Так или иначе, получается довольно простая схема подключения двух NVME дисков к одному M.2:

Структурная схема подключения модуля дисков

Структурная схема подключения модуля дисков

У одноплатника BPI-M7 на сайте Armbian есть официальная страница. Поэтому,   для внесения изменений в device tree существующего образа BPI-M7, мы решили связаться с поддержкой производителя. В результате совместной работы, нам удалось создать оверлей, который задаёт нужную конфигурацию портов PCIe Gen3.

Консоль Armbian после загрузки BananaNAS

Консоль Armbian после загрузки BananaNAS

Дизайн и сборка

Дизайн корпуса выполнен для пассивного охлаждения. Предусмотрен отвод тепла от процессора непосредственно на верхнюю часть корпуса-радиатора через термоинтерфейс:

Вид на одноплатник с установленной термоподложкой

Вид на одноплатник с установленной термоподложкой

Для подключения модуля с двумя дисками к одноплатнику, применяется дополнительный адаптер M.2 / FFC, который также был разработан для этого NAS. Плата-адаптер вставляется в M.2 и крепится как обычный диск. Далее к плате подключается гибкий кабель FFC, по которому передаются все сигналы интерфейса PCIe x4. Также отдельным кабелем на модуль дисков подается питание 5В:

Вид на плату с установленным адаптером M.2 / FFC

Вид на плату с установленным адаптером M.2 / FFC

Два диска NVME крепятся на основной плате-модуля дисков. Устанавливаются термоподложки / термопрокладки так чтобы сразу отводить температуру на корпус:

Пример установки дисков на плату-модуля

Пример установки дисков на плату-модуля

После установки дисков, модуль крепится на одной из половин корпуса. Не самое удобное решение по установке дисков, но в данном случае это только прототип:

Вид на установленный модуль дисков

Вид на установленный модуль дисков

Для соединения одноплатника и модуля дисков, остаётся только подключить FFC кабель и кабель питания:

Подключение кабелей медду одноплатником и модулем дисков

Подключение кабелей медду одноплатником и модулем дисков

Вид на платы спереди

Вид на платы спереди

Видо на платы сзади

Видо на платы сзади

В самом конце сборки корпуса, обе половины скрепляются винтами, а также устанавливаются передняя и задняя пластины:

Вид снизу

Вид снизу

Вид спереди

Вид спереди

Вид сзади

Вид сзади

Подключение антенн к встроенному модулю WiFi 6 пока прорабатывается. Есть варианты с размещением как внутренних, так и внешних антенн. Пока только рендер:

Проект установки внешних антенн

Проект установки внешних антенн

Единственный тип питания одноплатника — это Type-C PD. В спецификации Type-C, помимо обычного разъема, есть также описание разъёмов с дополнительной фиксацией. Для одного из таких разъемов на корпусе были предусмотрены резьбовые отверстия:

Type-C с дополнительной фиксацией

Type-C с дополнительной фиксацией

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

Пока выполнены только несколько основных тестов. Это тест потребления, температурный тест, измерена скорость сетевого интерфейса и есть предварительная оценка производительности дискового интерфейса.

Потребление измерялось как во время выполнения встроенных тестов Armbian, так и при обычных задачах.В качестве измерительного устройства использовался USB тестер:

Вид на измерительный тестер

Вид на измерительный тестер

Результаты измерения представлены в основном для питания 12В. Судя по всему, потребление немного зависит от питающего напряжения. Было замечено, что когда портативный NAS питался от 5В источника, потребление было немного меньше, чем при питании от 12В. Напряжений выше чем 12В контроллер PD не запрашивал, видимо не надо было:

Нагрузка на систему

Потребление, Вт

Не более 5%

4Вт…6Вт в зависимости от входного напряжения Type-C PD.

Наименьшее значение 4Вт при питании от 5В, наибольшее значение 6Вт при питании от 12В

Выше средней при выполнении тестов 7z

9Вт…11Вт

Чтение / запись дисков

Порядка 6Вт…7Вт

Просмотр 4k видео

Не более 7Вт

Температура обычно не поднимается выше 45…50 градусов в комнате летом в жаркую погоду, при том, что используется пассивное охлаждение. Также для эксперимента проводился обдув турбиной 40 мм для 3D принтеров. В целом применение даже такого незначительного охлаждения, снижает температуру примерно на 10 градусов. Поэтому, был разработан также вариант корпуса с активным охлаждением, при этом удалось полностью уложиться в существующие габариты корпуса с пассивным охлаждением:

Проект активного охлаждения

Проект активного охлаждения

У одноплатника BPI-M7 есть только два сетевых интерфейса 2.5Гбит/с каждый. При этом два встроенных гигабитных контроллера процессора не используются совсем. С одной стороны это удорожает дизайн, но зато появляется возможность существенно увеличить скорость сетевого интерфейса. Тестирование велось как с помощью утилиты Iperf, так и записью / чтением файлов по сети:

Результаты тестирования сетевого интерфейса

Результаты тестирования сетевого интерфейса

График скорости загрузки с NAS на компьютер

График скорости загрузки с NAS на компьютер

График скорости загрузки с компьютера на NAS

График скорости загрузки с компьютера на NAS

Даже эти данные, полученные на скорую руку, показывают значительный прирост скорости по сравнению с гигабитным соединением.

Последнее, что было проверено, это скорость работы дисковой подсистемы. Проверка проводилась с единственной целью, необходимо было убедиться, что передача сигналов по PCIe не нарушена. Всё таки достаточно много дополнительных разъемов на пути передачи от процессора до дисков, вдобавок несколько плат новых, хотя и с контролем импеданса. Поэтому, оценка показателей типа IOPS и других еще будет проводиться. При копировании локально с диска на диск, с учетом только двух задействованных лэйнов у каждого диска, достигается примерно половина от заявленной производителем максимальной скорости. В общем быстро диски работают, да и ошибок не было:

График скорости локального копирования между дисками NAS

График скорости локального копирования между дисками NAS

Планы на будущее

Самое главное, мы хотим довести этот проект до коммерческого продукта. Это может быть как набор для самостоятельной сборки, например, если такой одноплатник уже есть, так и готовый к применению портативный NAS. Пока еще рано говорить про цену, так как многое зависит от этапа индустриализации, которым мы только начинаем заниматься.

Помимо разработки портативного NAS — BananaNAS, мы также продолжаем работать над еще одним нашим проектом мобильного NAS — PixelNAS. Дело это очень интересное, но пока не прибыльное. Поэтому, полностью заняться разработкой в этом плане так и не удается. Хотя идей много, а главное есть интерес со стороны производителей одноплатников, которые мы применяем, в плане совместных проектов. Так что, читайте наш новостной канал и присоединяйтесь к нашему сообществу, где с нами можно обсудить детали разработок как текущих, так и будущих.

© Habrahabr.ru