block: move 'q_usage_counter' into front of 'request_queue'
authorMing Lei <ming.lei@redhat.com>
Thu, 1 Oct 2020 15:48:42 +0000 (23:48 +0800)
committerJens Axboe <axboe@kernel.dk>
Tue, 6 Oct 2020 13:29:36 +0000 (07:29 -0600)
The field of 'q_usage_counter' is always fetched in fast path of every
block driver, and move it into front of 'request_queue', so it can be
fetched into 1st cacheline of 'request_queue' instance.

Signed-off-by: Ming Lei <ming.lei@redhat.com>
Tested-by: Veronika Kabatova <vkabatov@redhat.com>
Reviewed-by: Christoph Hellwig <hch@lst.de>
Cc: Sagi Grimberg <sagi@grimberg.me>
Cc: Tejun Heo <tj@kernel.org>
Cc: Christoph Hellwig <hch@lst.de>
Cc: Jens Axboe <axboe@kernel.dk>
Cc: Bart Van Assche <bvanassche@acm.org>
Signed-off-by: Jens Axboe <axboe@kernel.dk>
include/linux/blkdev.h

index cf80e61..5fc9404 100644 (file)
@@ -397,6 +397,8 @@ struct request_queue {
        struct request          *last_merge;
        struct elevator_queue   *elevator;
 
+       struct percpu_ref       q_usage_counter;
+
        struct blk_queue_stats  *stats;
        struct rq_qos           *rq_qos;
 
@@ -569,7 +571,6 @@ struct request_queue {
         * percpu_ref_kill() and percpu_ref_reinit().
         */
        struct mutex            mq_freeze_lock;
-       struct percpu_ref       q_usage_counter;
 
        struct blk_mq_tag_set   *tag_set;
        struct list_head        tag_set_list;