PCIeホットプラグは実際に機能しますか?


20

/security/109199/is-physical-security-less-important-now-for-securing-a-server?noredirect=1#comment194327_109199のコメントで議論に参加しました

質問は簡単です。PCIeカードのホットプラグに成功した経験はありますか?特別なマザーボードとカードが必要ですか、それともすべての消費者ハードウェアで動作するはずですか?


1
答えは2つあります。ハードウェアとソフトウェア(そのドライバー)の両方がホットプラグをサポートする必要があります。
ジッピー

これが役立つかどうかはわかりませんが、最初のGPUに影響を与えることなく、2番目の通過したGPUをkvm Windowsマシンから正常に削除しました(画面が1秒間だけちらつく)。
feedc0de

回答:


43

私はハードウェアとソフトウェアの完全なホットプラグサポートを必要とするPCI-Expressハードウェアを設計していましたが、確かに可能ですが、それはかなり複雑であり、広範なソフトウェアサポートが必要です-ハードウェアは実際には非常に簡単です。ハードウェアを設計してから、任意のPCIeデバイスをファイバーと銅線でホットプラグするためのBIOS(UEFI)とカーネル(Linux)サポートを実装する必要がありました。

ソフトウェアの観点から、PCIeはバス、デバイス、機能のアドレス指定の概念を含むPCIソフトウェアモデルを継続することを覚えておく必要があります。PCIバスが列挙されると、幅優先検索として実行されます。 tldp.orgのPCIバストポロジ

PCIe列挙は通常2回行われます。まず、BIOS(UEFIまたはそれ以外)がそれを実行し、現在のユーザーと必要なメモリ量を把握します。このデータはそのままホストOSに渡すことができますが、ホストOSはそのまま使用できますが、LinuxとWindowsは独自の列挙手順も実行することがよくあります。Linuxでは、これはバスを検索し、必要に応じてデバイスのIDに基づいて癖を適用し、プローブ機能に一致するIDを持つドライバーをロードするコアPCIサブシステムを介して行われます。PCIデバイスは、ベンダーID(16ビット、たとえばIntelは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をサポートしていると仮定しますレジスタ(仕様:PCI Expressスロット機能レジスタ、PCI Expressスロット制御レジスタ。これには1と2もあります。2つのレジスタに分割するのに十分なビットです)。そのポートがホットプラグ対応であることを示すように構成されていたため、ソフトウェアは新しいデバイスの列挙を開始できます。スロットステータス(SLTSTA、PCI Expressスロットステータスレジスタ)レジスタには、ターゲットデバイスが電源障害、機械的リリースラッチ、およびもちろん存在検出+存在変化の表示を設定できるビットが含まれています。

前述のレジスタは、各潜在的なbdf(bus:device:function)に割り当てられたメモリマップ(PCIeの場合は4K)の小さな領域である「PCI(Express)Configuration Space」にあります。通常、実際のレジスタは周辺機器にあります。

ホスト側では、PRSNT1#/ PRSNT2#を電源スイッチICの有効化を供給する単純なDC信号として使用するか、チップセット/ PCHでGPIOを実行してIRQを発生させ、SWをトリガーします。 、見つけて設定してください!」ルーチン。

これは、あなたの質問に直接答えない多くの情報です(簡単な要約については以下を参照してください)が、プロセスを理解する上でより良い背景が得られることを願っています。プロセスの特定の部分について質問がある場合は、こちらのコメントでお知らせください。または、メールを送ってください。さらに議論し、その答えでこの回答を更新できます。

要約すると、周辺機器は、ハードウェアPOVからのホットプラグサポートを念頭に置いて設計されている必要があります。適切に設計されたホスト/スロットはホットプラグにも対応しており、ハイエンドのマザーボードでは安全であると期待しています。ただし、これに対するソフトウェアサポートは完全に別の質問であり、残念ながらOEMから提供されたBIOSを使用することになります。

実際には、コンピューターからPCIe ExpressCardを取り外したり挿入したりするたびに、このテクノロジーを使用します。さらに、高性能ブレードシステム(テレコムなど)もこのテクノロジーを定期的に利用しています。

最終コメント-基本仕様にリンクされたPDFを保存します。PCI-SIGは通常、その費用を負担します:)


2
ホストマシンがされると、トップオフセキュリティの議論に、(サイクロンIV GXのような)比較的安価なFPGAは、PCIeデバイスとして動作して、行わ - FPGAは、それが望んでいるものは何でもDMAのアクションを実行することができます。
クルナルデサイ

