실제로 PCIe 핫 플러그가 실제로 작동합니까?


20

/security/109199/is-physical-security-less-important-now-for-securing-a-server?noredirect=1#comment194327_109199 의 의견에 대해 토론했습니다.

질문은 간단합니다. PCIe 카드를 성공적으로 핫 플러그 ​​한 경험이 있습니까? 특별한 마더 보드와 카드가 필요합니까, 아니면 모든 소비자 하드웨어에서 작동합니까?


1
답은 두 가지가되어야합니다. 하드웨어와 소프트웨어 (드라이버)는 핫 플러깅을 지원해야합니다.
jippie

이것이 도움이되는지 모르겠지만 첫 번째 GPU에 영향을 미치지 않고 kvm Windows 시스템에서 두 번째 통과 GPU를 성공적으로 제거했습니다 (화면이 잠시 깜박였습니다).
feedc0de

답변:


43

나는 하드웨어와 소프트웨어에서 완전한 핫 플러그 ​​지원이 필요한 PCI-Express 하드웨어를 설계하는 데 사용되었지만 확실히 가능하지만 광범위하고 소프트웨어 지원이 필요합니다. 하드웨어는 실제로 매우 단순합니다. 하드웨어를 디자인 한 다음 광섬유 및 구리를 통해 임의의 PCIe 장치를 핫 플러그하기 위해 BIOS (UEFI) 및 커널 (Linux) 지원을 구현해야했습니다.

소프트웨어 관점에서 PCIe는 버스, 장치, 기능 주소 지정의 개념을 포함하여 PCI 소프트웨어 모델을 계속 사용한다는 것을 기억해야합니다. PCI 버스가 열거되면 너비 우선 검색으로 수행됩니다. tldp.org의 PCI 버스 토폴로지

PCIe 열거는 일반적으로 두 번 수행됩니다. 첫째, BIOS (UEFI 또는 기타)에서 누가 존재하는지와 필요한 메모리 양을 파악합니다. 그런 다음이 데이터를 그대로 사용할 수있는 호스트 OS로 전달할 수 있지만 Linux와 Windows는 종종 자체 열거 절차도 수행합니다. Linux에서 이는 버스를 검색하고 필요한 경우 장치의 ID를 기반으로 쿼크를 적용한 다음 프로브 기능에 일치하는 ID를 가진 드라이버를로드하는 코어 PCI 서브 시스템을 통해 수행됩니다. PCI 장치는 공급 업체 ID (16 비트, 예 : 인텔은 0x8086)와 장치 ID (또 다른 16 비트)의 조합을 통해 ID가 지정됩니다. 가장 일반적인 인터넷 소스는 다음과 같습니다. http://pcidatabase.com / .

이 열거 과정에서 사용자 지정 소프트웨어 부분이 제공 되므로 PCI 버스 번호와 향후 장치에 대한 메모리 세그먼트를 미리 예약 해야합니다 . 이를 ' 버스 패딩 ' 이라고도 합니다. 따라서 나중에 시스템을 중단하지 않고 수행 할 수없는 버스를 다시 열거 할 필요가 없습니다. PCI 장치에는 BAR ( 기본 주소 레지스터가 있음)) 어떤 호스트에 장치에 필요한 메모리의 양과 메모리 유형 (메모리 또는 I / O 공간)을 요청하면 더 이상 ISA와 같은 점퍼가 필요하지 않습니다.) 마찬가지로 Linux 커널은 pciehp를 통해 PCIe 핫 플러그를 구현합니다. 운전사. Windows는 버전에 따라 다른 작업을 수행합니다. 이전 버전 (XP는 생각합니다)은 BIOS가 말한 것을 무시하고 자체 검사를합니다. 최신 버전은 호스트 펌웨어 (BIOS / EFI)에서 제공하는 ACPI DSDT에 대해 더 존중하며 해당 정보를 통합 할 것입니다.

이것은 꽤 복잡해 보일 수 있습니다! 그러나 ExpressCard 슬롯이있는 랩탑 / 장치 (USB 전용 ExpressCard를 가질 수있는 PCIe를 구현하는)는이 작업을 수행해야하지만, 일반적으로 패딩은 아주 간단하지만 버스는 하나입니다. 예전 하드웨어는 다른 8 개의 장치가있는 PCIe 스위치 였으므로 패딩이 다소 복잡해졌습니다.

