workqueue: Re-order struct worker fields
authorTejun Heo <tj@kernel.org>
Thu, 18 May 2023 03:02:08 +0000 (17:02 -1000)
committerTejun Heo <tj@kernel.org>
Thu, 18 May 2023 03:02:08 +0000 (17:02 -1000)
struct worker was laid out with the intent that all fields that are modified
for each work item execution are in the first cacheline. However, this
hasn't been true for a while with the addition of ->last_func. Let's just
collect hot fields together at the top.

Move ->sleeping in the hole after ->current_color and move ->lst_func right
below. While at it, drop the cacheline comment which isn't useful anymore.

Signed-off-by: Tejun Heo <tj@kernel.org>
Cc: Lai Jiangshan <jiangshanlai@gmail.com>
kernel/workqueue_internal.h

index e00b120..0600f04 100644 (file)
@@ -32,9 +32,12 @@ struct worker {
        work_func_t             current_func;   /* L: current_work's fn */
        struct pool_workqueue   *current_pwq;   /* L: current_work's pwq */
        unsigned int            current_color;  /* L: current_work's color */
-       struct list_head        scheduled;      /* L: scheduled works */
+       int                     sleeping;       /* None */
+
+       /* used by the scheduler to determine a worker's last known identity */
+       work_func_t             last_func;      /* L: last work's fn */
 
-       /* 64 bytes boundary on 64bit, 32 on 32bit */
+       struct list_head        scheduled;      /* L: scheduled works */
 
        struct task_struct      *task;          /* I: worker task */
        struct worker_pool      *pool;          /* A: the associated pool */
@@ -45,7 +48,6 @@ struct worker {
        unsigned long           last_active;    /* L: last active timestamp */
        unsigned int            flags;          /* X: flags */
        int                     id;             /* I: worker id */
-       int                     sleeping;       /* None */
 
        /*
         * Opaque string set with work_set_desc().  Printed out with task
@@ -55,9 +57,6 @@ struct worker {
 
        /* used only by rescuers to point to the target workqueue */
        struct workqueue_struct *rescue_wq;     /* I: the workqueue to rescue */
-
-       /* used by the scheduler to determine a worker's last known identity */
-       work_func_t             last_func;
 };
 
 /**