[dm-devel] [PATCH V6 09/12] block: use per-task poll context to implement bio based io polling

Hannes Reinecke hare at suse.de
Mon Apr 26 07:17:08 UTC 2021


On 4/22/21 2:20 PM, Ming Lei wrote:
> Currently bio based IO polling needs to poll all hw queue blindly, this
> way is very inefficient, and one big reason is that we can't pass any
> bio submission result to blk_poll().
> 
> In IO submission context, track associated underlying bios by per-task
> submission queue and store returned 'cookie' in bio->bi_poll_data which
> is added by filling a hole of .bi_iter, and return current->pid to
> caller of submit_bio() for any bio based driver's IO, which is
> submitted from FS.
> 
> In IO poll context, the passed cookie tells us the PID of submission
> context, then we can find bios from the per-task io pull context of
> submission context. Moving bios from submission queue to poll queue of
> the poll context, and keep polling until these bios are ended. Remove
> bio from poll queue if the bio is ended. Add bio flags of BIO_DONE and
> BIO_END_BY_POLL for such purpose.
> 
> In was found in Jeffle Xu's test that kfifo doesn't scale well for a
> submission queue as queue depth is increased, so a new mechanism for
> tracking bios is needed. So far bio's size is close to 2 cacheline size,
> and it may not be accepted to add new field into bio for solving the
> scalability issue by tracking bios via linked list, switch to bio group
> list for tracking bio, the idea is to reuse .bi_end_io for linking bios
> into a linked list for all sharing same .bi_end_io(call it bio group),
> which is recovered before ending bio really, since BIO_END_BY_POLL is
> added for enhancing this point. Usually .bi_end_bio is same for all
> bios in same layer, so it is enough to provide very limited groups, such
> as 16 or less for fixing the scalability issue.
> 
> Usually submission shares context with io poll. The per-task poll context
> is just like stack variable, and it is cheap to move data between the two
> per-task queues.
> 
> Also when the submission task is exiting, drain pending IOs in the context
> until all are done.
> 
> Tested-by: Jeffle Xu <jefflexu at linux.alibaba.com>
> Reviewed-by: Jeffle Xu <jefflexu at linux.alibaba.com>
> Signed-off-by: Ming Lei <ming.lei at redhat.com>
> ---
>  block/bio.c               |   5 +
>  block/blk-core.c          |  39 ++++-
>  block/blk-ioc.c           |   3 +
>  block/blk-poll.c          | 345 +++++++++++++++++++++++++++++++++++++-
>  block/blk.h               |  33 ++++
>  include/linux/blk_types.h |  27 ++-
>  6 files changed, 448 insertions(+), 4 deletions(-)
> 
Reviewed-by: Hannes Reinecke <hare at suse.de>

Cheers,

Hannes
-- 
Dr. Hannes Reinecke		        Kernel Storage Architect
hare at suse.de			               +49 911 74053 688
SUSE Software Solutions Germany GmbH, 90409 Nürnberg
GF: F. Imendörffer, HRB 36809 (AG Nürnberg)





More information about the dm-devel mailing list