[PATCH v2 0/8] ublk: io_desc optimizations
Caleb Sander Mateos <[email protected]> Mon, 3 Aug 2026 15:14:32 -0600
| Newsgroups | org.kernel.vger.linux-block,org.kernel.vger.linux-kernel,org.kernel.vger.linux-kselftest |
|---|---|
| Message-ID | <[email protected]> |
This series is based on the "ublk: harden user buffer handling" series. ublk passes the parameters of incoming I/O in memory shared between the kernel ublk driver and userspace ublk server in struct ublksrv_io_desc. The thread submitting the ublk I/O writes to the io_desc, while the ublk server thread handling the I/O reads the io_desc. This basically guarantees a cache miss on both threads for each ublk I/O. Avoid the cache misses by writing the io_desc on the server thread in the kernel before dispatching the I/O to userspace. The size of each io_desc is currently fixed to 24 bytes, which has been an obstacle to extending it with additional fields [1]. Additionally, with multiple ublk server threads handling I/Os from the same ublk queue (possible with UBLK_F_PER_IO_DAEMON or UBLK_F_BATCH_IO), false sharing results from adjacent io_descs sharing the same cache line. Add a UBLK_F_IO_DESC_SIZE feature allowing the ublk server to increase the size of the io_descs for its ublk devices. [1]: https://lore.kernel.org/linux-block/aV8QfvaNO5P6vOs6@fedora/ v2: - Cap io_desc_size arbitrarily at 256 (Ming) - Add kublk list support, selftest (Ming) - Add Reviewed-by tags, Suggested-by tag (Ming) v1: https://lore.kernel.org/linux-block/[email protected]/ Caleb Sander Mateos (8): ublk: consistently use u16 for queue and tag numbers ublk: remove struct ublk_zoned_report_desc's operation field ublk: split request validation from io_desc init ublk: initialize io_desc on daemon task ublk: add UBLK_F_IO_DESC_SIZE selftests: ublk: add support for --io_desc_size selftests: ublk: add UBLK_F_IO_DESC_SIZE test ublk: lift checks out of ublk_{,un}map_io() drivers/block/ublk_drv.c | 261 ++++++++++--------- include/uapi/linux/ublk_cmd.h | 5 +- tools/testing/selftests/ublk/Makefile | 1 + tools/testing/selftests/ublk/kublk.c | 30 ++- tools/testing/selftests/ublk/kublk.h | 6 +- tools/testing/selftests/ublk/test_loop_08.sh | 25 ++ 6 files changed, 188 insertions(+), 140 deletions(-) create mode 100755 tools/testing/selftests/ublk/test_loop_08.sh -- 2.54.0