Thread (79 messages) 79 messages, 9 authors, 2018-06-04

Re: [PATCH 05/24] ibtrs: client: main functionality

From: Roman Penyaev <hidden>
Date: 2018-02-05 17:05:10
Also in: linux-rdma

On Mon, Feb 5, 2018 at 3:14 PM, Sagi Grimberg [off-list ref] wrote:
quoted
Indeed, seems sbitmap can be reused.

But tags is a part of IBTRS, and is not related to block device at all.
One
IBTRS connection (session) handles many block devices

we use host shared tag sets for the case of multiple block devices.
Unfortunately (or fortunately, depends on the indented mq design) tags are
not shared between hw_queues.  So in our case (1 session queue, N devices)
you always have to specify tags->nr_hw_queues = 1 or magic will not happen
and you will always have more tags than your session supports.  But
nr_hw_queues = 1 kills performance dramatically.  What scales well is
the following: nr_hw_queues == num_online_cpus() == number of QPs in
one session.
quoted
(or any IO producers).

Lets wait until we actually have this theoretical non-block IO
producers..
quoted
With a tag you get a free slot of a buffer where you can read/write, so
once
you've allocated a tag you won't sleep on IO path inside a library.

Same for block tags (given that you don't set the request queue
otherwise)
quoted
Also tag
helps a lot on IO fail-over to another connection (multipath
implementation,
which is also a part of the transport library, not a block device), where
you
simply reuse the same buffer slot (with a tag in your hands) forwarding IO
to
another RDMA connection.

What is the benefit of this detached architecture?
That gives us separated rdma IO library, where ibnbd is one of the players.
IMO, one reason why you ended up not reusing a lot of the infrastructure
is yielded from the  attempt to support a theoretical different consumer
that is not ibnbd.
Well, not quite.  Not using rdma api helpers (we will use it) and not
using tags from block layer (we need tags inside transport) this is not
"a lot of the infrastructure" :)

I would say that we are not fast enough to follow all kernel trends.
That is the major reason, but not other user of ibtrs.
Did you actually had plans for any other consumers?
Yep, the major target is replicated block storage, that's why separated
transport.
Personally, I think you will be much better off with a unified approach
for your block device implementation.
--
Roman
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help