[PATCH 0/8] ublk: allow off-daemon zero-copy buffer registration

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Currently ublk zero-copy requires ublk request buffers to be registered
and unregistered by the ublk I/O's daemon task. However, as currently
implemented, there is no reason for this restriction. Registration looks
up the request via the ublk device's tagset rather than the daemon-local
ublk_io structure and takes an atomic reference to prevent racing with
dispatch or completion of the request. Ming has expressed interest in
relaxing this restriction[1] so the ublk server can offload the I/O
operation that uses the zero-copy buffer to another thread.

Additionally, optimize the buffer registration for the common case
where the buffer is registered by the daemon task. Skip the expensive
atomic reference count increment and the several pointer dereferences
involved in looking up the request on the tagset.

A few other cleanups and optimizations are included.

[1]: https://lore.kernel.org/linux-block/aAmYJxaV1-yWEMRo@fedora/

Caleb Sander Mateos (8):
  ublk: check cmd_op first
  ublk: handle UBLK_IO_FETCH_REQ first
  ublk: remove task variable from __ublk_ch_uring_cmd()
  ublk: consolidate UBLK_IO_FLAG_{ACTIVE,OWNED_BY_SRV} checks
  ublk: move ublk_prep_cancel() to case UBLK_IO_COMMIT_AND_FETCH_REQ
  ublk: allow UBLK_IO_(UN)REGISTER_IO_BUF on any task
  ublk: optimize UBLK_IO_REGISTER_IO_BUF on daemon task
  ublk: remove ubq checks from ublk_{get,put}_req_ref()

 drivers/block/ublk_drv.c      | 169 ++++++++++++++++++++--------------
 include/uapi/linux/ublk_cmd.h |   8 ++
 2 files changed, 107 insertions(+), 70 deletions(-)

-- 
2.45.2





[Index of Archives]     [Linux RAID]     [Linux SCSI]     [Linux ATA RAID]     [IDE]     [Linux Wireless]     [Linux Kernel]     [ATH6KL]     [Linux Bluetooth]     [Linux Netdev]     [Kernel Newbies]     [Security]     [Git]     [Netfilter]     [Bugtraq]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Device Mapper]

  Powered by Linux