Czy hotplug PCIe faktycznie działa w praktyce?


20

Mam dyskusję w komentarzach /security/109199/is-physical-security-less-important-now-for-securing-a-server?noredirect=1#comment194327_109199

Pytanie jest proste. Czy ktoś doświadczył pomyślnego podłączenia karty PCIe? Czy wymaga specjalnych płyt głównych i kart, czy może działać na wszystkich urządzeniach konsumenckich?


1
Odpowiedź powinna być podwójna. Zarówno sprzęt, jak i oprogramowanie (jego sterowniki) powinny obsługiwać podłączanie podczas pracy.
jippie

Nie wiem, czy to pomaga, ale właśnie udało mi się usunąć drugi przepływający procesor GPU z komputera z systemem Windows KVM bez wpływu na pierwszą GPU (ekran migotał na sekundę).
feedc0de

Odpowiedzi:


43

Kiedyś projektowałem sprzęt PCI-Express, który wymagał pełnej obsługi hot-plug w sprzęcie i oprogramowaniu, i na pewno jest to możliwe, ale jest dość zaangażowany i wymaga szerokiej obsługi oprogramowania - sprzęt jest właściwie dość prosty. Musiałem zaprojektować sprzęt, a następnie wdrożyć obsługę BIOS (UEFI) i jądra (Linux) dla podłączania na gorąco dowolnych urządzeń PCIe przez światłowód i miedź.

Z punktu widzenia oprogramowania należy pamiętać, że PCIe kontynuuje model oprogramowania PCI, w tym koncepcje adresowania magistrali, urządzeń i funkcji. Gdy magistrala PCI jest wyliczana, odbywa się to jako pierwsze wyszukiwanie: Topologia magistrali PCI z tldp.org

Wyliczanie PCIe jest zwykle wykonywane dwukrotnie. Po pierwsze, BIOS (UEFI lub inny) to zrobi, aby dowiedzieć się, kto jest obecny i ile pamięci potrzebuje. Dane te mogą być następnie przekazane do systemu operacyjnego hosta, który może przyjąć je takim, jakim jest, ale Linux i Windows często również wykonują własną procedurę wyliczania. W systemie Linux odbywa się to za pośrednictwem podstawowego podsystemu PCI, który przeszukuje magistralę, w razie potrzeby stosuje dziwactwa na podstawie identyfikatora urządzenia, a następnie ładuje sterownik, który ma pasujący identyfikator w swojej funkcji próbkowania. Urządzenie PCI jest identyfikowane poprzez kombinację jego identyfikatora dostawcy (16 bitów, np. Intel to 0x8086) i identyfikatora urządzenia (kolejne 16 bitów) - najczęstsze źródło internetowe znajduje się tutaj: http://pcidatabase.com / .

Niestandardowa część oprogramowania pojawia się podczas tego procesu wyliczania, a więc należy wcześniej zarezerwować numery magistrali PCI i segmenty pamięci dla potencjalnych przyszłych urządzeń - jest to czasami nazywane „ dopełnianiem magistrali ”. Pozwala to uniknąć konieczności ponownego wyliczenia magistrali w przyszłości, czego często nie można zrobić bez zakłóceń w systemie. Urządzenie PCI ma paski BAR ( rejestry adresów podstawowych), które zapytanie do hosta, ile i jakiego typu pamięci (pamięć lub przestrzeń we / wy) potrzebuje urządzenie - dlatego nie potrzebujesz już zworek takich jak ISA :) Podobnie, jądro Linuksa implementuje hotplug PCIe poprzez pciehp kierowca. System Windows robi różne rzeczy w zależności od wersji - starsze wersje (myślę, że XP) ignorują wszystko, co mówi BIOS i wykonuje własne sondowanie. Nowsze wersje, moim zdaniem, bardziej szanują ACDI DSDT dostarczone przez oprogramowanie układowe hosta (BIOS / EFI) i będą zawierać te informacje.

To może wydawać się dość zaangażowane i tak jest! Pamiętaj jednak, że każdy laptop / urządzenie z gniazdem ExpressCard (które obsługuje PCIe, ponieważ możesz mieć karty ExpressCard tylko na USB) musi to zrobić, choć ogólnie wypełnienie jest dość proste - tylko jedna magistrala. Mój stary sprzęt był przełącznikiem PCIe, który miał za sobą kolejne 8 urządzeń, więc wypełnianie stało się nieco bardziej skomplikowane.

