vdev_disk: default to classic submission for 2.2.x

We don't want to change to brand-new code in the middle of a stable
series, but we want it available to test for people running into page
splitting issues.

This commits make zfs_vdev_disk_classic=1 the default, and updates the
documentation to better explain what's going on.

Signed-off-by: Rob Norris <rob.norris@klarasystems.com>
Sponsored-by: Klara, Inc.
Sponsored-by: Wasabi Technology, Inc.
This commit is contained in:
Rob Norris 2024-03-27 13:11:12 +11:00 committed by Brian Behlendorf
parent d0b3be763f
commit eebf00bee9
2 changed files with 27 additions and 12 deletions

View File

@ -1355,17 +1355,30 @@ This parameter only applies on Linux.
This parameter is ignored if This parameter is ignored if
.Sy zfs_vdev_disk_classic Ns = Ns Sy 1 . .Sy zfs_vdev_disk_classic Ns = Ns Sy 1 .
. .
.It Sy zfs_vdev_disk_classic Ns = Ns Sy 0 Ns | Ns 1 Pq uint .It Sy zfs_vdev_disk_classic Ns = Ns 0 Ns | Ns Sy 1 Pq uint
If set to 1, OpenZFS will submit IO to Linux using the method it used in 2.2 Controls the method used to submit IO to the Linux block layer
and earlier. (default
This "classic" method has known issues with highly fragmented IO requests and .Sy 1 "classic" Ns
is slower on many workloads, but it has been in use for many years and is known )
to be very stable. .Pp
If you set this parameter, please also open a bug report why you did so, If set to 1, the "classic" method is used.
This is the method that has been in use since the earliest versions of
ZFS-on-Linux.
It has known issues with highly fragmented IO requests and is less efficient on
many workloads, but it well known and well understood.
.Pp
If set to 0, the "new" method is used.
This method is available since 2.2.4 and should resolve all known issues and be
far more efficient, but has not had as much testing.
In the 2.2.x series, this parameter defaults to 1, to use the "classic" method.
.Pp
It is not recommended that you change it except on advice from the OpenZFS
developers.
If you do change it, please also open a bug report describing why you did so,
including the workload involved and any error messages. including the workload involved and any error messages.
.Pp .Pp
This parameter and the classic submission method will be removed once we have This parameter and the "classic" submission method will be removed in a future
total confidence in the new method. release of OpenZFS once we have total confidence in the new method.
.Pp .Pp
This parameter only applies on Linux, and can only be set at module load time. This parameter only applies on Linux, and can only be set at module load time.
. .

View File

@ -969,8 +969,10 @@ vdev_disk_io_rw(zio_t *zio)
/* /*
* This is the classic, battle-tested BIO submission code. Until we're totally * This is the classic, battle-tested BIO submission code. Until we're totally
* sure that the new code is safe and correct in all cases, this will remain * sure that the new code is safe and correct in all cases, this will remain
* available and can be enabled by setting zfs_vdev_disk_classic=1 at module * available.
* load time. *
* It is enabled by setting zfs_vdev_disk_classic=1 at module load time. It is
* enabled (=1) by default since 2.2.4, and disabled by default (=0) on master.
* *
* These functions have been renamed to vdev_classic_* to make it clear what * These functions have been renamed to vdev_classic_* to make it clear what
* they belong to, but their implementations are unchanged. * they belong to, but their implementations are unchanged.
@ -1468,7 +1470,7 @@ vdev_disk_rele(vdev_t *vd)
* BIO submission method. See comment above about vdev_classic. * BIO submission method. See comment above about vdev_classic.
* Set zfs_vdev_disk_classic=0 for new, =1 for classic * Set zfs_vdev_disk_classic=0 for new, =1 for classic
*/ */
static uint_t zfs_vdev_disk_classic = 0; /* default new */ static uint_t zfs_vdev_disk_classic = 1; /* default classic */
/* Set submission function from module parameter */ /* Set submission function from module parameter */
static int static int