3

状況は、PCIE バスを介して一緒に接続された 2 つのボードがあることです。1 つのボードがルートポートで、1 つのボードがエンドポイントです。エンドポイント側は、メモリ領域をルートポート側にエクスポートしました。

2 つのボード間の通信は、ソフトウェア メッセージ キューを介して実装されます。キューのメタデータとバッファはすべて、エクスポートされたメモリ領域内に配置されます。

両側が同時にメモリ領域にアクセスできます (ルートポートは PCIE バス経由、エンドポイントはローカル バス経由)。これにより、両側でキューのメタデータを更新しようとすると問題が発生する可能性があります。

最初はspinlock_t、同じエクスポートされたメモリ領域に を割り当てようとしましたが、各ボードがユニプロセッサでthe spinlock_tあるため、とにかく割り当てられません。

誰かが共有領域を保護するメカニズムを提案するか、2 つのボード間で通信するための他のアプローチを推奨してください。任意の推奨事項をいただければ幸いです。どうもありがとう!

4

1 に答える 1

0

これまでご関心をお寄せいただきありがとうございます。

最後に、循環キューを使用した共有メモリ通信を実装しました。実装は、このリンクから参照できます。問題を単一の生産者と単一の消費者に減らし、循環キューを保護するためにロックを必要としません。このアプローチの制限は、ピア接続ごとにキューを作成する必要があることです。

PCIE 仕様には、アトミック操作について説明されているセクションもありますが、残念ながら、PCIE ホスト コントローラーはこの機能をサポートしていないため、この機能を利用することはできません。

于 2013-03-05T03:28:12.123 に答える