Linux マシンの PCIe スロットに NIC カードと HDD の両方を接続しています。理想的には、CPU を使用せずに、または最小限に使用して、受信パケットを HDD に集中させたいと考えています。そのような PCI バスに沿って直接通信をセットアップすることは可能ですか? このようなプロジェクトを開始するために何を読むべきかについての指針を持っている人はいますか?
皆さんありがとう。
Linux マシンの PCIe スロットに NIC カードと HDD の両方を接続しています。理想的には、CPU を使用せずに、または最小限に使用して、受信パケットを HDD に集中させたいと考えています。そのような PCI バスに沿って直接通信をセットアップすることは可能ですか? このようなプロジェクトを開始するために何を読むべきかについての指針を持っている人はいますか?
皆さんありがとう。
PCIとPCIeのどちらについて質問しているのかわからない。あなたは両方の用語を使用しましたが、答えはそれぞれ異なります。
従来のPCIバスについて話している場合: 答えは「はい」です。ボード間DMAは実行可能です。ビデオキャプチャボードは、たとえば、ビデオフレームをグラフィックカードメモリに直接DMAする場合があります。
あなたの例では、ビデオカードはストレージデバイスに直接DMAすることができます。ただし、データはかなり「生」になります。たとえば、NICにはファイルシステムの概念がありません。また、SATAコントローラーのレジスターの範囲内に収まるようにNICのDMAエンジンをプログラムできることを確認する必要があります。BARの端から離れたくない!
最新のPCIeバスについて話している場合: 答えは「通常はいいえですが、状況によって異なります」です。ピアツーピアバストランザクションは、PCIExpress仕様では面白いものです。ルートコンプレックスデバイスは、それをサポートする必要はありません。
私のテストでは、デバイスがPCIeスイッチの背後にある場合(マザーボードに直接接続されていない場合)、ピアツーピアDMAが機能します。ただし、デバイスがチップセット(ルートコンプレックス)に直接接続されている場合、一部の特別な場合を除いて、ピアツーピアDMAは機能しません。最も注目すべき特殊なケースは、前述のビデオキャプチャの例です。特殊なケースは、チップセットのデータシートに記載されています。
いくつかの異なるIntelおよびAMDチップセットを使用してピアツーピアPCIeDMAをテストし、一貫した動作を確認しました。ただし、最新世代のチップセットはテストしていません。(インテルとピアツーピアPCIe DMAサポートの欠如について話し合いましたが、フィードバックがエンジニアリング部門に影響を与えたかどうかはわかりません。)
NIC カードと HDD の両方がエンド ポイント (またはレガシー エンドポイント) であると仮定すると、ルート コンプレックス (CPU) を使用せずにトラフィックを集中させることはできません。
PCI や PCI-X とは異なり、PCIe はバスではなくリンクであるため、エンドポイント デバイス (NIC など) からのトランザクションは、別のブランチ (HDD) に到達するためにルート コンプレックス (CPU) を通過する必要があります。 .