Go to file
Tony Hutter 6f73d02168
zvol: Support blk-mq for better performance
Add support for the kernel's block multiqueue (blk-mq) interface in
the zvol block driver.  blk-mq creates multiple request queues on
different CPUs rather than having a single request queue.  This can
improve zvol performance with multithreaded reads/writes.

This implementation uses the blk-mq interfaces on 4.13 or newer
kernels.  Building against older kernels will fall back to the
older BIO interfaces.

Note that you must set the `zvol_use_blk_mq` module param to
enable the blk-mq API.  It is disabled by default.

In addition, this commit lets the zvol blk-mq layer process whole
`struct request` IOs at a time, rather than breaking them down
into their individual BIOs.  This reduces dbuf lock contention
and overhead versus the legacy zvol submit_bio() codepath.

	sequential dd to one zvol, 8k volblocksize, no O_DIRECT:

	legacy submit_bio()     292MB/s write  453MB/s read
	this commit             453MB/s write  885MB/s read

It also introduces a new `zvol_blk_mq_chunks_per_thread` module
parameter. This parameter represents how many volblocksize'd chunks
to process per each zvol thread.  It can be used to tune your zvols
for better read vs write performance (higher values favor write,
lower favor read).

Reviewed-by: Brian Behlendorf <behlendorf1@llnl.gov>
Reviewed-by: Ahelenia Ziemiańska <nabijaczleweli@nabijaczleweli.xyz>
Reviewed-by: Tony Nguyen <tony.nguyen@delphix.com>
Signed-off-by: Tony Hutter <hutter2@llnl.gov>
Closes #13148
Issue #12483
2022-06-09 08:10:38 -06:00
.github Replace EXTRA_DIST with dist_noinst_DATA 2022-05-26 09:24:50 -07:00
cmd Introduce BLAKE3 checksums as an OpenZFS feature 2022-06-08 15:55:57 -07:00
config zvol: Support blk-mq for better performance 2022-06-09 08:10:38 -06:00
contrib Replace EXTRA_DIST with dist_noinst_DATA 2022-05-26 09:24:50 -07:00
etc Replace EXTRA_DIST with dist_noinst_DATA 2022-05-26 09:24:50 -07:00
include zvol: Support blk-mq for better performance 2022-06-09 08:10:38 -06:00
lib Introduce BLAKE3 checksums as an OpenZFS feature 2022-06-08 15:55:57 -07:00
man zvol: Support blk-mq for better performance 2022-06-09 08:10:38 -06:00
module zvol: Support blk-mq for better performance 2022-06-09 08:10:38 -06:00
rpm Replace EXTRA_DIST with dist_noinst_DATA 2022-05-26 09:24:50 -07:00
scripts Replace EXTRA_DIST with dist_noinst_DATA 2022-05-26 09:24:50 -07:00
tests zvol: Support blk-mq for better performance 2022-06-09 08:10:38 -06:00
udev udev: zvol_id: simplify/modernise 2022-05-11 10:58:19 -07:00
.editorconfig Add an .editorconfig; document git whitespace settings 2020-01-27 13:32:52 -08:00
.gitignore autoconf: use include directives instead of recursing down cmd 2022-05-10 10:18:38 -07:00
.gitmodules .gitmodules: link to openzfs github repository 2021-04-12 09:37:23 -07:00
AUTHORS Introduce BLAKE3 checksums as an OpenZFS feature 2022-06-08 15:55:57 -07:00
autogen.sh autogen.sh: paper over automake <1.14's lack of %reldir% support 2022-05-10 10:20:46 -07:00
CODE_OF_CONDUCT.md Replace ZFS on Linux references with OpenZFS 2020-10-08 20:10:13 -07:00
configure.ac Switch sed -E to -r for better portability 2022-05-25 09:13:51 -07:00
copy-builtin copy-builtin: add hooks with sed/>> 2022-05-10 10:17:43 -07:00
COPYRIGHT Fix typos 2020-06-09 21:24:09 -07:00
LICENSE Update build system and packaging 2018-05-29 16:00:33 -07:00
Makefile.am Replace EXTRA_DIST with dist_noinst_DATA 2022-05-26 09:24:50 -07:00
META Linux 5.18 compat: META 2022-05-31 14:38:00 -07:00
NEWS Fix NEWS file 2020-08-26 21:44:41 -07:00
NOTICE Update build system and packaging 2018-05-29 16:00:33 -07:00
README.md README: Update OpenZFS website url 2022-01-06 16:25:01 -08:00
RELEASES.md Add RELEASES.md file 2021-04-02 16:33:40 -07:00
TEST Remove CI builder customization from TEST 2020-03-16 10:46:03 -07:00
zfs.release.in Move zfs.release generation to configure step 2012-07-12 12:22:51 -07:00

img

OpenZFS is an advanced file system and volume manager which was originally developed for Solaris and is now maintained by the OpenZFS community. This repository contains the code for running OpenZFS on Linux and FreeBSD.

codecov coverity

Official Resources

Installation

Full documentation for installing OpenZFS on your favorite operating system can be found at the Getting Started Page.

Contribute & Develop

We have a separate document with contribution guidelines.

We have a Code of Conduct.

Release

OpenZFS is released under a CDDL license. For more details see the NOTICE, LICENSE and COPYRIGHT files; UCRL-CODE-235197

Supported Kernels

  • The META file contains the officially recognized supported Linux kernel versions.
  • Supported FreeBSD versions are any supported branches and releases starting from 12.2-RELEASE.