diff options
author | Jens Axboe <axboe@fb.com> | 2014-05-29 09:53:32 -0600 |
---|---|---|
committer | Jens Axboe <axboe@fb.com> | 2014-05-29 09:53:32 -0600 |
commit | 05f1dd5315217398fc8d122bdee80f96a9f21274 (patch) | |
tree | f1decfafa5f0d974d2f9c707a514bf68b9e2cddb /block/blk-mq.c | |
parent | 4d92a9beb39d80a7d8ff7c04ae12a10290105ae5 (diff) | |
download | linux-05f1dd5315217398fc8d122bdee80f96a9f21274.tar.gz linux-05f1dd5315217398fc8d122bdee80f96a9f21274.tar.bz2 linux-05f1dd5315217398fc8d122bdee80f96a9f21274.zip |
block: add queue flag for disabling SG merging
If devices are not SG starved, we waste a lot of time potentially
collapsing SG segments. Enough that 1.5% of the CPU time goes
to this, at only 400K IOPS. Add a queue flag, QUEUE_FLAG_NO_SG_MERGE,
which just returns the number of vectors in a bio instead of looping
over all segments and checking for collapsible ones.
Add a BLK_MQ_F_SG_MERGE flag so that drivers can opt-in on the sg
merging, if they so desire.
Signed-off-by: Jens Axboe <axboe@fb.com>
Diffstat (limited to 'block/blk-mq.c')
-rw-r--r-- | block/blk-mq.c | 3 |
1 files changed, 3 insertions, 0 deletions
diff --git a/block/blk-mq.c b/block/blk-mq.c index f27fe44230c2..f98d977fd150 100644 --- a/block/blk-mq.c +++ b/block/blk-mq.c @@ -1829,6 +1829,9 @@ struct request_queue *blk_mq_init_queue(struct blk_mq_tag_set *set) q->mq_ops = set->ops; q->queue_flags |= QUEUE_FLAG_MQ_DEFAULT; + if (!(set->flags & BLK_MQ_F_SG_MERGE)) + q->queue_flags |= 1 << QUEUE_FLAG_NO_SG_MERGE; + q->sg_reserved_size = INT_MAX; INIT_WORK(&q->requeue_work, blk_mq_requeue_work); |