Pull to refresh
88.73

Конструктор шины PCIe

Level of difficultyEasy
Reading time3 min
Views1.1K
Корпус и модули в сборе
Корпус и модули в сборе

Известно, что для увеличения устройств подключаемых к PCIe, можно либо разбить шину на несколько корневых контроллеров, то что называется PCIe bifurcation, либо подключить к шине коммутатор PCIe. В любом случае, для подключения дополнительных устройств также понадобятся разъемы. Существует несколько типов таких разъемов, но для подключения дисков NVME нужны разьемы M.2 M-key.

Следовательно, необходим такой модуль, который содержит коммутатор PCIe, а также несколько разъемов М.2. Такие модули существуют в виде полноценных PCIe карт. При всех достоинствах таких карт, чтобы их наращивать необходимо приложить немало усилий и тех средств.

Чтобы решить эту проблему, я разработал небольшой модуль с коммутатором PCIe и интерфейсом OCuLink, у которого на плате есть четыре разъема М.2 M-key. Модули можно включать друг за другом, либо подключать несколько модулей к одному узловому. Порядок и топология особого смысла не играет, по крайней мере, каких то особых ограничений мне неизвестно. Недавно я уже публиковал статью на Хабр, в которой встречался этот модуль, но сейчас речь немного о другом его применении.

В данном случае речь идет про некий конструктор шины PCIe в основе которого лежит данный модуль. Есть еще пара необходимых элементов, а именно, кабель OCuLink и адаптер M.2 / OCuLink. По сути, только этих трех компонентов достаточно чтобы даже из одного разъема М.2 получить неограниченное количество точек подключения новых дисков и контроллеров PCIe. Если проводить аналогию, то первое, что приходит в голову это конструктор Lego, с его базовыми brick’ами.

Пожалуй, проще всего будет показать принцип работы этого конструктора шины PCIe на примере добавления в существующую систему 10 дополнительных разъемов M.2 для подключения практически любой периферии, такой как диски NVME, контроллеры PCIe / SATA, контроллеры PCIe / USB 3.0, а также карты памяти CFexpress Type B. Этот ряд не является уникальным, а был выбран мной исходя только из доступных средств.

Шаг 1. Подключение первого модуля

В самом начале один из трех модулей подключался к разъему M.2 на материнской плате:

Установка первого модуля
Установка первого модуля

В итоге получалось четыре разъёма М.2, из которых два были заняты дисками для организации зеркала:

Вид на перный модуль
Вид на перный модуль

Шаг 2. Подключение второго модуля

Далее в один из разъемов М.2 первого модуля подключался адаптер M.2 / OCuLink. На него заходил кабель OCuLink и отдельно кабель питания:

Подключение второго модуля
Подключение второго модуля

С добавлением второго модуля, в систем стало доступно дополнительно семь разъемов М.2:

Вид на корпус с двумя модулями
Вид на корпус с двумя модулями

Второй модуль был использован лишь частично за счет установки адаптера для карты памяти CFexpress:

Устновка адаптера CFexpress на второй модуль
Устновка адаптера CFexpress на второй модуль

Шаг 3. Подключение третьего модуля

Подключение третьего модуля происходило в точности также как для второго модуля.

Заранее подготовил модуль, установил на него два контроллера PCIe / SATA и контроллер PCIe / USB3.0:

Вид на конструкцию с тремя модулями
Вид на конструкцию с тремя модулями

На этом шаге я решил остановиться, так как у меня просто уже не осталось подходящих M.2 устройств. После добавления третьего модуля в системе стало доступно десять разъемов M.2, из которых занятыми оказались лишь шесть, остальные четыре остались свободными.

Также установил дополнительный SATA диск чтобы проверить работу PCIe / SATA контроллера. На плате модуля было предусмотрено место для установки 2.5” диска, а также разъем питания::

Установка диска SATA
Установка диска SATA
Индикация работы SATA
Индикация работы SATA

Проверка системы

После запуска системы была проведена небольшая проверка результата. Так команда lspci показала наличие трех коммутаторов PCIe и всех тех железок, которые удалось подключить по сути к одному M.2 на материнской плате::

Вывод команды lspci
Вывод команды lspci

Ожидаемо дерево PCIe выглядело следующим образом, здесь цифрами обозначены все три коммутатора PCIe:

Дерево шины PCIe
Дерево шины PCIe

Также проверка в OMV показала, что все диски и карта видны. Карту я сделал сам из готового корпуса и диска Samsung размером 2230, поэтому, она видна как диск::

Список дисков в OMV
Список дисков в OMV

В итоге, получилось практически за один вечер собрать целую систему с дополнительными десятью разъемами M.2 и подключить к ним шесть устройств, не считая SATA диска. Конечно, удалось рассказать не все в рамках этой статьи, о том, что осталось за рамками, можно найти в нашем новостном канале. Так, понятно, что если все вешать на один M.2, то в какой то момент это может сказаться на общей производительности. Также при таком способе наращивания PCIe портов, накапливается джиттер, питание не вечное, но все эти моменты можно решить за счет дополнительной платы синхронизации, отдельных кабелей питания, может быть отдельного модульного источника питания, а также более производительных коммутаторов PCIe. Все это может стать неким конструктором из готовых модулей, который подходит абсолютно для любой платформы, включая как x86, так и ARM.

Tags:
Hubs:
+13
Comments13

Articles

Information

Website
vk.com
Registered
Founded
Employees
11–30 employees
Location
Россия