하드웨어 관점에서 보면 훨씬 쉽습니다. 카드의 GND 핀이 먼저 접촉하고 연결이 완료되면 LTC 또는 이와 유사한 핫 스왑 컨트롤러 IC를 카드에 배치하여 전원을 공급합니다. 이 시점에서 온보드 ASIC 또는 FPGA는 전원 공급 시퀀스를 시작하고 PCI Express 링크의 링크 훈련을 시작합니다. 호스트가 핫 플러그 ​​및 PCI Express SLTCAP / SLTCTRL을 지원한다고 가정register (사양 : PCI Express Slot Capability Register, PCI Express Slot Control Register. 1과 2가 있으며, 두 개의 레지스터로 분할하기에 충분한 비트가 있습니다). 해당 포트가 포트에 핫 플러그 ​​가능함을 표시하도록 구성되어 있으면 소프트웨어가 새 장치를 열거하기 시작할 수 있습니다. 슬롯 상태 (SLTSTA, PCI Express 슬롯 상태 레지스터) 레지스터에는 대상 장치가 전원 오류, 기계적 분리 래치 및 존재 감지 + 존재 변경을 나타내는 것으로 설정할 수있는 비트가 포함되어 있습니다.

위에서 언급 한 레지스터는 각각의 잠재적 인 bdf (bus : device : function)에 할당 된 메모리 맵 (PCE의 경우 4K)의 작은 영역 인 'PCI (Express) Configuration Space'에 있습니다. 실제 레지스터는 일반적으로 주변 장치에 있습니다.

호스트 측에서는 PRSNT1 # / PRSNT2 #를 전원 스위치 IC의 인 에이블을 공급하는 간단한 DC 신호로 사용하거나 칩셋 / PCH의 GPIO로 실행하여 IRQ를 유발하고 SW 'hey를 트리거 할 수 있습니다. 가서 찾아서 구성하십시오! ' 일상.

이것은 귀하의 질문에 직접 답변하지 않는 많은 정보이지만 (빠른 요약은 아래 참조) 프로세스를 이해하는 데 더 나은 배경을 제공하기를 바랍니다. 프로세스의 특정 부분에 대해 궁금한 점이 있으면 여기에 의견을 보내거나 이메일을 보내 주시면 해당 정보로이 답변에 대해 더 자세히 논의 할 수 있습니다.

요약 하면 주변 장치는 하드웨어 POV의 핫 플러그 ​​지원을 염두에두고 설계해야합니다. 올바로 설계된 호스트 / 슬롯은 핫 플러그 ​​가능하며, 고급 마더 보드에서는 안전 할 것으로 기대합니다. 그러나 이것에 대한 소프트웨어 지원은 전적으로 또 다른 질문이며 불행히도 OEM이 제공 한 BIOS를 보게됩니다.

실제로 컴퓨터에서 PCIe ExpressCard를 제거 / 삽입 할 때마다이 기술을 사용합니다. 또한 고성능 블레이드 시스템 (통신 또는 기타)도이 기술을 정기적으로 활용합니다.

최종 설명-기본 사양과 연결된 PDF를 저장하면 PCI-SIG는 일반적으로 비용을 청구합니다. :)


2
그리고 PCIe 디바이스 역할을하는 비교적 저렴한 FPGA (Cyclone IV GX와 같은)를 사용하여 보안 논의를 마무리 하기 위해 호스트 머신이 완료됩니다 . FPGA는 원하는 모든 DMA 작업을 수행 할 수 있습니다.
Krunal Desai

좋은 설명입니다. 핫 플러그 ​​가능 PCIe 카드가 교체되면 어떻게됩니까? 한편으로 OS 새로운 장치가 삽입되었는지 (새로 삽입 된 장치가 요청할 수있는 BAR / 버스 크기를 예측할 수 없음) 확인하면서 PCIe 토폴로지를 다시 열거 해야합니다. 토폴로지의 기존 장치에 이미 할당 된 리소스에 영향을주지 않으면 시스템을 다시 열거 할 수 없습니다.
so.very.tired

2
그래, 까다로워. 따라서 ExpressCard (EC)를 예로 들어, 더 많은 장치로 분기 될 수있는 장치 추가를 지원하기 위해 버스 수를 '패드'하는 것이 었습니다. 간단한 EC 슬롯이있는 대부분의 BIOS는 하나의 버스 번호로 채워줍니다 (우리는이 슬롯을 사용하여 많은 PCIe 장치로 확장). 마찬가지로 IRQ와 마찬가지로 연속 주소 범위를 가진 다양한 장치를 지원하기 위해 할당 할 수있는 메모리 범위를 '패드'할 수 있습니다. 그러면 OS (ACPI 포함 / 제외)가 원하는대로 작동 할 수 있습니다. 실제로는 "단순"하지만 최신 머신에서 SW 계층의 복잡성으로 인해 더 어려워집니다.
Krunal Desai 2016