Z punktu widzenia sprzętu jest to o wiele łatwiejsze. Styki GND karty stykają się najpierw, a my położyliśmy układ scalony kontrolera wymiany z LTC lub podobnego na karcie, aby sekwencyjnie zasilać po nawiązaniu połączenia. W tym momencie pokładowy układ ASIC lub FPGA rozpoczyna sekwencję uruchamiania i rozpoczyna próbę szkolenia łącza swojego łącza PCI Express. Zakładając, że host obsługuje hot- pluging i PCI Express SLTCAP / SLTCTRLzarejestruj się (w specyfikacji: Rejestr możliwości gniazda PCI Express, Rejestr kontroli gniazda PCI Express. Do tego jest również 1 i 2 - wystarczająca liczba bitów do podzielenia na dwa rejestry). ponieważ ten port został skonfigurowany w taki sposób, aby wskazywał, że port może być podłączany podczas pracy, oprogramowanie może zacząć wyliczać nowe urządzenie. Rejestr stanu gniazda (SLTSTA, rejestr stanu gniazda PCI Express) zawiera bity, które urządzenie docelowe może ustawić, wskazując na awarie zasilania, mechaniczne zwalnianie zwalniania i oczywiście wykrywanie obecności + obecność zmieniona.

Wyżej wymienione rejestry znajdują się w „Przestrzeni konfiguracji PCI (Express)”, która jest małym regionem mapy pamięci (4K dla PCIe) przydzielonej każdemu potencjalnemu bdf (magistrala: urządzenie: funkcja). Rzeczywiste rejestry zazwyczaj znajdują się w urządzeniu peryferyjnym.

Po stronie hosta możemy użyć PRSNT1 # / PRSNT2 # jako prostych sygnałów prądu stałego, które zasilają włącznik układu scalonego przełącznika zasilania, lub uruchomić do GPIO na chipsecie / PCH, aby wywołać przerwanie i uruchomić SW „hej, coś włożono” , znajdź go i skonfiguruj! rutyna.

Jest to wiele informacji, które nie odpowiadają bezpośrednio na twoje pytanie (patrz krótkie podsumowanie poniżej), ale mam nadzieję, że dają lepsze tło do zrozumienia procesu. Jeśli masz jakieś pytania dotyczące określonych części procesu, daj mi znać w komentarzu tutaj lub napisz do mnie e-mail, a ja mogę omówić dalsze + zaktualizować tę odpowiedź o te informacje.

Podsumowując - urządzenie peryferyjne musi być zaprojektowane z myślą o obsłudze hot-plug ze sprzętowego POV. Właściwie zaprojektowany host / gniazdo jest również zdolny do podłączenia podczas pracy, a na wysokiej płycie głównej spodziewałbym się, że będzie bezpieczny. Jednak wsparcie oprogramowania w tym zakresie jest zupełnie innym pytaniem i niestety jesteś zobligowany do BIOS-u, który dostarczył ci OEM.

W praktyce używasz tej technologii za każdym razem, gdy wyjmujesz / wkładasz kartę PCIe ExpressCard z komputera. Ponadto wysokowydajne systemy kasetowe (telekomunikacyjne lub inne) również regularnie korzystają z tej technologii.

Końcowy komentarz - zapisz plik PDF, który był połączony ze specyfikacją podstawową, PCI-SIG zwykle za to pobiera opłaty :)


2
Na zakończenie dyskusji na temat bezpieczeństwa, ze stosunkowo tanim układem FPGA (takim jak Cyclone IV GX) działającym jako urządzenie PCIe, maszyna hosta jest skończona - układ FPGA może wykonywać dowolne działania DMA.
Krunal Desai

Świetne wyjaśnienie. Co się stanie, gdy karta PCIe obsługująca funkcję Hot-Plug zostanie zamieniona? Z jednej strony system operacyjny musi ponownie wyliczyć topologię PCIe, widząc, że zostało wstawione nowe urządzenie (nie może przewidzieć rozmiaru BARów / ilości magistrali, które mogą być wymagane przez nowo wstawione urządzenie), ale z drugiej strony - ponowne wyliczenie systemu może nie być możliwe bez wpływu na zasoby, które zostały już przypisane do istniejących urządzeń w topologii ...
zmęczony

2
Tak, to staje się trudne. Korzystając z ExpressCard (EC) jako przykładu, jednym ze sposobów było „uzupełnienie” liczby magistral w celu dodania urządzenia, które może rozgałęzić się na jeszcze większej liczbie urządzeń; większość BIOSów z prostym gniazdem EC wystarczy wpisać jeden numer magistrali (wykorzystaliśmy to gniazdo do rozszerzenia na wiele urządzeń PCIe). Podobnie można „uzupełnić” zakres pamięci, który można tam przypisać, aby obsługiwać różne urządzenia z ciągłym zakresem adresów, tak samo jak IRQ. System operacyjny (z / bez ACPI) może wtedy robić, co chce. To właściwie „proste”, ale złożoność warstw SW w nowoczesnej maszynie sprawia, że ​​jest trudniej.
Krunal Desai,

