Matt Ahrens
mahrens@delphix.com
Delphix Proprietary and Confidential
Recent new features from Delphix
● embedded blocks (“zero block compression”)
● don’t evict when objset closed
○ speeds up e.g. “zfs get all” with lots of zvols
● increase ARC’s buf_hash_table
● metadata_redundancy=most
● fragmentation histogram & metric
already integrated:
● zfs bookmarks
● readonly pool improvements (e.g. zfs send)
● hole birth time & other zfs send improvements
Delphix Proprietary and Confidential
Work in progress from Delphix
● Resumable zfs send
● fs-wide owner/group override (avoid chown -R)
● device removal (probably)
● channel programs (lua in the kernel!)
● platform-independent code repo
○ copy .c, .h files from illumos, preserving history
○ create Makefiles
○ userland ioctl shim
○ test suite running against libzpool
Delphix Proprietary and Confidential
Large block size support
● Today OpenZFS supports 512B - 128KB blocks
● Solaris 11 supports up to 1MB blocks
Changes required:
● SPA_MAXBLOCKSIZE -> 1MB
● Change most uses to SPA_OLD_MAXBLOCKSIZE (128KB)
● Dataset keeps track of if it has ever had recordsize>128K
● if true, feature refcount is bumped
● Change dataset-specific uses to dmu_objset_maxblocksize()
● returns 128K or 1MB
● Send/Recv
● new flag; if not set then cap blocksize at 128K
Note: not on-disk compatible w/Oracle ZFS large blocks
Delphix Proprietary and Confidential
The future of OpenZFS: development model
● Simplify getting changes into every platform
● Platform-independent codebase
○ all platforms pull from this verbatim, goal: no diffs
○ platform-independent changes pushed here first
● FreeBSD’s and Linux’s SPL will get less gross
● Illumos will get a (also non-gross) porting layer
● Only code that can be tested on any platform in
userland
○ Test with ztest and TestRunner (formerly STF) tests
○ Will not include ZPL (posix layer) or vdev_disk
Delphix Proprietary and Confidential
OpenZFS Repo work
● Copy zfs *.[ch] files from illumos to new repo
○ preserve commit history
● Create Makefiles / automake setup
○ libzfs, libzpool, ztest, /sbin/zfs, etc.
○ build on illumos, FreeBSD, linux
● Create zfsd
○ Userland daemon which services “ioctls” from
libzfs/libzfs_core
● Make test suite run against zfsd
○ Need to create ZPL-equivalent
○ Hopefully just “zfs dd ds=... obj=... off=...
Delphix Proprietary and Confidential
The future of OpenZFS: features
● persistent l2arc (Saso Kiselkov)
● performance on fragmented pools (George Wilson)
● observability -- zfs dtrace provider
● resumable zfs send/recv (Chris Siden)
● filesystem & snapshot count limits (Jerry Jelinek)
● device removal?
● revived MacOS port (Jorgen Lundman)
● Larger (1MB+) block support
● multi-modifier protection
● channel program for richer administration (Max Grossman)
● Raspberry pi support for ZFS on Linux (Richard Yao)
Matt Ahrens
mahrens@delphix.com
http://open-zfs.org
Delphix Proprietary and Confidential
Features unique to OpenZFS
● Feature Flags
● libzfs_core
● CLI Usability
○ size estimates for zfs send and zfs destroy
○ vdev information in zpool list
○ zfs send progress reporting
○ arbitrary snapshot arguments to zfs snapshot
● Dataset properties
○ refcompressratio
○ clones
○ written, written@snap
○ lused, lcompressed
● TestRunner test suite
Delphix Proprietary and Confidential
Performance improvements in OpenZFS
● async filesystem and volume destruction
● single-copy ARC cache
● space allocation (spacemap) performance improvements
● smoother write latency (write throttle rewrite)
● per-type i/o queues (read, ZIL, async write, scrub)
● lz4 compression
● compressed cache devices (L2ARC)
Delphix Proprietary and Confidential
OpenZFS development process - illumos
How to develop changes:
● Large changes: review on developer@open-zfs.org
● Set up OpenIndiana-based dev environment
● Clone repo from github.com/illumos
● Make code changes
● Run a full build with nightly (runs lint)
● Test with ztest and TestRunner
○ consider if you need to add a new test case
● Check code style with cstyle tool
Delphix Proprietary and Confidential
OpenZFS development process - illumos (2)
How to submit code:
● Get your code reviewed on zfs@lists.illumos.org
○ cc: developer@open-zfs.org for platform-neutral changes
○ non-trivial changes typically must be reviewed by a ZFS
expert (e.g. Matt Ahrens or George Wilson)
○ preferred tool for creating reviews is webrev
● Submit a “Request to Integrate” (RTI) email to
advocates@lists.illumos.org
● Advocate will integrate (push) your code to github
○ Chris Siden is the most active ZFS advocate
Delphix Proprietary and Confidential
OpenZFS development process - FreeBSD
Code base: FreeBSD SVN tree
Porting process:
1. pulling code changes from illumos to vendor branch
● vendor/illumos/dist
2. MFV to head
● kernel: head/sys/cddl/contrib/opensolaris
● userland: head/cddl/contrib/opensolaris
3. MFC to stable after a grace period
Solaris porting layer: head(/sys)/cddl/compat/opensolaris
Delphix Proprietary and Confidential
OpenZFS development process - FreeBSD (2)
Basic rules:
● keep vendor’s directory structure
● keep as close to vendor (illumos) as possible
● mark changed or different code
Challenges:
● backward (and forward) compatibility
● FreeBSD-specific differences
○ boot loader, GEOM integration, FreeBSD jails,
VM / VFS integration
Delphix Proprietary and Confidential
OpenZFS development process - FreeBSD (3)
How to submit code:
● Platform-independent changes -> illumos
● FreeBSD-specific changes -> head branch
● Exemption: platform-independent critical
bugfixes go direct to head + should be reported
to illumos
● Discuss changes on the freebsd-fs@ mailing list
○ zfs-devel@ for developers
Delphix Proprietary and Confidential
OpenZFS development process - Linux
Code Base: github
● independent code base (not in mainline kernel)
● divided into spl (solaris porting layer) and zfs
● atm. mainly linux-specific activity
● behind recent illumos code base
Submitting changes:
● github pull requests / issue tracker