PCIe 열거가 실제로 깊이 우선 검색이 아닙니까? 기본 및 제한 레지스터는 다음 포트로 이동하기 전에 지정된 포트 아래의 모든 장치를 열거해야합니다.
alex.forencich

8

연결 모니터링 전원 상태 상류 스위치 커넥터에 노출 된, 제공자 플러그 형 유닛이 핀을 노출하고 적절하게 사용하도록 구성 하고 적절하게, 상기 핫 플러그 이벤트 및 응답을 검출 할 수있다 (Jippie 노트 등) 소프트웨어 대답은 '예'입니다.

일반적으로이 기능은 주로 서버 팜 및 데이터 센터에서 PCIe 디스크를 핫 플러그하는 데 사용됩니다. 소비자 장비가 완전히 핫 플러그 ​​가능하다는 것을 확신하지 못합니다 (사양에서 선택 사항 임).

핫 플러그를 지원하는 데 필요한 하드웨어를 제공하면 비용이 많이 들지만 (대부분은 PCIe 엔드 포인트 내에 있지만 여전히 eeprom을 통해 설정해야 함) 가격에 민감한 시장에서는 제공되지 않습니다.

PCI 주소 맵을 동적으로 업데이트 하면 PCI (e) 드라이버에 상당한 복잡성이 추가됩니다 . 새 장치가 삽입되면 연결된 새 주소 변환을 사용하여 현재 사용중인 버스에 매핑해야하지만 장치를 제거한 다음 다른 것으로 교체 하면 PCI 공간 주소 추적이 매우 복잡해집니다. .

이러한 복잡성이 없으면 PCI 서브 시스템은 한 번 (시스템 재설정시) 스캔되고 정적 상태를 유지합니다. 더 이상의 노력이 필요하지 않습니다.

다음은 핫 플러그 ​​지원에 대한 PCIe v3.0 기본 사양 , 514 페이지, 섹션 6.7입니다. 핫 플러그를 지원하는 PCIe 카드의 예는 여기에서 확인할 수 있습니다 ( iocrest 제공) . 더 짧은 커넥터 트레이스가 라우팅되었음을 알 수 있습니다. 2 포트 SATA III (6G) PCI-e 컨트롤러 카드, Marvell 88SE9120 칩셋

그러나이 Axxon 카드에서는 짧은 트레이스가 인접한 트레이스로 명확하게 라우팅되는 것을 볼 수 있습니다. 물리적 레벨에서만이 카드는 핫 플러그를 지원할 수 없습니다. PCI Express (PCIe) 용 MAP / 950 1 RS232 직렬 포트 I / O 카드


2

테스트 요구 사항에 대해 PCIe 사양에 대해 깊이 알고 있지 않더라도 모든 소매 업체가 청구의 유효성을 검사합니까? 나는 거의 아무것도 생각하지 않습니다.

전체 안전 표준과 매우 유사합니다. 우리가 가지고있는 EE 라벨의 절반 (<-hyperbole?)은 모든 것을 테스트하지 않아도 호환성을 주장 할 수 있습니다. 핫 플러그는 생명을 위협하지 않기 때문에 사람들이 더 엄격하다고 상상할 수 없습니다.

필자는 랩톱의 GPU 모듈이 핫 플러그 ​​기능을 요구하지 않고 너무 비싸기 때문에 시도하지 않았으며 Clevo 랩톱이 데스크탑을 완전히 집 밖으로 몰아 넣은 것을 보았습니다. 폭발적인 GPU를 위해 Dave Jones와 $$$를 받고 있습니다.


1

예, 작동합니다. 라우터 섀시 라인 카드 (10+ PCIe 장치 포함)를 핫 플러그하도록 작동시킬 수있었습니다. 섀시에는 16 개의 핫 플러그 ​​가능 카드가 있습니다. 다른 카드의 트래픽 작동에 영향을주지 않고 런타임에 임의의 카드를 임의로 꽂거나 뺄 수 있습니다.

작동의 복잡성은 CPU 환경에 따라 다릅니다. 임베디드 CPU에서 작업은 단순히 정적 리소스 맵을 설정하고 PCI 장치를 연결 및 분리하여 연결 변경 이벤트를 처리하는 것입니다. x86에서는 오류 처리 및 BIOS / OS 상호 작용이 복잡하기 때문에 훨씬 더 복잡합니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.