Are there any mechanisms for using LDMA or RDMA on the Windows CLR platform?
I want to use LDMA or RDMA for Windows CLR Application (.NET). I have low latency applications being developed in C ++ and these applications will get their data using LDMA or RDMA. I would like our CLR applications to use the same API with the understanding that there is likely to be a performance hit.
Windows has Windows Direct, but I haven't seen anything that allows .NET applications to use it. I have not seen a realistic SDP (Socket Direct Protocol) implementation for Windows. Does anyone know how to do this?
source to share
If you're fine with mixing managed and unmanaged code, make your RDMA implementation a library (preferably in C ++) that does all of its memory management.
Wrap this library via P / Invoke or C ++ / CLI. If your api is frequent and has C ++ stateful objects with delete semantics, it will be much easier and better in C ++ / CLI.
Then you get the full RDMA performance at a low tier, and only the associated .Net costs incurred when copying some data from the unmanaged layer to the managed layer (say, to make management easier).
Even this can be avoided if you wish by providing a sufficiently rich api for the underlying data in unmanaged memory. This would entail some minor managed / unmanaged migration costs, so it would be inappropriate for an extremely chatable interface, but the real reason to avoid it would be a significant implementation issue, so it certainly wouldn't be my first choice over just pulling out the data you want in a managed world.
I would not have thought that a purely managed solution would work with RDMA without dangerous hacks (e.g. using LOH is not compacted).
source to share