New features in open source ZFS

Since OpenSolaris got discontinued, the development of open source ZFS continues at the illumos project. The main contributors are the companies Delphix, Nexenta and Joyent. In this post I am going to sum up the main user-visible changes in ZFS since the start of illumos.

This is an updated version of the article originally posted on July 9, 2012.
Major changes:

  • New SPA versioning concept with zfs feature flags (issue #2747)
  • First feature flag: async_destroy – asynchronous destruction of ZFS datasets (issue #2619)
  • Feature flag: empty_bpobj – eliminate empty bpobjs, reduces space used by snapshots (issue #3104)
  • Feature flag: lz4_compress – allow lz4 compression of datasets (issue #3035)
  • Introduction of libzfs_core, a thin thread-safe library that wraps around ioctl’s (issue #2882)
  • Synctask code restructuring – addresses several deadlocks, race conditions and speeds up “zfs receive” (issue #3464)
  • ZFS write throttle and I/O scheduler performance improvements (issue #4045)

Minor changes:

  • single-copy arc – do not cache data twice if the same block is accessed from snapshots or clones (issue #3145)
  • zio nop-write – when overwriting a compressed block checksummed with sha256 with the same data, reference it (issue #3236)
  • speedup in frees – parallel processing, better caching (issues #3329, #3330, #3331, #3578)
  • speedup in spacemap condensing, improving write speed on heavily fragmented pools (issues #3552, #3564)
  • ZFS I/O deadman thread – (optional) kernel panic on hanging I/O for better debugging (issue #3246)
  • improved DTrace support in ZFS (issues #3584, #3598)
  • improved ZFS send and receive performance (issue #3740)
  • L2ARC compresson (issue #3137)

Changes to the “zfs” command:

  • zfs does not depend on Python anymore (issue #278)
  • “zfs destroy” is now capable of destroying multiple snapshots in one command (issue #1647)
  • “zfs destroy -nv” now displays the estimate of space to be reclaimed (issue #1647)
  • “zfs get” now accepts mountpoint as an argument (issue #510)
  • “zfs get” now accepts “-t [datatype]” as an argument (issue #1936)
  • “zfs rename -f” now forcibly umounts a dataset during rename (issue #2635)
  • “zfs send -nv” now displays the estimate of stream size to be sent (issue #1646)
  • “zfs send -v” now reports live send progress (issue #2703)
  • “zfs snapshot” is now capable of creating multiple snapshots at once (issue #2900)

Changes to the “zpool” command:

  • “zpool list -v” now displays the expandable space of a pool and details about its vdevs (issue #1948)
  • “zpool reguid” (new) generates a new unique identifier for a pool (issue #1748)

New ZFS dataset properties:

  • “aclmode” property (reintroduced) (issue #742, aclmode=restricted #3254)
  • “clones” property – lists the clones of a snapshot (issue #1644)
  • “refratio” property – compression ratio based on referenced data (issue #1092)
  • “written” property – displays referenced space since the previous snapshot (issue #1645)
  • “written@[snapshot]” property – displays referenced space since the specified snapshot (issue #1645)
  • “logicalused” and “logicalreferenced” properties (issue #3588)

New ZFS pool properties:

  • “comment” property – it is possible to store a comment that is displayed on zpool import (issue #1693)

All of these features but improved dtrace support been ported to FreeBSD.
Feature flags support will be available in 9.2-RELEASE and 8.4-RELEASE.

Posted in ZFS

Leave a Reply

Your email address will not be published. Required fields are marked *

You may use these HTML tags and attributes:

<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>