Top Banner
Matt Ahrens [email protected]
16

OpenZFS at AsiaBSDcon FreeBSD Developer Summit

May 11, 2015

Download

Software

Matthew Ahrens

Matt Ahrens presents OpenZFS at AsiaBSDcon FreeBSD Developer Summit
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 2: OpenZFS at AsiaBSDcon FreeBSD Developer Summit

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

Page 3: OpenZFS at AsiaBSDcon FreeBSD Developer Summit

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

Page 4: OpenZFS at AsiaBSDcon FreeBSD Developer Summit

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

Page 5: OpenZFS at AsiaBSDcon FreeBSD Developer Summit

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

Page 6: OpenZFS at AsiaBSDcon FreeBSD Developer Summit

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=...

Page 7: OpenZFS at AsiaBSDcon FreeBSD Developer Summit

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)

Page 9: OpenZFS at AsiaBSDcon FreeBSD Developer Summit

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

Page 10: OpenZFS at AsiaBSDcon FreeBSD Developer Summit

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)

Page 11: OpenZFS at AsiaBSDcon FreeBSD Developer Summit

Delphix Proprietary and Confidential

OpenZFS development process - illumos

How to develop changes:● Large changes: review on [email protected]● 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

Page 12: OpenZFS at AsiaBSDcon FreeBSD Developer Summit

Delphix Proprietary and Confidential

OpenZFS development process - illumos (2)

How to submit code:● Get your code reviewed on [email protected]

○ cc: [email protected] 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 [email protected]

● Advocate will integrate (push) your code to github○ Chris Siden is the most active ZFS advocate

Page 13: OpenZFS at AsiaBSDcon FreeBSD Developer Summit

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/dist2. MFV to head

● kernel: head/sys/cddl/contrib/opensolaris● userland: head/cddl/contrib/opensolaris

3. MFC to stable after a grace periodSolaris porting layer: head(/sys)/cddl/compat/opensolaris

Page 14: OpenZFS at AsiaBSDcon FreeBSD Developer Summit

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

Page 15: OpenZFS at AsiaBSDcon FreeBSD Developer Summit

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

Page 16: OpenZFS at AsiaBSDcon FreeBSD Developer Summit

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