素晴らしい説明。ホットプラグ対応PCIeカードが交換されるとどうなりますか?一方で、OSはしなければならない新しいデバイスが挿入されたことを見て、再びPCIeのトポロジを列挙(それは、バーのサイズを予測することはできません/新たに挿入されたデバイスによって要求される可能性があるバスの量)が、一方で、 -トポロジ内の既存のデバイスに既に割り当てられているリソースに影響を与えずにシステムを再列挙できない場合があります
...-so.very.tired

2
うん、それはトリッキーになります。そのため、ExpressCard(EC)を例にとると、バスの数を「パッド」して、さらに多くのデバイスに分岐する可能性のあるデバイスの追加をサポートすることができました。単純なECスロットを備えたほとんどのBIOSは、1つのバス番号でパッドするだけです(このスロットを使用して、多くのPCIeデバイスに拡張しました)。同様に、IRQの場合と同じように、連続したアドレス範囲を持つさまざまなデバイスをサポートするために、割り当て可能なメモリ範囲を「パッド」できます。その後、OS(ACPIの有無にかかわらず)は、本来の動作を実行できます。実際には「単純」ですが、最新のマシンのSW層の複雑さにより、それは難しくなっています。
クルナルデサイ

PCIe列挙は実際には深さ優先検索ではありませんか?ベースおよび制限レジスタは、特定のポートの下にあるすべてのデバイスが次のポートに移動する前に列挙されるように設定されます。
alex.forencich

8

接続を監視する電源状態は、上流スイッチによってコネクタに暴露された、提供及びプラガブルユニットは、これらのピンが露出しており、それらを適切に使用するように構成され且つ適切に、ホットプラグイベントと応答を検出することができる(Jippieノートなど)ソフトウェア答えはイエスです。

一般に、この機能は主にPCIeディスクのホットプラグのためにサーバーファームおよびデータセンターで使用されます。消費者向け機器が完全にホットプラグ対応であるかどうかはわかりません(仕様ではオプションです)。

ホットプラグをサポートするために必要なハードウェアを提供するには費用がかかります(大半はPCIeエンドポイント内にありますが、通常はeepromを介してセットアップする必要があります)が、通常は価格に敏感な市場では提供されません。

PCIアドレスマップを動的に更新すると、PCI(e)ドライバが大幅に複雑になることに注意してください。新しいデバイスが挿入された場合、関連する新しいアドレス変換を使用して、そのデバイスが存在するバスにマッピングする必要がありますが、デバイスを取り外してから別のものに置き換えた場合、PCIスペースアドレスの追跡が非常に複雑になります。

この複雑さがなければ、PCIサブシステムは(システムリセット時に)1回スキャンされ、静的なままです。それ以上の努力は必要ありません。

以下は、PCIe v3.0基本仕様、ページ514、セクション6.7のホットプラグサポートです。ホットプラグをサポートするPCIeカードの例は、iocrestの好意によりここに見ることができます。短いコネクタトレースがルーティングされていることがはっきりとわかります。 2ポートSATA III(6G)PCI-eコントローラカード、Marvell 88SE9120チップセット

ただし、このAxxonカードでは、短いトレースが隣接するトレースにルーティングされていることがはっきりとわかります。物理レベルだけでは、このカードはホットプラグをサポートできません。 MAP / 950 1 PCI Express(PCIe)用RS232シリアルポートI / Oカード


2

すべてのPCIe準拠のハードウェアで動作することになっていますが、すべてのコンシューマハードウェアが本当に準拠しているかどうかは良い質問です。PCIeの仕様に詳しくなくてテスト要件について知り、それでもすべての小売業者がクレームの有効性をチェックしますか?私はほとんどないと思います。

全体の安全基準のようなもの。私たちが持っているEEラベルの半分(<-hyperbole?)は、あなたが作るすべてのものをテストする必要なく、互換性を主張できます。ホットプラグは生命を脅かすものではないので、人々がそれについてより厳格になることは想像できません。

私は、それを試したことがないので、私のClevoラップトップがデスクトップを家から完全に追い出したのを見て、ラップトップのGPUモジュールはホットプラグ機能がないと主張しており、デイブジョーンズと爆発的なGPUのビデオのために$$$を取得します。


1

はい、動作します。ルータシャーシラインカード(10個以上のPCIeデバイスを含む)をホットプラグするように機能させることができました。シャーシには16個のホットプラグ対応カードがあります。他のカードのトラフィック操作に影響を与えることなく、実行時に任意のカードをランダムにプラグインまたはプラグアウトできます。

動作させるための複雑さは、CPU環境によって異なります。組み込みCPUでは、作業は単純に静的リソースマップをセットアップし、PCIデバイスを接続および切断することで接続変更イベントを処理するだけです。x86では、エラー処理とBIOS / OSの相互作用が複雑なため、より複雑になります。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.