On Sun, 2018-01-14 at 09:09 +0000, Shahar Salzman wrote:
> 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.
Ok - so you have our NVMe-oF target in front and it routes I/Os to your system
via a custom bdev module that you wrote. This is exactly how we intended for you
to use it, so it looks good to me.
> 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).
What do you mean by I/O is sent to user space via callback? When was the I/O
ever in kernel space? Is your storage system running in the kernel?