mirror of
https://github.com/BobTheBlinker/android_kernel_motorola_sm6375.git
synced 2026-10-28 10:41:38 -04:00
block: rearrange a few request fields for better cache layout
Move completion related items (like the call single data) near the end of the struct, instead of mixing them in with the initial queueing related fields. Move queuelist below the bio structures. Then we have all queueing related bits in the first cache line. This yields a 1.5-2% increase in IOPS for a null_blk test, both for sync and for high thread count access. Sync test goes form 975K to 992K, 32-thread case from 20.8M to 21.2M IOPS. Reviewed-by: Bart Van Assche <[email protected]> Reviewed-by: Omar Sandoval <[email protected]> Signed-off-by: Jens Axboe <[email protected]>
This commit is contained in:
parent
e14575b3d4
commit
7c3fb70f03
2 changed files with 24 additions and 22 deletions
|
|
@ -270,8 +270,6 @@ static struct request *blk_mq_rq_ctx_init(struct blk_mq_alloc_data *data,
|
|||
struct blk_mq_tags *tags = blk_mq_tags_from_data(data);
|
||||
struct request *rq = tags->static_rqs[tag];
|
||||
|
||||
rq->rq_flags = 0;
|
||||
|
||||
if (data->flags & BLK_MQ_REQ_INTERNAL) {
|
||||
rq->tag = -1;
|
||||
rq->internal_tag = tag;
|
||||
|
|
@ -285,26 +283,22 @@ static struct request *blk_mq_rq_ctx_init(struct blk_mq_alloc_data *data,
|
|||
data->hctx->tags->rqs[rq->tag] = rq;
|
||||
}
|
||||
|
||||
INIT_LIST_HEAD(&rq->queuelist);
|
||||
/* csd/requeue_work/fifo_time is initialized before use */
|
||||
rq->q = data->q;
|
||||
rq->mq_ctx = data->ctx;
|
||||
rq->rq_flags = 0;
|
||||
rq->cpu = -1;
|
||||
rq->cmd_flags = op;
|
||||
if (data->flags & BLK_MQ_REQ_PREEMPT)
|
||||
rq->rq_flags |= RQF_PREEMPT;
|
||||
if (blk_queue_io_stat(data->q))
|
||||
rq->rq_flags |= RQF_IO_STAT;
|
||||
rq->cpu = -1;
|
||||
INIT_LIST_HEAD(&rq->queuelist);
|
||||
INIT_HLIST_NODE(&rq->hash);
|
||||
RB_CLEAR_NODE(&rq->rb_node);
|
||||
rq->rq_disk = NULL;
|
||||
rq->part = NULL;
|
||||
rq->start_time = jiffies;
|
||||
#ifdef CONFIG_BLK_CGROUP
|
||||
rq->rl = NULL;
|
||||
set_start_time_ns(rq);
|
||||
rq->io_start_time_ns = 0;
|
||||
#endif
|
||||
rq->nr_phys_segments = 0;
|
||||
#if defined(CONFIG_BLK_DEV_INTEGRITY)
|
||||
rq->nr_integrity_segments = 0;
|
||||
|
|
@ -321,6 +315,12 @@ static struct request *blk_mq_rq_ctx_init(struct blk_mq_alloc_data *data,
|
|||
rq->end_io_data = NULL;
|
||||
rq->next_rq = NULL;
|
||||
|
||||
#ifdef CONFIG_BLK_CGROUP
|
||||
rq->rl = NULL;
|
||||
set_start_time_ns(rq);
|
||||
rq->io_start_time_ns = 0;
|
||||
#endif
|
||||
|
||||
data->ctx->rq_dispatched[op_is_sync(op)]++;
|
||||
return rq;
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in a new issue