Я вступил в обсуждение в комментариях /security/109199/is-physical-security-less-important-now-for-securing-a-server?noredirect=1#comment194327_109199
Вопрос прост. Кто-нибудь имел опыт успешного горячего подключения карты PCIe? Требуются ли для него специальные материнские платы и карты, или он должен работать на любом потребительском оборудовании?
Ответы:
Раньше я проектировал оборудование PCI-Express, для которого требовалась полная поддержка «горячей» замены аппаратного и программного обеспечения, и это, конечно, возможно, но это довольно сложно и требует обширной поддержки программного обеспечения - оборудование на самом деле довольно простое. Мне пришлось спроектировать аппаратное обеспечение, а затем реализовать поддержку BIOS (UEFI) и ядра (Linux) для горячего подключения произвольных устройств PCIe через оптоволокно и медь.
С точки зрения программного обеспечения, следует помнить, что PCIe продолжает работу с программной моделью PCI, включая концепцию адресации шины, устройства, функции. При перечислении шины PCI выполняется поиск в ширину:
Перечисление PCIe обычно выполняется дважды. Во-первых, ваш BIOS (UEFI или другой) сделает это, чтобы выяснить, кто присутствует и сколько памяти им нужно. Затем эти данные могут быть переданы в хост-ОС, которая может принять их как есть, но Linux и Windows часто также выполняют свою собственную процедуру перечисления. В Linux это делается через базовую подсистему PCI, которая ищет шину, применяет любые причуды, если необходимо, на основе идентификатора устройства, а затем загружает драйвер, который имеет соответствующий идентификатор в своей функции зонда. Идентификатор устройства PCI идентифицируется через комбинацию его идентификатора поставщика (16 бит, например, Intel - 0x8086) и идентификатора устройства (еще 16 бит) - наиболее распространенный источник в Интернете находится здесь: http://pcidatabase.com / .
Пользовательская часть программного обеспечения входит в процесс перечисления, то есть вы должны заблаговременно резервировать номера шины PCI и сегменты памяти для потенциальных будущих устройств - это иногда называют « заполнением шины ». Это исключает необходимость повторного подсчета шины в будущем, что часто невозможно сделать без нарушения работы системы. Устройство PCI имеет BAR (регистры базовых адресов)) который запрашивает у хоста, сколько и какого типа (памяти или пространства ввода-вывода) памяти требуется устройству - вот почему вам больше не нужны перемычки, такие как ISA :) Аналогично, ядро Linux реализует горячее подключение PCIe через pciehp Водитель. Windows делает разные вещи в зависимости от версии - старые версии (я думаю, что XP) игнорируют все, что говорит BIOS, и проводят собственное исследование. Я полагаю, что более новые версии более уважительно относятся к ACPI DSDT, предоставляемому микропрограммой хоста (BIOS / EFI), и будут включать эту информацию.
Это может показаться довольно сложным, и это так! Но помните, что любой ноутбук / устройство со слотом ExpressCard (который реализует PCIe, так как вы можете иметь ExpressCard только с USB) должен это делать, хотя обычно заполнение довольно простое - всего одна шина. Раньше моим старым оборудованием был коммутатор PCIe, за которым стояли еще 8 устройств, поэтому заполнение стало несколько сложнее.
С аппаратной точки зрения это намного проще. Контакты GND карты сначала соприкасаются, и мы поместили бы на плату интегральную схему контроллера горячей замены от LTC или аналогичную для последовательного включения питания после установления соединения. В этот момент встроенная плата ASIC или FPGA начинает последовательность включения питания и начинает пытаться обучить канал связи PCI Express. Предполагая, что хост поддерживает горячее подключение и PCI Express SLTCAP / SLTCTRLрегистр (в спецификации: регистр возможностей слотов PCI Express, регистр управления слотами PCI Express. Для этого также есть 1 и 2 - достаточно битов для разделения на две регистры). поскольку этот порт был настроен так, чтобы указывать, что порт поддерживает «горячее» подключение, программное обеспечение может начать перечисление нового устройства. Регистр состояния слота (SLTSTA, регистр состояния слота PCI Express) содержит биты, которые целевое устройство может установить, указывая на сбой питания, механическую защелку и, конечно, обнаружение присутствия + присутствие изменилось.
Вышеупомянутые регистры находятся в «Пространстве конфигурации PCI (Express)», которое является небольшой областью карты памяти (4K для PCIe), выделенной для каждого потенциального файла bdf (шина: устройство: функция). Фактические регистры обычно находятся на периферийном устройстве.
На стороне хоста мы можем использовать PRSNT1 # / PRSNT2 # как простые сигналы постоянного тока, которые подают на включение IC переключателя питания, или запускать GPIO на чипсете / PCH, чтобы вызвать IRQ и вызвать SW 'эй, что-то вставлено иди найди и настрой это! рутина.
Это много информации, которая не дает прямого ответа на ваш вопрос (см. Краткую сводку ниже), но, надеюсь, она даст вам более полное представление о понимании процесса. Если у вас есть какие-либо вопросы о конкретных частях процесса, дайте мне знать в комментарии здесь или напишите мне письмо, и я могу обсудить дальше + обновить этот ответ с этой информацией.
Подводя итог, необходимо отметить, что периферийное устройство должно быть спроектировано с поддержкой горячей замены с точки зрения аппаратного обеспечения. Правильно спроектированный хост / слот также поддерживает горячее подключение, и на материнской плате класса high-end я ожидаю, что он будет безопасным. Тем не менее, программная поддержка - это совсем другой вопрос, и вы, к сожалению, обязаны BIOS, который поставил вам ваш OEM.
На практике вы используете эту технологию каждый раз, когда извлекаете / вставляете карту PCIe ExpressCard из компьютера. Кроме того, высокопроизводительные блейд-системы (телекоммуникационные или иные) также регулярно используют эту технологию.
Последний комментарий - сохраните PDF, который был связан с Базовыми спецификациями, PCI-SIG обычно взимает за это деньги :)
источник
При условии, что соединения контроля состояния питания были открыты для разъема вышестоящим коммутатором, и съемный блок открыл эти контакты и настроен на их правильное использование, и (как отмечает Джиппи) программное обеспечение может обнаружить событие горячего подключения и правильно отреагировать, ответ да.
Как правило, эта возможность в основном используется в фермах серверов и центрах обработки данных для горячего подключения дисков PCIe, среди прочего; Я не уверен, что потребительское оборудование будет полностью способно к горячей замене (оно, я понимаю, необязательно в спецификации).
Имейте в виду, что предоставление необходимого оборудования для поддержки горячего подключения стоит денег (хотя большинство из них находится в конечной точке PCIe, его все равно необходимо настроить, обычно через eeprom), оно обычно не будет предлагаться на рынке, чувствительном к цене.
Обратите внимание, что динамическое обновление карты адресов PCI добавляет значительную сложность драйверу PCI (e); если новое устройство вставлено, то оно должно быть сопоставлено с той шиной, на которой оно живет, с соответствующими преобразованиями новых адресов, но если устройство удаляется, а затем заменяется чем-то другим , это усложняет отслеживание адресов пространства PCI ,
Без этой сложности подсистема PCI сканируется один раз (при перезагрузке системы) и остается статической; никаких дополнительных усилий не требуется.
Вот базовая спецификация PCIe v3.0 , стр. 514, раздел 6.7 о поддержке «горячей замены». Пример платы PCIe, которая поддерживает горячее подключение, можно увидеть здесь, благодаря iocrest . Хорошо видно, что более короткая трассировка разъема проложена:
Однако на этой плате Axxon можно увидеть более короткий след, направленный к соседнему. На физическом уровне эта карта не поддерживает горячее подключение:
источник
Предполагается, что он будет работать на всем оборудовании, совместимом с PCIe, является ли все потребительское оборудование действительно совместимым, это хороший вопрос, поскольку я не очень хорошо разбираюсь в спецификации PCIe, чтобы узнать о требованиях к тестированию, и даже в этом случае все ли розничные продавцы проверяют обоснованность претензии? Я думаю, что вряд ли можно сделать.
Так же, как и все стандарты безопасности. Половина (<-hyperbole?) Этикеток EE, с которыми мы имеем, вы можете требовать совместимости, без необходимости тестирования всего, что вы делаете. Поскольку «горячая розетка» не угрожает жизни, я не могу представить, чтобы люди были более строги к этому.
Я, например, никогда не пробовал, и, поскольку мой ноутбук Clevo изгнал настольный компьютер из моего дома, я не собираюсь его пробовать, поскольку модуль GPU в моем ноутбуке не требует возможности горячего подключения и стоит слишком дорого. Дэйв Джонс и получение $$$ за видео с взрывающейся видеокартой.
источник
Да, это работает. Я смог заставить его работать с помощью горячей замены линейной платы шасси маршрутизатора (содержащей более 10 устройств PCIe). Шасси имеет 16 карт с возможностью горячего подключения. Любая из карт может быть подключена или отключена случайным образом во время выполнения, не влияя на операции трафика на других картах.
Сложность заставить его работать зависит от среды процессора. На встроенном ЦП работа заключается в простой настройке статической карты ресурсов и обработке событий изменения соединения путем подключения и отсоединения устройств PCI. На x86 это гораздо сложнее из-за сложности обработки ошибок и взаимодействия BIOS / OS.
источник