Support working with existing apps
wangrunji0408 opened this issue · 6 comments
The current implementation defines its own protocol to establish connections and send/receive messages. This brings a limitation that both client and server must use this library to communicate. We can not use this library to build a client of an existing rdma server. So I have 2 suggestions that might help:
- Support setting up connections through RDMA CM.
- Add lower-level APIs to send/receive raw messages.
There is a new crate rdma for low-level rdma control.
It doesn't support RDMA CM yet because I can not run the examples in librdmacm successfully. (Ubuntu 20.04, RXE, latest rdma-core).
It supports send/recv now and has RC/UD pingpong examples.
async-rdma is a high-level library. It may be not suitable for your use cases.
Looks cool!
Would the rdma
crate be async-style? Or just a thin wrapper over rdma-sys
?
In other words, what's the difference between rdma
and async-rdma
?
What I want is still a high-level async wrapper like async-rdma
, but following the standard protocol.
rdma
aims to be a rust-style wrapper over the C api. (types, methods and resource management)
async-rdma
is
A framework for writing RDMA applications with high-level abstraction and asynchronous APIs.
I think its design is not generic enough for working with existing apps now.
Good advices,
-
To support RDMA CM establishing connection requires a RDMA CM binding, and we also need to check the compatibility with IBV APIs. However, it's a good and correct direction, so we'll try to find a way to implement it.
-
"Add lower-level APIs to send/receive raw messages." is also a reasonable requirement. The current implementation is too high-level, we'll check the possible "memory safety" issues and provide the lower-level APIs if possible.
Agree with your advices.
The compatibility with existing RDMA apps has not been considered in the current implementation and I'm going to try.
@wangrunji0408 Hi, we add some APIs for RDMA CM and send/recv raw data in #78 , but I forget ref this issue in commit message. Here is an example.