Может ли ядро Linux перечислять устройства PCIe, выходящие за рамки возможностей BIOS?

Вопрос или проблема

Я пытаюсь построить большую систему, используя несколько бэкплейнов PCIe. BIOS системы имеет ограничение на количество устройств, которые могут быть перечислены. Можно ли заставить ядро Linux управлять устройствами PCIe и игнорировать конфигурационное пространство, предоставленное BIOS?

Немного поздно, но, возможно, полезно для других людей с похожим вопросом:

Согласно спецификации, шина PCI(e) должна перечисляться в глубину. Это означает, что когда найден коммутатор или прозрачный мост, его необходимо настроить, и надо продолжить перечисление устройств за этим вновь найденным коммутатором/мостом. После этого можно продолжить перечисление устройств на том же уровне, где был найден коммутатор/мост. Чтобы уменьшить сложность и использование памяти, некоторые BIOS’ы ограничены в максимальной глубине сканирования. Поскольку вы упоминаете несколько бэкплейнов, я предполагаю, что это тот случай.

Ядро Linux не имеет этого ограничения. И вы можете заставить его пересчитать устройства на шине, введя в терминале:

echo "1" > /sys/bus/pci/rescan

Простой ответ: нет.
Правдивый ответ: иногда.
Ужасный ответ: однажды, да, но в наши дни нет.
Печальный ответ: реализации процессоров/чипсетов Intel и AMD сломали это, сделав невозможным для ОС корректировать карты памяти I/O, используя стандартизированные местоположения P2P-мостов. BIOS плохо с этим справляется и не может эффективно работать с горячей заменой в большинстве случаев; даже когда это возможно, все равно справляется плохо, и ОС больше не может изменить назначения корневых портов, как это было предусмотрено спецификацией. Кажется, Intel и AMD это не волнует.

Ответ или решение

Вопрос о возможности Linux-ядра превосходить BIOS в перечислении устройств PCIe является довольно часто обсуждаемым в контексте создания больших систем, использующих многочисленные PCIe-бэкплэйны. Эта проблема возникает из-за ограничений в BIOS, касающихся числа устройств, которые могут быть перечислены. Чтобы ответить на поставленный вопрос, необходимо рассмотреть теоретические аспекты работы с PCIe, реальные примеры и возможные решения (или применения) в реальной жизни.

Теория

Перечисление PCIe-устройств обычно выполняется BIOS системы при её загрузке. Этот процесс включает в себя идентификацию и адресацию всех устройств, подключённых через PCIe. Однако архитектура некоторых BIOS накладывает ограничения на число атомарно поддерживаемых устройств, что зачастую становится проблемой при создании сложных систем, требующих значительного расширения с использованием PCIe.

Согласно спецификации, шина PCI(e) должна быть перечислена с использованием метода глубинного поиска. Это означает, что, обнаружив коммутатор или прозрачный мост, система должна сначала конфигурировать его, а затем продолжить перечисление устройств, находящихся за этим коммутатором или мостом. После этого возможно продолжить перечисление устройств на том же уровне, где был найден коммутатор или мост. Некоторые версии BIOS имеют ограничение на максимальную глубину сканирования для снижения сложности и объёма используемой памяти.

Пример

Предположим, вы разрабатываете крупномасштабную вычислительную систему, в которой используется несколько PCIe-бэкплэйнов. Ограничения BIOS могут стать серьёзной проблемой, если структура вашей системы требует поддержания более значительного количества PCIe-устройств, чем может обработать BIOS. Как известно, функция "пересканирования" PCIe-шины в Linux позволяет обойти некоторые ограничения BIOS. Это возможно благодаря команде echo "1" > /sys/bus/pci/rescan, которая инициирует процесс повторного сканирования шины, проводимого уже в условиях работы операционной системы, что позволяет повысить количество распознаваемых устройств.

Однако здесь возникает ряд проблем. На современных процессорах Intel и AMD реализации интерфейсов CPU и чипсетов делают невозможной для ОС корректировку карт памяти ввода-вывода с использованием стандартных местоположений мостов P2P. Проще говоря, даже если вы пересканируете шину PCIe с помощью ОС, BIOS по-прежнему играет решающую роль в начальном распределении ресурсов, и иногда это ограничивает возможности ОС.

Применение

Хотя пересканирование шины PCIe в Linux действительно может помочь в ряде случаев, существуют ситуации, когда это не решит проблему. Например, BIOS остаётся ответственным за корневую адресацию портов, и ОС не может изменить её из-за изменений в архитектуре Intel и AMD. Это означает, что, хотя некоторые устройства могут быть успешно определены после выполнения команды пересканирования, проблемы всё равно могут возникнуть, если им не хватает заново распределённых ресурсов для полной настройки.

Поэтому полное решение этой проблемы может потребовать интеграции специфического программного обеспечения или аппаратных патчей, которые смогут обойти эти ограничения BIOS. Также стоит отметить, что использование кастомизированного BIOS или модификации существующего BIOS (хотя это и рисковано и не рекомендуется без полного понимания последствий), может предложить более гибкие решения для создания больших систем, использующих PCIe.

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

Оцените материал
Добавить комментарий

Капча загружается...