Чи реально працює гаряча штекер PCIe на практиці?


20

Я потрапив у дискусію в коментарях /security/109199/is-physical-security-less-important-now-for-securing-a-server?noredirect=1#comment194327_109199

Питання просте. Хтось має досвід успішного підключення картки PCIe? Чи потрібні спеціальні материнські плати та картки, або він повинен працювати на всьому споживчому обладнання?


1
Відповідь має бути двозначною. І апаратне, і програмне забезпечення (його драйвери) повинні підтримувати гаряче підключення.
jippie

Я не знаю, чи це допомагає, але я просто успішно видалив другий пропущений графічний процесор з машини Windows kvm, не впливаючи на перший gpu (екран просто мигтів на секунду).
feedc0de

Відповіді:


43

Раніше я розробляв апаратне забезпечення PCI-Express, яке вимагало повної підтримки гарячих штекерів апаратного та програмного забезпечення, і це, безумовно, можливо, але це досить задіяно і вимагає широкої програмної підтримки - апаратне забезпечення насправді досить просте. Мені довелося розробити обладнання, потім реалізувати підтримку BIOS (UEFI) та ядра (Linux) для гарячого підключення довільних пристроїв PCIe над волокном і міддю.

З точки зору програмного забезпечення потрібно пам’ятати, що PCIe продовжує розробляти модель програмного забезпечення PCI, включаючи концепції адресації шини, пристрою та функції. Коли шина PCI перераховується, це робиться як пошук вперше: Топологія PCI Bus від tldp.org

Перерахування 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, оскільки ви можете мати лише ExpressCards лише для USB), повинен робити це, хоча загалом прокладки досить прості - лише одна шина. Моє старе обладнання було перемикачем PCIe, який мав позаду ще 8 пристроїв, тому набивання дещо складніше.

З апаратної точки зору, це набагато простіше. GND-штифти картки спочатку контактують, і ми розміщуємо IC-контролер гарячої заміни з 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 'hey, щось вставлено , іди знайди та налаштуй! ' рутина.

Це багато інформації, яка не відповідає безпосередньо на ваше запитання (див. Нижче для швидкого резюме), але, сподіваємось, це дає вам кращу інформацію в розумінні процесу. Якщо у вас виникли запитання щодо конкретних частин процесу, повідомте мене в коментарях тут або надішліть мені електронний лист, і я можу обговорити далі + оновити цю відповідь цією інформацією.

Підводячи підсумок - периферійний пристрій, мабуть, був розроблений з підтримкою гарячої штекери з урахуванням апаратних POV. Правильно розроблений хост / слот також здатний використовувати гарячу підключення, і на висококласній материнській платі я б очікував, що це буде безпечно. Однак підтримка програмного забезпечення для цього є цілком іншим питанням, і ви, на жаль, належите до BIOS, який постачав вам OEM.

На практиці ви використовуєте цю технологію, коли ви виймаєте / вставляєте PCIe ExpressCard з комп'ютера. Крім того, високопродуктивні лезові системи (телекомунікаційні чи інші) також регулярно використовують цю технологію.

Остаточний коментар - збережіть PDF-файл, який був пов’язаний з базовою специфікацією, PCI-SIG зазвичай за це стягує долари :)


2
І на завершення обговорення безпеки, якщо відносно дешевий FPGA (наприклад, Cyclone IV GX), що діє як пристрій PCIe, ваша хост-машина зроблена - FPGA може виконувати всі дії DMA, які вона захоче.
Krunal Desai

Чудове пояснення. Що станеться, коли PCIe-карта, яка підтримує функцію Hot-Plug, поміняється? З одного боку, ОС повинна перерахувати топологію PCIe ще раз, побачивши, що новий пристрій вставлено (він не може передбачити розмір BAR / кількість автобусів, які можуть бути запитувані щойно вставленим пристроєм), але з іншого боку - повторне перерахування системи може бути неможливим без впливу на ресурси, які вже були призначені для існуючих пристроїв у топології ...
so.very.tired

