Implement dynamic gang header sizes

ZFS gang block headers are currently fixed at 512 bytes. This is
increasingly wasteful in the era of larger disk sector sizes. This PR
allows any size allocation to work as a gang header. It also contains
supporting changes to ZDB to make gang headers easier to work with.

Sponsored-by: Klara, Inc.
Sponsored-by: Wasabi Technology, Inc.
Reviewed-by: Alexander Motin <mav@FreeBSD.org>
Reviewed-by: Tony Hutter <hutter2@llnl.gov>
Reviewed-by: Brian Behlendorf <behlendorf1@llnl.gov>
Reviewed-by: Rob Norris <rob.norris@klarasystems.com>
Reviewed-by: Allan Jude <allan@klarasystems.com>
Signed-off-by: Paul Dagnelie <paul.dagnelie@klarasystems.com>
Closes #17004
This commit is contained in:
Paul Dagnelie
2025-01-23 16:26:09 -08:00
committed by Brian Behlendorf
parent e845be28e7
commit a981cb69e4
18 changed files with 387 additions and 72 deletions
+13
View File
@@ -493,6 +493,19 @@ vdev type, or when adding a new
.Sy draid
vdev to an existing pool.
.
.feature com.klarasystems dynamic_gang_header no
This feature enables larger gang headers based on the sector size of the pool.
When enabled, gang headers will use the entire space allocated for them, instead
of always restricting themselves to 512 bytes.
This can reduce the need for nested gang trees in extreme fragmentation
scenarios.
.Pp
This feature becomes active when a gang header is written that is larger than
512 bytes.
This feature is not enabled by
.Xr zpool-upgrade 8 .
Instead, it must be manually enabled, or be part of a compatibility file.
.
.feature org.illumos edonr no extensible_dataset
This feature enables the use of the Edon-R hash algorithm for checksum,
including for nopwrite