Feature Flags

From OpenZFS
Revision as of 17:55, 26 July 2019 by Behlendorf (Talk | contribs) (Feature flags implementation)

(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to: navigation, search

ZFS on-disk formats were originally versioned with a single number, which increased whenever the format changed. The numbered approach was suitable when development of ZFS was driven by a single organisation.

For distributed development of OpenZFS, version numbering was unsuitable. Any change to the number would have required agreement, across all implementations, of each change to the on-disk format.

OpenZFS feature flags – an alternative to traditional version numbering – allow a uniquely named pool property for each change to the on-disk format. This approach supports:

  • format changes that are independent
  • format changes that depend on each other.

Compatibility

Where all features that are used by a pool are supported by multiple implementations of OpenZFS, the on-disk format is portable across those implementations.

Features that are exclusive when enabled should be periodically ported to all distributions.

Reference materials

ZFS Feature Flags (Christopher Siden, 2012-01, in the Internet Archive Wayback Machine) in particular: "… Legacy version numbers still exist for pool versions 1-28 …".

zpool-features(5) – illumos

zpool-features(7) – FreeBSD

Feature flags implementation

Feature Flag Read-Only
Compatible
DragonFlyBSD FreeBSD Illumos Joyent NetBSD OmniOSCE OpenZFS OpenZFS on OSX ZFS on Linux
zfsport 11.2.0 11.3.0 12.0.0 head master master main r151028 r151030 master master 1.9.0 1.9.1 1.9.1-rc1 master 0.7.13 0.8.1 master
bookmark_v2 no no no no no no yes yes no no no yes yes yes yes yes yes no yes yes
encryption no no no no no no yes yes no no no yes yes yes yes yes yes no yes yes
resilver_defer yes no no no no no yes yes no no no yes yes yes yes yes yes no yes yes
async_destroy yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes
bookmark_written no no no no no no no no no no no no no no no no no no no yes
bookmarks yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes
device_removal no no yes yes yes yes yes yes no yes yes yes yes yes yes yes yes no yes yes
embedded_data no yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes
empty_bpobj yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes
enabled_txg yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes
extensible_dataset no yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes
hole_birth no yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes
livelist yes no no no no no no no no no no no no no no no no no no yes
log_spacemap yes no no no no no no no no no no no no no no no no no no yes
obsolete_counts yes no yes yes yes yes yes yes no yes yes yes yes yes yes yes yes no yes yes
redacted_datasets no no no no no no no no no no no no no no no no no no no yes
redaction_bookmarks no no no no no no no no no no no no no no no no no no no yes
spacemap_histogram yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes
spacemap_v2 yes no no yes yes yes yes yes no yes yes yes yes yes yes yes yes no yes yes
zpool_checkpoint yes no yes yes yes yes yes yes no yes yes yes yes yes yes yes yes no yes yes
filesystem_limits yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes
multi_vdev_crash_dump no yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes
edonr no no no no no no yes yes no yes yes yes yes yes yes yes yes yes yes yes
lz4_compress no yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes
sha512 no no yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes
skein no no yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes
large_blocks no no yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes
allocation_classes yes no no no no no yes yes no no no yes yes yes yes yes yes no yes yes
large_dnode no no no no no no yes yes no no yes yes yes yes yes yes yes yes yes yes
project_quota yes no no no no no no no no no no no no yes yes yes yes no yes yes
userobj_accounting yes no no no no no no no no no no no no yes yes yes yes yes yes yes

Table legend

  • no = not implemented
  • yes = implemented

Source: [1] as of 20190726