2
Так, це стає складно. Отож, використовуючи ExpressCard (EC) в якості прикладу, один із способів я це зробив - «підбити» кількість шин для підтримки додавання пристрою, який може розгалужуватися на ще більше пристроїв; Більшість BIOS з простим слотом EC просто вкладають його на один номер шини (ми використовували цей слот для розширення на багатьох пристроях PCIe). Крім того, ви можете "прокладати" діапазон пам'яті, можливий для його призначення, щоб підтримувати різні пристрої з суміжним діапазоном адрес, як і IRQ. ОС (з / без ACPI) може робити все, що буде. Насправді це "просто", але складність SW шарів у сучасній машині робить це складніше.
Krunal Desai

Чи не перерахування PCIe насправді є першим глибинним пошуком? Базові та обмежувальні регістри налаштовані таким чином, що перед переходом до наступного порту необхідно перерахувати всі пристрої нижче заданого порту.
alex.forencich

8

За умови, що з'єднання для моніторингу стану живлення були підключені до роз'єму вихлопним перемикачем, і підключений блок виявив ці штифти і налаштований для їх правильного використання, і (як зазначає Jippie) програмне забезпечення може виявити подію гарячої розетки та реагувати належним чином, відповідь - так.

Як правило, ця можливість використовується в першу чергу на серверних фермах і центрах обробки даних для гарячого підключення PCIe дисків, серед іншого; Я не впевнений, що споживче обладнання буде повністю підключеним до гарячої розетки (це, наскільки я розумію, необов’язково в специфікації).

Майте на увазі, що надання необхідного обладнання для підтримки гарячої штепсельної вилки коштує грошей (хоча більшість є в кінцевій точці PCIe, її все одно потрібно налаштувати, як правило, за допомогою eeprom), як правило, це не пропонується на ринку, що відрізняється від цін.

Зауважте, що динамічне оновлення карти адрес PCI додає значної складності драйверу PCI (e); якщо вставлено новий пристрій, він повинен бути відображений у будь-яку шину, на якій він живе, з відповідними перекладами нової адреси, але якщо пристрій вилучено та замінено чимось іншим , це робить відстеження адрес простору PCI досить складним .

Без цієї складності підсистема PCI сканується один раз (при скиданні системи) і залишається статичною; не потрібно більше зусиль.

Ось базові характеристики PCIe v3.0 , сторінка 514, розділ 6.7 про підтримку Hot Plug. Приклад PCIe-карти, яка підтримує гарячу підключення, можна побачити тут, люб’язно надавши iocrest . Видно, що коротший шлях роз'єму направлений: 2-портова карта контролера SATA III (6G) PCI-e, чіпсет Marvell 88SE9120

Однак на цій картці Axxon коротший слід чітко проглядається до сусідньої. На фізичному рівні ця картка не може підтримувати гарячу підключення: MAP / 950 1 Картка вводу / виводу послідовного порту RS232 для PCI Express (PCIe)


2

Мабуть, це працює над усім обладнанням, сумісним із PCIe, чи справді все споживче обладнання є сумісним - це гарне питання, оскільки я не заглиблююся в специфікацію PCIe, щоб знати про вимоги до тестування, і навіть тоді, чи всі роздрібні продавці перевіряють обґрунтованість претензії? Я думаю, що навряд чи це зробити.

Так само, як і вся норма безпеки. Половина (<-гіперболи?) Міток EE, які ми маємо, ви можете заявити про сумісність, не вимагаючи тестування всього, що ви робите. Оскільки речі гарячої штепсельної вилки не загрожують життю, я не можу уявити, щоб люди були суворішими щодо цього.

Я, наприклад, ніколи не пробував цього, бачачи, як мій ноутбук Clevo вигнав робочий стіл повністю з дому, я не збираюся його пробувати, оскільки модуль GPU в моєму ноутбуці не вимагає можливості гарячої розетки і занадто дорогий без того, щоб бути Дейв Джонс і отримує $$$ за відео вибуху GPU.


1

Так, це працює. Мені вдалося ввімкнути його підключення до лінійної картки шасі маршрутизатора (що містить 10+ пристроїв PCIe). У шасі є 16 карт з можливістю гарячого підключення. Будь-яку картку можна підключати або виключати випадковим чином під час виконання, не впливаючи на операції з трафіком на інших картках.

Складність його роботи залежить від середовища процесора. На вбудованому процесорі робота полягає у простому налаштуванні статичної карти ресурсів та обробці подій зміни з'єднання шляхом приєднання та від'єднання пристроїв PCI. На x86 він значно більше задіяний через складність в роботі з помилками та взаємодії BIOS / OS.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.