3

複数のデバイスをサポートする Linux デバイス ドライバーを作成しています。これらのデバイスが 4 つ搭載された x8 PCIe カードがあります。それぞれが PCIe スイッチを介して実行され、2 つの PCIe レーンを取得します。ドライバーが同時に複数のレーンに書き込む方法はありますか? もしそうなら、どうすればいいですか?すべてが1つのPCIeスロットにあるため、可能だと思いますが、これがドライバーからどのように行われるかわかりません。

4

2 に答える 2

3

PCIe は、あなたが思っているようには機能しません。スイッチはアップストリームの x8 リンクを複数の x2 リンクに分割しません。トラフィックをあるリンクから別のリンクに転送するだけです。したがって、スイッチへの x8 リンクと、スイッチからダウンストリーム デバイスへの 4 つの x2 リンクが表示されます。ただし、別のスイッチと別のダウンストリーム デバイスを使用すると、たとえば、ルート ポートからスイッチへの x8 リンクと、スイッチからダウンストリーム デバイスへの x8 リンクなど、あらゆる場所で x8 リンクを使用することができます。

ただし、あなたのケースでは、スイッチの両側で帯域幅の量が一致しているため、限られた量の帯域幅をめぐってデバイスが競合しても問題はありません。ドライバーは、独立したリンクがあるかのように効率的に同時にすべてのデバイスと通信できます。

于 2012-09-13T21:59:39.410 に答える
2

PCIe マルチキャストを探しているようです。これはレーンの数とは関係ありませんが、単一の書き込みを複数の宛先にできるだけ効率的に配信するための単純な機能です。これには標準があり、主にバックプレーンの使用を目的としています。http://www.pcisig.com/developers/main/training_materials/get_document?doc_id=12f5c260ccf5e054366d4c96ee655fa6827db5b3を参照してください。

これは、複数のデバイスが同じマッピングされた物理アドレス範囲を持つ新しい PCI BAR タイプでサポートされているようで、スイッチもこのマルチキャスト範囲を認識するように構成されます。しかし、これにはすべてOSのサポートが必要であり、これらすべてを実行するためにデバイスを構成するために必要な要素がLinuxにあることを示唆するものをWeb上で見つけたことがありません.

親リンクには 4 つの子リンクすべてを飽和させるのに十分な帯域幅があるため、スループットの問題はありません。マルチキャストで節約できる唯一のものは、メモリ サブシステムの帯域幅です。近代的なアーキテクチャを使用している場合、節約できる金額は騒音の中にあります。

言い換えれば、それについて心配する必要はありません。デバイスを独立したものとして扱い (とにかく、これによりクリーンなドライバーが作成されます)、プロジェクトを進めてください。

于 2012-09-14T13:22:07.487 に答える