io_uring: move submitter_task out of cold cacheline
authorPavel Begunkov <asml.silence@gmail.com>
Mon, 9 Jan 2023 14:46:03 +0000 (14:46 +0000)
committerJens Axboe <axboe@kernel.dk>
Sun, 29 Jan 2023 22:17:40 +0000 (15:17 -0700)
->submitter_task is used somewhat more frequent now than before, i.e.
for local tw enqueue and run, let's move it from the end of ctx, which
is full of cold data, to the first cacheline with mostly constants.

Signed-off-by: Pavel Begunkov <asml.silence@gmail.com>
Link: https://lore.kernel.org/r/415ca91dc5ad1dec612b892e489cda98e1069542.1673274244.git.asml.silence@gmail.com
Signed-off-by: Jens Axboe <axboe@kernel.dk>
include/linux/io_uring_types.h

index 128a67a40065f25292035455f603075f8504fb8d..8dfb6c4a35d9bc754749f6bfa828ecdf3d399c25 100644 (file)
@@ -195,11 +195,7 @@ struct io_alloc_cache {
 struct io_ring_ctx {
        /* const or read-mostly hot data */
        struct {
-               struct percpu_ref       refs;
-
-               struct io_rings         *rings;
                unsigned int            flags;
-               enum task_work_notify_mode      notify_method;
                unsigned int            compat: 1;
                unsigned int            drain_next: 1;
                unsigned int            restricted: 1;
@@ -210,6 +206,11 @@ struct io_ring_ctx {
                unsigned int            syscall_iopoll: 1;
                /* all CQEs should be posted only by the submitter task */
                unsigned int            task_complete: 1;
+
+               enum task_work_notify_mode      notify_method;
+               struct io_rings                 *rings;
+               struct task_struct              *submitter_task;
+               struct percpu_ref               refs;
        } ____cacheline_aligned_in_smp;
 
        /* submission data */
@@ -320,7 +321,6 @@ struct io_ring_ctx {
        /* Keep this last, we don't need it for the fast path */
 
        struct io_restriction           restrictions;
-       struct task_struct              *submitter_task;
 
        /* slow path rsrc auxilary data, used by update/register */
        struct io_rsrc_node             *rsrc_backup_node;