Czy wyliczenie PCIe nie jest wyszukiwaniem głębokim? Rejestry bazowy i limitowy są skonfigurowane w taki sposób, że wszystkie urządzenia poniżej danego portu muszą zostać wyliczone przed przejściem do następnego portu.
alex.forencich

8

Pod warunkiem, że połączenia monitorujące stan zasilania zostały odsłonięte na złączu przez przełącznik upstream, a jednostka wtykowa odsłoniła te piny i jest skonfigurowana do ich prawidłowego użycia oraz (jak zauważa Jippie) oprogramowanie może wykryć zdarzenie hotplug i odpowiednio zareagować, odpowiedź brzmi tak.

Zasadniczo ta funkcja jest wykorzystywana przede wszystkim w farmach serwerów i centrach danych między innymi do podłączania dysków PCIe z możliwością podłączania podczas pracy; Nie jestem pewien, czy sprzęt konsumencki będzie w pełni kompatybilny z hotplug (jest to, jak rozumiem, opcjonalne w specyfikacji).

Należy pamiętać, że zapewnienie niezbędnego sprzętu do obsługi hotplug kosztuje pieniądze (chociaż większość znajduje się w punkcie końcowym PCIe, wciąż trzeba go skonfigurować, zwykle za pośrednictwem eepromu), zwykle nie będzie oferowana na rynku wrażliwym na cenę.

Należy zauważyć, że dynamiczne aktualizowanie mapę adresową PCI dodaje znaczną złożoność PCI (e) kierowcy; jeśli zostanie wstawione nowe urządzenie, należy je zmapować na dowolną magistralę, na której żyje, wraz z powiązanymi nowymi translacjami adresów, ale jeśli urządzenie zostanie usunięte, a następnie zastąpione czymś innym , utrudni to śledzenie adresów przestrzeni PCI .

Bez tej złożoności podsystem PCI jest skanowany raz (podczas resetowania systemu) i pozostaje statyczny; nie wymaga dalszego wysiłku.

Oto podstawowa specyfikacja PCIe v3.0 , strona 514, sekcja 6.7 na temat obsługi Hot Plug. Przykład karty PCIe, która obsługuje hot-plug, można zobaczyć tutaj, dzięki uprzejmości iocrest . Widać wyraźnie, że krótszy ślad złącza jest kierowany: 2-portowa karta kontrolera PCI-e SATA III (6G), mikroukład Marvell 88SE9120

Jednak na tej karcie Axxon wyraźnie widać, że krótszy ślad jest poprowadzony do sąsiedniego. Tylko na poziomie fizycznym ta karta nie obsługuje funkcji „hot-plug”: MAP / 950 1 RS232 Karta portu szeregowego we / wy dla PCI Express (PCIe)


2

Ma działać na całym sprzęcie zgodnym ze standardem PCIe, czy dobre jest to, że sprzęt konsumencki jest naprawdę zgodny, to dobre pytanie, ponieważ nie jestem głęboko zainteresowany specyfikacją PCIe, aby wiedzieć o wymaganiach testowych, a nawet wtedy, czy wszyscy detaliści sprawdzają ważność roszczenia? Chyba mało.

Podobnie jak cała rzecz dotycząca standardów bezpieczeństwa. Połowa (<-hyperbole?) Etykiet EE, z którymi mamy gwarancję zgodności, bez konieczności testowania wszystkiego. Ponieważ hotplug nie zagraża życiu, nie wyobrażam sobie, żeby ludzie byli bardziej surowi.

Ja, na przykład, nigdy tego nie próbowałem, a ponieważ mój laptop Clevo całkowicie wypędził pulpit z mojego domu, nie zamierzam tego próbować, ponieważ moduł GPU w moim laptopie nie zapewnia możliwości podłączenia na gorąco i jest zbyt drogi, nie będąc Dave Jones i zdobywający $$$ za vid eksplodującego GPU.


1

Tak to działa. Udało mi się go uruchomić, aby podłączyć kartę pamięci routera na gorąco (zawierającą ponad 10 urządzeń PCIe). Podwozie ma 16 kart z możliwością podłączenia podczas pracy. Każda karta może być podłączana lub odłączana losowo w czasie wykonywania, bez wpływu na operacje ruchu na innych kartach.

Złożoność jego działania zależy od środowiska procesora. Na wbudowanym procesorze praca polega po prostu na ustawieniu statycznej mapy zasobów i obsłudze zdarzeń zmiany połączenia poprzez podłączanie i odłączanie urządzeń PCI. W przypadku x86 jest znacznie bardziej zaangażowany ze względu na złożoność obsługi błędów i interakcji BIOS / OS.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.