Hi Linus, As mentioned, and sitting on top of both the 6.12 block and io_uring core branches, here's support for async discard through io_uring. This allows applications to issue async discards, rather than rely on the blocking sync ioctl discards we already have. The sync support is difficult to use outside of idle/cleanup periods. On a real (but slow) device, testing shows the following results when compared to sync discard: qd64 sync discard: 21K IOPS, lat avg 3 msec (max 21 msec) qd64 async discard: 76K IOPS, lat avg 845 usec (max 2.2 msec) qd64 sync discard: 14K IOPS, lat avg 5 msec (max 25 msec) qd64 async discard: 56K IOPS, lat avg 1153 usec (max 3.6 msec) and synthetic null_blk testing with the same queue depth and block size settings as above shows: Type Trim size IOPS Lat avg (usec) Lat Max (usec) ============================================================== sync 4k 144K 444 20314 async 4k 1353K 47 595 sync 1M 56K 1136 21031 async 1M 94K 680 760 Please pull! The following changes since commit 84eacf177faa605853c58e5b1c0d9544b88c16fd: io_uring/io-wq: inherit cpuset of cgroup in io worker (2024-09-11 07:27:56 -0600) are available in the Git repository at: git://git.kernel.dk/linux.git tags/for-6.12/io_uring-discard-20240913 for you to fetch changes up to 50c52250e2d74b098465841163c18f4b4e9ad430: block: implement async io_uring discard cmd (2024-09-11 10:45:28 -0600) ---------------------------------------------------------------- for-6.12/io_uring-discard-20240913 ---------------------------------------------------------------- Jens Axboe (2): Merge branch 'for-6.12/block' into for-6.12/io_uring-discard Merge branch 'for-6.12/io_uring' into for-6.12/io_uring-discard Pavel Begunkov (5): io_uring/cmd: expose iowq to cmds io_uring/cmd: give inline space in request to cmds filemap: introduce filemap_invalidate_pages block: introduce blk_validate_byte_range() block: implement async io_uring discard cmd block/blk.h | 1 + block/fops.c | 2 + block/ioctl.c | 163 +++++++++++++++++++++++++++++++---- include/linux/io_uring/cmd.h | 15 ++++ include/linux/pagemap.h | 2 + include/uapi/linux/blkdev.h | 14 +++ io_uring/io_uring.c | 11 +++ io_uring/io_uring.h | 1 + io_uring/uring_cmd.c | 7 ++ mm/filemap.c | 17 ++-- 10 files changed, 209 insertions(+), 24 deletions(-) -- Jens Axboe