Updating registered files and buffers is a very slow operation, which makes it not feasible for workloads with medium update frequencies. Rework the underlying rsrc infra for greater performance and lesser memory footprint. The improvement is ~11x for a benchmark updating files in a loop (1040K -> 11468K updates / sec). The set requires a couple of patches from the 6.3 branch, for that reason it's an RFC and will be resent after merge. https://github.com/isilence/linux.git optimise-rsrc-update Pavel Begunkov (11): io_uring/rsrc: use non-pcpu refcounts for nodes io_uring/rsrc: keep cached refs per node io_uring: don't put nodes under spinlocks io_uring: io_free_req() via tw io_uring/rsrc: protect node refs with uring_lock io_uring/rsrc: kill rsrc_ref_lock io_uring/rsrc: rename rsrc_list io_uring/rsrc: optimise io_rsrc_put allocation io_uring/rsrc: don't offload node free io_uring/rsrc: cache struct io_rsrc_node io_uring/rsrc: add lockdep sanity checks include/linux/io_uring_types.h | 7 +- io_uring/io_uring.c | 47 ++++++---- io_uring/rsrc.c | 152 +++++++++++---------------------- io_uring/rsrc.h | 50 ++++++----- 4 files changed, 105 insertions(+), 151 deletions(-) -- 2.39.1