OpenZFS at AsiaBSDcon FreeBSD Developer Summit

  • 1.
  • 2.
    Delphix Proprietary andConfidential Recent new features from Delphix ● embedded blocks (“zero block compression”) ● don’t evict when objset closed ○ speeds up e.g. “zfs get all” with lots of zvols ● increase ARC’s buf_hash_table ● metadata_redundancy=most ● fragmentation histogram & metric already integrated: ● zfs bookmarks ● readonly pool improvements (e.g. zfs send) ● hole birth time & other zfs send improvements
  • 3.
    Delphix Proprietary andConfidential Work in progress from Delphix ● Resumable zfs send ● fs-wide owner/group override (avoid chown -R) ● device removal (probably) ● channel programs (lua in the kernel!) ● platform-independent code repo ○ copy .c, .h files from illumos, preserving history ○ create Makefiles ○ userland ioctl shim ○ test suite running against libzpool
  • 4.
    Delphix Proprietary andConfidential Large block size support ● Today OpenZFS supports 512B - 128KB blocks ● Solaris 11 supports up to 1MB blocks Changes required: ● SPA_MAXBLOCKSIZE -> 1MB ● Change most uses to SPA_OLD_MAXBLOCKSIZE (128KB) ● Dataset keeps track of if it has ever had recordsize>128K ● if true, feature refcount is bumped ● Change dataset-specific uses to dmu_objset_maxblocksize() ● returns 128K or 1MB ● Send/Recv ● new flag; if not set then cap blocksize at 128K Note: not on-disk compatible w/Oracle ZFS large blocks
  • 5.
    Delphix Proprietary andConfidential The future of OpenZFS: development model ● Simplify getting changes into every platform ● Platform-independent codebase ○ all platforms pull from this verbatim, goal: no diffs ○ platform-independent changes pushed here first ● FreeBSD’s and Linux’s SPL will get less gross ● Illumos will get a (also non-gross) porting layer ● Only code that can be tested on any platform in userland ○ Test with ztest and TestRunner (formerly STF) tests ○ Will not include ZPL (posix layer) or vdev_disk
  • 6.
    Delphix Proprietary andConfidential OpenZFS Repo work ● Copy zfs *.[ch] files from illumos to new repo ○ preserve commit history ● Create Makefiles / automake setup ○ libzfs, libzpool, ztest, /sbin/zfs, etc. ○ build on illumos, FreeBSD, linux ● Create zfsd ○ Userland daemon which services “ioctls” from libzfs/libzfs_core ● Make test suite run against zfsd ○ Need to create ZPL-equivalent ○ Hopefully just “zfs dd ds=... obj=... off=...
  • 7.
    Delphix Proprietary andConfidential The future of OpenZFS: features ● persistent l2arc (Saso Kiselkov) ● performance on fragmented pools (George Wilson) ● observability -- zfs dtrace provider ● resumable zfs send/recv (Chris Siden) ● filesystem & snapshot count limits (Jerry Jelinek) ● device removal? ● revived MacOS port (Jorgen Lundman) ● Larger (1MB+) block support ● multi-modifier protection ● channel program for richer administration (Max Grossman) ● Raspberry pi support for ZFS on Linux (Richard Yao)
  • 8.
  • 9.
    Delphix Proprietary andConfidential Features unique to OpenZFS ● Feature Flags ● libzfs_core ● CLI Usability ○ size estimates for zfs send and zfs destroy ○ vdev information in zpool list ○ zfs send progress reporting ○ arbitrary snapshot arguments to zfs snapshot ● Dataset properties ○ refcompressratio ○ clones ○ written, written@snap ○ lused, lcompressed ● TestRunner test suite
  • 10.
    Delphix Proprietary andConfidential Performance improvements in OpenZFS ● async filesystem and volume destruction ● single-copy ARC cache ● space allocation (spacemap) performance improvements ● smoother write latency (write throttle rewrite) ● per-type i/o queues (read, ZIL, async write, scrub) ● lz4 compression ● compressed cache devices (L2ARC)
  • 11.
    Delphix Proprietary andConfidential OpenZFS development process - illumos How to develop changes: ● Large changes: review on developer@open-zfs.org ● Set up OpenIndiana-based dev environment ● Clone repo from github.com/illumos ● Make code changes ● Run a full build with nightly (runs lint) ● Test with ztest and TestRunner ○ consider if you need to add a new test case ● Check code style with cstyle tool
  • 12.
    Delphix Proprietary andConfidential OpenZFS development process - illumos (2) How to submit code: ● Get your code reviewed on zfs@lists.illumos.org ○ cc: developer@open-zfs.org for platform-neutral changes ○ non-trivial changes typically must be reviewed by a ZFS expert (e.g. Matt Ahrens or George Wilson) ○ preferred tool for creating reviews is webrev ● Submit a “Request to Integrate” (RTI) email to advocates@lists.illumos.org ● Advocate will integrate (push) your code to github ○ Chris Siden is the most active ZFS advocate
  • 13.
    Delphix Proprietary andConfidential OpenZFS development process - FreeBSD Code base: FreeBSD SVN tree Porting process: 1. pulling code changes from illumos to vendor branch ● vendor/illumos/dist 2. MFV to head ● kernel: head/sys/cddl/contrib/opensolaris ● userland: head/cddl/contrib/opensolaris 3. MFC to stable after a grace period Solaris porting layer: head(/sys)/cddl/compat/opensolaris
  • 14.
    Delphix Proprietary andConfidential OpenZFS development process - FreeBSD (2) Basic rules: ● keep vendor’s directory structure ● keep as close to vendor (illumos) as possible ● mark changed or different code Challenges: ● backward (and forward) compatibility ● FreeBSD-specific differences ○ boot loader, GEOM integration, FreeBSD jails, VM / VFS integration
  • 15.
    Delphix Proprietary andConfidential OpenZFS development process - FreeBSD (3) How to submit code: ● Platform-independent changes -> illumos ● FreeBSD-specific changes -> head branch ● Exemption: platform-independent critical bugfixes go direct to head + should be reported to illumos ● Discuss changes on the freebsd-fs@ mailing list ○ zfs-devel@ for developers
  • 16.
    Delphix Proprietary andConfidential OpenZFS development process - Linux Code Base: github ● independent code base (not in mainline kernel) ● divided into spl (solaris porting layer) and zfs ● atm. mainly linux-specific activity ● behind recent illumos code base Submitting changes: ● github pull requests / issue tracker