Hi experts,


We have been integrating spdk into our system using a blockdev module, currently only a POC version.

Our use case is a user space appliance processing IOs, with an SPDK frontend to do the NVMeF.


Currently all of the user bdevs are created via configuration file, but we are working to add functions + rpc's which allow creation/deletion of these namespaces.

IO is sent to user space via callback, implementation is up to user space, but obviously the longer it lingers there the lower the performance, we use a set of rings + threads processing them, so that the time spent in the appliance is minimal.

Going back from user space we use a single ring (multiple producers single consumer) onto which the completions are inserted, and the ring poll function is registered with spdk core (spdk_poller_register).


Does this seem like a sane design? We'd really like your feedback, and if this can be useful to others, push the code into spdk.

Obviously we are willing to go through any review/testing process that is required. And share performance results and issues.


Cheers,

Shahar