]> granicus.if.org Git - zfs/commitdiff
Disable write merging on ZVOLs
authorRageLtMan <rageltman [at] sempervictus>
Sat, 18 Mar 2017 04:51:36 +0000 (00:51 -0400)
committerBrian Behlendorf <behlendorf1@llnl.gov>
Thu, 4 May 2017 21:59:52 +0000 (17:59 -0400)
The current ZVOL implementation does not explicitly set merge
options on ZVOL device queues, which results in the default merge
behavior.

Explicitly set QUEUE_FLAG_NOMERGES on ZVOL queues allowing the
ZIO pipeline to do its work.

Initial benchmarks (tiotest with no O_DIRECT) show random write
performance going up almost 3X on 8K ZVOLs, even after significant
rewrites of the logical space allocation.

Reviewed-by: Richard Yao <ryao@gentoo.org>
Reviewed-by: Chunwei Chen <david.chen@osnexus.com>
Reviewed-by: Brian Behlendorf <behlendorf1@llnl.gov>
Signed-off-by: RageLtMan <rageltman@sempervictus>
Issue #5902

module/zfs/zvol.c

index 7590ed3160343f44489b50f79dfd9824a7630d3d..d0f7b9912b31f6737108f3af6c4597cf02093faa 100644 (file)
@@ -1468,6 +1468,9 @@ zvol_alloc(dev_t dev, const char *name)
        blk_queue_make_request(zv->zv_queue, zvol_request);
        blk_queue_set_write_cache(zv->zv_queue, B_TRUE, B_TRUE);
 
+       /* Disable write merging in favor of the ZIO pipeline. */
+       queue_flag_set(QUEUE_FLAG_NOMERGES, zv->zv_queue);
+
        zv->zv_disk = alloc_disk(ZVOL_MINORS);
        if (zv->zv_disk == NULL)
                goto out_queue;