summaryrefslogtreecommitdiffstats
path: root/block/blk-sysfs.c
diff options
context:
space:
mode:
authorMing Lei <ming.lei@canonical.com>2014-09-25 17:23:47 +0200
committerJens Axboe <axboe@fb.com>2014-09-25 23:22:45 +0200
commitf70ced09170761acb69840cafaace4abc72cba4b (patch)
treebc62f5926a5e8b74be30316196a41b25ece12368 /block/blk-sysfs.c
parentblock: introduce 'blk_mq_ctx' parameter to blk_get_flush_queue (diff)
downloadlinux-f70ced09170761acb69840cafaace4abc72cba4b.tar.xz
linux-f70ced09170761acb69840cafaace4abc72cba4b.zip
blk-mq: support per-distpatch_queue flush machinery
This patch supports to run one single flush machinery for each blk-mq dispatch queue, so that: - current init_request and exit_request callbacks can cover flush request too, then the buggy copying way of initializing flush request's pdu can be fixed - flushing performance gets improved in case of multi hw-queue In fio sync write test over virtio-blk(4 hw queues, ioengine=sync, iodepth=64, numjobs=4, bs=4K), it is observed that througput gets increased a lot over my test environment: - throughput: +70% in case of virtio-blk over null_blk - throughput: +30% in case of virtio-blk over SSD image The multi virtqueue feature isn't merged to QEMU yet, and patches for the feature can be found in below tree: git://kernel.ubuntu.com/ming/qemu.git v2.1.0-mq.4 And simply passing 'num_queues=4 vectors=5' should be enough to enable multi queue(quad queue) feature for QEMU virtio-blk. Suggested-by: Christoph Hellwig <hch@lst.de> Signed-off-by: Ming Lei <ming.lei@canonical.com> Signed-off-by: Jens Axboe <axboe@fb.com>
Diffstat (limited to 'block/blk-sysfs.c')
-rw-r--r--block/blk-sysfs.c4
1 files changed, 2 insertions, 2 deletions
diff --git a/block/blk-sysfs.c b/block/blk-sysfs.c
index 718cffc4c678..e8f38a36c625 100644
--- a/block/blk-sysfs.c
+++ b/block/blk-sysfs.c
@@ -517,10 +517,10 @@ static void blk_release_queue(struct kobject *kobj)
if (q->queue_tags)
__blk_queue_free_tags(q);
- blk_free_flush_queue(q->fq);
-
if (q->mq_ops)
blk_mq_free_queue(q);
+ else
+ blk_free_flush_queue(q->fq);
blk_trace_shutdown(q);