3

Windows CLR ベースのアプリケーション (.NET) で LDMA または RDMA を利用できるようにしたいと考えています。C++ で開発された低遅延アプリケーションがあり、それらのアプリケーションは LDMA または RDMA を使用してデータを受信します。おそらくパフォーマンスが低下することを理解した上で、CLR アプリケーションで同じ API を使用したいと考えています。

Windows には Windows Direct がありますが、.NET アプリケーションで Windows Direct を使用できるものは見たことがありません。Windows 用の真の SDP (ソケット ダイレクト プロトコル) の実装は見たことがありません。これを実現する方法を知っている人はいますか?

4

1 に答える 1

2

マネージ コードとアンマネージ コードを混在させても問題ない場合は、RDMA 実装を独自のメモリ管理を行うライブラリ (できれば C++) にします。

そのライブラリを P/Invoke または C++/CLI でラップします。API がおしゃべりで、破棄セマンティクスを備えたステートフルな C++ オブジェクトを持っている場合、これは C++/CLI の方がはるかに簡単で優れています。

次に、低レベルで完全な RDMA パフォーマンスを取得し、管理されていないレイヤーから管理されているレイヤーにデータをコピーするときに (たとえば、操作を簡単にするために) .Net 関連のコストのみが発生します。

アンマネージ メモリ内の基になるデータに十分なリッチ API を提供することで、必要に応じてそれを回避することもできます。これには若干のマネージド/アンマネージド トランジション コストが発生するため、非常におしゃべりなインターフェイスには適していませんが、これを回避する本当の理由は、実装にかなりの手間がかかるため、単にデータをプルする場合と比較して、最初の選択肢ではないことは確かです。管理された世界に行きたい。

純粋なマネージド ソリューションが危険なハックなしで RDMA で動作するとは思いもしませんでした (たとえば、圧縮されていない LOH を利用するなど)。

于 2009-08-30T07:34:26.287 に答える