https://openzfs.org/w/api.php?action=feedcontributions&user=Lundman&feedformat=atomOpenZFS - User contributions [en]2024-03-29T00:47:03ZUser contributionsMediaWiki 1.37.1https://openzfs.org/w/index.php?title=Feature_Flags&diff=2847Feature Flags2020-02-13T07:14:27Z<p>Lundman: osx has no project quota</p>
<hr />
<div>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. <br />
<br />
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. <br />
<br />
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: <br />
<br />
* format changes that are independent<br />
* format changes that depend on each other. <br />
<br />
== Compatibility ==<br />
<br />
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. <br />
<br />
Features that are exclusive when enabled should be periodically ported to all distributions.<br />
<br />
== Reference materials ==<br />
<br />
[http://web.archive.org/web/20160419064650/http://blog.delphix.com/csiden/files/2012/01/ZFS_Feature_Flags.pdf ''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 …".<br />
<br />
[http://illumos.org/man/5/zpool-features <tt>zpool-features</tt>](5) – illumos<br />
<br />
[https://www.freebsd.org/cgi/man.cgi?query=zpool-features&sektion=7&manpath=FreeBSD <tt>zpool-features</tt>](7) – FreeBSD<br />
<br />
== Feature flags implementation ==<br />
<br />
{| class="wikitable"<br />
! scope="col" rowspan="2" | Feature Flag<br />
! rowspan="2" | Read-Only<br />Compatible<br />
! scope="col" colspan="1" | DragonFlyBSD<br />
! scope="col" colspan="4" | FreeBSD<br />
! scope="col" colspan="1" | Illumos<br />
! scope="col" colspan="1" | Joyent<br />
! scope="col" colspan="1" | NetBSD<br />
! scope="col" colspan="3" | OmniOSCE<br />
! scope="col" colspan="1" | OpenZFS<br />
! scope="col" colspan="4" | OpenZFS on OSX<br />
! scope="col" colspan="3" | ZFS on Linux<br />
|-<br />
| zfsport<br />
| 11.2.0<br />
| 11.3.0<br />
| 12.0.0<br />
| head<br />
| master<br />
| master<br />
| main<br />
| r151028<br />
| r151030<br />
| master<br />
| master<br />
| 1.9.0<br />
| 1.9.1<br />
| 1.9.1-rc1<br />
| master<br />
| 0.7.13<br />
| 0.8.1<br />
| master<br />
|-<br />
! style="text-align:left" | bookmark_v2<br />
| style="background-color:yellow" | no<br />
| style="background-color:lightsalmon" | no<br />
| style="background-color:lightsalmon" | no<br />
| style="background-color:lightsalmon" | no<br />
| style="background-color:lightsalmon" | no<br />
| style="background-color:lightsalmon" | no<br />
| style="background-color:lightgreen" | yes<br />
| style="background-color:lightgreen" | yes<br />
| style="background-color:lightsalmon" | no<br />
| style="background-color:lightsalmon" | no<br />
| style="background-color:lightsalmon" | no<br />
| style="background-color:lightgreen" | yes<br />
| style="background-color:lightgreen" | yes<br />
| style="background-color:lightgreen" | yes<br />
| style="background-color:lightgreen" | yes<br />
| style="background-color:lightgreen" | yes<br />
| style="background-color:lightgreen" | yes<br />
| style="background-color:lightsalmon" | no<br />
| style="background-color:lightgreen" | yes<br />
| style="background-color:lightgreen" | yes<br />
|-<br />
! style="text-align:left" | encryption<br />
| style="background-color:yellow" | no<br />
| style="background-color:lightsalmon" | no<br />
| style="background-color:lightsalmon" | no<br />
| style="background-color:lightsalmon" | no<br />
| style="background-color:lightsalmon" | no<br />
| style="background-color:lightsalmon" | no<br />
| style="background-color:lightgreen" | yes<br />
| style="background-color:lightgreen" | yes<br />
| style="background-color:lightsalmon" | no<br />
| style="background-color:lightsalmon" | no<br />
| style="background-color:lightsalmon" | no<br />
| style="background-color:lightgreen" | yes<br />
| style="background-color:lightgreen" | yes<br />
| style="background-color:lightgreen" | yes<br />
| style="background-color:lightgreen" | yes<br />
| style="background-color:lightgreen" | yes<br />
| style="background-color:lightgreen" | yes<br />
| style="background-color:lightsalmon" | no<br />
| style="background-color:lightgreen" | yes<br />
| style="background-color:lightgreen" | yes<br />
|-<br />
! style="text-align:left" | resilver_defer<br />
| style="background-color:lightgreen" | yes<br />
| style="background-color:lightsalmon" | no<br />
| style="background-color:lightsalmon" | no<br />
| style="background-color:lightsalmon" | no<br />
| style="background-color:lightsalmon" | no<br />
| style="background-color:lightsalmon" | no<br />
| style="background-color:lightgreen" | yes<br />
| style="background-color:lightgreen" | yes<br />
| style="background-color:lightsalmon" | no<br />
| style="background-color:lightsalmon" | no<br />
| style="background-color:lightsalmon" | no<br />
| style="background-color:lightgreen" | yes<br />
| style="background-color:lightgreen" | yes<br />
| style="background-color:lightgreen" | yes<br />
| style="background-color:lightgreen" | yes<br />
| style="background-color:lightgreen" | yes<br />
| style="background-color:lightgreen" | yes<br />
| style="background-color:lightsalmon" | no<br />
| style="background-color:lightgreen" | yes<br />
| style="background-color:lightgreen" | yes<br />
|-<br />
! style="text-align:left" | async_destroy<br />
| style="background-color:lightgreen" | yes<br />
| style="background-color:lightgreen" | yes<br />
| style="background-color:lightgreen" | yes<br />
| style="background-color:lightgreen" | yes<br />
| style="background-color:lightgreen" | yes<br />
| style="background-color:lightgreen" | yes<br />
| style="background-color:lightgreen" | yes<br />
| style="background-color:lightgreen" | yes<br />
| style="background-color:lightgreen" | yes<br />
| style="background-color:lightgreen" | yes<br />
| style="background-color:lightgreen" | yes<br />
| style="background-color:lightgreen" | yes<br />
| style="background-color:lightgreen" | yes<br />
| style="background-color:lightgreen" | yes<br />
| style="background-color:lightgreen" | yes<br />
| style="background-color:lightgreen" | yes<br />
| style="background-color:lightgreen" | yes<br />
| style="background-color:lightgreen" | yes<br />
| style="background-color:lightgreen" | yes<br />
| style="background-color:lightgreen" | yes<br />
|-<br />
! style="text-align:left" | bookmark_written<br />
| style="background-color:yellow" | no<br />
| style="background-color:lightsalmon" | no<br />
| style="background-color:lightsalmon" | no<br />
| style="background-color:lightsalmon" | no<br />
| style="background-color:lightsalmon" | no<br />
| style="background-color:lightsalmon" | no<br />
| style="background-color:lightsalmon" | no<br />
| style="background-color:lightsalmon" | no<br />
| style="background-color:lightsalmon" | no<br />
| style="background-color:lightsalmon" | no<br />
| style="background-color:lightsalmon" | no<br />
| style="background-color:lightsalmon" | no<br />
| style="background-color:lightsalmon" | no<br />
| style="background-color:lightsalmon" | no<br />
| style="background-color:lightsalmon" | no<br />
| style="background-color:lightsalmon" | no<br />
| style="background-color:lightsalmon" | no<br />
| style="background-color:lightsalmon" | no<br />
| style="background-color:lightsalmon" | no<br />
| style="background-color:lightgreen" | yes<br />
|-<br />
! style="text-align:left" | bookmarks<br />
| style="background-color:lightgreen" | yes<br />
| style="background-color:lightgreen" | yes<br />
| style="background-color:lightgreen" | yes<br />
| style="background-color:lightgreen" | yes<br />
| style="background-color:lightgreen" | yes<br />
| style="background-color:lightgreen" | yes<br />
| style="background-color:lightgreen" | yes<br />
| style="background-color:lightgreen" | yes<br />
| style="background-color:lightgreen" | yes<br />
| style="background-color:lightgreen" | yes<br />
| style="background-color:lightgreen" | yes<br />
| style="background-color:lightgreen" | yes<br />
| style="background-color:lightgreen" | yes<br />
| style="background-color:lightgreen" | yes<br />
| style="background-color:lightgreen" | yes<br />
| style="background-color:lightgreen" | yes<br />
| style="background-color:lightgreen" | yes<br />
| style="background-color:lightgreen" | yes<br />
| style="background-color:lightgreen" | yes<br />
| style="background-color:lightgreen" | yes<br />
|-<br />
! style="text-align:left" | device_removal<br />
| style="background-color:yellow" | no<br />
| style="background-color:lightsalmon" | no<br />
| style="background-color:lightgreen" | yes<br />
| style="background-color:lightgreen" | yes<br />
| style="background-color:lightgreen" | yes<br />
| style="background-color:lightgreen" | yes<br />
| style="background-color:lightgreen" | yes<br />
| style="background-color:lightgreen" | yes<br />
| style="background-color:lightsalmon" | no<br />
| style="background-color:lightgreen" | yes<br />
| style="background-color:lightgreen" | yes<br />
| style="background-color:lightgreen" | yes<br />
| style="background-color:lightgreen" | yes<br />
| style="background-color:lightgreen" | yes<br />
| style="background-color:lightgreen" | yes<br />
| style="background-color:lightgreen" | yes<br />
| style="background-color:lightgreen" | yes<br />
| style="background-color:lightsalmon" | no<br />
| style="background-color:lightgreen" | yes<br />
| style="background-color:lightgreen" | yes<br />
|-<br />
! style="text-align:left" | embedded_data<br />
| style="background-color:yellow" | no<br />
| style="background-color:lightgreen" | yes<br />
| style="background-color:lightgreen" | yes<br />
| style="background-color:lightgreen" | yes<br />
| style="background-color:lightgreen" | yes<br />
| style="background-color:lightgreen" | yes<br />
| style="background-color:lightgreen" | yes<br />
| style="background-color:lightgreen" | yes<br />
| style="background-color:lightgreen" | yes<br />
| style="background-color:lightgreen" | yes<br />
| style="background-color:lightgreen" | yes<br />
| style="background-color:lightgreen" | yes<br />
| style="background-color:lightgreen" | yes<br />
| style="background-color:lightgreen" | yes<br />
| style="background-color:lightgreen" | yes<br />
| style="background-color:lightgreen" | yes<br />
| style="background-color:lightgreen" | yes<br />
| style="background-color:lightgreen" | yes<br />
| style="background-color:lightgreen" | yes<br />
| style="background-color:lightgreen" | yes<br />
|-<br />
! style="text-align:left" | empty_bpobj<br />
| style="background-color:lightgreen" | yes<br />
| style="background-color:lightgreen" | yes<br />
| style="background-color:lightgreen" | yes<br />
| style="background-color:lightgreen" | yes<br />
| style="background-color:lightgreen" | yes<br />
| style="background-color:lightgreen" | yes<br />
| style="background-color:lightgreen" | yes<br />
| style="background-color:lightgreen" | yes<br />
| style="background-color:lightgreen" | yes<br />
| style="background-color:lightgreen" | yes<br />
| style="background-color:lightgreen" | yes<br />
| style="background-color:lightgreen" | yes<br />
| style="background-color:lightgreen" | yes<br />
| style="background-color:lightgreen" | yes<br />
| style="background-color:lightgreen" | yes<br />
| style="background-color:lightgreen" | yes<br />
| style="background-color:lightgreen" | yes<br />
| style="background-color:lightgreen" | yes<br />
| style="background-color:lightgreen" | yes<br />
| style="background-color:lightgreen" | yes<br />
|-<br />
! style="text-align:left" | enabled_txg<br />
| style="background-color:lightgreen" | yes<br />
| style="background-color:lightgreen" | yes<br />
| style="background-color:lightgreen" | yes<br />
| style="background-color:lightgreen" | yes<br />
| style="background-color:lightgreen" | yes<br />
| style="background-color:lightgreen" | yes<br />
| style="background-color:lightgreen" | yes<br />
| style="background-color:lightgreen" | yes<br />
| style="background-color:lightgreen" | yes<br />
| style="background-color:lightgreen" | yes<br />
| style="background-color:lightgreen" | yes<br />
| style="background-color:lightgreen" | yes<br />
| style="background-color:lightgreen" | yes<br />
| style="background-color:lightgreen" | yes<br />
| style="background-color:lightgreen" | yes<br />
| style="background-color:lightgreen" | yes<br />
| style="background-color:lightgreen" | yes<br />
| style="background-color:lightgreen" | yes<br />
| style="background-color:lightgreen" | yes<br />
| style="background-color:lightgreen" | yes<br />
|-<br />
! style="text-align:left" | extensible_dataset<br />
| style="background-color:yellow" | no<br />
| style="background-color:lightgreen" | yes<br />
| style="background-color:lightgreen" | yes<br />
| style="background-color:lightgreen" | yes<br />
| style="background-color:lightgreen" | yes<br />
| style="background-color:lightgreen" | yes<br />
| style="background-color:lightgreen" | yes<br />
| style="background-color:lightgreen" | yes<br />
| style="background-color:lightgreen" | yes<br />
| style="background-color:lightgreen" | yes<br />
| style="background-color:lightgreen" | yes<br />
| style="background-color:lightgreen" | yes<br />
| style="background-color:lightgreen" | yes<br />
| style="background-color:lightgreen" | yes<br />
| style="background-color:lightgreen" | yes<br />
| style="background-color:lightgreen" | yes<br />
| style="background-color:lightgreen" | yes<br />
| style="background-color:lightgreen" | yes<br />
| style="background-color:lightgreen" | yes<br />
| style="background-color:lightgreen" | yes<br />
|-<br />
! style="text-align:left" | hole_birth<br />
| style="background-color:yellow" | no<br />
| style="background-color:lightgreen" | yes<br />
| style="background-color:lightgreen" | yes<br />
| style="background-color:lightgreen" | yes<br />
| style="background-color:lightgreen" | yes<br />
| style="background-color:lightgreen" | yes<br />
| style="background-color:lightgreen" | yes<br />
| style="background-color:lightgreen" | yes<br />
| style="background-color:lightgreen" | yes<br />
| style="background-color:lightgreen" | yes<br />
| style="background-color:lightgreen" | yes<br />
| style="background-color:lightgreen" | yes<br />
| style="background-color:lightgreen" | yes<br />
| style="background-color:lightgreen" | yes<br />
| style="background-color:lightgreen" | yes<br />
| style="background-color:lightgreen" | yes<br />
| style="background-color:lightgreen" | yes<br />
| style="background-color:lightgreen" | yes<br />
| style="background-color:lightgreen" | yes<br />
| style="background-color:lightgreen" | yes<br />
|-<br />
! style="text-align:left" | livelist<br />
| style="background-color:lightgreen" | yes<br />
| style="background-color:lightsalmon" | no<br />
| style="background-color:lightsalmon" | no<br />
| style="background-color:lightsalmon" | no<br />
| style="background-color:lightsalmon" | no<br />
| style="background-color:lightsalmon" | no<br />
| style="background-color:lightsalmon" | no<br />
| style="background-color:lightsalmon" | no<br />
| style="background-color:lightsalmon" | no<br />
| style="background-color:lightsalmon" | no<br />
| style="background-color:lightsalmon" | no<br />
| style="background-color:lightsalmon" | no<br />
| style="background-color:lightsalmon" | no<br />
| style="background-color:lightsalmon" | no<br />
| style="background-color:lightsalmon" | no<br />
| style="background-color:lightsalmon" | no<br />
| style="background-color:lightsalmon" | no<br />
| style="background-color:lightsalmon" | no<br />
| style="background-color:lightsalmon" | no<br />
| style="background-color:lightgreen" | yes<br />
|-<br />
! style="text-align:left" | log_spacemap<br />
| style="background-color:lightgreen" | yes<br />
| style="background-color:lightsalmon" | no<br />
| style="background-color:lightsalmon" | no<br />
| style="background-color:lightsalmon" | no<br />
| style="background-color:lightsalmon" | no<br />
| style="background-color:lightsalmon" | no<br />
| style="background-color:lightsalmon" | no<br />
| style="background-color:lightsalmon" | no<br />
| style="background-color:lightsalmon" | no<br />
| style="background-color:lightsalmon" | no<br />
| style="background-color:lightsalmon" | no<br />
| style="background-color:lightsalmon" | no<br />
| style="background-color:lightsalmon" | no<br />
| style="background-color:lightsalmon" | no<br />
| style="background-color:lightsalmon" | no<br />
| style="background-color:lightsalmon" | no<br />
| style="background-color:lightsalmon" | no<br />
| style="background-color:lightsalmon" | no<br />
| style="background-color:lightsalmon" | no<br />
| style="background-color:lightgreen" | yes<br />
|-<br />
! style="text-align:left" | obsolete_counts<br />
| style="background-color:lightgreen" | yes<br />
| style="background-color:lightsalmon" | no<br />
| style="background-color:lightgreen" | yes<br />
| style="background-color:lightgreen" | yes<br />
| style="background-color:lightgreen" | yes<br />
| style="background-color:lightgreen" | yes<br />
| style="background-color:lightgreen" | yes<br />
| style="background-color:lightgreen" | yes<br />
| style="background-color:lightsalmon" | no<br />
| style="background-color:lightgreen" | yes<br />
| style="background-color:lightgreen" | yes<br />
| style="background-color:lightgreen" | yes<br />
| style="background-color:lightgreen" | yes<br />
| style="background-color:lightgreen" | yes<br />
| style="background-color:lightgreen" | yes<br />
| style="background-color:lightgreen" | yes<br />
| style="background-color:lightgreen" | yes<br />
| style="background-color:lightsalmon" | no<br />
| style="background-color:lightgreen" | yes<br />
| style="background-color:lightgreen" | yes<br />
|-<br />
! style="text-align:left" | redacted_datasets<br />
| style="background-color:yellow" | no<br />
| style="background-color:lightsalmon" | no<br />
| style="background-color:lightsalmon" | no<br />
| style="background-color:lightsalmon" | no<br />
| style="background-color:lightsalmon" | no<br />
| style="background-color:lightsalmon" | no<br />
| style="background-color:lightsalmon" | no<br />
| style="background-color:lightsalmon" | no<br />
| style="background-color:lightsalmon" | no<br />
| style="background-color:lightsalmon" | no<br />
| style="background-color:lightsalmon" | no<br />
| style="background-color:lightsalmon" | no<br />
| style="background-color:lightsalmon" | no<br />
| style="background-color:lightsalmon" | no<br />
| style="background-color:lightsalmon" | no<br />
| style="background-color:lightsalmon" | no<br />
| style="background-color:lightsalmon" | no<br />
| style="background-color:lightsalmon" | no<br />
| style="background-color:lightsalmon" | no<br />
| style="background-color:lightgreen" | yes<br />
|-<br />
! style="text-align:left" | redaction_bookmarks<br />
| style="background-color:yellow" | no<br />
| style="background-color:lightsalmon" | no<br />
| style="background-color:lightsalmon" | no<br />
| style="background-color:lightsalmon" | no<br />
| style="background-color:lightsalmon" | no<br />
| style="background-color:lightsalmon" | no<br />
| style="background-color:lightsalmon" | no<br />
| style="background-color:lightsalmon" | no<br />
| style="background-color:lightsalmon" | no<br />
| style="background-color:lightsalmon" | no<br />
| style="background-color:lightsalmon" | no<br />
| style="background-color:lightsalmon" | no<br />
| style="background-color:lightsalmon" | no<br />
| style="background-color:lightsalmon" | no<br />
| style="background-color:lightsalmon" | no<br />
| style="background-color:lightsalmon" | no<br />
| style="background-color:lightsalmon" | no<br />
| style="background-color:lightsalmon" | no<br />
| style="background-color:lightsalmon" | no<br />
| style="background-color:lightgreen" | yes<br />
|-<br />
! style="text-align:left" | spacemap_histogram<br />
| style="background-color:lightgreen" | yes<br />
| style="background-color:lightgreen" | yes<br />
| style="background-color:lightgreen" | yes<br />
| style="background-color:lightgreen" | yes<br />
| style="background-color:lightgreen" | yes<br />
| style="background-color:lightgreen" | yes<br />
| style="background-color:lightgreen" | yes<br />
| style="background-color:lightgreen" | yes<br />
| style="background-color:lightgreen" | yes<br />
| style="background-color:lightgreen" | yes<br />
| style="background-color:lightgreen" | yes<br />
| style="background-color:lightgreen" | yes<br />
| style="background-color:lightgreen" | yes<br />
| style="background-color:lightgreen" | yes<br />
| style="background-color:lightgreen" | yes<br />
| style="background-color:lightgreen" | yes<br />
| style="background-color:lightgreen" | yes<br />
| style="background-color:lightgreen" | yes<br />
| style="background-color:lightgreen" | yes<br />
| style="background-color:lightgreen" | yes<br />
|-<br />
! style="text-align:left" | spacemap_v2<br />
| style="background-color:lightgreen" | yes<br />
| style="background-color:lightsalmon" | no<br />
| style="background-color:lightsalmon" | no<br />
| style="background-color:lightgreen" | yes<br />
| style="background-color:lightgreen" | yes<br />
| style="background-color:lightgreen" | yes<br />
| style="background-color:lightgreen" | yes<br />
| style="background-color:lightgreen" | yes<br />
| style="background-color:lightsalmon" | no<br />
| style="background-color:lightgreen" | yes<br />
| style="background-color:lightgreen" | yes<br />
| style="background-color:lightgreen" | yes<br />
| style="background-color:lightgreen" | yes<br />
| style="background-color:lightgreen" | yes<br />
| style="background-color:lightgreen" | yes<br />
| style="background-color:lightgreen" | yes<br />
| style="background-color:lightgreen" | yes<br />
| style="background-color:lightsalmon" | no<br />
| style="background-color:lightgreen" | yes<br />
| style="background-color:lightgreen" | yes<br />
|-<br />
! style="text-align:left" | zpool_checkpoint<br />
| style="background-color:lightgreen" | yes<br />
| style="background-color:lightsalmon" | no<br />
| style="background-color:lightgreen" | yes<br />
| style="background-color:lightgreen" | yes<br />
| style="background-color:lightgreen" | yes<br />
| style="background-color:lightgreen" | yes<br />
| style="background-color:lightgreen" | yes<br />
| style="background-color:lightgreen" | yes<br />
| style="background-color:lightsalmon" | no<br />
| style="background-color:lightgreen" | yes<br />
| style="background-color:lightgreen" | yes<br />
| style="background-color:lightgreen" | yes<br />
| style="background-color:lightgreen" | yes<br />
| style="background-color:lightgreen" | yes<br />
| style="background-color:lightgreen" | yes<br />
| style="background-color:lightgreen" | yes<br />
| style="background-color:lightgreen" | yes<br />
| style="background-color:lightsalmon" | no<br />
| style="background-color:lightgreen" | yes<br />
| style="background-color:lightgreen" | yes<br />
|-<br />
! style="text-align:left" | filesystem_limits<br />
| style="background-color:lightgreen" | yes<br />
| style="background-color:lightgreen" | yes<br />
| style="background-color:lightgreen" | yes<br />
| style="background-color:lightgreen" | yes<br />
| style="background-color:lightgreen" | yes<br />
| style="background-color:lightgreen" | yes<br />
| style="background-color:lightgreen" | yes<br />
| style="background-color:lightgreen" | yes<br />
| style="background-color:lightgreen" | yes<br />
| style="background-color:lightgreen" | yes<br />
| style="background-color:lightgreen" | yes<br />
| style="background-color:lightgreen" | yes<br />
| style="background-color:lightgreen" | yes<br />
| style="background-color:lightgreen" | yes<br />
| style="background-color:lightgreen" | yes<br />
| style="background-color:lightgreen" | yes<br />
| style="background-color:lightgreen" | yes<br />
| style="background-color:lightgreen" | yes<br />
| style="background-color:lightgreen" | yes<br />
| style="background-color:lightgreen" | yes<br />
|-<br />
! style="text-align:left" | multi_vdev_crash_dump<br />
| style="background-color:yellow" | no<br />
| style="background-color:lightgreen" | yes<br />
| style="background-color:lightgreen" | yes<br />
| style="background-color:lightgreen" | yes<br />
| style="background-color:lightgreen" | yes<br />
| style="background-color:lightgreen" | yes<br />
| style="background-color:lightgreen" | yes<br />
| style="background-color:lightgreen" | yes<br />
| style="background-color:lightgreen" | yes<br />
| style="background-color:lightgreen" | yes<br />
| style="background-color:lightgreen" | yes<br />
| style="background-color:lightgreen" | yes<br />
| style="background-color:lightgreen" | yes<br />
| style="background-color:lightgreen" | yes<br />
| style="background-color:lightgreen" | yes<br />
| style="background-color:lightgreen" | yes<br />
| style="background-color:lightgreen" | yes<br />
| style="background-color:lightgreen" | yes<br />
| style="background-color:lightgreen" | yes<br />
| style="background-color:lightgreen" | yes<br />
|-<br />
! style="text-align:left" | edonr<br />
| style="background-color:yellow" | no<br />
| style="background-color:lightsalmon" | no<br />
| style="background-color:lightsalmon" | no<br />
| style="background-color:lightsalmon" | no<br />
| style="background-color:lightsalmon" | no<br />
| style="background-color:lightsalmon" | no<br />
| style="background-color:lightgreen" | yes<br />
| style="background-color:lightgreen" | yes<br />
| style="background-color:lightsalmon" | no<br />
| style="background-color:lightgreen" | yes<br />
| style="background-color:lightgreen" | yes<br />
| style="background-color:lightgreen" | yes<br />
| style="background-color:lightgreen" | yes<br />
| style="background-color:lightgreen" | yes<br />
| style="background-color:lightgreen" | yes<br />
| style="background-color:lightgreen" | yes<br />
| style="background-color:lightgreen" | yes<br />
| style="background-color:lightgreen" | yes<br />
| style="background-color:lightgreen" | yes<br />
| style="background-color:lightgreen" | yes<br />
|-<br />
! style="text-align:left" | lz4_compress<br />
| style="background-color:yellow" | no<br />
| style="background-color:lightgreen" | yes<br />
| style="background-color:lightgreen" | yes<br />
| style="background-color:lightgreen" | yes<br />
| style="background-color:lightgreen" | yes<br />
| style="background-color:lightgreen" | yes<br />
| style="background-color:lightgreen" | yes<br />
| style="background-color:lightgreen" | yes<br />
| style="background-color:lightgreen" | yes<br />
| style="background-color:lightgreen" | yes<br />
| style="background-color:lightgreen" | yes<br />
| style="background-color:lightgreen" | yes<br />
| style="background-color:lightgreen" | yes<br />
| style="background-color:lightgreen" | yes<br />
| style="background-color:lightgreen" | yes<br />
| style="background-color:lightgreen" | yes<br />
| style="background-color:lightgreen" | yes<br />
| style="background-color:lightgreen" | yes<br />
| style="background-color:lightgreen" | yes<br />
| style="background-color:lightgreen" | yes<br />
|-<br />
! style="text-align:left" | sha512<br />
| style="background-color:yellow" | no<br />
| style="background-color:lightsalmon" | no<br />
| style="background-color:lightgreen" | yes<br />
| style="background-color:lightgreen" | yes<br />
| style="background-color:lightgreen" | yes<br />
| style="background-color:lightgreen" | yes<br />
| style="background-color:lightgreen" | yes<br />
| style="background-color:lightgreen" | yes<br />
| style="background-color:lightgreen" | yes<br />
| style="background-color:lightgreen" | yes<br />
| style="background-color:lightgreen" | yes<br />
| style="background-color:lightgreen" | yes<br />
| style="background-color:lightgreen" | yes<br />
| style="background-color:lightgreen" | yes<br />
| style="background-color:lightgreen" | yes<br />
| style="background-color:lightgreen" | yes<br />
| style="background-color:lightgreen" | yes<br />
| style="background-color:lightgreen" | yes<br />
| style="background-color:lightgreen" | yes<br />
| style="background-color:lightgreen" | yes<br />
|-<br />
! style="text-align:left" | skein<br />
| style="background-color:yellow" | no<br />
| style="background-color:lightsalmon" | no<br />
| style="background-color:lightgreen" | yes<br />
| style="background-color:lightgreen" | yes<br />
| style="background-color:lightgreen" | yes<br />
| style="background-color:lightgreen" | yes<br />
| style="background-color:lightgreen" | yes<br />
| style="background-color:lightgreen" | yes<br />
| style="background-color:lightgreen" | yes<br />
| style="background-color:lightgreen" | yes<br />
| style="background-color:lightgreen" | yes<br />
| style="background-color:lightgreen" | yes<br />
| style="background-color:lightgreen" | yes<br />
| style="background-color:lightgreen" | yes<br />
| style="background-color:lightgreen" | yes<br />
| style="background-color:lightgreen" | yes<br />
| style="background-color:lightgreen" | yes<br />
| style="background-color:lightgreen" | yes<br />
| style="background-color:lightgreen" | yes<br />
| style="background-color:lightgreen" | yes<br />
|-<br />
! style="text-align:left" | large_blocks<br />
| style="background-color:yellow" | no<br />
| style="background-color:lightsalmon" | no<br />
| style="background-color:lightgreen" | yes<br />
| style="background-color:lightgreen" | yes<br />
| style="background-color:lightgreen" | yes<br />
| style="background-color:lightgreen" | yes<br />
| style="background-color:lightgreen" | yes<br />
| style="background-color:lightgreen" | yes<br />
| style="background-color:lightgreen" | yes<br />
| style="background-color:lightgreen" | yes<br />
| style="background-color:lightgreen" | yes<br />
| style="background-color:lightgreen" | yes<br />
| style="background-color:lightgreen" | yes<br />
| style="background-color:lightgreen" | yes<br />
| style="background-color:lightgreen" | yes<br />
| style="background-color:lightgreen" | yes<br />
| style="background-color:lightgreen" | yes<br />
| style="background-color:lightgreen" | yes<br />
| style="background-color:lightgreen" | yes<br />
| style="background-color:lightgreen" | yes<br />
|-<br />
! style="text-align:left" | allocation_classes<br />
| style="background-color:lightgreen" | yes<br />
| style="background-color:lightsalmon" | no<br />
| style="background-color:lightsalmon" | no<br />
| style="background-color:lightsalmon" | no<br />
| style="background-color:lightsalmon" | no<br />
| style="background-color:lightsalmon" | no<br />
| style="background-color:lightgreen" | yes <br />
| style="background-color:lightgreen" | yes <br />
| style="background-color:lightsalmon" | no<br />
| style="background-color:lightsalmon" | no<br />
| style="background-color:lightsalmon" | no<br />
| style="background-color:lightgreen" | yes<br />
| style="background-color:lightgreen" | yes <br />
| style="background-color:lightgreen" | yes<br />
| style="background-color:lightgreen" | yes<br />
| style="background-color:lightgreen" | yes<br />
| style="background-color:lightgreen" | yes<br />
| style="background-color:lightsalmon" | no<br />
| style="background-color:lightgreen" | yes<br />
| style="background-color:lightgreen" | yes<br />
|-<br />
! style="text-align:left" | large_dnode<br />
| style="background-color:yellow" | no<br />
| style="background-color:lightsalmon" | no<br />
| style="background-color:lightsalmon" | no<br />
| style="background-color:lightsalmon" | no<br />
| style="background-color:lightsalmon" | no<br />
| style="background-color:lightsalmon" | no<br />
| style="background-color:lightgreen" | yes<br />
| style="background-color:lightgreen" | yes<br />
| style="background-color:lightsalmon" | no<br />
| style="background-color:lightsalmon" | no<br />
| style="background-color:lightgreen" | yes<br />
| style="background-color:lightgreen" | yes<br />
| style="background-color:lightgreen" | yes<br />
| style="background-color:lightgreen" | yes<br />
| style="background-color:lightgreen" | yes<br />
| style="background-color:lightgreen" | yes<br />
| style="background-color:lightgreen" | yes<br />
| style="background-color:lightgreen" | yes<br />
| style="background-color:lightgreen" | yes<br />
| style="background-color:lightgreen" | yes<br />
|-<br />
! style="text-align:left" | project_quota<br />
| style="background-color:lightgreen" | yes<br />
| style="background-color:lightsalmon" | no<br />
| style="background-color:lightsalmon" | no<br />
| style="background-color:lightsalmon" | no<br />
| style="background-color:lightsalmon" | no<br />
| style="background-color:lightsalmon" | no<br />
| style="background-color:lightsalmon" | no<br />
| style="background-color:lightsalmon" | no<br />
| style="background-color:lightsalmon" | no<br />
| style="background-color:lightsalmon" | no<br />
| style="background-color:lightsalmon" | no<br />
| style="background-color:lightsalmon" | no<br />
| style="background-color:lightsalmon" | no<br />
| style="background-color:lightsalmon" | no<br />
| style="background-color:lightsalmon" | no<br />
| style="background-color:lightsalmon" | no<br />
| style="background-color:lightgreen" | yes<br />
| style="background-color:lightsalmon" | no<br />
| style="background-color:lightgreen" | yes<br />
| style="background-color:lightgreen" | yes<br />
|-<br />
! style="text-align:left" | userobj_accounting<br />
| style="background-color:lightgreen" | yes<br />
| style="background-color:lightsalmon" | no<br />
| style="background-color:lightsalmon" | no<br />
| style="background-color:lightsalmon" | no<br />
| style="background-color:lightsalmon" | no<br />
| style="background-color:lightsalmon" | no<br />
| style="background-color:lightsalmon" | no<br />
| style="background-color:lightsalmon" | no<br />
| style="background-color:lightsalmon" | no<br />
| style="background-color:lightsalmon" | no<br />
| style="background-color:lightsalmon" | no<br />
| style="background-color:lightsalmon" | no<br />
| style="background-color:lightsalmon" | no<br />
| style="background-color:lightsalmon" | no<br />
| style="background-color:lightsalmon" | no<br />
| style="background-color:lightsalmon" | no<br />
| style="background-color:lightgreen" | yes<br />
| style="background-color:lightgreen" | yes<br />
| style="background-color:lightgreen" | yes<br />
| style="background-color:lightgreen" | yes<br />
|}<br />
<br />
'''Table legend'''<br />
* no = not implemented<br />
* yes = implemented<br />
<br />
Source: [https://zgrep.org/zfs.html] as of 20190726</div>Lundmanhttps://openzfs.org/w/index.php?title=Feature_Flags&diff=2622Feature Flags2019-03-19T05:41:14Z<p>Lundman: /* Feature flags implementation */</p>
<hr />
<div>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. <br />
<br />
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. <br />
<br />
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: <br />
<br />
* format changes that are independent<br />
* format changes that depend on each other. <br />
<br />
== Compatibility ==<br />
<br />
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. <br />
<br />
Features that are exclusive when enabled should be periodically ported to all distributions.<br />
<br />
== Reference materials ==<br />
<br />
[http://web.archive.org/web/20160419064650/http://blog.delphix.com/csiden/files/2012/01/ZFS_Feature_Flags.pdf ''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 …".<br />
<br />
[http://illumos.org/man/5/zpool-features <tt>zpool-features</tt>](5) – illumos<br />
<br />
[https://www.freebsd.org/cgi/man.cgi?query=zpool-features&sektion=7&manpath=FreeBSD <tt>zpool-features</tt>](7) – FreeBSD<br />
<br />
== Feature flags implementation ==<br />
<br />
<br />
{| class="wikitable"<br />
!rowspan=2|Feature Flag<br />
!rowspan=2|Read-Only<br />Compatible<br />
!colspan=1|DragonFlyBSD<br />
!colspan=3|FreeBSD<br />
!colspan=1|Joyent<br />
!colspan=1|NetBSD<br />
!colspan=3|OmniOSCE<br />
!colspan=1|OpenZFS<br />
!colspan=3|OpenZFS on OSX<br />
!colspan=3|ZFS on Linux<br />
|-<br />
| zfsport<br />
| 11.2.0<br />
| 12.0.0<br />
| head<br />
| master<br />
| main<br />
| r151026<br />
| r151028<br />
| master<br />
| master<br />
| 1.8.0<br />
| 1.8.1<br />
| master<br />
| 0.6.5.11<br />
| 0.7.12<br />
| master<br />
|-<br />
!style="text-align:left"|encryption<br />
|style="background-color:yellow"|no<br />
|style="background-color:lightsalmon"|no<br />
|style="background-color:lightsalmon"|no<br />
|style="background-color:lightsalmon"|no<br />
|style="background-color:lightsalmon"|no<br />
|style="background-color:lightsalmon"|no<br />
|style="background-color:lightsalmon"|no<br />
|style="background-color:lightsalmon"|no<br />
|style="background-color:lightsalmon"|no<br />
|style="background-color:lightsalmon"|no<br />
|style="background-color:lightsalmon"|no<br />
|style="background-color:lightgreen"|yes<br />
|style="background-color:lightgreen"|yes<br />
|style="background-color:lightgreen"|yes<br />
|style="background-color:lightsalmon"|no<br />
|style="background-color:lightsalmon"|no<br />
|style="background-color:lightgreen"|yes<br />
|-<br />
!style="text-align:left"|resilver_defer<br />
|style="background-color:lightgreen"|yes<br />
|style="background-color:lightsalmon"|no<br />
|style="background-color:lightsalmon"|no<br />
|style="background-color:lightsalmon"|no<br />
|style="background-color:lightsalmon"|no<br />
|style="background-color:lightsalmon"|no<br />
|style="background-color:lightsalmon"|no<br />
|style="background-color:lightsalmon"|no<br />
|style="background-color:lightsalmon"|no<br />
|style="background-color:lightsalmon"|no<br />
|style="background-color:lightsalmon"|no<br />
|style="background-color:lightsalmon"|no<br />
|style="background-color:lightsalmon"|no<br />
|style="background-color:lightsalmon"|no<br />
|style="background-color:lightsalmon"|no<br />
|style="background-color:lightsalmon"|no<br />
|style="background-color:lightgreen"|yes<br />
|-<br />
!style="text-align:left"|async_destroy<br />
|style="background-color:lightgreen"|yes<br />
|style="background-color:lightgreen"|yes<br />
|style="background-color:lightgreen"|yes<br />
|style="background-color:lightgreen"|yes<br />
|style="background-color:lightgreen"|yes<br />
|style="background-color:lightgreen"|yes<br />
|style="background-color:lightgreen"|yes<br />
|style="background-color:lightgreen"|yes<br />
|style="background-color:lightgreen"|yes<br />
|style="background-color:lightgreen"|yes<br />
|style="background-color:lightgreen"|yes<br />
|style="background-color:lightgreen"|yes<br />
|style="background-color:lightgreen"|yes<br />
|style="background-color:lightgreen"|yes<br />
|style="background-color:lightgreen"|yes<br />
|style="background-color:lightgreen"|yes<br />
|style="background-color:lightgreen"|yes<br />
|-<br />
!style="text-align:left"|bookmarks<br />
|style="background-color:lightgreen"|yes<br />
|style="background-color:lightgreen"|yes<br />
|style="background-color:lightgreen"|yes<br />
|style="background-color:lightgreen"|yes<br />
|style="background-color:lightgreen"|yes<br />
|style="background-color:lightgreen"|yes<br />
|style="background-color:lightgreen"|yes<br />
|style="background-color:lightgreen"|yes<br />
|style="background-color:lightgreen"|yes<br />
|style="background-color:lightgreen"|yes<br />
|style="background-color:lightgreen"|yes<br />
|style="background-color:lightgreen"|yes<br />
|style="background-color:lightgreen"|yes<br />
|style="background-color:lightgreen"|yes<br />
|style="background-color:lightgreen"|yes<br />
|style="background-color:lightgreen"|yes<br />
|style="background-color:lightgreen"|yes<br />
|-<br />
!style="text-align:left"|device_removal<br />
|style="background-color:yellow"|no<br />
|style="background-color:lightsalmon"|no<br />
|style="background-color:lightgreen"|yes<br />
|style="background-color:lightgreen"|yes<br />
|style="background-color:lightgreen"|yes<br />
|style="background-color:lightgreen"|yes<br />
|style="background-color:lightsalmon"|no<br />
|style="background-color:lightgreen"|yes<br />
|style="background-color:lightgreen"|yes<br />
|style="background-color:lightgreen"|yes<br />
|style="background-color:lightgreen"|yes<br />
|style="background-color:lightgreen"|yes<br />
|style="background-color:lightgreen"|yes<br />
|style="background-color:lightgreen"|yes<br />
|style="background-color:lightsalmon"|no<br />
|style="background-color:lightsalmon"|no<br />
|style="background-color:lightgreen"|yes<br />
|-<br />
!style="text-align:left"|embedded_data<br />
|style="background-color:yellow"|no<br />
|style="background-color:lightgreen"|yes<br />
|style="background-color:lightgreen"|yes<br />
|style="background-color:lightgreen"|yes<br />
|style="background-color:lightgreen"|yes<br />
|style="background-color:lightgreen"|yes<br />
|style="background-color:lightgreen"|yes<br />
|style="background-color:lightgreen"|yes<br />
|style="background-color:lightgreen"|yes<br />
|style="background-color:lightgreen"|yes<br />
|style="background-color:lightgreen"|yes<br />
|style="background-color:lightgreen"|yes<br />
|style="background-color:lightgreen"|yes<br />
|style="background-color:lightgreen"|yes<br />
|style="background-color:lightgreen"|yes<br />
|style="background-color:lightgreen"|yes<br />
|style="background-color:lightgreen"|yes<br />
|-<br />
!style="text-align:left"|empty_bpobj<br />
|style="background-color:lightgreen"|yes<br />
|style="background-color:lightgreen"|yes<br />
|style="background-color:lightgreen"|yes<br />
|style="background-color:lightgreen"|yes<br />
|style="background-color:lightgreen"|yes<br />
|style="background-color:lightgreen"|yes<br />
|style="background-color:lightgreen"|yes<br />
|style="background-color:lightgreen"|yes<br />
|style="background-color:lightgreen"|yes<br />
|style="background-color:lightgreen"|yes<br />
|style="background-color:lightgreen"|yes<br />
|style="background-color:lightgreen"|yes<br />
|style="background-color:lightgreen"|yes<br />
|style="background-color:lightgreen"|yes<br />
|style="background-color:lightgreen"|yes<br />
|style="background-color:lightgreen"|yes<br />
|style="background-color:lightgreen"|yes<br />
|-<br />
!style="text-align:left"|enabled_txg<br />
|style="background-color:lightgreen"|yes<br />
|style="background-color:lightgreen"|yes<br />
|style="background-color:lightgreen"|yes<br />
|style="background-color:lightgreen"|yes<br />
|style="background-color:lightgreen"|yes<br />
|style="background-color:lightgreen"|yes<br />
|style="background-color:lightgreen"|yes<br />
|style="background-color:lightgreen"|yes<br />
|style="background-color:lightgreen"|yes<br />
|style="background-color:lightgreen"|yes<br />
|style="background-color:lightgreen"|yes<br />
|style="background-color:lightgreen"|yes<br />
|style="background-color:lightgreen"|yes<br />
|style="background-color:lightgreen"|yes<br />
|style="background-color:lightgreen"|yes<br />
|style="background-color:lightgreen"|yes<br />
|style="background-color:lightgreen"|yes<br />
|-<br />
!style="text-align:left"|extensible_dataset<br />
|style="background-color:yellow"|no<br />
|style="background-color:lightgreen"|yes<br />
|style="background-color:lightgreen"|yes<br />
|style="background-color:lightgreen"|yes<br />
|style="background-color:lightgreen"|yes<br />
|style="background-color:lightgreen"|yes<br />
|style="background-color:lightgreen"|yes<br />
|style="background-color:lightgreen"|yes<br />
|style="background-color:lightgreen"|yes<br />
|style="background-color:lightgreen"|yes<br />
|style="background-color:lightgreen"|yes<br />
|style="background-color:lightgreen"|yes<br />
|style="background-color:lightgreen"|yes<br />
|style="background-color:lightgreen"|yes<br />
|style="background-color:lightgreen"|yes<br />
|style="background-color:lightgreen"|yes<br />
|style="background-color:lightgreen"|yes<br />
|-<br />
!style="text-align:left"|hole_birth<br />
|style="background-color:yellow"|no<br />
|style="background-color:lightgreen"|yes<br />
|style="background-color:lightgreen"|yes<br />
|style="background-color:lightgreen"|yes<br />
|style="background-color:lightgreen"|yes<br />
|style="background-color:lightgreen"|yes<br />
|style="background-color:lightgreen"|yes<br />
|style="background-color:lightgreen"|yes<br />
|style="background-color:lightgreen"|yes<br />
|style="background-color:lightgreen"|yes<br />
|style="background-color:lightgreen"|yes<br />
|style="background-color:lightgreen"|yes<br />
|style="background-color:lightgreen"|yes<br />
|style="background-color:lightgreen"|yes<br />
|style="background-color:lightgreen"|yes<br />
|style="background-color:lightgreen"|yes<br />
|style="background-color:lightgreen"|yes<br />
|-<br />
!style="text-align:left"|obsolete_counts<br />
|style="background-color:lightgreen"|yes<br />
|style="background-color:lightsalmon"|no<br />
|style="background-color:lightgreen"|yes<br />
|style="background-color:lightgreen"|yes<br />
|style="background-color:lightgreen"|yes<br />
|style="background-color:lightgreen"|yes<br />
|style="background-color:lightsalmon"|no<br />
|style="background-color:lightgreen"|yes<br />
|style="background-color:lightgreen"|yes<br />
|style="background-color:lightgreen"|yes<br />
|style="background-color:lightgreen"|yes<br />
|style="background-color:lightgreen"|yes<br />
|style="background-color:lightgreen"|yes<br />
|style="background-color:lightgreen"|yes<br />
|style="background-color:lightsalmon"|no<br />
|style="background-color:lightsalmon"|no<br />
|style="background-color:lightgreen"|yes<br />
|-<br />
!style="text-align:left"|spacemap_histogram<br />
|style="background-color:lightgreen"|yes<br />
|style="background-color:lightgreen"|yes<br />
|style="background-color:lightgreen"|yes<br />
|style="background-color:lightgreen"|yes<br />
|style="background-color:lightgreen"|yes<br />
|style="background-color:lightgreen"|yes<br />
|style="background-color:lightgreen"|yes<br />
|style="background-color:lightgreen"|yes<br />
|style="background-color:lightgreen"|yes<br />
|style="background-color:lightgreen"|yes<br />
|style="background-color:lightgreen"|yes<br />
|style="background-color:lightgreen"|yes<br />
|style="background-color:lightgreen"|yes<br />
|style="background-color:lightgreen"|yes<br />
|style="background-color:lightgreen"|yes<br />
|style="background-color:lightgreen"|yes<br />
|style="background-color:lightgreen"|yes<br />
|-<br />
!style="text-align:left"|spacemap_v2<br />
|style="background-color:lightgreen"|yes<br />
|style="background-color:lightsalmon"|no<br />
|style="background-color:lightsalmon"|no<br />
|style="background-color:lightgreen"|yes<br />
|style="background-color:lightgreen"|yes<br />
|style="background-color:lightgreen"|yes<br />
|style="background-color:lightsalmon"|no<br />
|style="background-color:lightgreen"|yes<br />
|style="background-color:lightgreen"|yes<br />
|style="background-color:lightgreen"|yes<br />
|style="background-color:lightgreen"|yes<br />
|style="background-color:lightgreen"|yes<br />
|style="background-color:lightgreen"|yes<br />
|style="background-color:lightgreen"|yes<br />
|style="background-color:lightsalmon"|no<br />
|style="background-color:lightsalmon"|no<br />
|style="background-color:lightgreen"|yes<br />
|-<br />
!style="text-align:left"|zpool_checkpoint<br />
|style="background-color:lightgreen"|yes<br />
|style="background-color:lightsalmon"|no<br />
|style="background-color:lightgreen"|yes<br />
|style="background-color:lightgreen"|yes<br />
|style="background-color:lightgreen"|yes<br />
|style="background-color:lightgreen"|yes<br />
|style="background-color:lightsalmon"|no<br />
|style="background-color:lightgreen"|yes<br />
|style="background-color:lightgreen"|yes<br />
|style="background-color:lightgreen"|yes<br />
|style="background-color:lightgreen"|yes<br />
|style="background-color:lightgreen"|yes<br />
|style="background-color:lightgreen"|yes<br />
|style="background-color:lightgreen"|yes<br />
|style="background-color:lightsalmon"|no<br />
|style="background-color:lightsalmon"|no<br />
|style="background-color:lightgreen"|yes<br />
|-<br />
!style="text-align:left"|filesystem_limits<br />
|style="background-color:lightgreen"|yes<br />
|style="background-color:lightgreen"|yes<br />
|style="background-color:lightgreen"|yes<br />
|style="background-color:lightgreen"|yes<br />
|style="background-color:lightgreen"|yes<br />
|style="background-color:lightgreen"|yes<br />
|style="background-color:lightgreen"|yes<br />
|style="background-color:lightgreen"|yes<br />
|style="background-color:lightgreen"|yes<br />
|style="background-color:lightgreen"|yes<br />
|style="background-color:lightgreen"|yes<br />
|style="background-color:lightgreen"|yes<br />
|style="background-color:lightgreen"|yes<br />
|style="background-color:lightgreen"|yes<br />
|style="background-color:lightgreen"|yes<br />
|style="background-color:lightgreen"|yes<br />
|style="background-color:lightgreen"|yes<br />
|-<br />
!style="text-align:left"|multi_vdev_crash_dump<br />
|style="background-color:yellow"|no<br />
|style="background-color:lightgreen"|yes<br />
|style="background-color:lightgreen"|yes<br />
|style="background-color:lightgreen"|yes<br />
|style="background-color:lightgreen"|yes<br />
|style="background-color:lightgreen"|yes<br />
|style="background-color:lightgreen"|yes<br />
|style="background-color:lightgreen"|yes<br />
|style="background-color:lightgreen"|yes<br />
|style="background-color:lightgreen"|yes<br />
|style="background-color:lightgreen"|yes<br />
|style="background-color:lightgreen"|yes<br />
|style="background-color:lightgreen"|yes<br />
|style="background-color:lightgreen"|yes<br />
|style="background-color:lightsalmon"|no<br />
|style="background-color:lightgreen"|yes<br />
|style="background-color:lightgreen"|yes<br />
|-<br />
!style="text-align:left"|edonr<br />
|style="background-color:yellow"|no<br />
|style="background-color:lightsalmon"|no<br />
|style="background-color:lightsalmon"|no<br />
|style="background-color:lightsalmon"|no<br />
|style="background-color:lightsalmon"|no<br />
|style="background-color:lightgreen"|yes<br />
|style="background-color:lightsalmon"|no<br />
|style="background-color:lightgreen"|yes<br />
|style="background-color:lightgreen"|yes<br />
|style="background-color:lightgreen"|yes<br />
|style="background-color:lightgreen"|yes<br />
|style="background-color:lightgreen"|yes<br />
|style="background-color:lightgreen"|yes<br />
|style="background-color:lightgreen"|yes<br />
|style="background-color:lightsalmon"|no<br />
|style="background-color:lightgreen"|yes<br />
|style="background-color:lightgreen"|yes<br />
|-<br />
!style="text-align:left"|lz4_compress<br />
|style="background-color:yellow"|no<br />
|style="background-color:lightgreen"|yes<br />
|style="background-color:lightgreen"|yes<br />
|style="background-color:lightgreen"|yes<br />
|style="background-color:lightgreen"|yes<br />
|style="background-color:lightgreen"|yes<br />
|style="background-color:lightgreen"|yes<br />
|style="background-color:lightgreen"|yes<br />
|style="background-color:lightgreen"|yes<br />
|style="background-color:lightgreen"|yes<br />
|style="background-color:lightgreen"|yes<br />
|style="background-color:lightgreen"|yes<br />
|style="background-color:lightgreen"|yes<br />
|style="background-color:lightgreen"|yes<br />
|style="background-color:lightgreen"|yes<br />
|style="background-color:lightgreen"|yes<br />
|style="background-color:lightgreen"|yes<br />
|-<br />
!style="text-align:left"|sha512<br />
|style="background-color:yellow"|no<br />
|style="background-color:lightsalmon"|no<br />
|style="background-color:lightgreen"|yes<br />
|style="background-color:lightgreen"|yes<br />
|style="background-color:lightgreen"|yes<br />
|style="background-color:lightgreen"|yes<br />
|style="background-color:lightgreen"|yes<br />
|style="background-color:lightgreen"|yes<br />
|style="background-color:lightgreen"|yes<br />
|style="background-color:lightgreen"|yes<br />
|style="background-color:lightgreen"|yes<br />
|style="background-color:lightgreen"|yes<br />
|style="background-color:lightgreen"|yes<br />
|style="background-color:lightgreen"|yes<br />
|style="background-color:lightsalmon"|no<br />
|style="background-color:lightgreen"|yes<br />
|style="background-color:lightgreen"|yes<br />
|-<br />
!style="text-align:left"|skein<br />
|style="background-color:yellow"|no<br />
|style="background-color:lightsalmon"|no<br />
|style="background-color:lightgreen"|yes<br />
|style="background-color:lightgreen"|yes<br />
|style="background-color:lightgreen"|yes<br />
|style="background-color:lightgreen"|yes<br />
|style="background-color:lightgreen"|yes<br />
|style="background-color:lightgreen"|yes<br />
|style="background-color:lightgreen"|yes<br />
|style="background-color:lightgreen"|yes<br />
|style="background-color:lightgreen"|yes<br />
|style="background-color:lightgreen"|yes<br />
|style="background-color:lightgreen"|yes<br />
|style="background-color:lightgreen"|yes<br />
|style="background-color:lightsalmon"|no<br />
|style="background-color:lightgreen"|yes<br />
|style="background-color:lightgreen"|yes<br />
|-<br />
!style="text-align:left"|large_block<br />
|style="background-color:yellow"|no<br />
|style="background-color:lightsalmon"|no<br />
|style="background-color:lightgreen"|yes<br />
|style="background-color:lightgreen"|yes<br />
|style="background-color:lightgreen"|yes<br />
|style="background-color:lightgreen"|yes<br />
|style="background-color:lightgreen"|yes<br />
|style="background-color:lightgreen"|yes<br />
|style="background-color:lightgreen"|yes<br />
|style="background-color:lightgreen"|yes<br />
|style="background-color:lightgreen"|yes<br />
|style="background-color:lightgreen"|yes<br />
|style="background-color:lightgreen"|yes<br />
|style="background-color:lightgreen"|yes<br />
|style="background-color:lightgreen"|yes<br />
|style="background-color:lightgreen"|yes<br />
|style="background-color:lightgreen"|yes<br />
|-<br />
!style="text-align:left"|allocation_classes<br />
|style="background-color:lightgreen"|yes<br />
|style="background-color:lightsalmon"|no<br />
|style="background-color:lightsalmon"|no<br />
|style="background-color:lightsalmon"|no<br />
|style="background-color:lightsalmon"|no<br />
|style="background-color:lightsalmon"|no<br />
|style="background-color:lightsalmon"|no<br />
|style="background-color:lightsalmon"|no<br />
|style="background-color:lightsalmon"|no<br />
|style="background-color:lightsalmon"|no<br />
|style="background-color:lightsalmon"|no<br />
|style="background-color:lightsalmon"|no<br />
|style="background-color:lightsalmon"|no<br />
|style="background-color:lightgreen"|yes<br />
|style="background-color:lightsalmon"|no<br />
|style="background-color:lightsalmon"|no<br />
|style="background-color:lightgreen"|yes<br />
|-<br />
!style="text-align:left"|large_dnode<br />
|style="background-color:yellow"|no<br />
|style="background-color:lightsalmon"|no<br />
|style="background-color:lightsalmon"|no<br />
|style="background-color:lightsalmon"|no<br />
|style="background-color:lightsalmon"|no<br />
|style="background-color:lightsalmon"|no<br />
|style="background-color:lightsalmon"|no<br />
|style="background-color:lightsalmon"|no<br />
|style="background-color:lightsalmon"|no<br />
|style="background-color:lightsalmon"|no<br />
|style="background-color:lightsalmon"|no<br />
|style="background-color:lightsalmon"|no<br />
|style="background-color:lightsalmon"|no<br />
|style="background-color:lightgreen"|yes<br />
|style="background-color:lightsalmon"|no<br />
|style="background-color:lightgreen"|yes<br />
|style="background-color:lightgreen"|yes<br />
|-<br />
!style="text-align:left"|project_quota<br />
|style="background-color:lightgreen"|yes<br />
|style="background-color:lightsalmon"|no<br />
|style="background-color:lightsalmon"|no<br />
|style="background-color:lightsalmon"|no<br />
|style="background-color:lightsalmon"|no<br />
|style="background-color:lightsalmon"|no<br />
|style="background-color:lightsalmon"|no<br />
|style="background-color:lightsalmon"|no<br />
|style="background-color:lightsalmon"|no<br />
|style="background-color:lightsalmon"|no<br />
|style="background-color:lightsalmon"|no<br />
|style="background-color:lightsalmon"|no<br />
|style="background-color:lightsalmon"|no<br />
|style="background-color:lightsalmon"|no<br />
|style="background-color:lightsalmon"|no<br />
|style="background-color:lightsalmon"|no<br />
|style="background-color:lightgreen"|yes<br />
|-<br />
!style="text-align:left"|userobj_accounting<br />
|style="background-color:lightgreen"|yes<br />
|style="background-color:lightsalmon"|no<br />
|style="background-color:lightsalmon"|no<br />
|style="background-color:lightsalmon"|no<br />
|style="background-color:lightsalmon"|no<br />
|style="background-color:lightsalmon"|no<br />
|style="background-color:lightsalmon"|no<br />
|style="background-color:lightsalmon"|no<br />
|style="background-color:lightsalmon"|no<br />
|style="background-color:lightsalmon"|no<br />
|style="background-color:lightsalmon"|no<br />
|style="background-color:lightsalmon"|no<br />
|style="background-color:lightsalmon"|no<br />
|style="background-color:lightsalmon"|no<br />
|style="background-color:lightsalmon"|no<br />
|style="background-color:lightgreen"|yes<br />
|style="background-color:lightgreen"|yes<br />
|-<br />
|}<br />
<br />
'''Table legend'''<br />
* no = not implemented<br />
* yes = implemented<br />
<br />
Source: [https://zgrep.org/zfs.html] as of 20190121</div>Lundmanhttps://openzfs.org/w/index.php?title=Main_Page&diff=2619Main Page2019-02-08T08:15:35Z<p>Lundman: Adding windows.</p>
<hr />
<div>= Welcome to OpenZFS =<br />
__NOTOC__<br />
<br />
OpenZFS brings together developers and users from various open-source forks of the original ZFS on different platforms and we're always looking to grow our community. There are a multitude of ways to contribute to the project and contributors are happy to help newcomers. As we add diverse perspectives, our community becomes richer, and we're committed to creating an environment where all people feel welcome. [[Newcomers | Information for new contributors is available here.]]<br />
<br />
== Summary ==<br />
<br />
OpenZFS was [[announcement | announced in September 2013]] as the truly '''open source''' successor to the [[History | ZFS project]]. Our community '''brings together developers''' from the illumos, FreeBSD, Linux, OS X and Windows [[distributions | platforms]], and a wide range of [[companies]] that build products on top of OpenZFS. <br />
<br />
OpenZFS is an '''outstanding storage platform''' that encompasses the functionality of traditional filesystems, volume managers, and more, with consistent reliability, functionality and performance across all [[distributions]]: <br />
<br />
{| class="wikitable"<br />
| '''illumos'''<br />
|[http://wiki.illumos.org/display/illumos/ZFS Webpage]<br />
|[https://github.com/illumos/illumos-gate/ GitHub]<br />
|-<br />
| '''FreeBSD'''<br />
|[https://wiki.freebsd.org/ZFS Webpage]<br />
|[https://github.com/freebsd/freebsd/ GitHub] <br />
|-<br />
| '''ZFS on Linux'''<br />
|[http://zfsonlinux.org/ Webpage]<br />
|[https://github.com/zfsonlinux/zfs/ GitHub]<br />
|-<br />
| '''OpenZFS on OS X'''<br />
|[https://openzfsonosx.org/ Webpage]<br />
|[https://github.com/openzfsonosx/ GitHub]<br />
|-<br />
| '''OpenZFS on Windows'''<br />
|[https://openzfsonwindows.org/ Webpage]<br />
|[https://github.com/openzfsonwindows/ GitHub]<br />
|}<br />
<br />
== News ==<br />
<br />
Matt Ahrens and George Wilson gave a talk on [https://www.socallinuxexpo.org/scale/16x/presentations/openzfs-basics OpenZFS Basics] at SCALE16x, March 2018. [https://docs.google.com/presentation/d/1P2Q_eAgJH_6YorgTHDVgTZQfrBgtGs6VwLBvX7W23FA/edit?usp=sharing Slides] and [https://www.youtube.com/watch?v=MsY-BafQgj4 Video]<br />
<br />
The [http://zfs.datto.com/ ZFS User Conference] was held April 2018. Videos now posted.<br />
<br />
Matt Ahrens gave a talk at BSDCAN: [https://www.bsdcan.org/2018/schedule/events/960.en.html Flexible Disk Use in OpenZFS?], June 2018<br />
<br />
Sara Hartse gave a talk at BSDCAN: [https://www.bsdcan.org/2018/schedule/events/937.en.html 100x Faster Clone Deletion for ZFS], June 2018<br />
<br />
[[OpenZFS_Developer_Summit_2018 | OpenZFS Developer Summit]] was held September 10-11, 2018.<br />
<br />
The first [https://docs.google.com/document/d/1w2jv2XVYFmBVvG1EGf-9A5HBVsjAYoLIFZAnWHhV-BM/edit?ts=5bb3b66c# OpenZFS Leadership Meeting] will be held October 9, 2018<br />
<br />
== [[OpenZFS Developer Summit 2018]] <-- click for more info ==<br />
<br />
The sixth annual [[OpenZFS Developer Summit 2018|OpenZFS Developer Summit]] was held '''September 10-11, 2018''' in San Francisco.<br />
<br />
===Talks: Day 1===<br />
<br />
{| class="wikitable"<br />
|-<br />
!Title!!Speaker!!Company!!Slides!!Video<br />
|-<br />
|State of the Union||Matt Ahrens||Delphix||[https://docs.google.com/presentation/d/144mwRPMznHL3xUxYuohIc0IZrDJDMj3s3_36_L9DJh8/edit#slide=id.p slides]||[https://www.youtube.com/watch?v=DearbVpOTro&index=2&list=PLaUVvul17xSe0pC6sCirlZXYqICP09Y8z&t=0s video]<br />
|-<br />
|ZIO Pipeline Explained||George Wilson||Delphix||[https://docs.google.com/presentation/d/1ohdmjsp9mejuSRKwDeU83o9297KaiHrqC-tV__kjO6E/edit?usp=sharing slides]||[https://www.youtube.com/watch?v=qkA5HhfzsvM&index=3&list=PLaUVvul17xSe0pC6sCirlZXYqICP09Y8z&t=0s video]<br />
|-<br />
|[[zrepl]], a one-stop ZFS replication solution||Christian Schwarz||Student||[https://docs.google.com/presentation/d/1HXJ_9Q0kiHffeoQ7PlFn1qAfUcWyzedRgFlvL3nUlMU/edit?usp=sharing slides]||[https://www.youtube.com/watch?v=U4TUPQzZzPk&index=4&list=PLaUVvul17xSe0pC6sCirlZXYqICP09Y8z&t=0s video]<br />
|-<br />
|[[Observing and Monitoring ZFS Metrics Using Open Source Tools]]||Richard Elling||Newisys||[https://drive.google.com/open?id=1Q-I4xD6q_wWkmhCy5oJ0Gyt00EgvfCec slides]||[https://www.youtube.com/watch?v=b5awF6SVNwI&index=5&list=PLaUVvul17xSe0pC6sCirlZXYqICP09Y8z&t=0s video]<br />
|-<br />
|[[Managing ZVOLs with vzvol]]||Rainbow||Moogsoft||[https://docs.google.com/presentation/d/1BFgMUoUu5NxotqVbbn-ci-gAF3ylpzNyy9Dj1iwY_F0/edit?usp=sharing slides]||[https://www.youtube.com/watch?v=PoHsYzzzp8Q&index=6&list=PLaUVvul17xSe0pC6sCirlZXYqICP09Y8z&t=0s video]<br />
|-<br />
|Hackathon Info|| Serapheim Dimitropoulos & Sara Hartse ||||[https://drive.google.com/file/d/1gx_UmSWhUhdNMRCWFpw2L7Zd_GpwuvvT/view slides]||[https://www.youtube.com/watch?v=5xG5WjPazlk&index=7&list=PLaUVvul17xSe0pC6sCirlZXYqICP09Y8z&t=0s video]<br />
|-<br />
|[[ZFS Hardware Acceleration with QAT]]||Weigang Li||Intel||[https://drive.google.com/file/d/0B_J4mRfoVJQRV3ZOd1ZMWkphcV9OYXdWT0FBblVHbVZpSmZj/view?usp=sharing slides]||[https://www.youtube.com/watch?v=4zWTU_hnGp0&index=8&list=PLaUVvul17xSe0pC6sCirlZXYqICP09Y8z&t=0s video]<br />
|-<br />
|ZoL Releases||Tony Hutter||LLNL||[https://drive.google.com/file/d/0B_J4mRfoVJQRMzNPb1hBZ3RYcGg4NzFBSHd1clk4enVob01r/view?usp=sharing slides]||[https://www.youtube.com/watch?v=TyA0EKhGRsE&index=9&list=PLaUVvul17xSe0pC6sCirlZXYqICP09Y8z&t=0s video]<br />
|-<br />
|Device Removal||Matt Ahrens||Delphix||[https://docs.google.com/presentation/d/1u4gIGHJCbKAUxpFjU6VpUJaTX_pHAyT_HVpQJxUOFR8/edit?usp=sharing slides]||[https://www.youtube.com/watch?v=KGnFhmG8gT0&index=10&list=PLaUVvul17xSe0pC6sCirlZXYqICP09Y8z&t=0s video]<br />
|-<br />
|[[iRAID]]||Shailendra Tripathi||Tegile, a Western Digital Brand||[https://docs.google.com/presentation/d/1pO10vS_6xY1MqFDnO1Op-BkAeVI5N4quigZHGVgBvD0/edit?usp=sharing slides]||[https://www.youtube.com/watch?v=OaZmkq5jgfk&index=11&list=PLaUVvul17xSe0pC6sCirlZXYqICP09Y8z&t=0s video]<br />
|}<br />
<br />
===Talks: Day 2===<br />
<br />
The bulk of this day will be spent on the hackathon but in the morning we'll have a few shorter talks and discussions, around 10-20 minutes each:<br />
<br />
{| class="wikitable"<br />
|-<br />
!Title!!Speaker!!Company!!Slides!!Video<br />
|-<br />
|[[Log Spacemap: Flushing algorithm and performance]]|| Serapheim Dimitropoulos ||Delphix||[https://docs.google.com/presentation/d/1qxsbZGt1jCwhz-eHmilZS0ZATxGvvk7VLYBd1JnCCtI/edit?usp=sharing slides]||[https://youtu.be/x6D2dHRjkxw video]<br />
|-<br />
|[[DRAID Rebuild Performance]]||Carles Mateo||Newisys||[https://docs.google.com/presentation/d/1GZXj0u13_FcgfnFCZNbKemlvC0NPZ7I56UVNQNHJwIc/edit?usp=sharing slides]||[https://youtu.be/CVST0t0X9YU video]<br />
|-<br />
|Send Dedup||Paul Dagnelie||Delphix||[https://docs.google.com/presentation/d/1Ecwg3L52FQ7B86QPleVqXDJe9g5Jv_S4TJsNyK5uJLI/edit?usp=sharing slides]||[https://youtu.be/yPObFI-QU0o video]<br />
|-<br />
|Allocation Classes||Don Brady||Delphix||[https://docs.google.com/presentation/d/17nYRgs-TAIOPODOMaq-VwuJ0LqJHEXBfM9sUDxJUJ54/edit?usp=sharing slides]||[https://youtu.be/Wg0VRAgaARI video]<br />
|-<br />
|[[Vdev Properties]]||Allan Jude||Klara Systems||[https://docs.google.com/presentation/d/14dr-s9ScAHvAwuDAZBNj8W0r5z77xLCGbdZFggtFT5U/edit?usp=sharing slides]||[https://youtu.be/hD0uJOOCDb0 video]<br />
|}<br />
<br />
===Hackathon===<br />
<br />
Hackathon presentation [https://youtu.be/zN_tGxCpTBU video]<br />
<br />
Audience Choice Awards:<br />
<br />
{| class="wikitable"<br />
!Prize!!Project!!Participants<br />
|-<br />
|1st place||zpool status in color / 🔥|| Tony Hutter<br />
|-<br />
|2nd place||vdev properties||Pavel Zahkarov, Allan Jude, Brian Behlendorf, and others<br />
|-<br />
|3rd place|| Newcomer track; how to ask for money; AND setting props from channel progs ||Sara Hartse<br />
|}<br />
<br />
===Diamond Sponsors===<br />
<br />
<div><ul> <br />
<li style="display: inline-block; padding: 20px; padding-bottom: 28px;"> [[File: Datto_logo_2015.jpg|80x80px|link=http://www.datto.com/ | right | datto ]] </li><br />
<li style="display: inline-block; padding: 20px; padding-bottom: 28px;"> [[File: Delphix logo.png|170x150px|link=http://delphix.com | right | Delphix]] </li><br />
<li style="display: inline-block; padding: 20px; padding-bottom: 15px;">[[File: OsNexus.png|180x180px|link=http://www.osnexus.com/ | right | OSNEXUS ]] </li><br />
</ul></div><br />
<br />
===Platinum Sponsors===<br />
<br />
<div><ul> <br />
<li style="display: inline-block; padding: 20px; padding-bottom: 15px;"> [[File:Newisys_Logo.png|200x200px|link=http://www.newisys.com/ | right | Newisys]] </li><br />
</ul></div><br />
<br />
== Automated Testing ==<br />
<br />
Pull requests submitted to our [https://github.com/openzfs/openzfs/pulls GitHub page] are automatically tested, by running ztest and the ZFS Test Suite. We use illumos VM's running on AWS to perform the tests, and results are available publicly.<br />
<br />
Thanks to infrastructure sponsor Nexenta for covering our AWS hosting costs! [[File: Nexenta-global-leader.jpg|180x180px|link=http://www.nexenta.com/ | Nexenta ]]<br />
<br />
== Goals ==<br />
<br />
The high-level goals of OpenZFS are:<br />
* to '''raise awareness''' of the quality, utility, and availability of open source implementations of ZFS<br />
* to encourage '''open communication''' about ongoing efforts to improve open source ZFS<br />
* to ensure '''consistent reliability''', functionality, and performance of all distributions of ZFS.<br />
<br />
The main technical goal of OpenZFS is '''easier sharing of code''' between platforms. Strategies include:<br />
* creating a platform-independent [[mailing list]] for developers to review ZFS code and architecture changes from all platforms<br />
* smoothing the [[illumos integration process]]<br />
* making it easy to run both ztest and the ZFS test suite (TestRunner or STF based) on each platform<br />
* [[Reduce code differences | reducing code differences]] between the platforms.<br />
<br />
== Donate ==<br />
<br />
We accept donations to cover our ongoing costs.<br />
<br />
OpenZFS is an associated project of SPI ([https://www.spi-inc.org/projects/openzfs/ Software in the Public Interest]). SPI is a 501(c)3 nonprofit organization which handles our donations, finances, and legal holdings. You can donate through paypal using the link below:<br />
<br />
<html><br />
<form action="https://www.paypal.com/cgi-bin/webscr" method="post"><br />
<fieldset><br />
<input type="hidden" name="cmd" value="_s-xclick" /><br />
<input type="hidden" name="hosted_button_id" value="X6KB4BFPRFAG6" /><br />
<input type="image" src="https://www.paypalobjects.com/en_US/i/btn/btn_donateCC_LG.gif" name="submit" alt="Donate to OpenZFS via PayPal" /><br />
<img alt="" src="https://www.paypalobjects.com/en_US/i/scr/pixel.gif" width="1" height="1" /><br />
</fieldset><br />
</form><br />
</html><br />
<br />
== Site orientation ==<br />
* [[FAQ]]<br />
* How to [[participate]]<br />
* [[Companies]] with products that are based on OpenZFS<br />
* Download [[distributions]] that include OpenZFS<br />
* [[Events]] – the forthcoming [[OpenZFS Developer Summit]] and more<br />
* [[Developer resources]]<br />
** [[mailing list]]<br />
** [[illumos integration process]]<br />
** [[contributors]]<br />
** [[platform code differences]]<br />
** [[OpenZFS Office Hours]]<br />
** implementation<br />
*** [[Documentation/ZfsSend | ZFS send]]<br />
*** [[Documentation/Administrative Commands | administrative commands]]<br />
* [[System Administration|Documentation]] for users/sysadmins<br />
** [[features]]<br />
** [[Feature Flags| feature flags]]<br />
** [[Publications| publications and conference talks]]<br />
** [[history]] – from ZFS to OpenZFS<br />
*** OpenZFS launch [[announcement]] – September 2013<br />
** [[performance tuning]]<br />
* [[Projects]]<br />
** [[reduce code differences]]<br />
** the [[Projects/ZFS Channel Programs | ZFS Channel Programs]] (ZCP) proposal<br />
* [[About OpenZFS]]<br />
<br />
[http://open-zfs.org/w/index.php?title=Special%3AAllPages&from=&to=&namespace=0&hideredirects=1 All main pages] (alphabetical order) …<br />
<br />
== Twitter ==<br />
<br />
<html><br />
<a class="twitter-timeline" width="720" height="437" href="https://twitter.com/OpenZFS" data-widget-id="378639669799288832">Tweets by @OpenZFS</a><br />
<script>!function(d,s,id){var js,fjs=d.getElementsByTagName(s)[0],p=/^http:/.test(d.location)?'http':'https';if(!d.getElementById(id)){js=d.createElement(s);js.id=id;js.src=p+"://platform.twitter.com/widgets.js";fjs.parentNode.insertBefore(js,fjs);}}(document,"script","twitter-wjs");</script><br />
<br />
<span><br />
<br><br />
<a href="https://twitter.com/openzfs" class="twitter-follow-button" data-show-count="true">Follow @openzfs</a><br />
<br><br />
<a href="https://twitter.com/share" class="twitter-share-button" data-via="OpenZFS">Tweet</a><br />
</span><br />
<script>!function(d,s,id){var js,fjs=d.getElementsByTagName(s)[0],p=/^http:/.test(d.location)?'http':'https';if(!d.getElementById(id)){js=d.createElement(s);js.id=id;js.src=p+'://platform.twitter.com/widgets.js';fjs.parentNode.insertBefore(js,fjs);}}(document, 'script', 'twitter-wjs');</script><br />
</html></div>Lundmanhttps://openzfs.org/w/index.php?title=Distributions&diff=2618Distributions2019-02-08T08:14:36Z<p>Lundman: </p>
<hr />
<div>Open source distributions of OpenZFS are available for the following open source platforms. <br />
<br />
(For commercial products, see [[companies]].)<br />
<br />
== Darwin ==<br />
<br />
{|cellpadding="15"<br />
|[[File:UNIX-based.jpg | link=http://www.opensource.apple.com]]<br />
|<br />
At the core of [http://www.opengroup.org/openbrand/register/brand3612.htm Mac® OS X® El Capitan, which is certified to The Open Group UNIX® 03 standard], are [http://opensource.apple.com Apple® open source] [http://en.wikipedia.org/wiki/Darwin_(operating_system) Darwin] technologies. <br />
|}<br />
<br />
=== OpenZFS on OS X ===<br />
{|cellpadding="20" | width="100%"<br />
|<br />
[https://openzfsonosx.org OpenZFS on OS X] (O3X) brings OpenZFS features to Apple's OS X.<br />
<br />
The installer [https://openzfsonosx.org/wiki/Downloads release] of OpenZFS on OS X is [[OpenZFSOnOSX|ready for use]] by people who are comfortable with administering ZFS from the Terminal or who are willing to learn to do so. It's compatible with OS X 10.8 through OS X 10.13 (Mountain Lion, Mavericks, Yosemite, El Capitan, Sierra and High Sierra). <br />
<br />
| align="right" valign="text-top"| [[file:o3x-logo.png | link=https://openzfsonosx.org]]<br />
|}<br />
<br />
== FreeBSD® ==<br />
<br />
{|cellpadding="15"<br />
|[[file:FreeBSD-logo.png | 120px | link=http://www.freebsd.org/]]<br />
|<br />
A full general purpose operating system with several specialized distributions.<br />
|}<br />
<br />
=== Debian® GNU/kFreeBSD ===<br />
{|cellpadding="25" | width="100%"<br />
|<br />
[https://wiki.debian.org/Debian_GNU/kFreeBSD Debian® GNU/kFreeBSD] is a general purpose GNU distribution for amd64/i386 that uses the FreeBSD kernel, which provides an OpenZFS implementation.<br />
<br />
An official Debian release, still using GNU libc and with ninety percent of the same software packages available.<br />
<br />
The ''wheezy'' stable release:<br />
* can dual-boot 9.0 (default) or 8.3 kernels of FreeBSD<br />
* uses pool version 28 (deduplication, raidz3, removable log devices)<br />
* lacks support for ''ashift='', and important development tools like DTrace<br />
* installer supports creation of pools, installing to them, and booting directly from them with GRUB2.<br />
<br />
The ''testing'' release will be updated with new FreeBSD kernel releases, gaining many OpenZFS enhancements, including support for lz4 compression.<br />
| align="right" valign="text-top" | [[file:Debian-openlogo-100.jpg | 80px | link=https://wiki.debian.org/Debian_GNU/kFreeBSD]]<br />
|}<br />
<br />
=== FreeBSD ===<br />
{|cellpadding="10" | width="100%"<br />
|<br />
[http://www.freebsd.org/ FreeBSD] is a general purpose server operating system. Versions 8.4 and 9.2 are OpenZFS; prior versions lack the associated feature set.<br />
* [http://www.freebsd.org/releases/ Download]<br />
* browse ZFS source code in [https://github.com/freebsd/freebsd/tree/master/sys/cddl/contrib/opensolaris/uts/common/fs/zfs GitHub] or [http://svnweb.freebsd.org/base/head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/ websvn] or [http://nxr.netbsd.org/search?q=&project=src-freebsd OpenGrok].<br />
| align="right" valign="text-top" | [[file:FreeBSD-logo.png |120px|link=http://freebsd.org]]<br />
|}<br />
<br />
=== FreeNAS® ===<br />
{|cellpadding="10" | width="100%"<br />
|<br />
[http://www.freenas.org/ FreeNAS] is NAS appliance software.<br />
<br />
[http://www.ixsystems.com/storage/ix/truenas/ Commercial support] is available for sister product TrueNAS from iXsystems.<br />
| align="right" valign="text-top" | [[file:FreeNAS_Shark_Transparent_on_dark.png |120px|link=http://www.freenas.org/]]<br />
|}<br />
<br />
=== PC-BSD® ===<br />
{|cellpadding="10" | width="100%"<br />
|<br />
[http://www.pcbsd.org/ PC-BSD] is a workstation/desktop operating system.<br />
<br />
[https://webnew.ixsystems.com/wp-content/uploads/2015/07/iXsystems_ProfessionalServices_Brochure_WEB1.pdf Professional FreeBSD/PC-BSD Enterprise & Desktop Support Services] are available from iXsystems.<br />
| align="right" valign="text-top" | [[file:Pcbsd-logo.png|120px|link=http://www.pcbsd.org/]]<br />
|}<br />
<br />
== illumos ==<br />
{|cellpadding="15"<br />
|[[file:BigHighResPhoenixLogotypeRGB.png |120px|link=http://illumos.org]]<br />
|<br />
The [http://www.illumos.org illumos] codebase is the foundation for various distributions – comparable to the relationship between the Linux kernel and Linux distributions.<br />
The codebase originated as a fork from the last release of OpenSolaris.<br />
* Browse ZFS source code in [http://src.illumos.org/source/xref/illumos-gate/usr/src/uts/common/fs/zfs opengrok] or [https://github.com/illumos/illumos-gate/tree/master/usr/src/uts/common/fs/zfs GitHub].<br />
|}<br />
<br />
=== DilOS ===<br />
{|cellpadding="15" | width="100%"<br />
|<br />
[http://www.dilos.org/ DilOS] is a general purpose server operating system with support Intel and SPARC platforms. <br />
<br />
* [http://www.dilos.org/download Download]<br />
* [https://bitbucket.org/dilos/dilos-illumos/src/dilos2/usr/src/uts/common/fs/zfs source code]<br />
| align="right" valign="text-top"| [[file:dilos-logo.png |100px|link=http://www.dilos.org/]]<br />
|}<br />
<br />
=== OmniOS ===<br />
{|cellpadding="15" | width="100%"<br />
|<br />
[http://omnios.omniti.com/ OmniOS] is a general purpose server operating system. <br />
<br />
[http://omniti.com/does/omnios Commercial support] is available from [http://omniti.com/ OmniTI].<br />
<br />
* [http://omnios.omniti.com/wiki.php/Installation Download]<br />
* [https://github.com/omniti-labs/illumos-omnios/tree/master/usr/src/uts/common/fs/zfs source code]<br />
| align="right" valign="text-top"| [[file:OmniOS_logo.png |100px|link=http://omnios.omniti.com/]]<br />
|}<br />
<br />
=== OpenIndiana ===<br />
{|cellpadding="8" | width="100%"<br />
|<br />
[http://openindiana.org/ OpenIndiana] (OI) is a general purpose server operating system.<br />
<br />
* [http://openindiana.org/download/ Download]<br />
* [https://hg.openindiana.org/ source code]<br />
| align="right" valign="text-top" | [[file:OpenIndiana_logo_x1200.png |120px|link=http://openindiana.org/]]<br />
|}<br />
<br />
=== SmartOS™ ===<br />
{|cellpadding="8" | width="100%"<br />
|<br />
[http://smartos.org SmartOS] is a specialised type 1 hypervisor platform that is lean enough to run entirely in memory and powerful enough to run as much as you want to throw at it. Provisioning is blindingly fast, thanks to zones and ZFS file system creation. SmartOS is a fundamental component of the [http://www.joyent.com/products/private-cloud Joyent® SmartDataCenter™] (SDC) product.<br />
* [http://wiki.smartos.org/display/DOC/Download+SmartOS Download]<br />
* [https://github.com/joyent/smartos-live source code]<br />
| align="right" valign="text-top" | [[File:Smartos-stacked-blue.png | 120px | link= http://smartos.org]]<br />
|}<br />
<br />
== Linux ==<br />
<br />
Since its inception in the 1990s, the Linux operating system has become the most widely used software in the world.<br />
<br />
=== Ubuntu ===<br />
<br />
[https://www.ubuntu.com/ Ubuntu] 16.04 and later releases have built-in support for OpenZFS. For more information, see the [https://wiki.ubuntu.com/ZFS Ubuntu ZFS] page and [https://insights.ubuntu.com/2016/02/16/zfs-is-the-fs-for-containers-in-ubuntu-16-04/ announcement]<br />
<br />
=== Gentoo ===<br />
{|cellpadding="10" | width="100%"<br />
|<br />
[http://www.gentoo.org Gentoo] provides first-party [[#ZFS_on_Linux | ZFS on Linux]] packages to itself and its derivatives. <br />
<br />
Gentoo can be automatically optimized and customized for just about any application or need. Extreme configurability, performance and a top-notch user and developer community are all hallmarks of the Gentoo experience.<br />
<br />
Derivatives include: <br />
| align="right" valign="text-top" | [[file:Gblend.png |80px|link=http://www.gentoo.org/]]<br />
|-<br />
|<br />
* [http://www.funtoo.org Funtoo Linux], which features native UTF-8 support enabled by default, a git-based, distributed Portage Tree and funtoo overlay, an enhanced Portage with more compact mini-manifest tree, automated imports of new Gentoo changes every 12 hours, GPT/GUID boot support and streamlined boot configuration, enhanced network configuration, up-to-date stable and current Funtoo stages, all built using Funtoo's Metro build tool<br />
| align="right" valign="text-top"| [[file:Funtoo.png |80px|link=http://www.funtoo.org]]<br />
|-<br />
|<br />
* [http://www.pentoo.ch Pentoo], a security-focused livecd<br />
| [[file:PentooLogo.jpeg |120px|link=http://www.pentoo.ch]]<br />
|-<br />
|<br />
* [http://www.sabayon.org Sabayon], which emanates substantially from Gentoo's testing branch. <br />
| [[file:Sabayon-logo.png |120px|link=http://www.sabayon.org]]<br />
|}<br />
<br />
=== OviOS ===<br />
<br />
[http://www.ovios.org OviOS] Linux uses OpenZFS to provide a Linux based storage appliance.<br />
<br />
The OviOS zfs packages are build from source specifically for OviOS.<br />
<br />
=== ZFS on Linux ===<br />
{|cellpadding="10" | width="100%"<br />
|<br />
[http://www.zfsonlinux.org ZFS on Linux] provides self-building packages for Debian, Fedora, RHEL/CentOS/SL, Ubuntu and build instructions for several other distributions. <br />
* Implemented in the kernel <br />
* maintained in a code repository that is independent from the mainline kernel.<br />
| align="right" valign="text-top"| [[file:zfs-linux.png |100px|link=http://zfsonlinux.org/]]<br />
|}<br />
<br />
== OSv ==<br />
<br />
{|cellpadding="15"<br />
|<br />
[http://osv.io OSv] is a new operating system designed for the cloud. It only runs virtualized, and the only file system it supports is ZFS.<br />
* Implemented in the kernel <br />
* ZFS codebase forked from FreeBSD; but planning to move to open-zfs.org upstream ASAP.<br />
|[[file:osv.png |100px|link=http://osv.io/]]<br />
|}<br />
<br />
== Windows ==<br />
<br />
{|cellpadding="15"<br />
|<br />
[https://openzfsonwindows.org OpenZFSonWindows] Young port of Open ZFS to Windows, currently considered to be in Alpha. Installers for early adopters are available.<br />
* Implemented in the kernel <br />
* ZFS codebase forked from OsX;<br />
|}<br />
<br />
----<br />
<center>Distribution logos used with permission. All trademarks are the property of their respective owners.</center></div>Lundmanhttps://openzfs.org/w/index.php?title=Main_Page&diff=2426Main Page2017-11-11T05:04:58Z<p>Lundman: </p>
<hr />
<div>= Welcome to OpenZFS =<br />
__NOTOC__<br />
<br />
<br />
== Summary ==<br />
<br />
OpenZFS was [[announcement | announced in September 2013]] as the truly '''open source''' successor to the [[History | ZFS project]]. Our community '''brings together developers''' from the illumos, FreeBSD, Linux, and OS X [[distributions | platforms]], and a wide range of [[companies]] that build products on top of OpenZFS. <br />
<br />
OpenZFS is an '''outstanding storage platform''' that encompasses the functionality of traditional filesystems, volume managers, and more, with consistent reliability, functionality and performance across all [[distributions]]: <br />
<br />
{| class="wikitable"<br />
| '''illumos'''<br />
|[http://wiki.illumos.org/display/illumos/ZFS Webpage]<br />
|[https://github.com/illumos/illumos-gate/ GitHub]<br />
|-<br />
| '''FreeBSD'''<br />
|[https://wiki.freebsd.org/ZFS Webpage]<br />
|[https://github.com/freebsd/freebsd/ GitHub] <br />
|-<br />
| '''ZFS on Linux'''<br />
|[http://zfsonlinux.org/ Webpage]<br />
|[https://github.com/zfsonlinux/zfs/ GitHub]<br />
|-<br />
| '''OpenZFS on OS X'''<br />
|[https://openzfsonosx.org/ Webpage]<br />
|[https://github.com/openzfsonosx/ GitHub]<br />
|}<br />
<br />
<br />
== [[OpenZFS Developer Summit 2017]] <-- click for more info ==<br />
<br />
The fifth annual [[OpenZFS Developer Summit 2017|OpenZFS Developer Summit]] was held in San Francisco, '''October 24-25th, 2017'''.<br />
<br />
'''Talks: Day 1''' - Main talks, typically 45 minutes each.<br />
<br />
{| class="wikitable"<br />
|-<br />
!Title!!Speaker!!Company!!Video!!Slides<br />
|-<br />
|State of the Union||Matt Ahrens||Delphix || [https://www.youtube.com/watch?v=1LkHsofR_kc Video] || [https://drive.google.com/file/d/0B5fzqkw_-diCX0x5d2hIVDhYZ28/view?usp=sharing Slides]<br />
|-<br />
|Keynote: ZFS Past & Future||Mark Maybee||Oracle || Not Available || N/A<br />
|-<br />
|ZSTD Compression||Allan Jude||ScaleEngine||[https://www.youtube.com/watch?v=hWnWEitDPlM Video]||[[Media:03-OpenZFS_2017_-_ZStandard_in_ZFS.pdf|Slides]]<br />
|-<br />
|Fast Clone Deletion||Sara Hartse||Delphix||[https://www.youtube.com/watch?v=GLABJRWwGMk Video]||[[Media:04-Fast_Clone_Deletion.pdf|Slides]]<br />
|-<br />
|MMP: Safe "zpool import" for Clusters||Olaf Faaland||LLNL||[https://www.youtube.com/watch?v=zZTP3zEfKYM Video]||[https://drive.google.com/file/d/0B_J4mRfoVJQRd3Vvc2ludGpvX1N0Y0E3bVd6ZjFRMmR0SnRJ/view?usp=sharing Slides]<br />
|-<br />
|Porting With OSX||Jorgen Lundman||GMO ||[https://www.youtube.com/watch?v=6_8jQnJf418 Video]||[[Media:06-Porting_with_OSX.pdf|Slides]]<br />
|-<br />
|Faster Allocation with the Log Spacemap||Serapheim Dimitropoulos||Delphix || [https://www.youtube.com/watch?v=jj2IxRkl5bQ Video]|| [https://drive.google.com/file/d/0B5fzqkw_-diCeDVZSzl0VnR6Tzg/view?usp=sharing Slides]<br />
|-<br />
|[[iFlash | iFlash: Dynamic Adaptive L2ARC Caching]]||Shailendra Tripathi||Tegile || [https://www.youtube.com/watch?v=oAjMr5IES2w Video]|| [[Media:08-iFlash.pdf|Slides]]<br />
|-<br />
|DRAID||Isaac Huang||Intel||[https://www.youtube.com/watch?v=xPU3rIHyCTs Video]||[[Media:09-dRAID.pdf|Slides]]<br />
|-<br />
|ZIL Performance: How I Doubled Sync Write Speed||Prakash Surya||Delphix||[https://www.youtube.com/watch?v=RUb8svObroE Video]||[[Media:10-ZIL_performance.pdf|Slides]]<br />
|}<br />
<br />
'''Talks: Day 2''' - Shorter talks, around 15 minutes each.<br />
<br />
{| class="wikitable"<br />
|-<br />
!Title!!Speaker!!Company!!Video!!Slides<br />
|-<br />
|"Oh Shift!" changing the allocation size||George Wilson||Delphix||[https://www.youtube.com/watch?v=_-QAnKtIbGc Video]|| [https://drive.google.com/file/d/0B5fzqkw_-diCZFVTZlpua3hjNWs/view?usp=sharing Slides]<br />
|-<br />
|A proposal for 1,000x better dedup performance||Matt Ahrens||Delphix||[https://www.youtube.com/watch?v=PYxFDBgxFS8 Video]||[[Media:ZFS_dedup.pdf | Slides]]<br />
|-<br />
|New prefetcher for sequential scrub||Tom Caputi||Datto||[https://www.youtube.com/watch?v=upn9tYh917s Video]||[[Media:New_Scrub_Prefetcher.pdf | Slides]]<br />
|-<br />
|Storage Pool Checkpoint||Serapheim Dimitropoulos||Delphix||[https://www.youtube.com/watch?v=fPQA8K40jAM Video]||[[Media:Storage_Pool_Checkpoint.pdf | Slides]]<br />
|-<br />
|Improving resilver: results & operational impacts||Saso Kiselkov||Nexenta||[https://www.youtube.com/watch?v=HnTYCjSo6ic Video]||[[Media:Saso_-_resilver_update.pdf | Slides]]<br />
|-<br />
|RAID-Z Expansion||Matt Ahrens||Delphix + FreeBSD Foundation||[https://www.youtube.com/watch?v=ZF8V7Tc9G28 Video]||[[Media:RAIDZ_Expansion_v2.pdf | Slides]]<br />
|}<br />
<br />
'''Thank you to the 2017 Platinum sponsors for their support!'''<br />
<br />
<div><ul> <br />
<li style="display: inline-block; padding: 20px; padding-bottom: 70px;"> [[File: Datto_logo_2015.jpg|80x80px|link=http://www.datto.com/ | right | datto ]] </li><br />
<li style="display: inline-block; padding: 20px; padding-bottom: 70px;"> [[File: Delphix logo.png|170x150px|link=http://delphix.com | right | Delphix]] </li><br />
<li style="display: inline-block; padding: 20px; padding-bottom: 60px;"> [[File: GitHub_Logo.png|120x120px|link=http://github.com | right | GitHub]] </li><br />
<li style="display: inline-block; padding: 20px; padding-bottom: 15px;"> [[File: MPSTOR_Logo.jpeg|200x200px|link=http://mpstor.com | right | MPSTOR]] </li><br />
<br><br />
<li style="display: inline-block; padding: 20px; padding-bottom: 65px;"> [[file:Nexenta_logo.jpg |180x180px|link=http://www.nexenta.com/ | right | Nexenta]] </li><br />
<li style="display: inline-block; padding: 20px; padding-bottom: 65px;">[[File: opendrives-logo.png|180x180px|link=https://opendrives.com/ | right | OpenDrives ]] </li><br />
<li style="display: inline-block; padding: 20px; padding-bottom: 65px;">[[File: OsNexus.png|180x180px|link= http://www.osnexus.com/ | right | OSNEXUS ]] </li><br />
<li style="display: inline-block; padding: 20px; padding-bottom: 65px;">[[File: OVH-logo.png|240x240px|link=http://www.ovh.com/ | right | OVH ]] </li><br />
</ul></div><br />
<br />
== Goals ==<br />
<br />
The high-level goals of OpenZFS are:<br />
* to '''raise awareness''' of the quality, utility, and availability of open source implementations of ZFS<br />
* to encourage '''open communication''' about ongoing efforts to improve open source ZFS<br />
* to ensure '''consistent reliability''', functionality, and performance of all distributions of ZFS.<br />
<br />
The main technical goal of OpenZFS is '''easier sharing of code''' between platforms. Strategies include:<br />
* creating a platform-independent [[mailing list]] for developers to review ZFS code and architecture changes from all platforms<br />
* smoothing the [[illumos integration process]]<br />
* making it easy to run both ztest and the ZFS test suite (TestRunner or STF based) on each platform<br />
* [[Reduce code differences | reducing code differences]] between the platforms.<br />
<br />
== Donate ==<br />
<br />
We perform automated testing on all [https://github.com/openzfs/openzfs/pulls OpenZFS Pull Requests], which run on public cloud infrastructure (Amazon AWS). We accept donations to cover our AWS bills.<br />
<br />
OpenZFS is an associated project of SPI ([https://www.spi-inc.org/projects/openzfs/ Software in the Public Interest]). SPI is a 501(c)3 nonprofit organization which handles our donations, finances, and legal holdings. You can donate through paypal using the link below:<br />
<br />
<html><br />
<form action="https://www.paypal.com/cgi-bin/webscr" method="post"><br />
<fieldset><br />
<input type="hidden" name="cmd" value="_s-xclick" /><br />
<input type="hidden" name="hosted_button_id" value="X6KB4BFPRFAG6" /><br />
<input type="image" src="https://www.paypalobjects.com/en_US/i/btn/btn_donateCC_LG.gif" name="submit" alt="Donate to OpenZFS via PayPal" /><br />
<img alt="" src="https://www.paypalobjects.com/en_US/i/scr/pixel.gif" width="1" height="1" /><br />
</fieldset><br />
</form><br />
</html><br />
<br />
== ZFS User Conference ==<br />
The ZFS User Conference will be held April 19-20th, 2018, in Norwalk CT. Details to come!<br />
<br />
The first ZFS User Conference was held March 16-17, 2017, in Norwalk CT. Videos and slides from the conference are available here: [http://zfs.datto.com/ zfs.datto.com]<br />
<br />
== Site orientation ==<br />
* [[FAQ]]<br />
* How to [[participate]]<br />
* [[Companies]] with products that are based on OpenZFS<br />
* Download [[distributions]] that include OpenZFS<br />
* [[Events]] – the forthcoming [[OpenZFS Developer Summit]] and more<br />
* [[Developer resources]]<br />
** [[mailing list]]<br />
** [[illumos integration process]]<br />
** [[contributors]]<br />
** [[platform code differences]]<br />
** [[OpenZFS Office Hours]]<br />
** implementation<br />
*** [[Documentation/ZfsSend | ZFS send]]<br />
*** [[Documentation/Administrative Commands | administrative commands]]<br />
* [[System Administration|Documentation]] for users/sysadmins<br />
** [[features]]<br />
** [[Feature Flags| feature flags]]<br />
** [[Publications| publications and conference talks]]<br />
** [[history]] – from ZFS to OpenZFS<br />
*** OpenZFS launch [[announcement]] – September 2013<br />
** [[performance tuning]]<br />
* [[Projects]]<br />
** [[reduce code differences]]<br />
** the [[Projects/ZFS Channel Programs | ZFS Channel Programs]] (ZCP) proposal<br />
* [[About OpenZFS]]<br />
<br />
[http://open-zfs.org/w/index.php?title=Special%3AAllPages&from=&to=&namespace=0&hideredirects=1 All main pages] (alphabetical order) …<br />
<br />
== Twitter ==<br />
<br />
<html><br />
<a class="twitter-timeline" width="720" height="437" href="https://twitter.com/OpenZFS" data-widget-id="378639669799288832">Tweets by @OpenZFS</a><br />
<script>!function(d,s,id){var js,fjs=d.getElementsByTagName(s)[0],p=/^http:/.test(d.location)?'http':'https';if(!d.getElementById(id)){js=d.createElement(s);js.id=id;js.src=p+"://platform.twitter.com/widgets.js";fjs.parentNode.insertBefore(js,fjs);}}(document,"script","twitter-wjs");</script><br />
<br />
<span><br />
<br><br />
<a href="https://twitter.com/openzfs" class="twitter-follow-button" data-show-count="true">Follow @openzfs</a><br />
<br><br />
<a href="https://twitter.com/share" class="twitter-share-button" data-via="OpenZFS">Tweet</a><br />
</span><br />
<script>!function(d,s,id){var js,fjs=d.getElementsByTagName(s)[0],p=/^http:/.test(d.location)?'http':'https';if(!d.getElementById(id)){js=d.createElement(s);js.id=id;js.src=p+'://platform.twitter.com/widgets.js';fjs.parentNode.insertBefore(js,fjs);}}(document, 'script', 'twitter-wjs');</script><br />
</html></div>Lundmanhttps://openzfs.org/w/index.php?title=Main_Page&diff=2425Main Page2017-11-11T05:04:29Z<p>Lundman: Undo revision 2424 by Lundman (talk)</p>
<hr />
<div>= Welcome to OpenZFS =<br />
__NOTOC__<br />
<br />
<br />
== Summary ==<br />
<br />
OpenZFS was [[announcement | announced in September 2013]] as the truly '''open source''' successor to the [[History | ZFS project]]. Our community '''brings together developers''' from the illumos, FreeBSD, Linux, and OS X [[distributions | platforms]], and a wide range of [[companies]] that build products on top of OpenZFS. <br />
<br />
OpenZFS is an '''outstanding storage platform''' that encompasses the functionality of traditional filesystems, volume managers, and more, with consistent reliability, functionality and performance across all [[distributions]]: <br />
<br />
{| class="wikitable"<br />
| '''illumos'''<br />
|[http://wiki.illumos.org/display/illumos/ZFS Webpage]<br />
|[https://github.com/illumos/illumos-gate/ GitHub]<br />
|-<br />
| '''FreeBSD'''<br />
|[https://wiki.freebsd.org/ZFS Webpage]<br />
|[https://github.com/freebsd/freebsd/ GitHub] <br />
|-<br />
| '''ZFS on Linux'''<br />
|[http://zfsonlinux.org/ Webpage]<br />
|[https://github.com/zfsonlinux/zfs/ GitHub]<br />
|-<br />
| '''OpenZFS on OS X'''<br />
|[https://openzfsonosx.org/ Webpage]<br />
|[https://github.com/openzfsonosx/ GitHub]<br />
|-<br />
| '''OpenZFS on OS X'''<br />
|<br />
|[https://github.com/openzfsonwindows/ZFSin GitHub]<br />
|}<br />
<br />
<br />
== [[OpenZFS Developer Summit 2017]] <-- click for more info ==<br />
<br />
The fifth annual [[OpenZFS Developer Summit 2017|OpenZFS Developer Summit]] was held in San Francisco, '''October 24-25th, 2017'''.<br />
<br />
'''Talks: Day 1''' - Main talks, typically 45 minutes each.<br />
<br />
{| class="wikitable"<br />
|-<br />
!Title!!Speaker!!Company!!Video!!Slides<br />
|-<br />
|State of the Union||Matt Ahrens||Delphix || [https://www.youtube.com/watch?v=1LkHsofR_kc Video] || [https://drive.google.com/file/d/0B5fzqkw_-diCX0x5d2hIVDhYZ28/view?usp=sharing Slides]<br />
|-<br />
|Keynote: ZFS Past & Future||Mark Maybee||Oracle || Not Available || N/A<br />
|-<br />
|ZSTD Compression||Allan Jude||ScaleEngine||[https://www.youtube.com/watch?v=hWnWEitDPlM Video]||[[Media:03-OpenZFS_2017_-_ZStandard_in_ZFS.pdf|Slides]]<br />
|-<br />
|Fast Clone Deletion||Sara Hartse||Delphix||[https://www.youtube.com/watch?v=GLABJRWwGMk Video]||[[Media:04-Fast_Clone_Deletion.pdf|Slides]]<br />
|-<br />
|MMP: Safe "zpool import" for Clusters||Olaf Faaland||LLNL||[https://www.youtube.com/watch?v=zZTP3zEfKYM Video]||[https://drive.google.com/file/d/0B_J4mRfoVJQRd3Vvc2ludGpvX1N0Y0E3bVd6ZjFRMmR0SnRJ/view?usp=sharing Slides]<br />
|-<br />
|Porting With OSX||Jorgen Lundman||GMO ||[https://www.youtube.com/watch?v=6_8jQnJf418 Video]||[[Media:06-Porting_with_OSX.pdf|Slides]]<br />
|-<br />
|Faster Allocation with the Log Spacemap||Serapheim Dimitropoulos||Delphix || [https://www.youtube.com/watch?v=jj2IxRkl5bQ Video]|| [https://drive.google.com/file/d/0B5fzqkw_-diCeDVZSzl0VnR6Tzg/view?usp=sharing Slides]<br />
|-<br />
|[[iFlash | iFlash: Dynamic Adaptive L2ARC Caching]]||Shailendra Tripathi||Tegile || [https://www.youtube.com/watch?v=oAjMr5IES2w Video]|| [[Media:08-iFlash.pdf|Slides]]<br />
|-<br />
|DRAID||Isaac Huang||Intel||[https://www.youtube.com/watch?v=xPU3rIHyCTs Video]||[[Media:09-dRAID.pdf|Slides]]<br />
|-<br />
|ZIL Performance: How I Doubled Sync Write Speed||Prakash Surya||Delphix||[https://www.youtube.com/watch?v=RUb8svObroE Video]||[[Media:10-ZIL_performance.pdf|Slides]]<br />
|}<br />
<br />
'''Talks: Day 2''' - Shorter talks, around 15 minutes each.<br />
<br />
{| class="wikitable"<br />
|-<br />
!Title!!Speaker!!Company!!Video!!Slides<br />
|-<br />
|"Oh Shift!" changing the allocation size||George Wilson||Delphix||[https://www.youtube.com/watch?v=_-QAnKtIbGc Video]|| [https://drive.google.com/file/d/0B5fzqkw_-diCZFVTZlpua3hjNWs/view?usp=sharing Slides]<br />
|-<br />
|A proposal for 1,000x better dedup performance||Matt Ahrens||Delphix||[https://www.youtube.com/watch?v=PYxFDBgxFS8 Video]||[[Media:ZFS_dedup.pdf | Slides]]<br />
|-<br />
|New prefetcher for sequential scrub||Tom Caputi||Datto||[https://www.youtube.com/watch?v=upn9tYh917s Video]||[[Media:New_Scrub_Prefetcher.pdf | Slides]]<br />
|-<br />
|Storage Pool Checkpoint||Serapheim Dimitropoulos||Delphix||[https://www.youtube.com/watch?v=fPQA8K40jAM Video]||[[Media:Storage_Pool_Checkpoint.pdf | Slides]]<br />
|-<br />
|Improving resilver: results & operational impacts||Saso Kiselkov||Nexenta||[https://www.youtube.com/watch?v=HnTYCjSo6ic Video]||[[Media:Saso_-_resilver_update.pdf | Slides]]<br />
|-<br />
|RAID-Z Expansion||Matt Ahrens||Delphix + FreeBSD Foundation||[https://www.youtube.com/watch?v=ZF8V7Tc9G28 Video]||[[Media:RAIDZ_Expansion_v2.pdf | Slides]]<br />
|}<br />
<br />
'''Thank you to the 2017 Platinum sponsors for their support!'''<br />
<br />
<div><ul> <br />
<li style="display: inline-block; padding: 20px; padding-bottom: 70px;"> [[File: Datto_logo_2015.jpg|80x80px|link=http://www.datto.com/ | right | datto ]] </li><br />
<li style="display: inline-block; padding: 20px; padding-bottom: 70px;"> [[File: Delphix logo.png|170x150px|link=http://delphix.com | right | Delphix]] </li><br />
<li style="display: inline-block; padding: 20px; padding-bottom: 60px;"> [[File: GitHub_Logo.png|120x120px|link=http://github.com | right | GitHub]] </li><br />
<li style="display: inline-block; padding: 20px; padding-bottom: 15px;"> [[File: MPSTOR_Logo.jpeg|200x200px|link=http://mpstor.com | right | MPSTOR]] </li><br />
<br><br />
<li style="display: inline-block; padding: 20px; padding-bottom: 65px;"> [[file:Nexenta_logo.jpg |180x180px|link=http://www.nexenta.com/ | right | Nexenta]] </li><br />
<li style="display: inline-block; padding: 20px; padding-bottom: 65px;">[[File: opendrives-logo.png|180x180px|link=https://opendrives.com/ | right | OpenDrives ]] </li><br />
<li style="display: inline-block; padding: 20px; padding-bottom: 65px;">[[File: OsNexus.png|180x180px|link= http://www.osnexus.com/ | right | OSNEXUS ]] </li><br />
<li style="display: inline-block; padding: 20px; padding-bottom: 65px;">[[File: OVH-logo.png|240x240px|link=http://www.ovh.com/ | right | OVH ]] </li><br />
</ul></div><br />
<br />
== Goals ==<br />
<br />
The high-level goals of OpenZFS are:<br />
* to '''raise awareness''' of the quality, utility, and availability of open source implementations of ZFS<br />
* to encourage '''open communication''' about ongoing efforts to improve open source ZFS<br />
* to ensure '''consistent reliability''', functionality, and performance of all distributions of ZFS.<br />
<br />
The main technical goal of OpenZFS is '''easier sharing of code''' between platforms. Strategies include:<br />
* creating a platform-independent [[mailing list]] for developers to review ZFS code and architecture changes from all platforms<br />
* smoothing the [[illumos integration process]]<br />
* making it easy to run both ztest and the ZFS test suite (TestRunner or STF based) on each platform<br />
* [[Reduce code differences | reducing code differences]] between the platforms.<br />
<br />
== Donate ==<br />
<br />
We perform automated testing on all [https://github.com/openzfs/openzfs/pulls OpenZFS Pull Requests], which run on public cloud infrastructure (Amazon AWS). We accept donations to cover our AWS bills.<br />
<br />
OpenZFS is an associated project of SPI ([https://www.spi-inc.org/projects/openzfs/ Software in the Public Interest]). SPI is a 501(c)3 nonprofit organization which handles our donations, finances, and legal holdings. You can donate through paypal using the link below:<br />
<br />
<html><br />
<form action="https://www.paypal.com/cgi-bin/webscr" method="post"><br />
<fieldset><br />
<input type="hidden" name="cmd" value="_s-xclick" /><br />
<input type="hidden" name="hosted_button_id" value="X6KB4BFPRFAG6" /><br />
<input type="image" src="https://www.paypalobjects.com/en_US/i/btn/btn_donateCC_LG.gif" name="submit" alt="Donate to OpenZFS via PayPal" /><br />
<img alt="" src="https://www.paypalobjects.com/en_US/i/scr/pixel.gif" width="1" height="1" /><br />
</fieldset><br />
</form><br />
</html><br />
<br />
== ZFS User Conference ==<br />
The ZFS User Conference will be held April 19-20th, 2018, in Norwalk CT. Details to come!<br />
<br />
The first ZFS User Conference was held March 16-17, 2017, in Norwalk CT. Videos and slides from the conference are available here: [http://zfs.datto.com/ zfs.datto.com]<br />
<br />
== Site orientation ==<br />
* [[FAQ]]<br />
* How to [[participate]]<br />
* [[Companies]] with products that are based on OpenZFS<br />
* Download [[distributions]] that include OpenZFS<br />
* [[Events]] – the forthcoming [[OpenZFS Developer Summit]] and more<br />
* [[Developer resources]]<br />
** [[mailing list]]<br />
** [[illumos integration process]]<br />
** [[contributors]]<br />
** [[platform code differences]]<br />
** [[OpenZFS Office Hours]]<br />
** implementation<br />
*** [[Documentation/ZfsSend | ZFS send]]<br />
*** [[Documentation/Administrative Commands | administrative commands]]<br />
* [[System Administration|Documentation]] for users/sysadmins<br />
** [[features]]<br />
** [[Feature Flags| feature flags]]<br />
** [[Publications| publications and conference talks]]<br />
** [[history]] – from ZFS to OpenZFS<br />
*** OpenZFS launch [[announcement]] – September 2013<br />
** [[performance tuning]]<br />
* [[Projects]]<br />
** [[reduce code differences]]<br />
** the [[Projects/ZFS Channel Programs | ZFS Channel Programs]] (ZCP) proposal<br />
* [[About OpenZFS]]<br />
<br />
[http://open-zfs.org/w/index.php?title=Special%3AAllPages&from=&to=&namespace=0&hideredirects=1 All main pages] (alphabetical order) …<br />
<br />
== Twitter ==<br />
<br />
<html><br />
<a class="twitter-timeline" width="720" height="437" href="https://twitter.com/OpenZFS" data-widget-id="378639669799288832">Tweets by @OpenZFS</a><br />
<script>!function(d,s,id){var js,fjs=d.getElementsByTagName(s)[0],p=/^http:/.test(d.location)?'http':'https';if(!d.getElementById(id)){js=d.createElement(s);js.id=id;js.src=p+"://platform.twitter.com/widgets.js";fjs.parentNode.insertBefore(js,fjs);}}(document,"script","twitter-wjs");</script><br />
<br />
<span><br />
<br><br />
<a href="https://twitter.com/openzfs" class="twitter-follow-button" data-show-count="true">Follow @openzfs</a><br />
<br><br />
<a href="https://twitter.com/share" class="twitter-share-button" data-via="OpenZFS">Tweet</a><br />
</span><br />
<script>!function(d,s,id){var js,fjs=d.getElementsByTagName(s)[0],p=/^http:/.test(d.location)?'http':'https';if(!d.getElementById(id)){js=d.createElement(s);js.id=id;js.src=p+'://platform.twitter.com/widgets.js';fjs.parentNode.insertBefore(js,fjs);}}(document, 'script', 'twitter-wjs');</script><br />
</html></div>Lundmanhttps://openzfs.org/w/index.php?title=Main_Page&diff=2424Main Page2017-11-11T05:02:39Z<p>Lundman: /* Summary */</p>
<hr />
<div>= Welcome to OpenZFS =<br />
__NOTOC__<br />
<br />
<br />
== Summary ==<br />
<br />
OpenZFS was [[announcement | announced in September 2013]] as the truly '''open source''' successor to the [[History | ZFS project]]. Our community '''brings together developers''' from the illumos, FreeBSD, Linux, and OS X [[distributions | platforms]], and a wide range of [[companies]] that build products on top of OpenZFS. <br />
<br />
OpenZFS is an '''outstanding storage platform''' that encompasses the functionality of traditional filesystems, volume managers, and more, with consistent reliability, functionality and performance across all [[distributions]]: <br />
<br />
{| class="wikitable"<br />
| '''illumos'''<br />
|[http://wiki.illumos.org/display/illumos/ZFS Webpage]<br />
|[https://github.com/illumos/illumos-gate/ GitHub]<br />
|-<br />
| '''FreeBSD'''<br />
|[https://wiki.freebsd.org/ZFS Webpage]<br />
|[https://github.com/freebsd/freebsd/ GitHub] <br />
|-<br />
| '''ZFS on Linux'''<br />
|[http://zfsonlinux.org/ Webpage]<br />
|[https://github.com/zfsonlinux/zfs/ GitHub]<br />
|-<br />
| '''OpenZFS on OS X'''<br />
|[https://openzfsonosx.org/ Webpage]<br />
|[https://github.com/openzfsonosx/ GitHub]<br />
|-<br />
| '''OpenZFS on Windows'''<br />
|<br />
|[https://github.com/openzfsonwindows/ZFSin GitHub]<br />
|}<br />
<br />
== [[OpenZFS Developer Summit 2017]] <-- click for more info ==<br />
<br />
The fifth annual [[OpenZFS Developer Summit 2017|OpenZFS Developer Summit]] was held in San Francisco, '''October 24-25th, 2017'''.<br />
<br />
'''Talks: Day 1''' - Main talks, typically 45 minutes each.<br />
<br />
{| class="wikitable"<br />
|-<br />
!Title!!Speaker!!Company!!Video!!Slides<br />
|-<br />
|State of the Union||Matt Ahrens||Delphix || [https://www.youtube.com/watch?v=1LkHsofR_kc Video] || [https://drive.google.com/file/d/0B5fzqkw_-diCX0x5d2hIVDhYZ28/view?usp=sharing Slides]<br />
|-<br />
|Keynote: ZFS Past & Future||Mark Maybee||Oracle || Not Available || N/A<br />
|-<br />
|ZSTD Compression||Allan Jude||ScaleEngine||[https://www.youtube.com/watch?v=hWnWEitDPlM Video]||[[Media:03-OpenZFS_2017_-_ZStandard_in_ZFS.pdf|Slides]]<br />
|-<br />
|Fast Clone Deletion||Sara Hartse||Delphix||[https://www.youtube.com/watch?v=GLABJRWwGMk Video]||[[Media:04-Fast_Clone_Deletion.pdf|Slides]]<br />
|-<br />
|MMP: Safe "zpool import" for Clusters||Olaf Faaland||LLNL||[https://www.youtube.com/watch?v=zZTP3zEfKYM Video]||[https://drive.google.com/file/d/0B_J4mRfoVJQRd3Vvc2ludGpvX1N0Y0E3bVd6ZjFRMmR0SnRJ/view?usp=sharing Slides]<br />
|-<br />
|Porting With OSX||Jorgen Lundman||GMO ||[https://www.youtube.com/watch?v=6_8jQnJf418 Video]||[[Media:06-Porting_with_OSX.pdf|Slides]]<br />
|-<br />
|Faster Allocation with the Log Spacemap||Serapheim Dimitropoulos||Delphix || [https://www.youtube.com/watch?v=jj2IxRkl5bQ Video]|| [https://drive.google.com/file/d/0B5fzqkw_-diCeDVZSzl0VnR6Tzg/view?usp=sharing Slides]<br />
|-<br />
|[[iFlash | iFlash: Dynamic Adaptive L2ARC Caching]]||Shailendra Tripathi||Tegile || [https://www.youtube.com/watch?v=oAjMr5IES2w Video]|| [[Media:08-iFlash.pdf|Slides]]<br />
|-<br />
|DRAID||Isaac Huang||Intel||[https://www.youtube.com/watch?v=xPU3rIHyCTs Video]||[[Media:09-dRAID.pdf|Slides]]<br />
|-<br />
|ZIL Performance: How I Doubled Sync Write Speed||Prakash Surya||Delphix||[https://www.youtube.com/watch?v=RUb8svObroE Video]||[[Media:10-ZIL_performance.pdf|Slides]]<br />
|}<br />
<br />
'''Talks: Day 2''' - Shorter talks, around 15 minutes each.<br />
<br />
{| class="wikitable"<br />
|-<br />
!Title!!Speaker!!Company!!Video!!Slides<br />
|-<br />
|"Oh Shift!" changing the allocation size||George Wilson||Delphix||[https://www.youtube.com/watch?v=_-QAnKtIbGc Video]|| [https://drive.google.com/file/d/0B5fzqkw_-diCZFVTZlpua3hjNWs/view?usp=sharing Slides]<br />
|-<br />
|A proposal for 1,000x better dedup performance||Matt Ahrens||Delphix||[https://www.youtube.com/watch?v=PYxFDBgxFS8 Video]||[[Media:ZFS_dedup.pdf | Slides]]<br />
|-<br />
|New prefetcher for sequential scrub||Tom Caputi||Datto||[https://www.youtube.com/watch?v=upn9tYh917s Video]||[[Media:New_Scrub_Prefetcher.pdf | Slides]]<br />
|-<br />
|Storage Pool Checkpoint||Serapheim Dimitropoulos||Delphix||[https://www.youtube.com/watch?v=fPQA8K40jAM Video]||[[Media:Storage_Pool_Checkpoint.pdf | Slides]]<br />
|-<br />
|Improving resilver: results & operational impacts||Saso Kiselkov||Nexenta||[https://www.youtube.com/watch?v=HnTYCjSo6ic Video]||[[Media:Saso_-_resilver_update.pdf | Slides]]<br />
|-<br />
|RAID-Z Expansion||Matt Ahrens||Delphix + FreeBSD Foundation||[https://www.youtube.com/watch?v=ZF8V7Tc9G28 Video]||[[Media:RAIDZ_Expansion_v2.pdf | Slides]]<br />
|}<br />
<br />
'''Thank you to the 2017 Platinum sponsors for their support!'''<br />
<br />
<div><ul> <br />
<li style="display: inline-block; padding: 20px; padding-bottom: 70px;"> [[File: Datto_logo_2015.jpg|80x80px|link=http://www.datto.com/ | right | datto ]] </li><br />
<li style="display: inline-block; padding: 20px; padding-bottom: 70px;"> [[File: Delphix logo.png|170x150px|link=http://delphix.com | right | Delphix]] </li><br />
<li style="display: inline-block; padding: 20px; padding-bottom: 60px;"> [[File: GitHub_Logo.png|120x120px|link=http://github.com | right | GitHub]] </li><br />
<li style="display: inline-block; padding: 20px; padding-bottom: 15px;"> [[File: MPSTOR_Logo.jpeg|200x200px|link=http://mpstor.com | right | MPSTOR]] </li><br />
<br><br />
<li style="display: inline-block; padding: 20px; padding-bottom: 65px;"> [[file:Nexenta_logo.jpg |180x180px|link=http://www.nexenta.com/ | right | Nexenta]] </li><br />
<li style="display: inline-block; padding: 20px; padding-bottom: 65px;">[[File: opendrives-logo.png|180x180px|link=https://opendrives.com/ | right | OpenDrives ]] </li><br />
<li style="display: inline-block; padding: 20px; padding-bottom: 65px;">[[File: OsNexus.png|180x180px|link= http://www.osnexus.com/ | right | OSNEXUS ]] </li><br />
<li style="display: inline-block; padding: 20px; padding-bottom: 65px;">[[File: OVH-logo.png|240x240px|link=http://www.ovh.com/ | right | OVH ]] </li><br />
</ul></div><br />
<br />
== Goals ==<br />
<br />
The high-level goals of OpenZFS are:<br />
* to '''raise awareness''' of the quality, utility, and availability of open source implementations of ZFS<br />
* to encourage '''open communication''' about ongoing efforts to improve open source ZFS<br />
* to ensure '''consistent reliability''', functionality, and performance of all distributions of ZFS.<br />
<br />
The main technical goal of OpenZFS is '''easier sharing of code''' between platforms. Strategies include:<br />
* creating a platform-independent [[mailing list]] for developers to review ZFS code and architecture changes from all platforms<br />
* smoothing the [[illumos integration process]]<br />
* making it easy to run both ztest and the ZFS test suite (TestRunner or STF based) on each platform<br />
* [[Reduce code differences | reducing code differences]] between the platforms.<br />
<br />
== Donate ==<br />
<br />
We perform automated testing on all [https://github.com/openzfs/openzfs/pulls OpenZFS Pull Requests], which run on public cloud infrastructure (Amazon AWS). We accept donations to cover our AWS bills.<br />
<br />
OpenZFS is an associated project of SPI ([https://www.spi-inc.org/projects/openzfs/ Software in the Public Interest]). SPI is a 501(c)3 nonprofit organization which handles our donations, finances, and legal holdings. You can donate through paypal using the link below:<br />
<br />
<html><br />
<form action="https://www.paypal.com/cgi-bin/webscr" method="post"><br />
<fieldset><br />
<input type="hidden" name="cmd" value="_s-xclick" /><br />
<input type="hidden" name="hosted_button_id" value="X6KB4BFPRFAG6" /><br />
<input type="image" src="https://www.paypalobjects.com/en_US/i/btn/btn_donateCC_LG.gif" name="submit" alt="Donate to OpenZFS via PayPal" /><br />
<img alt="" src="https://www.paypalobjects.com/en_US/i/scr/pixel.gif" width="1" height="1" /><br />
</fieldset><br />
</form><br />
</html><br />
<br />
== ZFS User Conference ==<br />
The ZFS User Conference will be held April 19-20th, 2018, in Norwalk CT. Details to come!<br />
<br />
The first ZFS User Conference was held March 16-17, 2017, in Norwalk CT. Videos and slides from the conference are available here: [http://zfs.datto.com/ zfs.datto.com]<br />
<br />
== Site orientation ==<br />
* [[FAQ]]<br />
* How to [[participate]]<br />
* [[Companies]] with products that are based on OpenZFS<br />
* Download [[distributions]] that include OpenZFS<br />
* [[Events]] – the forthcoming [[OpenZFS Developer Summit]] and more<br />
* [[Developer resources]]<br />
** [[mailing list]]<br />
** [[illumos integration process]]<br />
** [[contributors]]<br />
** [[platform code differences]]<br />
** [[OpenZFS Office Hours]]<br />
** implementation<br />
*** [[Documentation/ZfsSend | ZFS send]]<br />
*** [[Documentation/Administrative Commands | administrative commands]]<br />
* [[System Administration|Documentation]] for users/sysadmins<br />
** [[features]]<br />
** [[Feature Flags| feature flags]]<br />
** [[Publications| publications and conference talks]]<br />
** [[history]] – from ZFS to OpenZFS<br />
*** OpenZFS launch [[announcement]] – September 2013<br />
** [[performance tuning]]<br />
* [[Projects]]<br />
** [[reduce code differences]]<br />
** the [[Projects/ZFS Channel Programs | ZFS Channel Programs]] (ZCP) proposal<br />
* [[About OpenZFS]]<br />
<br />
[http://open-zfs.org/w/index.php?title=Special%3AAllPages&from=&to=&namespace=0&hideredirects=1 All main pages] (alphabetical order) …<br />
<br />
== Twitter ==<br />
<br />
<html><br />
<a class="twitter-timeline" width="720" height="437" href="https://twitter.com/OpenZFS" data-widget-id="378639669799288832">Tweets by @OpenZFS</a><br />
<script>!function(d,s,id){var js,fjs=d.getElementsByTagName(s)[0],p=/^http:/.test(d.location)?'http':'https';if(!d.getElementById(id)){js=d.createElement(s);js.id=id;js.src=p+"://platform.twitter.com/widgets.js";fjs.parentNode.insertBefore(js,fjs);}}(document,"script","twitter-wjs");</script><br />
<br />
<span><br />
<br><br />
<a href="https://twitter.com/openzfs" class="twitter-follow-button" data-show-count="true">Follow @openzfs</a><br />
<br><br />
<a href="https://twitter.com/share" class="twitter-share-button" data-via="OpenZFS">Tweet</a><br />
</span><br />
<script>!function(d,s,id){var js,fjs=d.getElementsByTagName(s)[0],p=/^http:/.test(d.location)?'http':'https';if(!d.getElementById(id)){js=d.createElement(s);js.id=id;js.src=p+'://platform.twitter.com/widgets.js';fjs.parentNode.insertBefore(js,fjs);}}(document, 'script', 'twitter-wjs');</script><br />
</html></div>Lundmanhttps://openzfs.org/w/index.php?title=Main_Page&diff=2423Main Page2017-11-11T05:02:16Z<p>Lundman: </p>
<hr />
<div>= Welcome to OpenZFS =<br />
__NOTOC__<br />
<br />
<br />
== Summary ==<br />
<br />
OpenZFS was [[announcement | announced in September 2013]] as the truly '''open source''' successor to the [[History | ZFS project]]. Our community '''brings together developers''' from the illumos, FreeBSD, Linux, and OS X [[distributions | platforms]], and a wide range of [[companies]] that build products on top of OpenZFS. <br />
<br />
OpenZFS is an '''outstanding storage platform''' that encompasses the functionality of traditional filesystems, volume managers, and more, with consistent reliability, functionality and performance across all [[distributions]]: <br />
<br />
{| class="wikitable"<br />
| '''illumos'''<br />
|[http://wiki.illumos.org/display/illumos/ZFS Webpage]<br />
|[https://github.com/illumos/illumos-gate/ GitHub]<br />
|-<br />
| '''FreeBSD'''<br />
|[https://wiki.freebsd.org/ZFS Webpage]<br />
|[https://github.com/freebsd/freebsd/ GitHub] <br />
|-<br />
| '''ZFS on Linux'''<br />
|[http://zfsonlinux.org/ Webpage]<br />
|[https://github.com/zfsonlinux/zfs/ GitHub]<br />
|-<br />
| '''OpenZFS on OS X'''<br />
|[https://openzfsonosx.org/ Webpage]<br />
|[https://github.com/openzfsonosx/ GitHub]<br />
|-<br />
| '''OpenZFS on OS X'''<br />
|<br />
|[https://github.com/openzfsonwindows/ZFSin GitHub]<br />
|}<br />
<br />
<br />
== [[OpenZFS Developer Summit 2017]] <-- click for more info ==<br />
<br />
The fifth annual [[OpenZFS Developer Summit 2017|OpenZFS Developer Summit]] was held in San Francisco, '''October 24-25th, 2017'''.<br />
<br />
'''Talks: Day 1''' - Main talks, typically 45 minutes each.<br />
<br />
{| class="wikitable"<br />
|-<br />
!Title!!Speaker!!Company!!Video!!Slides<br />
|-<br />
|State of the Union||Matt Ahrens||Delphix || [https://www.youtube.com/watch?v=1LkHsofR_kc Video] || [https://drive.google.com/file/d/0B5fzqkw_-diCX0x5d2hIVDhYZ28/view?usp=sharing Slides]<br />
|-<br />
|Keynote: ZFS Past & Future||Mark Maybee||Oracle || Not Available || N/A<br />
|-<br />
|ZSTD Compression||Allan Jude||ScaleEngine||[https://www.youtube.com/watch?v=hWnWEitDPlM Video]||[[Media:03-OpenZFS_2017_-_ZStandard_in_ZFS.pdf|Slides]]<br />
|-<br />
|Fast Clone Deletion||Sara Hartse||Delphix||[https://www.youtube.com/watch?v=GLABJRWwGMk Video]||[[Media:04-Fast_Clone_Deletion.pdf|Slides]]<br />
|-<br />
|MMP: Safe "zpool import" for Clusters||Olaf Faaland||LLNL||[https://www.youtube.com/watch?v=zZTP3zEfKYM Video]||[https://drive.google.com/file/d/0B_J4mRfoVJQRd3Vvc2ludGpvX1N0Y0E3bVd6ZjFRMmR0SnRJ/view?usp=sharing Slides]<br />
|-<br />
|Porting With OSX||Jorgen Lundman||GMO ||[https://www.youtube.com/watch?v=6_8jQnJf418 Video]||[[Media:06-Porting_with_OSX.pdf|Slides]]<br />
|-<br />
|Faster Allocation with the Log Spacemap||Serapheim Dimitropoulos||Delphix || [https://www.youtube.com/watch?v=jj2IxRkl5bQ Video]|| [https://drive.google.com/file/d/0B5fzqkw_-diCeDVZSzl0VnR6Tzg/view?usp=sharing Slides]<br />
|-<br />
|[[iFlash | iFlash: Dynamic Adaptive L2ARC Caching]]||Shailendra Tripathi||Tegile || [https://www.youtube.com/watch?v=oAjMr5IES2w Video]|| [[Media:08-iFlash.pdf|Slides]]<br />
|-<br />
|DRAID||Isaac Huang||Intel||[https://www.youtube.com/watch?v=xPU3rIHyCTs Video]||[[Media:09-dRAID.pdf|Slides]]<br />
|-<br />
|ZIL Performance: How I Doubled Sync Write Speed||Prakash Surya||Delphix||[https://www.youtube.com/watch?v=RUb8svObroE Video]||[[Media:10-ZIL_performance.pdf|Slides]]<br />
|}<br />
<br />
'''Talks: Day 2''' - Shorter talks, around 15 minutes each.<br />
<br />
{| class="wikitable"<br />
|-<br />
!Title!!Speaker!!Company!!Video!!Slides<br />
|-<br />
|"Oh Shift!" changing the allocation size||George Wilson||Delphix||[https://www.youtube.com/watch?v=_-QAnKtIbGc Video]|| [https://drive.google.com/file/d/0B5fzqkw_-diCZFVTZlpua3hjNWs/view?usp=sharing Slides]<br />
|-<br />
|A proposal for 1,000x better dedup performance||Matt Ahrens||Delphix||[https://www.youtube.com/watch?v=PYxFDBgxFS8 Video]||[[Media:ZFS_dedup.pdf | Slides]]<br />
|-<br />
|New prefetcher for sequential scrub||Tom Caputi||Datto||[https://www.youtube.com/watch?v=upn9tYh917s Video]||[[Media:New_Scrub_Prefetcher.pdf | Slides]]<br />
|-<br />
|Storage Pool Checkpoint||Serapheim Dimitropoulos||Delphix||[https://www.youtube.com/watch?v=fPQA8K40jAM Video]||[[Media:Storage_Pool_Checkpoint.pdf | Slides]]<br />
|-<br />
|Improving resilver: results & operational impacts||Saso Kiselkov||Nexenta||[https://www.youtube.com/watch?v=HnTYCjSo6ic Video]||[[Media:Saso_-_resilver_update.pdf | Slides]]<br />
|-<br />
|RAID-Z Expansion||Matt Ahrens||Delphix + FreeBSD Foundation||[https://www.youtube.com/watch?v=ZF8V7Tc9G28 Video]||[[Media:RAIDZ_Expansion_v2.pdf | Slides]]<br />
|}<br />
<br />
'''Thank you to the 2017 Platinum sponsors for their support!'''<br />
<br />
<div><ul> <br />
<li style="display: inline-block; padding: 20px; padding-bottom: 70px;"> [[File: Datto_logo_2015.jpg|80x80px|link=http://www.datto.com/ | right | datto ]] </li><br />
<li style="display: inline-block; padding: 20px; padding-bottom: 70px;"> [[File: Delphix logo.png|170x150px|link=http://delphix.com | right | Delphix]] </li><br />
<li style="display: inline-block; padding: 20px; padding-bottom: 60px;"> [[File: GitHub_Logo.png|120x120px|link=http://github.com | right | GitHub]] </li><br />
<li style="display: inline-block; padding: 20px; padding-bottom: 15px;"> [[File: MPSTOR_Logo.jpeg|200x200px|link=http://mpstor.com | right | MPSTOR]] </li><br />
<br><br />
<li style="display: inline-block; padding: 20px; padding-bottom: 65px;"> [[file:Nexenta_logo.jpg |180x180px|link=http://www.nexenta.com/ | right | Nexenta]] </li><br />
<li style="display: inline-block; padding: 20px; padding-bottom: 65px;">[[File: opendrives-logo.png|180x180px|link=https://opendrives.com/ | right | OpenDrives ]] </li><br />
<li style="display: inline-block; padding: 20px; padding-bottom: 65px;">[[File: OsNexus.png|180x180px|link= http://www.osnexus.com/ | right | OSNEXUS ]] </li><br />
<li style="display: inline-block; padding: 20px; padding-bottom: 65px;">[[File: OVH-logo.png|240x240px|link=http://www.ovh.com/ | right | OVH ]] </li><br />
</ul></div><br />
<br />
== Goals ==<br />
<br />
The high-level goals of OpenZFS are:<br />
* to '''raise awareness''' of the quality, utility, and availability of open source implementations of ZFS<br />
* to encourage '''open communication''' about ongoing efforts to improve open source ZFS<br />
* to ensure '''consistent reliability''', functionality, and performance of all distributions of ZFS.<br />
<br />
The main technical goal of OpenZFS is '''easier sharing of code''' between platforms. Strategies include:<br />
* creating a platform-independent [[mailing list]] for developers to review ZFS code and architecture changes from all platforms<br />
* smoothing the [[illumos integration process]]<br />
* making it easy to run both ztest and the ZFS test suite (TestRunner or STF based) on each platform<br />
* [[Reduce code differences | reducing code differences]] between the platforms.<br />
<br />
== Donate ==<br />
<br />
We perform automated testing on all [https://github.com/openzfs/openzfs/pulls OpenZFS Pull Requests], which run on public cloud infrastructure (Amazon AWS). We accept donations to cover our AWS bills.<br />
<br />
OpenZFS is an associated project of SPI ([https://www.spi-inc.org/projects/openzfs/ Software in the Public Interest]). SPI is a 501(c)3 nonprofit organization which handles our donations, finances, and legal holdings. You can donate through paypal using the link below:<br />
<br />
<html><br />
<form action="https://www.paypal.com/cgi-bin/webscr" method="post"><br />
<fieldset><br />
<input type="hidden" name="cmd" value="_s-xclick" /><br />
<input type="hidden" name="hosted_button_id" value="X6KB4BFPRFAG6" /><br />
<input type="image" src="https://www.paypalobjects.com/en_US/i/btn/btn_donateCC_LG.gif" name="submit" alt="Donate to OpenZFS via PayPal" /><br />
<img alt="" src="https://www.paypalobjects.com/en_US/i/scr/pixel.gif" width="1" height="1" /><br />
</fieldset><br />
</form><br />
</html><br />
<br />
== ZFS User Conference ==<br />
The ZFS User Conference will be held April 19-20th, 2018, in Norwalk CT. Details to come!<br />
<br />
The first ZFS User Conference was held March 16-17, 2017, in Norwalk CT. Videos and slides from the conference are available here: [http://zfs.datto.com/ zfs.datto.com]<br />
<br />
== Site orientation ==<br />
* [[FAQ]]<br />
* How to [[participate]]<br />
* [[Companies]] with products that are based on OpenZFS<br />
* Download [[distributions]] that include OpenZFS<br />
* [[Events]] – the forthcoming [[OpenZFS Developer Summit]] and more<br />
* [[Developer resources]]<br />
** [[mailing list]]<br />
** [[illumos integration process]]<br />
** [[contributors]]<br />
** [[platform code differences]]<br />
** [[OpenZFS Office Hours]]<br />
** implementation<br />
*** [[Documentation/ZfsSend | ZFS send]]<br />
*** [[Documentation/Administrative Commands | administrative commands]]<br />
* [[System Administration|Documentation]] for users/sysadmins<br />
** [[features]]<br />
** [[Feature Flags| feature flags]]<br />
** [[Publications| publications and conference talks]]<br />
** [[history]] – from ZFS to OpenZFS<br />
*** OpenZFS launch [[announcement]] – September 2013<br />
** [[performance tuning]]<br />
* [[Projects]]<br />
** [[reduce code differences]]<br />
** the [[Projects/ZFS Channel Programs | ZFS Channel Programs]] (ZCP) proposal<br />
* [[About OpenZFS]]<br />
<br />
[http://open-zfs.org/w/index.php?title=Special%3AAllPages&from=&to=&namespace=0&hideredirects=1 All main pages] (alphabetical order) …<br />
<br />
== Twitter ==<br />
<br />
<html><br />
<a class="twitter-timeline" width="720" height="437" href="https://twitter.com/OpenZFS" data-widget-id="378639669799288832">Tweets by @OpenZFS</a><br />
<script>!function(d,s,id){var js,fjs=d.getElementsByTagName(s)[0],p=/^http:/.test(d.location)?'http':'https';if(!d.getElementById(id)){js=d.createElement(s);js.id=id;js.src=p+"://platform.twitter.com/widgets.js";fjs.parentNode.insertBefore(js,fjs);}}(document,"script","twitter-wjs");</script><br />
<br />
<span><br />
<br><br />
<a href="https://twitter.com/openzfs" class="twitter-follow-button" data-show-count="true">Follow @openzfs</a><br />
<br><br />
<a href="https://twitter.com/share" class="twitter-share-button" data-via="OpenZFS">Tweet</a><br />
</span><br />
<script>!function(d,s,id){var js,fjs=d.getElementsByTagName(s)[0],p=/^http:/.test(d.location)?'http':'https';if(!d.getElementById(id)){js=d.createElement(s);js.id=id;js.src=p+'://platform.twitter.com/widgets.js';fjs.parentNode.insertBefore(js,fjs);}}(document, 'script', 'twitter-wjs');</script><br />
</html></div>Lundmanhttps://openzfs.org/w/index.php?title=Distributions&diff=2422Distributions2017-11-06T01:25:48Z<p>Lundman: /* OpenZFS on OS X */</p>
<hr />
<div>Open source distributions of OpenZFS are available for the following open source platforms. <br />
<br />
(For commercial products, see [[companies]].)<br />
<br />
== Darwin ==<br />
<br />
{|cellpadding="15"<br />
|[[File:UNIX-based.jpg | link=http://www.opensource.apple.com]]<br />
|<br />
At the core of [http://www.opengroup.org/openbrand/register/brand3612.htm Mac® OS X® El Capitan, which is certified to The Open Group UNIX® 03 standard], are [http://opensource.apple.com Apple® open source] [http://en.wikipedia.org/wiki/Darwin_(operating_system) Darwin] technologies. <br />
|}<br />
<br />
=== OpenZFS on OS X ===<br />
{|cellpadding="20" | width="100%"<br />
|<br />
[https://openzfsonosx.org OpenZFS on OS X] (O3X) brings OpenZFS features to Apple's OS X.<br />
<br />
The installer [https://openzfsonosx.org/wiki/Downloads release] of OpenZFS on OS X is [[OpenZFSOnOSX|ready for use]] by people who are comfortable with administering ZFS from the Terminal or who are willing to learn to do so. It's compatible with OS X 10.8 through OS X 10.13 (Mountain Lion, Mavericks, Yosemite, El Capitan, Sierra and High Sierra). <br />
<br />
| align="right" valign="text-top"| [[file:o3x-logo.png | link=https://openzfsonosx.org]]<br />
|}<br />
<br />
== FreeBSD® ==<br />
<br />
{|cellpadding="15"<br />
|[[file:FreeBSD-logo.png | 120px | link=http://www.freebsd.org/]]<br />
|<br />
A full general purpose operating system with several specialized distributions.<br />
|}<br />
<br />
=== Debian® GNU/kFreeBSD ===<br />
{|cellpadding="25" | width="100%"<br />
|<br />
[https://wiki.debian.org/Debian_GNU/kFreeBSD Debian® GNU/kFreeBSD] is a general purpose GNU distribution for amd64/i386 that uses the FreeBSD kernel, which provides an OpenZFS implementation.<br />
<br />
An official Debian release, still using GNU libc and with ninety percent of the same software packages available.<br />
<br />
The ''wheezy'' stable release:<br />
* can dual-boot 9.0 (default) or 8.3 kernels of FreeBSD<br />
* uses pool version 28 (deduplication, raidz3, removable log devices)<br />
* lacks support for ''ashift='', and important development tools like DTrace<br />
* installer supports creation of pools, installing to them, and booting directly from them with GRUB2.<br />
<br />
The ''testing'' release will be updated with new FreeBSD kernel releases, gaining many OpenZFS enhancements, including support for lz4 compression.<br />
| align="right" valign="text-top" | [[file:Debian-openlogo-100.jpg | 80px | link=https://wiki.debian.org/Debian_GNU/kFreeBSD]]<br />
|}<br />
<br />
=== FreeBSD ===<br />
{|cellpadding="10" | width="100%"<br />
|<br />
[http://www.freebsd.org/ FreeBSD] is a general purpose server operating system. Versions 8.4 and 9.2 are OpenZFS; prior versions lack the associated feature set.<br />
* [http://www.freebsd.org/releases/ Download]<br />
* browse ZFS source code in [https://github.com/freebsd/freebsd/tree/master/sys/cddl/contrib/opensolaris/uts/common/fs/zfs GitHub] or [http://svnweb.freebsd.org/base/head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/ websvn] or [http://nxr.netbsd.org/search?q=&project=src-freebsd OpenGrok].<br />
| align="right" valign="text-top" | [[file:FreeBSD-logo.png |120px|link=http://freebsd.org]]<br />
|}<br />
<br />
=== FreeNAS® ===<br />
{|cellpadding="10" | width="100%"<br />
|<br />
[http://www.freenas.org/ FreeNAS] is NAS appliance software.<br />
<br />
[http://www.ixsystems.com/storage/ix/truenas/ Commercial support] is available for sister product TrueNAS from iXsystems.<br />
| align="right" valign="text-top" | [[file:FreeNAS_Shark_Transparent_on_dark.png |120px|link=http://www.freenas.org/]]<br />
|}<br />
<br />
=== PC-BSD® ===<br />
{|cellpadding="10" | width="100%"<br />
|<br />
[http://www.pcbsd.org/ PC-BSD] is a workstation/desktop operating system.<br />
<br />
[https://webnew.ixsystems.com/wp-content/uploads/2015/07/iXsystems_ProfessionalServices_Brochure_WEB1.pdf Professional FreeBSD/PC-BSD Enterprise & Desktop Support Services] are available from iXsystems.<br />
| align="right" valign="text-top" | [[file:Pcbsd-logo.png|120px|link=http://www.pcbsd.org/]]<br />
|}<br />
<br />
== illumos ==<br />
{|cellpadding="15"<br />
|[[file:BigHighResPhoenixLogotypeRGB.png |120px|link=http://illumos.org]]<br />
|<br />
The [http://www.illumos.org illumos] codebase is the foundation for various distributions – comparable to the relationship between the Linux kernel and Linux distributions.<br />
The codebase originated as a fork from the last release of OpenSolaris.<br />
* Browse ZFS source code in [http://src.illumos.org/source/xref/illumos-gate/usr/src/uts/common/fs/zfs opengrok] or [https://github.com/illumos/illumos-gate/tree/master/usr/src/uts/common/fs/zfs GitHub].<br />
|}<br />
<br />
=== OmniOS ===<br />
{|cellpadding="15" | width="100%"<br />
|<br />
[http://omnios.omniti.com/ OmniOS] is a general purpose server operating system. <br />
<br />
[http://omniti.com/does/omnios Commercial support] is available from [http://omniti.com/ OmniTI].<br />
<br />
* [http://omnios.omniti.com/wiki.php/Installation Download]<br />
* [https://github.com/omniti-labs/illumos-omnios/tree/master/usr/src/uts/common/fs/zfs source code]<br />
| align="right" valign="text-top"| [[file:OmniOS_logo.png |100px|link=http://omnios.omniti.com/]]<br />
|}<br />
<br />
=== OpenIndiana ===<br />
{|cellpadding="8" | width="100%"<br />
|<br />
[http://openindiana.org/ OpenIndiana] (OI) is a general purpose server operating system.<br />
<br />
* [http://openindiana.org/download/ Download]<br />
* [https://hg.openindiana.org/ source code]<br />
| align="right" valign="text-top" | [[file:OpenIndiana_logo_x1200.png |120px|link=http://openindiana.org/]]<br />
|}<br />
<br />
=== SmartOS™ ===<br />
{|cellpadding="8" | width="100%"<br />
|<br />
[http://smartos.org SmartOS] is a specialised type 1 hypervisor platform that is lean enough to run entirely in memory and powerful enough to run as much as you want to throw at it. Provisioning is blindingly fast, thanks to zones and ZFS file system creation. SmartOS is a fundamental component of the [http://www.joyent.com/products/private-cloud Joyent® SmartDataCenter™] (SDC) product.<br />
* [http://wiki.smartos.org/display/DOC/Download+SmartOS Download]<br />
* [https://github.com/joyent/smartos-live source code]<br />
| align="right" valign="text-top" | [[File:Smartos-stacked-blue.png | 120px | link= http://smartos.org]]<br />
|}<br />
<br />
== Linux ==<br />
<br />
Since its inception in the 1990s, the Linux operating system has become the most widely used software in the world.<br />
<br />
=== Ubuntu ===<br />
<br />
[https://www.ubuntu.com/ Ubuntu] 16.04 and later releases have built-in support for OpenZFS. For more information, see the [https://wiki.ubuntu.com/ZFS Ubuntu ZFS] page and [https://insights.ubuntu.com/2016/02/16/zfs-is-the-fs-for-containers-in-ubuntu-16-04/ announcement]<br />
<br />
=== Gentoo ===<br />
{|cellpadding="10" | width="100%"<br />
|<br />
[http://www.gentoo.org Gentoo] provides first-party [[#ZFS_on_Linux | ZFS on Linux]] packages to itself and its derivatives. <br />
<br />
Gentoo can be automatically optimized and customized for just about any application or need. Extreme configurability, performance and a top-notch user and developer community are all hallmarks of the Gentoo experience.<br />
<br />
Derivatives include: <br />
| align="right" valign="text-top" | [[file:Gblend.png |80px|link=http://www.gentoo.org/]]<br />
|-<br />
|<br />
* [http://www.funtoo.org Funtoo Linux], which features native UTF-8 support enabled by default, a git-based, distributed Portage Tree and funtoo overlay, an enhanced Portage with more compact mini-manifest tree, automated imports of new Gentoo changes every 12 hours, GPT/GUID boot support and streamlined boot configuration, enhanced network configuration, up-to-date stable and current Funtoo stages, all built using Funtoo's Metro build tool<br />
| align="right" valign="text-top"| [[file:Funtoo.png |80px|link=http://www.funtoo.org]]<br />
|-<br />
|<br />
* [http://www.pentoo.ch Pentoo], a security-focused livecd<br />
| [[file:PentooLogo.jpeg |120px|link=http://www.pentoo.ch]]<br />
|-<br />
|<br />
* [http://www.sabayon.org Sabayon], which emanates substantially from Gentoo's testing branch. <br />
| [[file:Sabayon-logo.png |120px|link=http://www.sabayon.org]]<br />
|}<br />
<br />
=== OviOS ===<br />
<br />
[http://www.ovios.org OviOS] Linux uses OpenZFS to provide a Linux based storage appliance.<br />
<br />
The OviOS zfs packages are build from source specifically for OviOS.<br />
<br />
=== ZFS on Linux ===<br />
{|cellpadding="10" | width="100%"<br />
|<br />
[http://www.zfsonlinux.org ZFS on Linux] provides self-building packages for Debian, Fedora, RHEL/CentOS/SL, Ubuntu and build instructions for several other distributions. <br />
* Implemented in the kernel <br />
* maintained in a code repository that is independent from the mainline kernel.<br />
| align="right" valign="text-top"| [[file:zfs-linux.png |100px|link=http://zfsonlinux.org/]]<br />
|}<br />
<br />
== OSv ==<br />
<br />
{|cellpadding="15"<br />
|<br />
[http://osv.io OSv] is a new operating system designed for the cloud. It only runs virtualized, and the only file system it supports is ZFS.<br />
* Implemented in the kernel <br />
* ZFS codebase forked from FreeBSD; but planning to move to open-zfs.org upstream ASAP.<br />
|[[file:osv.png |100px|link=http://osv.io/]]<br />
|}<br />
<br />
----<br />
<center>Distribution logos used with permission. All trademarks are the property of their respective owners.</center></div>Lundmanhttps://openzfs.org/w/index.php?title=Contributors&diff=2421Contributors2017-11-06T01:24:54Z<p>Lundman: /* Jorgen Lundman */</p>
<hr />
<div>== ZFS experts ==<br />
The following people have volunteered to help answer questions in their specific areas of expertise. The [[mailing list]] is also a general resource for code-related questions. <br />
<br />
Alphabetically by last name:<br />
<br />
=== [[User:mahrens | Matt Ahrens]] ===<br />
Co-founded the ZFS project at Sun in 2001; designed & implemented many features including snapshot & clones, send and receive, scrub/resilver.<br />
<br />
Broad knowledge of ZFS, but most expertise in DMU, DSL, and ZAP.<br />
<br />
=== [[User:WillAndrews | Will Andrews]] ===<br />
<br />
Spectra Logic & FreeBSD ZFS team member since November 2011, minor role in the OS X port since late 2012.<br />
<br />
Primary areas of focus are in DMU & ZVOL, involving I/O performance, bug fixes, & portability.<br />
<br />
=== [[User:behlendorf | Brian Behlendorf]] ===<br />
<br />
ZFS on Linux maintainer; implemented the SPL and adapted ZFS for the Linux kernel.<br />
<br />
Broad knowledge of Linux kernel internals and ZFS in general.<br />
<br />
=== [[User:gibbs | Justin T. Gibbs]] ===<br />
<br />
Member of Spectra Logic's team working on ZFS enhancements, including [http://www.youtube.com/watch?v=LtY3vpX-cdM Optimizing ZFS for Block Storage].<br />
<br />
Broad knowledge of FreeBSD internals, FreeBSD's integration of ZFS, and the DMU and vdev layers.<br />
<br />
=== [[User:delphij | Xin Li]] ===<br />
<br />
Developer at FreeBSD and FreeNAS projects, working at iXsystems; Worked on FreeBSD's ZFS effort since 2009.<br />
<br />
Broad knowledge of FreeBSD internals and FreeBSD's integration with ZFS.<br />
<br />
=== [[User:lundman | Jorgen Lundman]] ===<br />
<br />
Working on [[Distributions#ZFS-OSX | OpenZFS on OS X]].<br />
Working on [[Distributions#Windows | OpenZFS on Windows]].<br />
<br />
Added ZFS support to [http://www.denx.de/wiki/U-Boot U-Boot] and initial ZFS on Linux port to ARM.<br />
<br />
=== [[User:Matuska | Martin Matuska]] ===<br />
<br />
FreeBSD ZFS team member since 2010; keeping FreeBSD in sync with illumos and fixing small bugs.<br />
<br />
Most expertise in porting of illumos changes to FreeBSD.<br />
<br />
=== [[User:Csiden | Chris Siden]] ===<br />
<br />
Implemented zpool feature flags and background destroy of filesystems.<br />
<br />
Most expertise in Feature Flags, ztest, and illumos development process.<br />
<br />
=== [[User:Gwilson | George Wilson]] ===<br />
<br />
ZFS developer since 2005; implemented single-copy ARC and many SPA-layer performance enhancements.<br />
<br />
Most expertise in SPA (space maps, ZIO pipeline, block allocation, etc), ARC, and corrupt pool recovery.<br />
<br />
=== [[User:Aron | Aron Xu]] ===<br />
<br />
Work on ZFS on Linux support in Debian as co-maintainer.<br />
<br />
=== [[User:Ryao | Richard Yao]] ===<br />
<br />
The Gentoo Linux ZFS maintainer since January 2012; many miscellaneous improvements to Linux port.<br />
<br />
Most expertise in Linux integration and ZFS on Linux development process.<br />
<br />
----<br />
<br />
''Please add yourself above with a sentence about your experience with ZFS, a sentence about your areas of expertise, and a link to how to contact you (could be via your User: page on this site).''</div>Lundmanhttps://openzfs.org/w/index.php?title=FAQ&diff=2420FAQ2017-11-06T01:23:28Z<p>Lundman: /* Can disks that use ZFS be used with Microsoft® Windows®? */</p>
<hr />
<div>== General ==<br />
<br />
=== Who contributes to OpenZFS? ===<br />
<br />
OpenZFS brings together developers from multiple open-source forks of the original ZFS project from OpenSolaris to help ensure the compatibility and quality of all of our implementations.<br />
<br />
{| class="wikitable"<br />
| '''illumos'''<br />
|[http://wiki.illumos.org/display/illumos/ZFS Webpage]<br />
|[https://github.com/illumos/illumos-gate/ GitHub]<br />
|-<br />
| '''FreeBSD'''<br />
|[https://wiki.freebsd.org/ZFS Webpage]<br />
|[https://github.com/freebsd/freebsd/ GitHub] <br />
|-<br />
| '''ZFS on Linux'''<br />
|[http://zfsonlinux.org/ Webpage]<br />
|[https://github.com/zfsonlinux/zfs/ GitHub]<br />
|-<br />
| '''ZFS-OSX'''<br />
|[http://maczfs.org MacZFS]<br />
|[https://github.com/zfs-osx/ GitHub]<br />
|}<br />
<br />
== Development Model ==<br />
<br />
=== Why are there four different repositories? ===<br />
<br />
Each repository supports a different operating system. Even though the core of OpenZFS is platform-independent, there are a significant number of platform-specific changes need to be maintained for the parts of ZFS which interact with the rest of the operating system (VFS, memory management, disk i/o, etc.).<br />
<br />
=== Are new features and improvements shared between the different repositories? ===<br />
<br />
Yes. Each implementation regularly ports [[Features|platform-independent changes]] from the other implementations. One of the goals of OpenZFS is to simplify this porting process.<br />
<br />
=== Are there plans to merge the different repositories? ===<br />
<br />
Not exactly. We want to simplify the sharing of code between implementations by having a platform-independent central repository that runs as a userland process on any operating system. Developers from any implementation could then easily install and test platform-independent changes in that central repository. Every implementation would port changes from this central repository instead of searching the commit history of the other implementations.<br />
<br />
There are several reasons we do not want a single repository to support all operating systems:<br />
* Every developer would have the burden of testing changes for four different operating systems. Most developers are only familiar with kernel development on their operating system of choice, so this would be a huge hurdle to development.<br />
* Each implementation has its own process for integrating changes, some of which cannot be changed. For example OpenZFS on illumos must follow the [[illumos integration process]] because it is part of the larger illumos operating system repository. Most developers are only familiar with the integration process for their operating system of choice. Learning other processes and interacting with multiple communities would be a hurdle to development.<br />
<br />
== Compatibility ==<br />
<br />
=== Are storage pools created by OpenZFS portable between operating systems? ===<br />
<br />
Pools can be moved freely between different implementations of OpenZFS wherever the implementations support the same [[Features#Feature Flags | feature flags]]. <br />
<br />
You can disable a feature flag for a pool when the pool is created. This may be appropriate if you expect to use the pool with a different implementation that does not support the feature. <br />
<br />
To maintain compatibility, new feature flags are usually ported to all operating systems very quickly. <br />
<br />
Just one pool version is associated with feature flags: version 5000. Versions less than 5000 can not use feature flags. <br />
<br />
=== Are storage pools created by OpenZFS compatible with ZEVO and with Oracle® Solaris? ===<br />
<br />
Yes, if you specify a pool version at the time of creation of the pool:<br />
<br />
* 28 or less. <br />
<br />
GreenBytes ZEVO Community Edition 1.1.1 is [http://zevo.getgreenbytes.com/wiki/pmwiki.php?n=Site.ZFSPoolAndFilesystemVersions based on ZFS pool version 28 and ZFS file system (zpl) version 5]. Its use of a standard ZFS on-disk format is therefore binary compatible with ZFS on other platforms that support version 28 or greater. <br />
<br />
Whilst ZEVO CE 1.1.1 was not intended to support ''direct interchange'' with other platforms, there are [http://zevo.getgreenbytes.com/forum/viewtopic.php?t=13 reports of success].<br />
<br />
=== Are pools created by Solaris compatible with OpenZFS? ===<br />
<br />
Yes, if created with pool version 28 or earlier.<br />
<br />
Oracle's [https://github.com/zfsonlinux/zfs/issues/1225#issuecomment-12576515 closed source uses of pool versions 29–35 are not compatible].<br />
<br />
=== Can disks that use ZFS be used with Microsoft® Windows®? ===<br />
<br />
An OpenZFS port of code to Windows is not likely in the foreseeable future. The [http://hardware.slashdot.org/comments.pl?sid=4226771&cid=44880285 ''OpenZFS launch'' discussion on Slashdot] touches upon some of the issues.<br />
<br />
In Stack Exchange, [http://superuser.com/q/289189/84988 Access a ZFS volume in Windows?] includes approaches to using the disks with alternative operating systems, and accessing that data from Windows.<br />
<br />
During the [[OpenZFS_Developer_Summit_2017]] [[User:Lundman|Jorgen Lundman]] gave a live demo showing a 'proof of concept' port to Windows® 10, showing such a port could be feasible in the future.<br />
<br />
== Licensing ==<br />
<br />
=== Do you plan to release OpenZFS under a license other than the CDDL? ===<br />
<br />
No. We do not have the power to change the license of OpenZFS. No single entity holds the copyright to all of the OpenZFS code and all contributors to OpenZFS maintain copyright to their changes. Changing the license would require the consent of each one whose changes are part of the current codebase. That is basically everyone who has contributed since 2001.<br />
<br />
=== What about the Linux port? ===<br />
<br />
The ZFS on Linux project maintains its own [http://zfsonlinux.org/faq.html#WhatAboutTheLicensingIssue FAQ entry] on this.</div>Lundmanhttps://openzfs.org/w/index.php?title=Main_Page&diff=2381Main Page2017-10-25T22:45:13Z<p>Lundman: reveal done, update title</p>
<hr />
<div>= Welcome to OpenZFS =<br />
__NOTOC__<br />
<br />
=[https://www.youtube.com/watch?v=ty0WhErsvz8 Watch OpenZFS DevSummit Day 2 live starting 9AM today]=<br />
<br />
<html><br />
<iframe width="560" height="315" src="https://www.youtube.com/embed/ty0WhErsvz8" frameborder="0" allowfullscreen></iframe><br />
</html><br />
<br />
== Summary ==<br />
<br />
OpenZFS was [[announcement | announced in September 2013]] as the truly '''open source''' successor to the [[History | ZFS project]]. Our community '''brings together developers''' from the illumos, FreeBSD, Linux, and OS X [[distributions | platforms]], and a wide range of [[companies]] that build products on top of OpenZFS. <br />
<br />
OpenZFS is an '''outstanding storage platform''' that encompasses the functionality of traditional filesystems, volume managers, and more, with consistent reliability, functionality and performance across all [[distributions]]: <br />
<br />
{| class="wikitable"<br />
| '''illumos'''<br />
|[http://wiki.illumos.org/display/illumos/ZFS Webpage]<br />
|[https://github.com/illumos/illumos-gate/ GitHub]<br />
|-<br />
| '''FreeBSD'''<br />
|[https://wiki.freebsd.org/ZFS Webpage]<br />
|[https://github.com/freebsd/freebsd/ GitHub] <br />
|-<br />
| '''ZFS on Linux'''<br />
|[http://zfsonlinux.org/ Webpage]<br />
|[https://github.com/zfsonlinux/zfs/ GitHub]<br />
|-<br />
| '''OpenZFS on OS X'''<br />
|[https://openzfsonosx.org/ Webpage]<br />
|[https://github.com/openzfsonosx/ GitHub]<br />
|}<br />
<br />
<br />
== [[OpenZFS Developer Summit 2017]] <-- click for more info ==<br />
<br />
The fifth annual [[OpenZFS Developer Summit 2017|OpenZFS Developer Summit]] will be held in San Francisco, '''October 24-25th, 2017'''.<br />
* [https://www.eventbrite.com/e/openzfs-developer-summit-2017-tickets-34912232427 Register using EventBrite]<br />
<br />
'''Talks: Day 1'''<br />
<br />
{| class="wikitable"<br />
|-<br />
!Title!!Speaker!!Company<br />
|-<br />
|State of the Union||Matt Ahrens||Delphix<br />
|-<br />
|Keynote: ZFS Past & Future||Mark Maybee||Oracle<br />
|-<br />
|MMP: Safe "zpool import" for Clusters||Olaf Faaland||LLNL<br />
|-<br />
|ZIL Performance: How I Doubled Sync Write Speed||Prakash Surya||Delphix<br />
|-<br />
|iFlash: Dynamic Adaptive L2ARC Caching||Shailendra Tripathi||Tegile<br />
|-<br />
|Faster Allocation with the Log Spacemap||Serapheim Dimitropoulos||Delphix<br />
|-<br />
|DRAID||Isaac Huang||Intel<br />
|-<br />
|Porting With OSX (and Windows) ||Jorgen Lundman||independent<br />
|-<br />
|Fast Clone Deletion||Sara Hartse||Delphix<br />
|-<br />
|ZSTD Compression||Allan Jude||ScaleEngine<br />
|}<br />
<br />
'''Talks: Day 2'''<br />
<br />
{| class="wikitable"<br />
|-<br />
!Title!!Speaker!!Company<br />
|-<br />
|A proposal for 1,000x better dedup performance||Matt Ahrens||Delphix<br />
|-<br />
|Improving resilver: results & operational impacts||Saso Kiselkov||Nexenta<br />
|-<br />
|Storage Pool Checkpoint||Serapheim Dimitropoulos||Delphix<br />
|-<br />
|New prefetcher for sequential scrub||Tom Caputi||Datto<br />
|-<br />
|RAID-Z Expansion||Matt Ahrens||Delphix + FreeBSD Foundation<br />
|}<br />
<br />
<br />
'''Thank you to the 2017 Platinum sponsors for their support!'''<br />
<br />
<div><ul> <br />
<li style="display: inline-block; padding: 20px; padding-bottom: 70px;"> [[File: Datto_logo_2015.jpg|80x80px|link=http://www.datto.com/ | right | datto ]] </li><br />
<li style="display: inline-block; padding: 20px; padding-bottom: 70px;"> [[File: Delphix logo.png|170x150px|link=http://delphix.com | right | Delphix]] </li><br />
<li style="display: inline-block; padding: 20px; padding-bottom: 60px;"> [[File: GitHub_Logo.png|120x120px|link=http://github.com | right | GitHub]] </li><br />
<li style="display: inline-block; padding: 20px; padding-bottom: 15px;"> [[File: MPSTOR_Logo.jpeg|200x200px|link=http://mpstor.com | right | MPSTOR]] </li><br />
<br><br />
<li style="display: inline-block; padding: 20px; padding-bottom: 65px;"> [[file:Nexenta_logo.jpg |180x180px|link=http://www.nexenta.com/ | right | Nexenta]] </li><br />
<li style="display: inline-block; padding: 20px; padding-bottom: 65px;">[[File: opendrives-logo.png|180x180px|link=https://opendrives.com/ | right | OpenDrives ]] </li><br />
<li style="display: inline-block; padding: 20px; padding-bottom: 65px;">[[File: OsNexus.png|180x180px|link= http://www.osnexus.com/ | right | OSNEXUS ]] </li><br />
<li style="display: inline-block; padding: 20px; padding-bottom: 65px;">[[File: OVH-logo.png|240x240px|link=http://www.ovh.com/ | right | OVH ]] </li><br />
</ul></div><br />
<br />
== Goals ==<br />
<br />
The high-level goals of OpenZFS are:<br />
* to '''raise awareness''' of the quality, utility, and availability of open source implementations of ZFS<br />
* to encourage '''open communication''' about ongoing efforts to improve open source ZFS<br />
* to ensure '''consistent reliability''', functionality, and performance of all distributions of ZFS.<br />
<br />
The main technical goal of OpenZFS is '''easier sharing of code''' between platforms. Strategies include:<br />
* creating a platform-independent [[mailing list]] for developers to review ZFS code and architecture changes from all platforms<br />
* smoothing the [[illumos integration process]]<br />
* making it easy to run both ztest and the ZFS test suite (TestRunner or STF based) on each platform<br />
* [[Reduce code differences | reducing code differences]] between the platforms.<br />
<br />
== Donate ==<br />
<br />
We perform automated testing on all [https://github.com/openzfs/openzfs/pulls OpenZFS Pull Requests], which run on public cloud infrastructure (Amazon AWS). We accept donations to cover our AWS bills.<br />
<br />
OpenZFS is an associated project of SPI ([https://www.spi-inc.org/projects/openzfs/ Software in the Public Interest]). SPI is a 501(c)3 nonprofit organization which handles our donations, finances, and legal holdings. You can donate through paypal using the link below:<br />
<br />
<html><br />
<form action="https://www.paypal.com/cgi-bin/webscr" method="post"><br />
<fieldset><br />
<input type="hidden" name="cmd" value="_s-xclick" /><br />
<input type="hidden" name="hosted_button_id" value="X6KB4BFPRFAG6" /><br />
<input type="image" src="https://www.paypalobjects.com/en_US/i/btn/btn_donateCC_LG.gif" name="submit" alt="Donate to OpenZFS via PayPal" /><br />
<img alt="" src="https://www.paypalobjects.com/en_US/i/scr/pixel.gif" width="1" height="1" /><br />
</fieldset><br />
</form><br />
</html><br />
<br />
== ZFS User Conference ==<br />
The ZFS User Conference will be held April 19-20th, 2018, in Norwalk CT. Details to come!<br />
<br />
The first ZFS User Conference was held March 16-17, 2017, in Norwalk CT. Videos and slides from the conference are available here: [http://zfs.datto.com/ zfs.datto.com]<br />
<br />
== Site orientation ==<br />
* [[FAQ]]<br />
* How to [[participate]]<br />
* [[Companies]] with products that are based on OpenZFS<br />
* Download [[distributions]] that include OpenZFS<br />
* [[Events]] – the forthcoming [[OpenZFS Developer Summit]] and more<br />
* [[Developer resources]]<br />
** [[mailing list]]<br />
** [[illumos integration process]]<br />
** [[contributors]]<br />
** [[platform code differences]]<br />
** [[OpenZFS Office Hours]]<br />
** implementation<br />
*** [[Documentation/ZfsSend | ZFS send]]<br />
*** [[Documentation/Administrative Commands | administrative commands]]<br />
* [[System Administration|Documentation]] for users/sysadmins<br />
** [[features]]<br />
** [[Feature Flags| feature flags]]<br />
** [[Publications| publications and conference talks]]<br />
** [[history]] – from ZFS to OpenZFS<br />
*** OpenZFS launch [[announcement]] – September 2013<br />
** [[performance tuning]]<br />
* [[Projects]]<br />
** [[reduce code differences]]<br />
** the [[Projects/ZFS Channel Programs | ZFS Channel Programs]] (ZCP) proposal<br />
* [[About OpenZFS]]<br />
<br />
[http://open-zfs.org/w/index.php?title=Special%3AAllPages&from=&to=&namespace=0&hideredirects=1 All main pages] (alphabetical order) …<br />
<br />
== Twitter ==<br />
<br />
<html><br />
<a class="twitter-timeline" width="720" height="437" href="https://twitter.com/OpenZFS" data-widget-id="378639669799288832">Tweets by @OpenZFS</a><br />
<script>!function(d,s,id){var js,fjs=d.getElementsByTagName(s)[0],p=/^http:/.test(d.location)?'http':'https';if(!d.getElementById(id)){js=d.createElement(s);js.id=id;js.src=p+"://platform.twitter.com/widgets.js";fjs.parentNode.insertBefore(js,fjs);}}(document,"script","twitter-wjs");</script><br />
<br />
<span><br />
<br><br />
<a href="https://twitter.com/openzfs" class="twitter-follow-button" data-show-count="true">Follow @openzfs</a><br />
<br><br />
<a href="https://twitter.com/share" class="twitter-share-button" data-via="OpenZFS">Tweet</a><br />
</span><br />
<script>!function(d,s,id){var js,fjs=d.getElementsByTagName(s)[0],p=/^http:/.test(d.location)?'http':'https';if(!d.getElementById(id)){js=d.createElement(s);js.id=id;js.src=p+'://platform.twitter.com/widgets.js';fjs.parentNode.insertBefore(js,fjs);}}(document, 'script', 'twitter-wjs');</script><br />
</html></div>Lundmanhttps://openzfs.org/w/index.php?title=Feature_Flags&diff=2235Feature Flags2017-02-20T08:01:10Z<p>Lundman: Update OSX 1.6.1</p>
<hr />
<div>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. <br />
<br />
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. <br />
<br />
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: <br />
<br />
* format changes that are independent<br />
* format changes that depend on each other. <br />
<br />
== Compatibility ==<br />
<br />
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. <br />
<br />
Features that are exclusive when enabled should be periodically ported to all distributions.<br />
<br />
== Reference materials ==<br />
<br />
[http://web.archive.org/web/20160419064650/http://blog.delphix.com/csiden/files/2012/01/ZFS_Feature_Flags.pdf ''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 …".<br />
<br />
[http://illumos.org/man/5/zpool-features <tt>zpool-features</tt>](5) – illumos<br />
<br />
[https://www.freebsd.org/cgi/man.cgi?query=zpool-features&sektion=7&manpath=FreeBSD <tt>zpool-features</tt>](7) – FreeBSD<br />
<br />
== Feature flags implementation ==<br />
<br />
{| class="wikitable"<br />
!Feature flag<br />
!colspan=4|FreeBSD<br />
!ZFS on Linux<br />
!OpenZFS OSX<br />
!OmniOS<br />
|-<br />
|<br />
| 10.3<br />
| 11.0<br />
| stable/11<br />
| r313645<br />
| 0.6.5<br />
| 1.6.1<br />
| r151014<br />
|-<br />
!async_destroy<br />
|style="background-color:lightgreen"|yes<br />
|style="background-color:lightgreen"|yes<br />
|style="background-color:lightgreen"|yes<br />
|style="background-color:lightgreen"|yes<br />
|style="background-color:lightgreen"|yes<br />
|style="background-color:lightgreen"|yes<br />
|style="background-color:lightgreen"|yes<br />
|-<br />
!empty_bpobj<br />
|style="background-color:lightgreen"|yes<br />
|style="background-color:lightgreen"|yes<br />
|style="background-color:lightgreen"|yes<br />
|style="background-color:lightgreen"|yes<br />
|style="background-color:lightgreen"|yes<br />
|style="background-color:lightgreen"|yes<br />
|style="background-color:lightgreen"|yes<br />
|-<br />
!lz4_compress<br />
|style="background-color:lightgreen"|yes<br />
|style="background-color:lightgreen"|yes<br />
|style="background-color:lightgreen"|yes<br />
|style="background-color:lightgreen"|yes<br />
|style="background-color:lightgreen"|yes<br />
|style="background-color:lightgreen"|yes<br />
|style="background-color:lightgreen"|yes<br />
|-<br />
!multi_vdev_crash_dump<br />
|style="background-color:lightgreen"|yes<br />
|style="background-color:lightgreen"|yes<br />
|style="background-color:lightgreen"|yes<br />
|style="background-color:lightgreen"|yes<br />
|no<br />
|no<br />
|style="background-color:lightgreen"|yes<br />
|-<br />
!spacemap_histogram<br />
|style="background-color:lightgreen"|yes<br />
|style="background-color:lightgreen"|yes<br />
|style="background-color:lightgreen"|yes<br />
|style="background-color:lightgreen"|yes<br />
|style="background-color:lightgreen"|yes<br />
|style="background-color:lightgreen"|yes<br />
|style="background-color:lightgreen"|yes<br />
|-<br />
!enabled_txg<br />
|style="background-color:lightgreen"|yes<br />
|style="background-color:lightgreen"|yes<br />
|style="background-color:lightgreen"|yes<br />
|style="background-color:lightgreen"|yes<br />
|style="background-color:lightgreen"|yes<br />
|style="background-color:lightgreen"|yes<br />
|style="background-color:lightgreen"|yes<br />
|-<br />
!hole_birth<br />
|style="background-color:lightgreen"|yes<br />
|style="background-color:lightgreen"|yes<br />
|style="background-color:lightgreen"|yes<br />
|style="background-color:lightgreen"|yes<br />
|style="background-color:lightgreen"|yes<br />
|style="background-color:lightgreen"|yes<br />
|style="background-color:lightgreen"|yes<br />
|-<br />
!extensible_dataset<br />
|style="background-color:lightgreen"|yes<br />
|style="background-color:lightgreen"|yes<br />
|style="background-color:lightgreen"|yes<br />
|style="background-color:lightgreen"|yes<br />
|style="background-color:lightgreen"|yes<br />
|style="background-color:lightgreen"|yes<br />
|style="background-color:lightgreen"|yes<br />
|-<br />
!embedded_data<br />
|style="background-color:lightgreen"|yes<br />
|style="background-color:lightgreen"|yes<br />
|style="background-color:lightgreen"|yes<br />
|style="background-color:lightgreen"|yes<br />
|style="background-color:lightgreen"|yes<br />
|style="background-color:lightgreen"|yes<br />
|style="background-color:lightgreen"|yes<br />
|-<br />
!bookmarks<br />
|style="background-color:lightgreen"|yes<br />
|style="background-color:lightgreen"|yes<br />
|style="background-color:lightgreen"|yes<br />
|style="background-color:lightgreen"|yes<br />
|style="background-color:lightgreen"|yes<br />
|style="background-color:lightgreen"|yes<br />
|style="background-color:lightgreen"|yes<br />
|-<br />
!filesystem_limits<br />
|style="background-color:lightgreen"|yes<br />
|style="background-color:lightgreen"|yes<br />
|style="background-color:lightgreen"|yes<br />
|style="background-color:lightgreen"|yes<br />
|style="background-color:lightgreen"|yes<br />
|style="background-color:lightgreen"|yes<br />
|style="background-color:lightgreen"|yes<br />
|-<br />
!large_blocks<br />
|style="background-color:lightgreen"|yes<br />
|style="background-color:lightgreen"|yes<br />
|style="background-color:lightgreen"|yes<br />
|style="background-color:lightgreen"|yes<br />
|style="background-color:lightgreen"|yes<br />
|style="background-color:lightgreen"|yes<br />
|style="background-color:lightgreen"|yes<br />
|-<br />
!sha512<br />
|no<br />
|style="background-color:lightgreen"|yes<br />
|style="background-color:lightgreen"|yes<br />
|style="background-color:lightgreen"|yes<br />
|??<br />
|style="background-color:lightgreen"|yes<br />
|??<br />
|-<br />
!skein<br />
|no<br />
|style="background-color:lightgreen"|yes<br />
|style="background-color:lightgreen"|yes<br />
|style="background-color:lightgreen"|yes<br />
|??<br />
|style="background-color:lightgreen"|yes<br />
|??<br />
|}<br />
<br />
'''Table legend'''<br />
* no = not implemented<br />
* yes = implemented<br />
<br />
Source: [http://blog.vx.sk/archives/44-OpenZFS-Feature-Flags-Compatibility-Matrix.html ''OpenZFS Feature Flags Compatibility Matrix - VX weblog'']</div>Lundmanhttps://openzfs.org/w/index.php?title=Feature_Flags&diff=2038Feature Flags2015-12-16T00:49:25Z<p>Lundman: /* Feature Flags Implementation */ Updating OS X</p>
<hr />
<div>Originally the ZFS on-disk format was versioned with a single number that was increased whenever a new on-disk format change was introduced. This worked well when a single entity controlled the development of ZFS; however, in the more distributed development model of OpenZFS a single version number is not ideal. Every OpenZFS implementation would need to agree on every change to the on-disk format.<br />
<br />
One of the first OpenZFS projects was a new versioning system called "feature flags" that tags on-disk format changes with unique names. The system supports both completely independent format changes, as well as format changes that depend on each other. A pool's on-disk format is portable between OpenZFS implementations as long as all of the feature flags in use by the pool are supported by both implementations.<br />
<br />
For more details see these [http://blog.delphix.com/csiden/files/2012/01/ZFS_Feature_Flags.pdf slides (Jan 2012)] and [http://illumos.org/man/5/zpool-features <tt>zpool-features(5)</tt>] (illumos) or [http://www.freebsd.org/cgi/man.cgi?query=zpool-features&sektion=7&manpath=FreeBSD+11-current <tt>zpool-features(7)</tt>] (FreeBSD).<br />
<br />
For greatest compatibility, features that are exclusive (when enabled) should be periodically ported to all other distributions.<br />
<br />
== Feature Flags Implementation ==<br />
The current state of OpenZFS feature flags implementation is in the following table.<br />
<br />
{| class="wikitable"<br />
!Feature flag<br />
!colspan=4|FreeBSD<br />
!ZFS on Linux<br />
!OpenZFS OSX<br />
!OmniOS<br />
|-<br />
|<br />
| 8.4<br />
| 9.3<br />
| 10.2<br />
| r283009<br />
| 0.6.5<br />
| 1.4.5<br />
| r151014<br />
|-<br />
!async_destroy<br />
|style="background-color:lightgreen"|yes<br />
|style="background-color:lightgreen"|yes<br />
|style="background-color:lightgreen"|yes<br />
|style="background-color:lightgreen"|yes<br />
|style="background-color:lightgreen"|yes<br />
|style="background-color:lightgreen"|yes<br />
|style="background-color:lightgreen"|yes<br />
|-<br />
!empty_bpobj<br />
|style="background-color:lightgreen"|yes<br />
|style="background-color:lightgreen"|yes<br />
|style="background-color:lightgreen"|yes<br />
|style="background-color:lightgreen"|yes<br />
|style="background-color:lightgreen"|yes<br />
|style="background-color:lightgreen"|yes<br />
|style="background-color:lightgreen"|yes<br />
|-<br />
!lz4_compress<br />
|style="background-color:lightgreen"|yes<br />
|style="background-color:lightgreen"|yes<br />
|style="background-color:lightgreen"|yes<br />
|style="background-color:lightgreen"|yes<br />
|style="background-color:lightgreen"|yes<br />
|style="background-color:lightgreen"|yes<br />
|style="background-color:lightgreen"|yes<br />
|-<br />
!multi_vdev_crash_dump<br />
|no<br />
|style="background-color:lightgreen"|yes<br />
|style="background-color:lightgreen"|yes<br />
|style="background-color:lightgreen"|yes<br />
|no<br />
|no<br />
|style="background-color:lightgreen"|yes<br />
|-<br />
!spacemap_histogram<br />
|no<br />
|style="background-color:lightgreen"|yes<br />
|style="background-color:lightgreen"|yes<br />
|style="background-color:lightgreen"|yes<br />
|style="background-color:lightgreen"|yes<br />
|style="background-color:lightgreen"|yes<br />
|style="background-color:lightgreen"|yes<br />
|-<br />
!enabled_txg<br />
|no<br />
|style="background-color:lightgreen"|yes<br />
|style="background-color:lightgreen"|yes<br />
|style="background-color:lightgreen"|yes<br />
|style="background-color:lightgreen"|yes<br />
|style="background-color:lightgreen"|yes<br />
|style="background-color:lightgreen"|yes<br />
|-<br />
!hole_birth<br />
|no<br />
|style="background-color:lightgreen"|yes<br />
|style="background-color:lightgreen"|yes<br />
|style="background-color:lightgreen"|yes<br />
|style="background-color:lightgreen"|yes<br />
|style="background-color:lightgreen"|yes<br />
|style="background-color:lightgreen"|yes<br />
|-<br />
!extensible_dataset<br />
|no<br />
|style="background-color:lightgreen"|yes<br />
|style="background-color:lightgreen"|yes<br />
|style="background-color:lightgreen"|yes<br />
|style="background-color:lightgreen"|yes<br />
|style="background-color:lightgreen"|yes<br />
|style="background-color:lightgreen"|yes<br />
|-<br />
!embedded_data<br />
|no<br />
|no<br />
|style="background-color:lightgreen"|yes<br />
|style="background-color:lightgreen"|yes<br />
|style="background-color:lightgreen"|yes<br />
|style="background-color:lightgreen"|yes<br />
|style="background-color:lightgreen"|yes<br />
|-<br />
!bookmarks<br />
|no<br />
|style="background-color:lightgreen"|yes<br />
|style="background-color:lightgreen"|yes<br />
|style="background-color:lightgreen"|yes<br />
|style="background-color:lightgreen"|yes<br />
|style="background-color:lightgreen"|yes<br />
|style="background-color:lightgreen"|yes<br />
|-<br />
!filesystem_limits<br />
|no<br />
|style="background-color:lightgreen"|yes<br />
|style="background-color:lightgreen"|yes<br />
|style="background-color:lightgreen"|yes<br />
|style="background-color:lightgreen"|yes<br />
|style="background-color:lightgreen"|yes<br />
|style="background-color:lightgreen"|yes<br />
|-<br />
!large_blocks<br />
|no<br />
|no<br />
|style="background-color:lightgreen"|yes<br />
|style="background-color:lightgreen"|yes<br />
|style="background-color:lightgreen"|yes<br />
|style="background-color:lightgreen"|yes<br />
|style="background-color:lightgreen"|yes<br />
|}<br />
<br />
'''Table legend'''<br />
* no = not implemented<br />
* yes = implemented<br />
<br />
Table original source: [http://blog.vx.sk/archives/44-OpenZFS-Feature-Flags-Compatibility-Matrix.html ''OpenZFS Feature Flags Compatibility Matrix''] at blog.vx.sk</div>Lundmanhttps://openzfs.org/w/index.php?title=Features&diff=2037Features2015-12-16T00:47:43Z<p>Lundman: /* Dataset Properties */ Updating OS X</p>
<hr />
<div>This page describes some of the more important features and performance improvements that are part of OpenZFS.<br />
<br />
Help would be appreciated in porting features between platforms whose status is "not yet".<br />
<br />
== Feature Flags ==<br />
<br />
See the [[Feature_Flags|Feature Flags]] wiki page.<br />
<br />
== libzfs_core ==<br />
<br />
See this [http://blog.delphix.com/matt/2012/01/17/the-future-of-libzfs/ blog post (Jan 2012)] and associated [http://blog.delphix.com/matt/files/2012/01/The_Future_of_LibZFS.pdf slides] and [http://www.youtube.com/watch?feature=player_embedded&list=PL1A94C8EECCAF7340&v=iJ0S91ygErE video] for more details.<br />
<br />
First introduced in:<br />
{| class="wikitable"<br />
|-<br />
|'''illumos'''<br />
|[https://github.com/illumos/illumos-gate/commit/4445fffbbb1ea25fd0e9ea68b9380dd7a6709025 June 2012]<br />
|-<br />
|'''FreeBSD'''<br />
|[https://github.com/freebsd/freebsd/commit/f1985e5cd725ff1816cd4afbdee2d95b661883f0 March 2013]<br />
|-<br />
|'''ZFS on Linux'''<br />
|[https://github.com/zfsonlinux/zfs/commit/6f1ffb06655008c9b519108ed29fbf03acd6e5de August 2013]<br />
|-<br />
|'''OpenZFS on OS X'''<br />
|[https://github.com/openzfsonosx/zfs/commit/50b0b2d9ea604d29ed729be8fa61bb77ae3ff4e9 October 2013]<br />
|}<br />
<br />
== CLI Usability ==<br />
<br />
These are improvements to the command line interface. While the end result is a generally more friendly user interface, getting the desired behavior often required modifications to the core of ZFS.<br />
<br />
''Listed in chronological order (oldest first).''<br />
<br />
==== Pool Comment ====<br />
<br />
OpenZFS has a per-pool comment property which can be set with the <tt>zpool set</tt> command and can be read even if the pool is not imported, so it is accessible even if pool import fails.<br />
<br />
{| class="wikitable"<br />
|-<br />
|'''illumos'''<br />
|[https://github.com/illumos/illumos-gate/commit/8704186e373c9ed74daa395ff3f7fd745396df9e Nov 2011]<br />
|-<br />
|'''FreeBSD'''<br />
|[https://github.com/freebsd/freebsd/commit/73cab7197174153a718dedc97ff344341bcf6098 Nov 2011]<br />
|-<br />
|'''ZFS on Linux'''<br />
|[https://github.com/zfsonlinux/zfs/commit/d96eb2b1538db13ee7a716ec0e1162f5735edc12 Aug 2012]<br />
|-<br />
|'''OpenZFS on OS X'''<br />
|[https://github.com/openzfsonosx/zfs/commit/d96eb2b1538db13ee7a716ec0e1162f5735edc12 Aug 2012]<br />
|}<br />
<br />
==== Size Estimates for <tt>zfs send</tt> and <tt>zfs destroy</tt> ====<br />
<br />
This feature enhances OpenZFS's internal space accounting information. This new accounting information is used to provide a <tt>-n</tt> (dry-run) option for <tt>zfs send</tt> which can instantly calculate the amount of send stream data a specific <tt>zfs send</tt> command would generate. It is also used for a <tt>-n</tt> option for <tt>zfs destroy</tt> which can instantly calculate the amount of space that would be reclaimed by a specific <tt>zfs destroy</tt> command.<br />
<br />
{| class="wikitable"<br />
|-<br />
|'''illumos'''<br />
|[https://github.com/illumos/illumos-gate/commit/e5351341b58845eee9d722bd71543d5a7c26b6cc Nov 2011]<br />
|-<br />
|'''FreeBSD'''<br />
|[https://github.com/freebsd/freebsd/commit/73cab7197174153a718dedc97ff344341bcf6098 Nov 2011]<br />
|-<br />
|'''ZFS on Linux'''<br />
|[https://github.com/zfsonlinux/zfs/commit/330d06f90d143b41b276796526a66a1c1fff046d Jul 2012]<br />
|-<br />
|'''OpenZFS on OS X'''<br />
|[https://github.com/openzfsonosx/zfs/commit/330d06f90d143b41b276796526a66a1c1fff046d Jul 2012]<br />
|}<br />
<br />
==== vdev Information in <tt>zpool list</tt> ====<br />
<br />
OpenZFS adds a <tt>-v</tt> option to the <tt>zpool list</tt> command which shows detailed sizing information about the vdevs in the pool:<br />
<br />
$ zpool list -v<br />
NAME SIZE ALLOC FREE EXPANDSZ CAP DEDUP HEALTH ALTROOT<br />
dcenter 5.24T 3.85T 1.39T - 73% 1.00x ONLINE -<br />
mirror 556G 469G 86.7G -<br />
c2t1d0 - - - -<br />
c2t0d0 - - - -<br />
mirror 556G 493G 63.0G -<br />
c2t3d0 - - - -<br />
c2t2d0 - - - -<br />
mirror 556G 493G 62.7G -<br />
c2t5d0 - - - -<br />
c2t4d0 - - - -<br />
mirror 556G 494G 62.5G -<br />
c2t8d0 - - - -<br />
c2t6d0 - - - -<br />
mirror 556G 494G 62.2G -<br />
c2t10d0 - - - -<br />
c2t9d0 - - - -<br />
mirror 556G 494G 61.9G -<br />
c2t12d0 - - - -<br />
c2t11d0 - - - -<br />
mirror 1016G 507G 509G -<br />
c1t1d0 - - - -<br />
c1t5d0 - - - -<br />
mirror 1016G 496G 520G -<br />
c1t3d0 - - - -<br />
c1t4d0 - - - -<br />
<br />
{| class="wikitable"<br />
|-<br />
|'''illumos'''<br />
|[https://github.com/illumos/illumos-gate/commit/4263d13f00c9691fa14620eff82abef795be0693 Jan 2012]<br />
|-<br />
|'''FreeBSD'''<br />
|[https://github.com/freebsd/freebsd/commit/38ef930079cbb1df5de9df3c1064426dba3976b1 May 2012]<br />
|-<br />
|'''ZFS on Linux'''<br />
|[https://github.com/zfsonlinux/zfs/commit/1bd201e70d57464fd26bf9089ea4b44fd49e4f2d Sept 2012]<br />
|-<br />
|'''OpenZFS on OS X'''<br />
|[https://github.com/openzfsonosx/zfs/commit/1bd201e70d57464fd26bf9089ea4b44fd49e4f2d Sept 2012]<br />
|}<br />
<br />
==== ZFS list snapshot property alias ====<br />
<br />
Functionally identical to Solaris 11 extension <code>zfs list -t snap</code>.<br />
<br />
{| class="wikitable"<br />
|-<br />
|'''illumos'''<br />
|not yet<br />
|-<br />
|'''FreeBSD'''<br />
|[http://svnweb.freebsd.org/changeset/base/256999 Oct 2013]<br />
|-<br />
|'''ZFS on Linux'''<br />
|[https://github.com/zfsonlinux/zfs/commit/cf81b00a73fe47fdb21586ac1cc179b734540973 Apr 2012]<br />
|-<br />
|'''OpenZFS on OS X'''<br />
|[https://github.com/openzfsonosx/zfs/commit/cf81b00a73fe47fdb21586ac1cc179b734540973 Apr 2012]<br />
|}<br />
<br />
==== ZFS snapshot alias ====<br />
<br />
Functionally identical to Solaris 11 extension <code>zfs snap</code>.<br />
<br />
{| class="wikitable"<br />
|-<br />
|'''illumos'''<br />
|not yet<br />
|-<br />
|'''FreeBSD'''<br />
|[http://svnweb.freebsd.org/changeset/base/256999 Oct 2013]<br />
|-<br />
|'''ZFS on Linux'''<br />
|[https://github.com/zfsonlinux/zfs/commit/10b75496bb0cb7a7b8146c263164adc37f1d176a Apr 2012]<br />
|-<br />
|'''OpenZFS on OS X'''<br />
|[https://github.com/openzfsonosx/zfs/commit/10b75496bb0cb7a7b8146c263164adc37f1d176a Apr 2012]<br />
|}<br />
<br />
==== <tt>zfs send</tt> Progress Reporting ====<br />
<br />
OpenZFS introduces a <tt>-v</tt> option to <tt>zfs send</tt> which reports per-second information on how much data has been sent, how long it has taken, and how much data remains to be sent.<br />
<br />
{| class="wikitable"<br />
|-<br />
|'''illumos'''<br />
|[https://github.com/illumos/illumos-gate/commit/4e3c9f4489a18514e5e8caeb91d4e6db07c98415 May 2012]<br />
|-<br />
|'''FreeBSD'''<br />
|[https://github.com/freebsd/freebsd/commit/046ff8962602e8d65b6b3fae48573513ab7e433f May 2012]<br />
|-<br />
|'''ZFS on Linux'''<br />
|[https://github.com/zfsonlinux/zfs/commit/37abac6d559a1da8ab8e5379442f491b73998f6a Sept 2012]<br />
|-<br />
|'''OpenZFS on OS X'''<br />
|[https://github.com/openzfsonosx/zfs/commit/37abac6d559a1da8ab8e5379442f491b73998f6a Sept 2012]<br />
|}<br />
<br />
==== Arbitrary Snapshot Arguments to <tt>zfs snapshot</tt> ====<br />
<br />
{| class="wikitable"<br />
|-<br />
|'''illumos'''<br />
|[https://github.com/illumos/illumos-gate/commit/4445fffbbb1ea25fd0e9ea68b9380dd7a6709025 June 2012]<br />
|-<br />
|'''FreeBSD'''<br />
|[https://github.com/freebsd/freebsd/commit/f1985e5cd725ff1816cd4afbdee2d95b661883f0 March 2013]<br />
|-<br />
|'''ZFS on Linux'''<br />
|[https://github.com/zfsonlinux/zfs/commit/6f1ffb06655008c9b519108ed29fbf03acd6e5de August 2013]<br />
|-<br />
|'''OpenZFS on OS X'''<br />
|[https://github.com/openzfsonosx/zfs/commit/6f1ffb06655008c9b519108ed29fbf03acd6e5de September 2013]<br />
|}<br />
<br />
== Performance ==<br />
<br />
These are significant performance improvements, often requiring substantial restructuring of the source code.<br />
<br />
''Listed in chronological order (oldest first).''<br />
<br />
==== SA based xattrs ====<br />
<br />
Improves performance of linux-style (short) xattrs by storing them in the dnode_phys_t's bonus block. (Not to be confused with [http://en.wikipedia.org/wiki/Extended_file_attributes#Solaris Solaris-style Extended Attributes] which are full-fledged files or "forks", like NTFS streams. This work could be extended to also improve the performance on illumos of small Extended Attributes whose permissions are the same as the containing file.)<br />
<br />
Requires a disk format change and is off by default until Filesystem (ZPL) Feature Flags are implemented (not to be confused with [[Features#Feature_Flags_Overview | zpool Feature Flags]]).<br />
<br />
{| class="wikitable"<br />
|-<br />
|'''illumos'''<br />
|not yet (needs additional functionality)<br />
|-<br />
|'''FreeBSD'''<br />
|??<br />
|-<br />
|'''ZFS on Linux'''<br />
|[https://github.com/zfsonlinux/zfs/commit/82a37189aac955c81a59a5ecc3400475adb56355 Oct 2011]<br />
|-<br />
|'''OpenZFS on OS X'''<br />
|[https://github.com/openzfsonosx/zfs/commit/6a06ef26abc87c6ede9bec8246713dc94c98fa78 May 2015]<br />
|}<br />
<br />
Note that SA based xattrs are [https://github.com/zfsonlinux/zfs/commit/6a7c0ccca44ad02c476a111d8f7911fc8b12fff7 no longer used on symlinks] as of Aug 2013 until an issue is resolved.<br />
<br />
==== Use the slog even with logbias=throughput ====<br />
<br />
{| class="wikitable"<br />
|-<br />
|'''illumos'''<br />
|??<br />
|-<br />
|'''FreeBSD'''<br />
|??<br />
|-<br />
|'''ZFS on Linux'''<br />
|[https://github.com/zfsonlinux/zfs/commit/5d7a86d114c2706a8d14d94b71f81ad5cdf066c5 Oct 2011]<br />
|-<br />
|'''OpenZFS on OS X'''<br />
|[https://github.com/openzfsonosx/zfs/commit/5d7a86d114c2706a8d14d94b71f81ad5cdf066c5 Oct 2011]<br />
|}<br />
<br />
==== Asynchronous Filesystem and Volume Destruction ====<br />
<br />
Destroying a filesystem requires traversing all of its data in order to return its used blocks to the pool's free list. Before this feature the filesystem was not fully removed until all blocks had been reclaimed. If the destroy operation was interrupted by a reboot or power outage the next attempt to import the pool (probably during boot) would need to complete the destroy operation synchronously, possibly delaying a boot for long periods of time.<br />
<br />
With asynchronous destruction the filesystem's data is immediately moved to a "to be freed" list, allowing the destroy operation to complete without traversing any of the filesystem's data. A background process reclaims blocks from this "to be freed" list and is capable of resuming this process after reboots without slowing the pool import process.<br />
<br />
The new freeing algorithm also has a significant performance improvement when destroying clones. The old algorithm took time proportional to the number of blocks ''referenced'' by the clone, even if most of those blocks could not be reclaimed because they were still referenced by the clone's origin. The new algorithm only takes time proportional to the number of blocks unique to the clone.<br />
<br />
See this [http://blog.delphix.com/matt/2012/07/11/performance-of-zfs-destroy/ blog post] for more detailed performance analysis.<br />
<br />
Note: The <tt>async_destroy</tt> feature flag must be enabled to take advantage of this.<br />
<br />
{| class="wikitable"<br />
|-<br />
|'''illumos'''<br />
|[https://github.com/illumos/illumos-gate/commit/ad135b5d644628e791c3188a6ecbd9c257961ef8 May 2012]<br />
|-<br />
|'''FreeBSD'''<br />
|[https://github.com/freebsd/freebsd/commit/cc61ab2f133566dca51970d44cc49a4355039b5d June 2012]<br />
|-<br />
|'''ZFS on Linux'''<br />
|[https://github.com/zfsonlinux/zfs/commit/9ae529ec5dbdc828ff8326beae58062971d74b2e Jan 2013]<br />
|-<br />
|'''OpenZFS on OS X'''<br />
|[https://github.com/openzfsonosx/zfs/commit/9ae529ec5dbdc828ff8326beae58062971d74b2e Jan 2013]<br />
|}<br />
<br />
==== Reduce Number of Empty bpobjs ====<br />
<br />
Every time OpenZFS takes a snapshot it creates on-disk block pointer objects (bpobj's) to track blocks associated with that snapshot. In common use cases most of these bpobj's are empty, but the number of bpobjs per-snapshot is proportional to the number of snapshots already taken of the same filesystem or volume. When a single filesystem or volume has many (tens of thousands) snapshots these unecessary empty bpobjs can waste space and cause performance problems. OpenZFS waits to create each bpobjs until the first entry is added to it, thus eliminating the empty bpobjs.<br />
<br />
Note: The <tt>empty_bpobj</tt> feature flag must be enabled to take advantage of this.<br />
<br />
{| class="wikitable"<br />
|-<br />
|'''illumos'''<br />
|[https://github.com/illumos/illumos-gate/commit/f17457368189aa911f774c38c1f21875a568bdca Aug 2012]<br />
|-<br />
|'''FreeBSD'''<br />
|[https://github.com/freebsd/freebsd/commit/d9fa2f486ee98b2557e1d5ad5f1af418c663cfc8 Aug 2012]<br />
|-<br />
|'''ZFS on Linux'''<br />
|[https://github.com/zfsonlinux/zfs/commit/753c38392ddff9d3cf140bb4d28f3bfba52c92d2 Dec 2012]<br />
|-<br />
|'''OpenZFS on OS X'''<br />
|[https://github.com/openzfsonosx/zfs/commit/753c38392ddff9d3cf140bb4d28f3bfba52c92d2 Dec 2012]<br />
|}<br />
<br />
==== Single Copy ARC ====<br />
<br />
OpenZFS caches disk blocks in-memory in the adaptive replacement cache (ARC). Originally when the same disk block was accessed from different clones it was cached multiple times (one for each clone accessing the block) in case a clone planned to modify the block. With these changes OpenZFS caches at most one copy of every block unless a clone is actually modifying the block.<br />
<br />
{| class="wikitable"<br />
|-<br />
|'''illumos'''<br />
|[https://github.com/illumos/illumos-gate/commit/9253d63df408bb48584e0b1abfcc24ef2472382e Sep 2012]<br />
|-<br />
|'''FreeBSD'''<br />
|[https://github.com/freebsd/freebsd/commit/8e1fdec2c76a948b16ebf8e4abe2cb73a60d3477 Nov 2012]<br />
|-<br />
|'''ZFS on Linux'''<br />
|[https://github.com/zfsonlinux/zfs/commit/1eb5bfa3dcdaecb19543d9df13131374a7a42947 Dec 2012]<br />
|-<br />
|'''OpenZFS on OS X'''<br />
|[https://github.com/openzfsonosx/zfs/commit/1eb5bfa3dcdaecb19543d9df13131374a7a42947 Dec 2012]<br />
|}<br />
<br />
==== TRIM Support ====<br />
<br />
TRIM support provides the ability to pass deletes / frees through to underlying vdevs that help to ensure devices such as SSD's, which rely on receiving TRIM / UNMAP requests for sectors which are no longer needed, maintain optimal performance.<br />
<br />
The current FreeBSD implementation builds a map of regions that were freed. On every write the<br />
code consults the map and removes ranges that were freed before, but are now overwritten.<br />
<br />
Freed blocks are not TRIMed immediately, there is a low priority thread that TRIMs ranges when the time comes.<br />
<br />
Support for TRIM has been demonstrated to significantly improved the general performance of SSD in the field, eliminating the need for regular secure erase cycles on busy hosts.<br />
<br />
An alternative method, which is arguably better, and works by tracking the metaslab allocator is also in progress and can be found here:<br />
[http://cr.illumos.org/~webrev/skiselkov/zfs_unmap/ ZFS TRIM Support for illumos]<br />
<br />
There is [https://github.com/zfsonlinux/zfs/pull/1016 a pull request for ZFS On Linux] which implements FreeBSD's (Sep 2012) ZFS TRIM support.<br />
<br />
{| class="wikitable"<br />
|-<br />
|'''illumos'''<br />
|not yet ported<br />
|-<br />
|'''FreeBSD'''<br />
|[http://svnweb.freebsd.org/base?view=revision&sortby=file&revision=240868 Sep 2012]<br />
|-<br />
|'''ZFS on Linux'''<br />
|not yet ported<br />
|-<br />
|'''OpenZFS on OS X'''<br />
|not yet ported<br />
|}<br />
<br />
==== FASTWRITE Algorithm ====<br />
<br />
Improves synchronous IO performance.<br />
<br />
{| class="wikitable"<br />
|-<br />
|'''illumos'''<br />
|not yet ported<br />
|-<br />
|'''FreeBSD'''<br />
|not yet ported<br />
|-<br />
|'''ZFS on Linux'''<br />
|[https://github.com/zfsonlinux/zfs/commit/920dd524fb2997225d4b1ac180bcbc14b045fda6 Oct 2012]<br />
|-<br />
|'''OpenZFS on OS X'''<br />
|[https://github.com/openzfsonosx/zfs/commit/920dd524fb2997225d4b1ac180bcbc14b045fda6 Oct 2012]<br />
|}<br />
<br />
Note that a [https://github.com/ryao/zfs/commit/858822a04b4563657b2267131e90d9687d67e31b locking enhancement] is being reviewed.<br />
<br />
==== Block Freeing Performance Improvments ====<br />
<br />
Performance analysis of OpenZFS revealed that the algorithms used when freeing blocks could cause significant performance problems when freeing a large amount of blocks in a single transaction or when dealing with fragmented pools. Several performance improvements were made in this area.<br />
<br />
{| class="wikitable"<br />
|-<br />
|'''illumos'''<br />
|[https://github.com/illumos/illumos-gate/commit/01f55e48fb4d524eaf70687728aa51b7762e2e97 Nov 2012]<br />
|[https://github.com/illumos/illumos-gate/commit/16a4a8074274d2d7cc408589cf6359f4a378c861 Feb 2013]<br />
|[https://github.com/illumos/illumos-gate/commit/9eb57f7f3fbb970d4b9b89dcd5ecf543fe2414d5 Feb 2013]<br />
|-<br />
|'''FreeBSD'''<br />
|[https://github.com/freebsd/freebsd/commit/5d9b3f284b13ac492326e05f6ba4c00e98adf05c Nov 2012]<br />
|[https://github.com/freebsd/freebsd/commit/18e9a0422b52091035dae9d69bde9dd571a8ff7e Feb 2013]<br />
|[https://github.com/freebsd/freebsd/commit/18e9a0422b52091035dae9d69bde9dd571a8ff7e Feb 2013]<br />
|-<br />
|'''ZFS on Linux'''<br />
|[https://github.com/zfsonlinux/zfs/commit/55d85d5a8c45c4559a4a0e675c37b0c3afb19c2f May 2013]<br />
|[https://github.com/zfsonlinux/zfs/commit/e51be06697762215dc3b679f8668987034a5a048 June 2013]<br />
|[https://github.com/zfsonlinux/zfs/commit/c2e42f9d53bec422abb71efade2c004383345038 Oct 2013]<br />
|-<br />
|'''OpenZFS on OS X'''<br />
|[https://github.com/openzfsonosx/zfs/commit/55d85d5a8c45c4559a4a0e675c37b0c3afb19c2f May 2013]<br />
|[https://github.com/openzfsonosx/zfs/commit/e51be06697762215dc3b679f8668987034a5a048 June 2013]<br />
|[https://github.com/openzfsonosx/zfs/commit/c2e42f9d53bec422abb71efade2c004383345038 Oct 2013]<br />
|}<br />
<br />
==== nop-write ====<br />
<br />
ZFS supports end-to-end checksumming of every data block. When a cryptographically secure checksum is being used OpenZFS will compare the checksums of incoming writes to checksum of the existing on-disk data and avoid issuing any write i/o for data that has not changed. This can help performance and snapshot space usage in situations were the same files are regularly overwritten with almost-identical data (e.g. regular full-backups of large random-access files).<br />
<br />
{| class="wikitable"<br />
|-<br />
|'''illumos'''<br />
|[https://github.com/illumos/illumos-gate/commit/80901aea8e78a2c20751f61f01bebd1d5b5c2ba5 Nov 2012]<br />
|-<br />
|'''FreeBSD'''<br />
|[https://github.com/freebsd/freebsd/commit/3a0bfecf052237768517963f169d0797e2978f59 Nov 2012]<br />
|-<br />
|'''ZFS on Linux'''<br />
|[https://github.com/zfsonlinux/zfs/commit/03c6040bee6c87a9413b7da41d9f580f79a8ab62 Nov 2013]<br />
|-<br />
|'''OpenZFS on OS X'''<br />
|[https://github.com/openzfsonosx/zfs/commit/03c6040bee6c87a9413b7da41d9f580f79a8ab62 Nov 2013]<br />
|}<br />
<br />
==== lz4 compression ====<br />
<br />
OpenZFS supports on-the-fly compression of all user data with a variety of compression algorithm. This feature adds support for the lz4 compression algorithm. lz4 is usually faster and compresses data better than lzjb, the old default OpenZFS compression algorithm.<br />
<br />
Note: The <tt>lz4_compress</tt> feature flag must be enabled to take advantage of this.<br />
<br />
{| class="wikitable"<br />
|-<br />
|'''illumos'''<br />
|[https://github.com/illumos/illumos-gate/commit/a6f561b4aee75d0d028e7b36b151c8ed8a86bc76 Jan 2013]<br />
|-<br />
|'''FreeBSD'''<br />
|[https://github.com/freebsd/freebsd/commit/c6d9dc1ad2d2e36220845b84a2d180bd97354797 Feb 2013]<br />
|-<br />
|'''ZFS on Linux'''<br />
|[https://github.com/zfsonlinux/zfs/commit/9759c60f1a1503e48dc5c45a209c3edd5758319f Jan 2013]<br />
|-<br />
|'''OpenZFS on OS X'''<br />
|[https://github.com/openzfsonosx/zfs/commit/9759c60f1a1503e48dc5c45a209c3edd5758319f Jan 2013]<br />
|}<br />
<br />
==== synctask rewrite ====<br />
<br />
{| class="wikitable"<br />
|-<br />
|'''illumos'''<br />
|[https://github.com/illumos/illumos-gate/commit/3b2aab18808792cbd248a12f1edf139b89833c13 Feb 2013]<br />
|-<br />
|'''FreeBSD'''<br />
|[https://github.com/freebsd/freebsd/commit/f1985e5cd725ff1816cd4afbdee2d95b661883f0 March 2013]<br />
|-<br />
|'''ZFS on Linux'''<br />
|[https://github.com/zfsonlinux/zfs/commit/13fe019870c8779bf2f5b3ff731b512cf89133ef Sept 2013]<br />
|-<br />
|'''OpenZFS on OS X'''<br />
|[https://github.com/openzfsonosx/zfs/commit/13fe019870c8779bf2f5b3ff731b512cf89133ef Sept 2013]<br />
|}<br />
<br />
==== l2arc compression ====<br />
<br />
{| class="wikitable"<br />
|-<br />
|'''illumos'''<br />
|[https://github.com/illumos/illumos-gate/commit/aad02571bc59671aa3103bb070ae365f531b0b62 Jun 2013]<br />
|-<br />
|'''FreeBSD'''<br />
|[https://github.com/freebsd/freebsd/commit/b20363fe596a7e3a55d5b62f4d3fdb482c65c47a Jun 2013]<br />
|-<br />
|'''ZFS on Linux'''<br />
|[https://github.com/zfsonlinux/zfs/commit/3a17a7a99a1a6332d0999f9be68e2b8dc3933de1 Aug 2013]<br />
|-<br />
|'''OpenZFS on OS X'''<br />
|[https://github.com/openzfsonosx/zfs/commit/3a17a7a99a1a6332d0999f9be68e2b8dc3933de1 Aug 2013]<br />
|}<br />
<br />
==== ARC Shouldn't Cache Freed Blocks ====<br />
<br />
Originally cached blocks in the ARC remained cached until they were evicted due to memory pressure, even if the underlying disk block was freed. In some workloads these freed blocks were so frequently accessed before they were freed that the ARC continued to cache them while evicting blocks which had not been freed yet. Since freed blocks could never be accessed again continuing to cache them was unnecessary. In OpenZFS ARC blocks are evicted immediately when their underlying data blocks are freed.<br />
<br />
{| class="wikitable"<br />
|-<br />
|'''illumos'''<br />
|[https://github.com/illumos/illumos-gate/commit/6e6d5868f52089b9026785bd90257a3d3f6e5ee2 Jun 2013]<br />
|-<br />
|'''FreeBSD'''<br />
|[https://github.com/freebsd/freebsd/commit/13d822743426263ee50bcf047ab41a1e386156a8 Jun 2013]<br />
|-<br />
|'''ZFS on Linux'''<br />
|[https://github.com/zfsonlinux/zfs/commit/df4474f92d0b1b8d54e1914fdd56be2b75f1ff5e Jun 2013]<br />
|-<br />
|'''OpenZFS on OS X'''<br />
|[https://github.com/openzfsonosx/zfs/commit/df4474f92d0b1b8d54e1914fdd56be2b75f1ff5e Jun 2013]<br />
|}<br />
<br />
==== Improve N-way mirror read performance ====<br />
<br />
Queues read requests to least busy leaf vdev in mirrors.<br />
<br />
In addition to the vdev load biasing first implemented by ZFS on Linux in July 2013, the FreeBSD October 2013 version added I/O locality and device rotational information to further enhance the performance.<br />
<br />
{| class="wikitable"<br />
!OS<br />
!Load<br />
!Load + I/O Locality & Rotational Information<br />
|-<br />
|'''illumos'''<br />
|not yet ported<br />
|not yet ported<br />
|-<br />
|'''FreeBSD'''<br />
|N/A<br />
|[http://svnweb.freebsd.org/changeset/base/256956 23rd October 2013]<br />
|-<br />
|'''ZFS on Linux'''<br />
|[https://github.com/zfsonlinux/zfs/commit/556011dbec2d10579819078559a77630fc559112 Jul 2013]<br />
|not yet ported<br />
|-<br />
|'''OpenZFS on OS X'''<br />
|[https://github.com/openzfsonosx/zfs/commit/556011dbec2d10579819078559a77630fc559112 Jul 2013]<br />
|not yet ported<br />
|}<br />
<br />
==== Smoother Write Throttle ====<br />
<br />
The write throttle (dsl_pool_tempreserve_space() and txg_constrain_throughput()) is rewritten to produce much more consistent delays when under constant load. The new write throttle is based on the amount of dirty data, rather than guesses about future performance of the system. When there is a lot of dirty data, each transaction (e.g. write() syscall) will be delayed by the same small amount. This eliminates the "brick wall of wait" that the old write throttle could hit, causing all transactions to wait several seconds until the next txg opens. One of the keys to the new write throttle is decrementing the amount of dirty data as i/o completes, rather than at the end of spa_sync(). Note that the write throttle is only applied once the i/o scheduler is issuing the maximum number of outstanding async writes. See the block comments in dsl_pool.c and above dmu_tx_delay() for more details.<br />
<br />
The ZFS i/o scheduler (vdev_queue.c) now divides i/os into 5 classes: sync read, sync write, async read, async write, and scrub/resilver. The scheduler issues a number of concurrent i/os from each class to the device. Once a class has been selected, an i/o is selected from this class using either an elevator algorithem (async, scrub classes) or FIFO (sync classes). The number of concurrent async write i/os is tuned dynamically based on i/o load, to achieve good sync i/o latency when there is not a high load of writes, and good write throughput when there is. See the block comment in vdev_queue.c for more details.<br />
<br />
{| class="wikitable"<br />
|-<br />
|'''illumos'''<br />
|[https://github.com/illumos/illumos-gate/commit/69962b5647e4a8b9b14998733b765925381b727e Aug 2013]<br />
|-<br />
|'''FreeBSD'''<br />
|[http://svnweb.freebsd.org/changeset/base/258632 Nov 2013]<br />
|-<br />
|'''ZFS on Linux'''<br />
|[https://github.com/zfsonlinux/zfs/commit/e8b96c6007bf97cdf34869c1ffbd0ce753873a3d Dec 2013]<br />
|-<br />
|'''OpenZFS on OS X'''<br />
|[https://github.com/openzfsonosx/zfs/commit/e8b96c6007bf97cdf34869c1ffbd0ce753873a3d Mar 2014]<br />
|}<br />
<br />
==== Disable LBA Weighting on files and SSDs ====<br />
<br />
On rotational media, the bandwidth of the outermost tracks is approximately twice that of innermost tracks. A heuristic called LBA weighting was put into the metaslab allocator to account for this by favoring the outermost tracks over the innermost tracks. This has the consequence that metaslabs tend to fill at different rates depending on their location. This causes the metaslabs corresponding to outermost tracks to enter the best-fit allocation strategy.<br />
<br />
The best-fit allocation strategy is more CPU intensive than the typical first-fit because it looks for the smallest region of free space able to fulfill an allocation rather than picking the next avaliable one. The CPU time is fairly excessive and is known to harm IOPS, but it exists to minimize use of gang blocks as a metaslab becomes excessively full. Gaining a bandwidth improvement from LBA weighting at the expense of an earlier switch to the best-fit allocation behavior on the weighted metaslabs is reasonable on rotational disks. However, it makes no sense on files, where the underlying filesystem is free to place things however way it sees fit, and on SSDs, where there is no bandwidth difference based on LBA.<br />
<br />
With this change, we will more evenly fill metaslabs on pools whose vdevs consist of only files and SSDs, which will minimize the metaslabs that enter the best fit allocation strategy when a pool is mostly full, but still below 96% full. This is particularly important on SSDs, where drops in IOPS are more pronounced.<br />
<br />
{| class="wikitable"<br />
|-<br />
|'''illumos'''<br />
|not yet<br />
|-<br />
|'''FreeBSD'''<br />
|not yet<br />
|-<br />
|'''ZFS on Linux'''<br />
|[https://github.com/zfsonlinux/zfs/commit/fb40095f5f0853946f8150481ca22602d1334dfe Aug 2015]<br />
|-<br />
|'''OpenZFS on OS X'''<br />
|[https://github.com/openzfsonosx/zfs/commit/fb40095f5f0853946f8150481ca22602d1334dfe Sep 2015]<br />
|}<br />
<br />
== Dataset Properties ==<br />
<br />
These are new filesystem, volume, and snapshot properties which can be accessed with the <tt>zfs(1)</tt> command's <tt>get</tt> subcommand. See the <tt>zfs(1)</tt> manpage for your distribution for more details on each of these properties.<br />
<br />
{| class="wikitable"<br />
!Property<br />
!Description<br />
!illumos<br />
!FreeBSD<br />
!ZFS on Linux<br />
!OpenZFS on OS X<br />
|-<br />
|<tt>refcompressratio</tt><br />
|The compression ratio acheived for all data referenced by (but not necessarily unique to) a snapshot, filesystem, or volume, expressed as a multiplier.<br />
|[https://github.com/illumos/illumos-gate/commit/187d6ac08adc31ea6868bde0cfbbb288826254e8 Jun 2011]<br />
|[https://github.com/freebsd/freebsd/commit/333e34b938a2b5e7b036e02b36408880b415109c Jun 2011]<br />
|[https://github.com/zfsonlinux/zfs/commit/77999e804fff35782ab4b578d2cecf064c54a841 Aug 2012]<br />
|[https://github.com/openzfsonosx/zfs/commit/77999e804fff35782ab4b578d2cecf064c54a841 Aug 2012]<br />
|-<br />
|<tt>clones</tt><br />
|For snapshots, this property is a comma-separated list of filesystems or volumes which are clones of this snapshot.<br />
|[https://github.com/illumos/illumos-gate/commit/e5351341b58845eee9d722bd71543d5a7c26b6cc Nov 2011]<br />
|[https://github.com/freebsd/freebsd/commit/73cab7197174153a718dedc97ff344341bcf6098 Nov 2011]<br />
|[https://github.com/zfsonlinux/zfs/commit/330d06f90d143b41b276796526a66a1c1fff046d Jul 2012]<br />
|[https://github.com/openzfsonosx/zfs/commit/330d06f90d143b41b276796526a66a1c1fff046d Jul 2012]<br />
|-<br />
|<tt>written</tt><br />
|The amount of referenced space written to this dataset since the previous snapshot.<br />
|[https://github.com/illumos/illumos-gate/commit/e5351341b58845eee9d722bd71543d5a7c26b6cc Nov 2011]<br />
|[https://github.com/freebsd/freebsd/commit/73cab7197174153a718dedc97ff344341bcf6098 Nov 2011]<br />
|[https://github.com/zfsonlinux/zfs/commit/330d06f90d143b41b276796526a66a1c1fff046d Jul 2012]<br />
|[https://github.com/openzfsonosx/zfs/commit/330d06f90d143b41b276796526a66a1c1fff046d Jul 2012]<br />
|-<br />
|<tt>written@''<snap>''</tt><br />
|The amount of referenced space written to this dataset since the specified snapshot. This is the space referenced by this dataset, but not referenced by the specified snapshot.<br />
|[https://github.com/illumos/illumos-gate/commit/e5351341b58845eee9d722bd71543d5a7c26b6cc Nov 2011]<br />
|[https://github.com/freebsd/freebsd/commit/73cab7197174153a718dedc97ff344341bcf6098 Nov 2011]<br />
|[https://github.com/zfsonlinux/zfs/commit/330d06f90d143b41b276796526a66a1c1fff046d Jul 2012]<br />
|[https://github.com/openzfsonosx/zfs/commit/330d06f90d143b41b276796526a66a1c1fff046d Jul 2012]<br />
|-<br />
|<tt>logicalused</tt>, <tt>logicalreferenced</tt><br />
|The amount of space used or referenced, before taking into account compression.<br />
|[https://github.com/illumos/illumos-gate/commit/77372cb0f35e8d3615ca2e16044f033397e88e21 Feb 2013]<br />
|[https://github.com/freebsd/freebsd/commit/2bed8f5691b7572d6f31bfc68e9f762a938af863 Mar 2013]<br />
|[https://github.com/zfsonlinux/zfs/commit/24a64651b4163d47b1187821152d762e9a263d5a Oct 2013]<br />
|[https://github.com/openzfsonosx/zfs/commit/24a64651b4163d47b1187821152d762e9a263d5a Nov 2013]<br />
|-<br />
|}</div>Lundmanhttps://openzfs.org/w/index.php?title=Features&diff=2036Features2015-12-16T00:46:15Z<p>Lundman: /* Disable LBA Weighting on files and SSDs */ Updating OS X</p>
<hr />
<div>This page describes some of the more important features and performance improvements that are part of OpenZFS.<br />
<br />
Help would be appreciated in porting features between platforms whose status is "not yet".<br />
<br />
== Feature Flags ==<br />
<br />
See the [[Feature_Flags|Feature Flags]] wiki page.<br />
<br />
== libzfs_core ==<br />
<br />
See this [http://blog.delphix.com/matt/2012/01/17/the-future-of-libzfs/ blog post (Jan 2012)] and associated [http://blog.delphix.com/matt/files/2012/01/The_Future_of_LibZFS.pdf slides] and [http://www.youtube.com/watch?feature=player_embedded&list=PL1A94C8EECCAF7340&v=iJ0S91ygErE video] for more details.<br />
<br />
First introduced in:<br />
{| class="wikitable"<br />
|-<br />
|'''illumos'''<br />
|[https://github.com/illumos/illumos-gate/commit/4445fffbbb1ea25fd0e9ea68b9380dd7a6709025 June 2012]<br />
|-<br />
|'''FreeBSD'''<br />
|[https://github.com/freebsd/freebsd/commit/f1985e5cd725ff1816cd4afbdee2d95b661883f0 March 2013]<br />
|-<br />
|'''ZFS on Linux'''<br />
|[https://github.com/zfsonlinux/zfs/commit/6f1ffb06655008c9b519108ed29fbf03acd6e5de August 2013]<br />
|-<br />
|'''OpenZFS on OS X'''<br />
|[https://github.com/openzfsonosx/zfs/commit/50b0b2d9ea604d29ed729be8fa61bb77ae3ff4e9 October 2013]<br />
|}<br />
<br />
== CLI Usability ==<br />
<br />
These are improvements to the command line interface. While the end result is a generally more friendly user interface, getting the desired behavior often required modifications to the core of ZFS.<br />
<br />
''Listed in chronological order (oldest first).''<br />
<br />
==== Pool Comment ====<br />
<br />
OpenZFS has a per-pool comment property which can be set with the <tt>zpool set</tt> command and can be read even if the pool is not imported, so it is accessible even if pool import fails.<br />
<br />
{| class="wikitable"<br />
|-<br />
|'''illumos'''<br />
|[https://github.com/illumos/illumos-gate/commit/8704186e373c9ed74daa395ff3f7fd745396df9e Nov 2011]<br />
|-<br />
|'''FreeBSD'''<br />
|[https://github.com/freebsd/freebsd/commit/73cab7197174153a718dedc97ff344341bcf6098 Nov 2011]<br />
|-<br />
|'''ZFS on Linux'''<br />
|[https://github.com/zfsonlinux/zfs/commit/d96eb2b1538db13ee7a716ec0e1162f5735edc12 Aug 2012]<br />
|-<br />
|'''OpenZFS on OS X'''<br />
|[https://github.com/openzfsonosx/zfs/commit/d96eb2b1538db13ee7a716ec0e1162f5735edc12 Aug 2012]<br />
|}<br />
<br />
==== Size Estimates for <tt>zfs send</tt> and <tt>zfs destroy</tt> ====<br />
<br />
This feature enhances OpenZFS's internal space accounting information. This new accounting information is used to provide a <tt>-n</tt> (dry-run) option for <tt>zfs send</tt> which can instantly calculate the amount of send stream data a specific <tt>zfs send</tt> command would generate. It is also used for a <tt>-n</tt> option for <tt>zfs destroy</tt> which can instantly calculate the amount of space that would be reclaimed by a specific <tt>zfs destroy</tt> command.<br />
<br />
{| class="wikitable"<br />
|-<br />
|'''illumos'''<br />
|[https://github.com/illumos/illumos-gate/commit/e5351341b58845eee9d722bd71543d5a7c26b6cc Nov 2011]<br />
|-<br />
|'''FreeBSD'''<br />
|[https://github.com/freebsd/freebsd/commit/73cab7197174153a718dedc97ff344341bcf6098 Nov 2011]<br />
|-<br />
|'''ZFS on Linux'''<br />
|[https://github.com/zfsonlinux/zfs/commit/330d06f90d143b41b276796526a66a1c1fff046d Jul 2012]<br />
|-<br />
|'''OpenZFS on OS X'''<br />
|[https://github.com/openzfsonosx/zfs/commit/330d06f90d143b41b276796526a66a1c1fff046d Jul 2012]<br />
|}<br />
<br />
==== vdev Information in <tt>zpool list</tt> ====<br />
<br />
OpenZFS adds a <tt>-v</tt> option to the <tt>zpool list</tt> command which shows detailed sizing information about the vdevs in the pool:<br />
<br />
$ zpool list -v<br />
NAME SIZE ALLOC FREE EXPANDSZ CAP DEDUP HEALTH ALTROOT<br />
dcenter 5.24T 3.85T 1.39T - 73% 1.00x ONLINE -<br />
mirror 556G 469G 86.7G -<br />
c2t1d0 - - - -<br />
c2t0d0 - - - -<br />
mirror 556G 493G 63.0G -<br />
c2t3d0 - - - -<br />
c2t2d0 - - - -<br />
mirror 556G 493G 62.7G -<br />
c2t5d0 - - - -<br />
c2t4d0 - - - -<br />
mirror 556G 494G 62.5G -<br />
c2t8d0 - - - -<br />
c2t6d0 - - - -<br />
mirror 556G 494G 62.2G -<br />
c2t10d0 - - - -<br />
c2t9d0 - - - -<br />
mirror 556G 494G 61.9G -<br />
c2t12d0 - - - -<br />
c2t11d0 - - - -<br />
mirror 1016G 507G 509G -<br />
c1t1d0 - - - -<br />
c1t5d0 - - - -<br />
mirror 1016G 496G 520G -<br />
c1t3d0 - - - -<br />
c1t4d0 - - - -<br />
<br />
{| class="wikitable"<br />
|-<br />
|'''illumos'''<br />
|[https://github.com/illumos/illumos-gate/commit/4263d13f00c9691fa14620eff82abef795be0693 Jan 2012]<br />
|-<br />
|'''FreeBSD'''<br />
|[https://github.com/freebsd/freebsd/commit/38ef930079cbb1df5de9df3c1064426dba3976b1 May 2012]<br />
|-<br />
|'''ZFS on Linux'''<br />
|[https://github.com/zfsonlinux/zfs/commit/1bd201e70d57464fd26bf9089ea4b44fd49e4f2d Sept 2012]<br />
|-<br />
|'''OpenZFS on OS X'''<br />
|[https://github.com/openzfsonosx/zfs/commit/1bd201e70d57464fd26bf9089ea4b44fd49e4f2d Sept 2012]<br />
|}<br />
<br />
==== ZFS list snapshot property alias ====<br />
<br />
Functionally identical to Solaris 11 extension <code>zfs list -t snap</code>.<br />
<br />
{| class="wikitable"<br />
|-<br />
|'''illumos'''<br />
|not yet<br />
|-<br />
|'''FreeBSD'''<br />
|[http://svnweb.freebsd.org/changeset/base/256999 Oct 2013]<br />
|-<br />
|'''ZFS on Linux'''<br />
|[https://github.com/zfsonlinux/zfs/commit/cf81b00a73fe47fdb21586ac1cc179b734540973 Apr 2012]<br />
|-<br />
|'''OpenZFS on OS X'''<br />
|[https://github.com/openzfsonosx/zfs/commit/cf81b00a73fe47fdb21586ac1cc179b734540973 Apr 2012]<br />
|}<br />
<br />
==== ZFS snapshot alias ====<br />
<br />
Functionally identical to Solaris 11 extension <code>zfs snap</code>.<br />
<br />
{| class="wikitable"<br />
|-<br />
|'''illumos'''<br />
|not yet<br />
|-<br />
|'''FreeBSD'''<br />
|[http://svnweb.freebsd.org/changeset/base/256999 Oct 2013]<br />
|-<br />
|'''ZFS on Linux'''<br />
|[https://github.com/zfsonlinux/zfs/commit/10b75496bb0cb7a7b8146c263164adc37f1d176a Apr 2012]<br />
|-<br />
|'''OpenZFS on OS X'''<br />
|[https://github.com/openzfsonosx/zfs/commit/10b75496bb0cb7a7b8146c263164adc37f1d176a Apr 2012]<br />
|}<br />
<br />
==== <tt>zfs send</tt> Progress Reporting ====<br />
<br />
OpenZFS introduces a <tt>-v</tt> option to <tt>zfs send</tt> which reports per-second information on how much data has been sent, how long it has taken, and how much data remains to be sent.<br />
<br />
{| class="wikitable"<br />
|-<br />
|'''illumos'''<br />
|[https://github.com/illumos/illumos-gate/commit/4e3c9f4489a18514e5e8caeb91d4e6db07c98415 May 2012]<br />
|-<br />
|'''FreeBSD'''<br />
|[https://github.com/freebsd/freebsd/commit/046ff8962602e8d65b6b3fae48573513ab7e433f May 2012]<br />
|-<br />
|'''ZFS on Linux'''<br />
|[https://github.com/zfsonlinux/zfs/commit/37abac6d559a1da8ab8e5379442f491b73998f6a Sept 2012]<br />
|-<br />
|'''OpenZFS on OS X'''<br />
|[https://github.com/openzfsonosx/zfs/commit/37abac6d559a1da8ab8e5379442f491b73998f6a Sept 2012]<br />
|}<br />
<br />
==== Arbitrary Snapshot Arguments to <tt>zfs snapshot</tt> ====<br />
<br />
{| class="wikitable"<br />
|-<br />
|'''illumos'''<br />
|[https://github.com/illumos/illumos-gate/commit/4445fffbbb1ea25fd0e9ea68b9380dd7a6709025 June 2012]<br />
|-<br />
|'''FreeBSD'''<br />
|[https://github.com/freebsd/freebsd/commit/f1985e5cd725ff1816cd4afbdee2d95b661883f0 March 2013]<br />
|-<br />
|'''ZFS on Linux'''<br />
|[https://github.com/zfsonlinux/zfs/commit/6f1ffb06655008c9b519108ed29fbf03acd6e5de August 2013]<br />
|-<br />
|'''OpenZFS on OS X'''<br />
|[https://github.com/openzfsonosx/zfs/commit/6f1ffb06655008c9b519108ed29fbf03acd6e5de September 2013]<br />
|}<br />
<br />
== Performance ==<br />
<br />
These are significant performance improvements, often requiring substantial restructuring of the source code.<br />
<br />
''Listed in chronological order (oldest first).''<br />
<br />
==== SA based xattrs ====<br />
<br />
Improves performance of linux-style (short) xattrs by storing them in the dnode_phys_t's bonus block. (Not to be confused with [http://en.wikipedia.org/wiki/Extended_file_attributes#Solaris Solaris-style Extended Attributes] which are full-fledged files or "forks", like NTFS streams. This work could be extended to also improve the performance on illumos of small Extended Attributes whose permissions are the same as the containing file.)<br />
<br />
Requires a disk format change and is off by default until Filesystem (ZPL) Feature Flags are implemented (not to be confused with [[Features#Feature_Flags_Overview | zpool Feature Flags]]).<br />
<br />
{| class="wikitable"<br />
|-<br />
|'''illumos'''<br />
|not yet (needs additional functionality)<br />
|-<br />
|'''FreeBSD'''<br />
|??<br />
|-<br />
|'''ZFS on Linux'''<br />
|[https://github.com/zfsonlinux/zfs/commit/82a37189aac955c81a59a5ecc3400475adb56355 Oct 2011]<br />
|-<br />
|'''OpenZFS on OS X'''<br />
|[https://github.com/openzfsonosx/zfs/commit/6a06ef26abc87c6ede9bec8246713dc94c98fa78 May 2015]<br />
|}<br />
<br />
Note that SA based xattrs are [https://github.com/zfsonlinux/zfs/commit/6a7c0ccca44ad02c476a111d8f7911fc8b12fff7 no longer used on symlinks] as of Aug 2013 until an issue is resolved.<br />
<br />
==== Use the slog even with logbias=throughput ====<br />
<br />
{| class="wikitable"<br />
|-<br />
|'''illumos'''<br />
|??<br />
|-<br />
|'''FreeBSD'''<br />
|??<br />
|-<br />
|'''ZFS on Linux'''<br />
|[https://github.com/zfsonlinux/zfs/commit/5d7a86d114c2706a8d14d94b71f81ad5cdf066c5 Oct 2011]<br />
|-<br />
|'''OpenZFS on OS X'''<br />
|[https://github.com/openzfsonosx/zfs/commit/5d7a86d114c2706a8d14d94b71f81ad5cdf066c5 Oct 2011]<br />
|}<br />
<br />
==== Asynchronous Filesystem and Volume Destruction ====<br />
<br />
Destroying a filesystem requires traversing all of its data in order to return its used blocks to the pool's free list. Before this feature the filesystem was not fully removed until all blocks had been reclaimed. If the destroy operation was interrupted by a reboot or power outage the next attempt to import the pool (probably during boot) would need to complete the destroy operation synchronously, possibly delaying a boot for long periods of time.<br />
<br />
With asynchronous destruction the filesystem's data is immediately moved to a "to be freed" list, allowing the destroy operation to complete without traversing any of the filesystem's data. A background process reclaims blocks from this "to be freed" list and is capable of resuming this process after reboots without slowing the pool import process.<br />
<br />
The new freeing algorithm also has a significant performance improvement when destroying clones. The old algorithm took time proportional to the number of blocks ''referenced'' by the clone, even if most of those blocks could not be reclaimed because they were still referenced by the clone's origin. The new algorithm only takes time proportional to the number of blocks unique to the clone.<br />
<br />
See this [http://blog.delphix.com/matt/2012/07/11/performance-of-zfs-destroy/ blog post] for more detailed performance analysis.<br />
<br />
Note: The <tt>async_destroy</tt> feature flag must be enabled to take advantage of this.<br />
<br />
{| class="wikitable"<br />
|-<br />
|'''illumos'''<br />
|[https://github.com/illumos/illumos-gate/commit/ad135b5d644628e791c3188a6ecbd9c257961ef8 May 2012]<br />
|-<br />
|'''FreeBSD'''<br />
|[https://github.com/freebsd/freebsd/commit/cc61ab2f133566dca51970d44cc49a4355039b5d June 2012]<br />
|-<br />
|'''ZFS on Linux'''<br />
|[https://github.com/zfsonlinux/zfs/commit/9ae529ec5dbdc828ff8326beae58062971d74b2e Jan 2013]<br />
|-<br />
|'''OpenZFS on OS X'''<br />
|[https://github.com/openzfsonosx/zfs/commit/9ae529ec5dbdc828ff8326beae58062971d74b2e Jan 2013]<br />
|}<br />
<br />
==== Reduce Number of Empty bpobjs ====<br />
<br />
Every time OpenZFS takes a snapshot it creates on-disk block pointer objects (bpobj's) to track blocks associated with that snapshot. In common use cases most of these bpobj's are empty, but the number of bpobjs per-snapshot is proportional to the number of snapshots already taken of the same filesystem or volume. When a single filesystem or volume has many (tens of thousands) snapshots these unecessary empty bpobjs can waste space and cause performance problems. OpenZFS waits to create each bpobjs until the first entry is added to it, thus eliminating the empty bpobjs.<br />
<br />
Note: The <tt>empty_bpobj</tt> feature flag must be enabled to take advantage of this.<br />
<br />
{| class="wikitable"<br />
|-<br />
|'''illumos'''<br />
|[https://github.com/illumos/illumos-gate/commit/f17457368189aa911f774c38c1f21875a568bdca Aug 2012]<br />
|-<br />
|'''FreeBSD'''<br />
|[https://github.com/freebsd/freebsd/commit/d9fa2f486ee98b2557e1d5ad5f1af418c663cfc8 Aug 2012]<br />
|-<br />
|'''ZFS on Linux'''<br />
|[https://github.com/zfsonlinux/zfs/commit/753c38392ddff9d3cf140bb4d28f3bfba52c92d2 Dec 2012]<br />
|-<br />
|'''OpenZFS on OS X'''<br />
|[https://github.com/openzfsonosx/zfs/commit/753c38392ddff9d3cf140bb4d28f3bfba52c92d2 Dec 2012]<br />
|}<br />
<br />
==== Single Copy ARC ====<br />
<br />
OpenZFS caches disk blocks in-memory in the adaptive replacement cache (ARC). Originally when the same disk block was accessed from different clones it was cached multiple times (one for each clone accessing the block) in case a clone planned to modify the block. With these changes OpenZFS caches at most one copy of every block unless a clone is actually modifying the block.<br />
<br />
{| class="wikitable"<br />
|-<br />
|'''illumos'''<br />
|[https://github.com/illumos/illumos-gate/commit/9253d63df408bb48584e0b1abfcc24ef2472382e Sep 2012]<br />
|-<br />
|'''FreeBSD'''<br />
|[https://github.com/freebsd/freebsd/commit/8e1fdec2c76a948b16ebf8e4abe2cb73a60d3477 Nov 2012]<br />
|-<br />
|'''ZFS on Linux'''<br />
|[https://github.com/zfsonlinux/zfs/commit/1eb5bfa3dcdaecb19543d9df13131374a7a42947 Dec 2012]<br />
|-<br />
|'''OpenZFS on OS X'''<br />
|[https://github.com/openzfsonosx/zfs/commit/1eb5bfa3dcdaecb19543d9df13131374a7a42947 Dec 2012]<br />
|}<br />
<br />
==== TRIM Support ====<br />
<br />
TRIM support provides the ability to pass deletes / frees through to underlying vdevs that help to ensure devices such as SSD's, which rely on receiving TRIM / UNMAP requests for sectors which are no longer needed, maintain optimal performance.<br />
<br />
The current FreeBSD implementation builds a map of regions that were freed. On every write the<br />
code consults the map and removes ranges that were freed before, but are now overwritten.<br />
<br />
Freed blocks are not TRIMed immediately, there is a low priority thread that TRIMs ranges when the time comes.<br />
<br />
Support for TRIM has been demonstrated to significantly improved the general performance of SSD in the field, eliminating the need for regular secure erase cycles on busy hosts.<br />
<br />
An alternative method, which is arguably better, and works by tracking the metaslab allocator is also in progress and can be found here:<br />
[http://cr.illumos.org/~webrev/skiselkov/zfs_unmap/ ZFS TRIM Support for illumos]<br />
<br />
There is [https://github.com/zfsonlinux/zfs/pull/1016 a pull request for ZFS On Linux] which implements FreeBSD's (Sep 2012) ZFS TRIM support.<br />
<br />
{| class="wikitable"<br />
|-<br />
|'''illumos'''<br />
|not yet ported<br />
|-<br />
|'''FreeBSD'''<br />
|[http://svnweb.freebsd.org/base?view=revision&sortby=file&revision=240868 Sep 2012]<br />
|-<br />
|'''ZFS on Linux'''<br />
|not yet ported<br />
|-<br />
|'''OpenZFS on OS X'''<br />
|not yet ported<br />
|}<br />
<br />
==== FASTWRITE Algorithm ====<br />
<br />
Improves synchronous IO performance.<br />
<br />
{| class="wikitable"<br />
|-<br />
|'''illumos'''<br />
|not yet ported<br />
|-<br />
|'''FreeBSD'''<br />
|not yet ported<br />
|-<br />
|'''ZFS on Linux'''<br />
|[https://github.com/zfsonlinux/zfs/commit/920dd524fb2997225d4b1ac180bcbc14b045fda6 Oct 2012]<br />
|-<br />
|'''OpenZFS on OS X'''<br />
|[https://github.com/openzfsonosx/zfs/commit/920dd524fb2997225d4b1ac180bcbc14b045fda6 Oct 2012]<br />
|}<br />
<br />
Note that a [https://github.com/ryao/zfs/commit/858822a04b4563657b2267131e90d9687d67e31b locking enhancement] is being reviewed.<br />
<br />
==== Block Freeing Performance Improvments ====<br />
<br />
Performance analysis of OpenZFS revealed that the algorithms used when freeing blocks could cause significant performance problems when freeing a large amount of blocks in a single transaction or when dealing with fragmented pools. Several performance improvements were made in this area.<br />
<br />
{| class="wikitable"<br />
|-<br />
|'''illumos'''<br />
|[https://github.com/illumos/illumos-gate/commit/01f55e48fb4d524eaf70687728aa51b7762e2e97 Nov 2012]<br />
|[https://github.com/illumos/illumos-gate/commit/16a4a8074274d2d7cc408589cf6359f4a378c861 Feb 2013]<br />
|[https://github.com/illumos/illumos-gate/commit/9eb57f7f3fbb970d4b9b89dcd5ecf543fe2414d5 Feb 2013]<br />
|-<br />
|'''FreeBSD'''<br />
|[https://github.com/freebsd/freebsd/commit/5d9b3f284b13ac492326e05f6ba4c00e98adf05c Nov 2012]<br />
|[https://github.com/freebsd/freebsd/commit/18e9a0422b52091035dae9d69bde9dd571a8ff7e Feb 2013]<br />
|[https://github.com/freebsd/freebsd/commit/18e9a0422b52091035dae9d69bde9dd571a8ff7e Feb 2013]<br />
|-<br />
|'''ZFS on Linux'''<br />
|[https://github.com/zfsonlinux/zfs/commit/55d85d5a8c45c4559a4a0e675c37b0c3afb19c2f May 2013]<br />
|[https://github.com/zfsonlinux/zfs/commit/e51be06697762215dc3b679f8668987034a5a048 June 2013]<br />
|[https://github.com/zfsonlinux/zfs/commit/c2e42f9d53bec422abb71efade2c004383345038 Oct 2013]<br />
|-<br />
|'''OpenZFS on OS X'''<br />
|[https://github.com/openzfsonosx/zfs/commit/55d85d5a8c45c4559a4a0e675c37b0c3afb19c2f May 2013]<br />
|[https://github.com/openzfsonosx/zfs/commit/e51be06697762215dc3b679f8668987034a5a048 June 2013]<br />
|[https://github.com/openzfsonosx/zfs/commit/c2e42f9d53bec422abb71efade2c004383345038 Oct 2013]<br />
|}<br />
<br />
==== nop-write ====<br />
<br />
ZFS supports end-to-end checksumming of every data block. When a cryptographically secure checksum is being used OpenZFS will compare the checksums of incoming writes to checksum of the existing on-disk data and avoid issuing any write i/o for data that has not changed. This can help performance and snapshot space usage in situations were the same files are regularly overwritten with almost-identical data (e.g. regular full-backups of large random-access files).<br />
<br />
{| class="wikitable"<br />
|-<br />
|'''illumos'''<br />
|[https://github.com/illumos/illumos-gate/commit/80901aea8e78a2c20751f61f01bebd1d5b5c2ba5 Nov 2012]<br />
|-<br />
|'''FreeBSD'''<br />
|[https://github.com/freebsd/freebsd/commit/3a0bfecf052237768517963f169d0797e2978f59 Nov 2012]<br />
|-<br />
|'''ZFS on Linux'''<br />
|[https://github.com/zfsonlinux/zfs/commit/03c6040bee6c87a9413b7da41d9f580f79a8ab62 Nov 2013]<br />
|-<br />
|'''OpenZFS on OS X'''<br />
|[https://github.com/openzfsonosx/zfs/commit/03c6040bee6c87a9413b7da41d9f580f79a8ab62 Nov 2013]<br />
|}<br />
<br />
==== lz4 compression ====<br />
<br />
OpenZFS supports on-the-fly compression of all user data with a variety of compression algorithm. This feature adds support for the lz4 compression algorithm. lz4 is usually faster and compresses data better than lzjb, the old default OpenZFS compression algorithm.<br />
<br />
Note: The <tt>lz4_compress</tt> feature flag must be enabled to take advantage of this.<br />
<br />
{| class="wikitable"<br />
|-<br />
|'''illumos'''<br />
|[https://github.com/illumos/illumos-gate/commit/a6f561b4aee75d0d028e7b36b151c8ed8a86bc76 Jan 2013]<br />
|-<br />
|'''FreeBSD'''<br />
|[https://github.com/freebsd/freebsd/commit/c6d9dc1ad2d2e36220845b84a2d180bd97354797 Feb 2013]<br />
|-<br />
|'''ZFS on Linux'''<br />
|[https://github.com/zfsonlinux/zfs/commit/9759c60f1a1503e48dc5c45a209c3edd5758319f Jan 2013]<br />
|-<br />
|'''OpenZFS on OS X'''<br />
|[https://github.com/openzfsonosx/zfs/commit/9759c60f1a1503e48dc5c45a209c3edd5758319f Jan 2013]<br />
|}<br />
<br />
==== synctask rewrite ====<br />
<br />
{| class="wikitable"<br />
|-<br />
|'''illumos'''<br />
|[https://github.com/illumos/illumos-gate/commit/3b2aab18808792cbd248a12f1edf139b89833c13 Feb 2013]<br />
|-<br />
|'''FreeBSD'''<br />
|[https://github.com/freebsd/freebsd/commit/f1985e5cd725ff1816cd4afbdee2d95b661883f0 March 2013]<br />
|-<br />
|'''ZFS on Linux'''<br />
|[https://github.com/zfsonlinux/zfs/commit/13fe019870c8779bf2f5b3ff731b512cf89133ef Sept 2013]<br />
|-<br />
|'''OpenZFS on OS X'''<br />
|[https://github.com/openzfsonosx/zfs/commit/13fe019870c8779bf2f5b3ff731b512cf89133ef Sept 2013]<br />
|}<br />
<br />
==== l2arc compression ====<br />
<br />
{| class="wikitable"<br />
|-<br />
|'''illumos'''<br />
|[https://github.com/illumos/illumos-gate/commit/aad02571bc59671aa3103bb070ae365f531b0b62 Jun 2013]<br />
|-<br />
|'''FreeBSD'''<br />
|[https://github.com/freebsd/freebsd/commit/b20363fe596a7e3a55d5b62f4d3fdb482c65c47a Jun 2013]<br />
|-<br />
|'''ZFS on Linux'''<br />
|[https://github.com/zfsonlinux/zfs/commit/3a17a7a99a1a6332d0999f9be68e2b8dc3933de1 Aug 2013]<br />
|-<br />
|'''OpenZFS on OS X'''<br />
|[https://github.com/openzfsonosx/zfs/commit/3a17a7a99a1a6332d0999f9be68e2b8dc3933de1 Aug 2013]<br />
|}<br />
<br />
==== ARC Shouldn't Cache Freed Blocks ====<br />
<br />
Originally cached blocks in the ARC remained cached until they were evicted due to memory pressure, even if the underlying disk block was freed. In some workloads these freed blocks were so frequently accessed before they were freed that the ARC continued to cache them while evicting blocks which had not been freed yet. Since freed blocks could never be accessed again continuing to cache them was unnecessary. In OpenZFS ARC blocks are evicted immediately when their underlying data blocks are freed.<br />
<br />
{| class="wikitable"<br />
|-<br />
|'''illumos'''<br />
|[https://github.com/illumos/illumos-gate/commit/6e6d5868f52089b9026785bd90257a3d3f6e5ee2 Jun 2013]<br />
|-<br />
|'''FreeBSD'''<br />
|[https://github.com/freebsd/freebsd/commit/13d822743426263ee50bcf047ab41a1e386156a8 Jun 2013]<br />
|-<br />
|'''ZFS on Linux'''<br />
|[https://github.com/zfsonlinux/zfs/commit/df4474f92d0b1b8d54e1914fdd56be2b75f1ff5e Jun 2013]<br />
|-<br />
|'''OpenZFS on OS X'''<br />
|[https://github.com/openzfsonosx/zfs/commit/df4474f92d0b1b8d54e1914fdd56be2b75f1ff5e Jun 2013]<br />
|}<br />
<br />
==== Improve N-way mirror read performance ====<br />
<br />
Queues read requests to least busy leaf vdev in mirrors.<br />
<br />
In addition to the vdev load biasing first implemented by ZFS on Linux in July 2013, the FreeBSD October 2013 version added I/O locality and device rotational information to further enhance the performance.<br />
<br />
{| class="wikitable"<br />
!OS<br />
!Load<br />
!Load + I/O Locality & Rotational Information<br />
|-<br />
|'''illumos'''<br />
|not yet ported<br />
|not yet ported<br />
|-<br />
|'''FreeBSD'''<br />
|N/A<br />
|[http://svnweb.freebsd.org/changeset/base/256956 23rd October 2013]<br />
|-<br />
|'''ZFS on Linux'''<br />
|[https://github.com/zfsonlinux/zfs/commit/556011dbec2d10579819078559a77630fc559112 Jul 2013]<br />
|not yet ported<br />
|-<br />
|'''OpenZFS on OS X'''<br />
|[https://github.com/openzfsonosx/zfs/commit/556011dbec2d10579819078559a77630fc559112 Jul 2013]<br />
|not yet ported<br />
|}<br />
<br />
==== Smoother Write Throttle ====<br />
<br />
The write throttle (dsl_pool_tempreserve_space() and txg_constrain_throughput()) is rewritten to produce much more consistent delays when under constant load. The new write throttle is based on the amount of dirty data, rather than guesses about future performance of the system. When there is a lot of dirty data, each transaction (e.g. write() syscall) will be delayed by the same small amount. This eliminates the "brick wall of wait" that the old write throttle could hit, causing all transactions to wait several seconds until the next txg opens. One of the keys to the new write throttle is decrementing the amount of dirty data as i/o completes, rather than at the end of spa_sync(). Note that the write throttle is only applied once the i/o scheduler is issuing the maximum number of outstanding async writes. See the block comments in dsl_pool.c and above dmu_tx_delay() for more details.<br />
<br />
The ZFS i/o scheduler (vdev_queue.c) now divides i/os into 5 classes: sync read, sync write, async read, async write, and scrub/resilver. The scheduler issues a number of concurrent i/os from each class to the device. Once a class has been selected, an i/o is selected from this class using either an elevator algorithem (async, scrub classes) or FIFO (sync classes). The number of concurrent async write i/os is tuned dynamically based on i/o load, to achieve good sync i/o latency when there is not a high load of writes, and good write throughput when there is. See the block comment in vdev_queue.c for more details.<br />
<br />
{| class="wikitable"<br />
|-<br />
|'''illumos'''<br />
|[https://github.com/illumos/illumos-gate/commit/69962b5647e4a8b9b14998733b765925381b727e Aug 2013]<br />
|-<br />
|'''FreeBSD'''<br />
|[http://svnweb.freebsd.org/changeset/base/258632 Nov 2013]<br />
|-<br />
|'''ZFS on Linux'''<br />
|[https://github.com/zfsonlinux/zfs/commit/e8b96c6007bf97cdf34869c1ffbd0ce753873a3d Dec 2013]<br />
|-<br />
|'''OpenZFS on OS X'''<br />
|[https://github.com/openzfsonosx/zfs/commit/e8b96c6007bf97cdf34869c1ffbd0ce753873a3d Mar 2014]<br />
|}<br />
<br />
==== Disable LBA Weighting on files and SSDs ====<br />
<br />
On rotational media, the bandwidth of the outermost tracks is approximately twice that of innermost tracks. A heuristic called LBA weighting was put into the metaslab allocator to account for this by favoring the outermost tracks over the innermost tracks. This has the consequence that metaslabs tend to fill at different rates depending on their location. This causes the metaslabs corresponding to outermost tracks to enter the best-fit allocation strategy.<br />
<br />
The best-fit allocation strategy is more CPU intensive than the typical first-fit because it looks for the smallest region of free space able to fulfill an allocation rather than picking the next avaliable one. The CPU time is fairly excessive and is known to harm IOPS, but it exists to minimize use of gang blocks as a metaslab becomes excessively full. Gaining a bandwidth improvement from LBA weighting at the expense of an earlier switch to the best-fit allocation behavior on the weighted metaslabs is reasonable on rotational disks. However, it makes no sense on files, where the underlying filesystem is free to place things however way it sees fit, and on SSDs, where there is no bandwidth difference based on LBA.<br />
<br />
With this change, we will more evenly fill metaslabs on pools whose vdevs consist of only files and SSDs, which will minimize the metaslabs that enter the best fit allocation strategy when a pool is mostly full, but still below 96% full. This is particularly important on SSDs, where drops in IOPS are more pronounced.<br />
<br />
{| class="wikitable"<br />
|-<br />
|'''illumos'''<br />
|not yet<br />
|-<br />
|'''FreeBSD'''<br />
|not yet<br />
|-<br />
|'''ZFS on Linux'''<br />
|[https://github.com/zfsonlinux/zfs/commit/fb40095f5f0853946f8150481ca22602d1334dfe Aug 2015]<br />
|-<br />
|'''OpenZFS on OS X'''<br />
|[https://github.com/openzfsonosx/zfs/commit/fb40095f5f0853946f8150481ca22602d1334dfe Sep 2015]<br />
|}<br />
<br />
== Dataset Properties ==<br />
<br />
These are new filesystem, volume, and snapshot properties which can be accessed with the <tt>zfs(1)</tt> command's <tt>get</tt> subcommand. See the <tt>zfs(1)</tt> manpage for your distribution for more details on each of these properties.<br />
<br />
{| class="wikitable"<br />
!Property<br />
!Description<br />
!illumos<br />
!FreeBSD<br />
!ZFS on Linux<br />
!OpenZFS on OS X<br />
|-<br />
|<tt>refcompressratio</tt><br />
|The compression ratio acheived for all data referenced by (but not necessarily unique to) a snapshot, filesystem, or volume, expressed as a multiplier.<br />
|[https://github.com/illumos/illumos-gate/commit/187d6ac08adc31ea6868bde0cfbbb288826254e8 Jun 2011]<br />
|[https://github.com/freebsd/freebsd/commit/333e34b938a2b5e7b036e02b36408880b415109c Jun 2011]<br />
|[https://github.com/zfsonlinux/zfs/commit/77999e804fff35782ab4b578d2cecf064c54a841 Aug 2012]<br />
|[https://github.com/openzfsonosx/zfs/commit/77999e804fff35782ab4b578d2cecf064c54a841 Aug 2012]<br />
|-<br />
|<tt>clones</tt><br />
|For snapshots, this property is a comma-separated list of filesystems or volumes which are clones of this snapshot.<br />
|[https://github.com/illumos/illumos-gate/commit/e5351341b58845eee9d722bd71543d5a7c26b6cc Nov 2011]<br />
|[https://github.com/freebsd/freebsd/commit/73cab7197174153a718dedc97ff344341bcf6098 Nov 2011]<br />
|[https://github.com/zfsonlinux/zfs/commit/330d06f90d143b41b276796526a66a1c1fff046d Jul 2012]<br />
|[https://github.com/openzfsonosx/zfs/commit/330d06f90d143b41b276796526a66a1c1fff046d Jul 2012]<br />
|-<br />
|<tt>written</tt><br />
|The amount of referenced space written to this dataset since the previous snapshot.<br />
|[https://github.com/illumos/illumos-gate/commit/e5351341b58845eee9d722bd71543d5a7c26b6cc Nov 2011]<br />
|[https://github.com/freebsd/freebsd/commit/73cab7197174153a718dedc97ff344341bcf6098 Nov 2011]<br />
|[https://github.com/zfsonlinux/zfs/commit/330d06f90d143b41b276796526a66a1c1fff046d Jul 2012]<br />
|[https://github.com/openzfsonosx/zfs/commit/330d06f90d143b41b276796526a66a1c1fff046d Jul 2012]<br />
|-<br />
|<tt>written@''<snap>''</tt><br />
|The amount of referenced space written to this dataset since the specified snapshot. This is the space referenced by this dataset, but not referenced by the specified snapshot.<br />
|[https://github.com/illumos/illumos-gate/commit/e5351341b58845eee9d722bd71543d5a7c26b6cc Nov 2011]<br />
|[https://github.com/freebsd/freebsd/commit/73cab7197174153a718dedc97ff344341bcf6098 Nov 2011]<br />
|[https://github.com/zfsonlinux/zfs/commit/330d06f90d143b41b276796526a66a1c1fff046d Jul 2012]<br />
|[https://github.com/openzfsonosx/zfs/commit/330d06f90d143b41b276796526a66a1c1fff046d Jul 2012]<br />
|-<br />
|<tt>logicalused</tt>, <tt>logicalreferenced</tt><br />
|The amount of space used or referenced, before taking into account compression.<br />
|[https://github.com/illumos/illumos-gate/commit/77372cb0f35e8d3615ca2e16044f033397e88e21 Feb 2013]<br />
|[https://github.com/freebsd/freebsd/commit/2bed8f5691b7572d6f31bfc68e9f762a938af863 Mar 2013]<br />
|[https://github.com/zfsonlinux/zfs/commit/24a64651b4163d47b1187821152d762e9a263d5a Oct 2013]<br />
|not yet<br />
|-<br />
|}</div>Lundmanhttps://openzfs.org/w/index.php?title=Features&diff=2035Features2015-12-16T00:41:23Z<p>Lundman: /* Smoother Write Throttle */ Updating OS X</p>
<hr />
<div>This page describes some of the more important features and performance improvements that are part of OpenZFS.<br />
<br />
Help would be appreciated in porting features between platforms whose status is "not yet".<br />
<br />
== Feature Flags ==<br />
<br />
See the [[Feature_Flags|Feature Flags]] wiki page.<br />
<br />
== libzfs_core ==<br />
<br />
See this [http://blog.delphix.com/matt/2012/01/17/the-future-of-libzfs/ blog post (Jan 2012)] and associated [http://blog.delphix.com/matt/files/2012/01/The_Future_of_LibZFS.pdf slides] and [http://www.youtube.com/watch?feature=player_embedded&list=PL1A94C8EECCAF7340&v=iJ0S91ygErE video] for more details.<br />
<br />
First introduced in:<br />
{| class="wikitable"<br />
|-<br />
|'''illumos'''<br />
|[https://github.com/illumos/illumos-gate/commit/4445fffbbb1ea25fd0e9ea68b9380dd7a6709025 June 2012]<br />
|-<br />
|'''FreeBSD'''<br />
|[https://github.com/freebsd/freebsd/commit/f1985e5cd725ff1816cd4afbdee2d95b661883f0 March 2013]<br />
|-<br />
|'''ZFS on Linux'''<br />
|[https://github.com/zfsonlinux/zfs/commit/6f1ffb06655008c9b519108ed29fbf03acd6e5de August 2013]<br />
|-<br />
|'''OpenZFS on OS X'''<br />
|[https://github.com/openzfsonosx/zfs/commit/50b0b2d9ea604d29ed729be8fa61bb77ae3ff4e9 October 2013]<br />
|}<br />
<br />
== CLI Usability ==<br />
<br />
These are improvements to the command line interface. While the end result is a generally more friendly user interface, getting the desired behavior often required modifications to the core of ZFS.<br />
<br />
''Listed in chronological order (oldest first).''<br />
<br />
==== Pool Comment ====<br />
<br />
OpenZFS has a per-pool comment property which can be set with the <tt>zpool set</tt> command and can be read even if the pool is not imported, so it is accessible even if pool import fails.<br />
<br />
{| class="wikitable"<br />
|-<br />
|'''illumos'''<br />
|[https://github.com/illumos/illumos-gate/commit/8704186e373c9ed74daa395ff3f7fd745396df9e Nov 2011]<br />
|-<br />
|'''FreeBSD'''<br />
|[https://github.com/freebsd/freebsd/commit/73cab7197174153a718dedc97ff344341bcf6098 Nov 2011]<br />
|-<br />
|'''ZFS on Linux'''<br />
|[https://github.com/zfsonlinux/zfs/commit/d96eb2b1538db13ee7a716ec0e1162f5735edc12 Aug 2012]<br />
|-<br />
|'''OpenZFS on OS X'''<br />
|[https://github.com/openzfsonosx/zfs/commit/d96eb2b1538db13ee7a716ec0e1162f5735edc12 Aug 2012]<br />
|}<br />
<br />
==== Size Estimates for <tt>zfs send</tt> and <tt>zfs destroy</tt> ====<br />
<br />
This feature enhances OpenZFS's internal space accounting information. This new accounting information is used to provide a <tt>-n</tt> (dry-run) option for <tt>zfs send</tt> which can instantly calculate the amount of send stream data a specific <tt>zfs send</tt> command would generate. It is also used for a <tt>-n</tt> option for <tt>zfs destroy</tt> which can instantly calculate the amount of space that would be reclaimed by a specific <tt>zfs destroy</tt> command.<br />
<br />
{| class="wikitable"<br />
|-<br />
|'''illumos'''<br />
|[https://github.com/illumos/illumos-gate/commit/e5351341b58845eee9d722bd71543d5a7c26b6cc Nov 2011]<br />
|-<br />
|'''FreeBSD'''<br />
|[https://github.com/freebsd/freebsd/commit/73cab7197174153a718dedc97ff344341bcf6098 Nov 2011]<br />
|-<br />
|'''ZFS on Linux'''<br />
|[https://github.com/zfsonlinux/zfs/commit/330d06f90d143b41b276796526a66a1c1fff046d Jul 2012]<br />
|-<br />
|'''OpenZFS on OS X'''<br />
|[https://github.com/openzfsonosx/zfs/commit/330d06f90d143b41b276796526a66a1c1fff046d Jul 2012]<br />
|}<br />
<br />
==== vdev Information in <tt>zpool list</tt> ====<br />
<br />
OpenZFS adds a <tt>-v</tt> option to the <tt>zpool list</tt> command which shows detailed sizing information about the vdevs in the pool:<br />
<br />
$ zpool list -v<br />
NAME SIZE ALLOC FREE EXPANDSZ CAP DEDUP HEALTH ALTROOT<br />
dcenter 5.24T 3.85T 1.39T - 73% 1.00x ONLINE -<br />
mirror 556G 469G 86.7G -<br />
c2t1d0 - - - -<br />
c2t0d0 - - - -<br />
mirror 556G 493G 63.0G -<br />
c2t3d0 - - - -<br />
c2t2d0 - - - -<br />
mirror 556G 493G 62.7G -<br />
c2t5d0 - - - -<br />
c2t4d0 - - - -<br />
mirror 556G 494G 62.5G -<br />
c2t8d0 - - - -<br />
c2t6d0 - - - -<br />
mirror 556G 494G 62.2G -<br />
c2t10d0 - - - -<br />
c2t9d0 - - - -<br />
mirror 556G 494G 61.9G -<br />
c2t12d0 - - - -<br />
c2t11d0 - - - -<br />
mirror 1016G 507G 509G -<br />
c1t1d0 - - - -<br />
c1t5d0 - - - -<br />
mirror 1016G 496G 520G -<br />
c1t3d0 - - - -<br />
c1t4d0 - - - -<br />
<br />
{| class="wikitable"<br />
|-<br />
|'''illumos'''<br />
|[https://github.com/illumos/illumos-gate/commit/4263d13f00c9691fa14620eff82abef795be0693 Jan 2012]<br />
|-<br />
|'''FreeBSD'''<br />
|[https://github.com/freebsd/freebsd/commit/38ef930079cbb1df5de9df3c1064426dba3976b1 May 2012]<br />
|-<br />
|'''ZFS on Linux'''<br />
|[https://github.com/zfsonlinux/zfs/commit/1bd201e70d57464fd26bf9089ea4b44fd49e4f2d Sept 2012]<br />
|-<br />
|'''OpenZFS on OS X'''<br />
|[https://github.com/openzfsonosx/zfs/commit/1bd201e70d57464fd26bf9089ea4b44fd49e4f2d Sept 2012]<br />
|}<br />
<br />
==== ZFS list snapshot property alias ====<br />
<br />
Functionally identical to Solaris 11 extension <code>zfs list -t snap</code>.<br />
<br />
{| class="wikitable"<br />
|-<br />
|'''illumos'''<br />
|not yet<br />
|-<br />
|'''FreeBSD'''<br />
|[http://svnweb.freebsd.org/changeset/base/256999 Oct 2013]<br />
|-<br />
|'''ZFS on Linux'''<br />
|[https://github.com/zfsonlinux/zfs/commit/cf81b00a73fe47fdb21586ac1cc179b734540973 Apr 2012]<br />
|-<br />
|'''OpenZFS on OS X'''<br />
|[https://github.com/openzfsonosx/zfs/commit/cf81b00a73fe47fdb21586ac1cc179b734540973 Apr 2012]<br />
|}<br />
<br />
==== ZFS snapshot alias ====<br />
<br />
Functionally identical to Solaris 11 extension <code>zfs snap</code>.<br />
<br />
{| class="wikitable"<br />
|-<br />
|'''illumos'''<br />
|not yet<br />
|-<br />
|'''FreeBSD'''<br />
|[http://svnweb.freebsd.org/changeset/base/256999 Oct 2013]<br />
|-<br />
|'''ZFS on Linux'''<br />
|[https://github.com/zfsonlinux/zfs/commit/10b75496bb0cb7a7b8146c263164adc37f1d176a Apr 2012]<br />
|-<br />
|'''OpenZFS on OS X'''<br />
|[https://github.com/openzfsonosx/zfs/commit/10b75496bb0cb7a7b8146c263164adc37f1d176a Apr 2012]<br />
|}<br />
<br />
==== <tt>zfs send</tt> Progress Reporting ====<br />
<br />
OpenZFS introduces a <tt>-v</tt> option to <tt>zfs send</tt> which reports per-second information on how much data has been sent, how long it has taken, and how much data remains to be sent.<br />
<br />
{| class="wikitable"<br />
|-<br />
|'''illumos'''<br />
|[https://github.com/illumos/illumos-gate/commit/4e3c9f4489a18514e5e8caeb91d4e6db07c98415 May 2012]<br />
|-<br />
|'''FreeBSD'''<br />
|[https://github.com/freebsd/freebsd/commit/046ff8962602e8d65b6b3fae48573513ab7e433f May 2012]<br />
|-<br />
|'''ZFS on Linux'''<br />
|[https://github.com/zfsonlinux/zfs/commit/37abac6d559a1da8ab8e5379442f491b73998f6a Sept 2012]<br />
|-<br />
|'''OpenZFS on OS X'''<br />
|[https://github.com/openzfsonosx/zfs/commit/37abac6d559a1da8ab8e5379442f491b73998f6a Sept 2012]<br />
|}<br />
<br />
==== Arbitrary Snapshot Arguments to <tt>zfs snapshot</tt> ====<br />
<br />
{| class="wikitable"<br />
|-<br />
|'''illumos'''<br />
|[https://github.com/illumos/illumos-gate/commit/4445fffbbb1ea25fd0e9ea68b9380dd7a6709025 June 2012]<br />
|-<br />
|'''FreeBSD'''<br />
|[https://github.com/freebsd/freebsd/commit/f1985e5cd725ff1816cd4afbdee2d95b661883f0 March 2013]<br />
|-<br />
|'''ZFS on Linux'''<br />
|[https://github.com/zfsonlinux/zfs/commit/6f1ffb06655008c9b519108ed29fbf03acd6e5de August 2013]<br />
|-<br />
|'''OpenZFS on OS X'''<br />
|[https://github.com/openzfsonosx/zfs/commit/6f1ffb06655008c9b519108ed29fbf03acd6e5de September 2013]<br />
|}<br />
<br />
== Performance ==<br />
<br />
These are significant performance improvements, often requiring substantial restructuring of the source code.<br />
<br />
''Listed in chronological order (oldest first).''<br />
<br />
==== SA based xattrs ====<br />
<br />
Improves performance of linux-style (short) xattrs by storing them in the dnode_phys_t's bonus block. (Not to be confused with [http://en.wikipedia.org/wiki/Extended_file_attributes#Solaris Solaris-style Extended Attributes] which are full-fledged files or "forks", like NTFS streams. This work could be extended to also improve the performance on illumos of small Extended Attributes whose permissions are the same as the containing file.)<br />
<br />
Requires a disk format change and is off by default until Filesystem (ZPL) Feature Flags are implemented (not to be confused with [[Features#Feature_Flags_Overview | zpool Feature Flags]]).<br />
<br />
{| class="wikitable"<br />
|-<br />
|'''illumos'''<br />
|not yet (needs additional functionality)<br />
|-<br />
|'''FreeBSD'''<br />
|??<br />
|-<br />
|'''ZFS on Linux'''<br />
|[https://github.com/zfsonlinux/zfs/commit/82a37189aac955c81a59a5ecc3400475adb56355 Oct 2011]<br />
|-<br />
|'''OpenZFS on OS X'''<br />
|[https://github.com/openzfsonosx/zfs/commit/6a06ef26abc87c6ede9bec8246713dc94c98fa78 May 2015]<br />
|}<br />
<br />
Note that SA based xattrs are [https://github.com/zfsonlinux/zfs/commit/6a7c0ccca44ad02c476a111d8f7911fc8b12fff7 no longer used on symlinks] as of Aug 2013 until an issue is resolved.<br />
<br />
==== Use the slog even with logbias=throughput ====<br />
<br />
{| class="wikitable"<br />
|-<br />
|'''illumos'''<br />
|??<br />
|-<br />
|'''FreeBSD'''<br />
|??<br />
|-<br />
|'''ZFS on Linux'''<br />
|[https://github.com/zfsonlinux/zfs/commit/5d7a86d114c2706a8d14d94b71f81ad5cdf066c5 Oct 2011]<br />
|-<br />
|'''OpenZFS on OS X'''<br />
|[https://github.com/openzfsonosx/zfs/commit/5d7a86d114c2706a8d14d94b71f81ad5cdf066c5 Oct 2011]<br />
|}<br />
<br />
==== Asynchronous Filesystem and Volume Destruction ====<br />
<br />
Destroying a filesystem requires traversing all of its data in order to return its used blocks to the pool's free list. Before this feature the filesystem was not fully removed until all blocks had been reclaimed. If the destroy operation was interrupted by a reboot or power outage the next attempt to import the pool (probably during boot) would need to complete the destroy operation synchronously, possibly delaying a boot for long periods of time.<br />
<br />
With asynchronous destruction the filesystem's data is immediately moved to a "to be freed" list, allowing the destroy operation to complete without traversing any of the filesystem's data. A background process reclaims blocks from this "to be freed" list and is capable of resuming this process after reboots without slowing the pool import process.<br />
<br />
The new freeing algorithm also has a significant performance improvement when destroying clones. The old algorithm took time proportional to the number of blocks ''referenced'' by the clone, even if most of those blocks could not be reclaimed because they were still referenced by the clone's origin. The new algorithm only takes time proportional to the number of blocks unique to the clone.<br />
<br />
See this [http://blog.delphix.com/matt/2012/07/11/performance-of-zfs-destroy/ blog post] for more detailed performance analysis.<br />
<br />
Note: The <tt>async_destroy</tt> feature flag must be enabled to take advantage of this.<br />
<br />
{| class="wikitable"<br />
|-<br />
|'''illumos'''<br />
|[https://github.com/illumos/illumos-gate/commit/ad135b5d644628e791c3188a6ecbd9c257961ef8 May 2012]<br />
|-<br />
|'''FreeBSD'''<br />
|[https://github.com/freebsd/freebsd/commit/cc61ab2f133566dca51970d44cc49a4355039b5d June 2012]<br />
|-<br />
|'''ZFS on Linux'''<br />
|[https://github.com/zfsonlinux/zfs/commit/9ae529ec5dbdc828ff8326beae58062971d74b2e Jan 2013]<br />
|-<br />
|'''OpenZFS on OS X'''<br />
|[https://github.com/openzfsonosx/zfs/commit/9ae529ec5dbdc828ff8326beae58062971d74b2e Jan 2013]<br />
|}<br />
<br />
==== Reduce Number of Empty bpobjs ====<br />
<br />
Every time OpenZFS takes a snapshot it creates on-disk block pointer objects (bpobj's) to track blocks associated with that snapshot. In common use cases most of these bpobj's are empty, but the number of bpobjs per-snapshot is proportional to the number of snapshots already taken of the same filesystem or volume. When a single filesystem or volume has many (tens of thousands) snapshots these unecessary empty bpobjs can waste space and cause performance problems. OpenZFS waits to create each bpobjs until the first entry is added to it, thus eliminating the empty bpobjs.<br />
<br />
Note: The <tt>empty_bpobj</tt> feature flag must be enabled to take advantage of this.<br />
<br />
{| class="wikitable"<br />
|-<br />
|'''illumos'''<br />
|[https://github.com/illumos/illumos-gate/commit/f17457368189aa911f774c38c1f21875a568bdca Aug 2012]<br />
|-<br />
|'''FreeBSD'''<br />
|[https://github.com/freebsd/freebsd/commit/d9fa2f486ee98b2557e1d5ad5f1af418c663cfc8 Aug 2012]<br />
|-<br />
|'''ZFS on Linux'''<br />
|[https://github.com/zfsonlinux/zfs/commit/753c38392ddff9d3cf140bb4d28f3bfba52c92d2 Dec 2012]<br />
|-<br />
|'''OpenZFS on OS X'''<br />
|[https://github.com/openzfsonosx/zfs/commit/753c38392ddff9d3cf140bb4d28f3bfba52c92d2 Dec 2012]<br />
|}<br />
<br />
==== Single Copy ARC ====<br />
<br />
OpenZFS caches disk blocks in-memory in the adaptive replacement cache (ARC). Originally when the same disk block was accessed from different clones it was cached multiple times (one for each clone accessing the block) in case a clone planned to modify the block. With these changes OpenZFS caches at most one copy of every block unless a clone is actually modifying the block.<br />
<br />
{| class="wikitable"<br />
|-<br />
|'''illumos'''<br />
|[https://github.com/illumos/illumos-gate/commit/9253d63df408bb48584e0b1abfcc24ef2472382e Sep 2012]<br />
|-<br />
|'''FreeBSD'''<br />
|[https://github.com/freebsd/freebsd/commit/8e1fdec2c76a948b16ebf8e4abe2cb73a60d3477 Nov 2012]<br />
|-<br />
|'''ZFS on Linux'''<br />
|[https://github.com/zfsonlinux/zfs/commit/1eb5bfa3dcdaecb19543d9df13131374a7a42947 Dec 2012]<br />
|-<br />
|'''OpenZFS on OS X'''<br />
|[https://github.com/openzfsonosx/zfs/commit/1eb5bfa3dcdaecb19543d9df13131374a7a42947 Dec 2012]<br />
|}<br />
<br />
==== TRIM Support ====<br />
<br />
TRIM support provides the ability to pass deletes / frees through to underlying vdevs that help to ensure devices such as SSD's, which rely on receiving TRIM / UNMAP requests for sectors which are no longer needed, maintain optimal performance.<br />
<br />
The current FreeBSD implementation builds a map of regions that were freed. On every write the<br />
code consults the map and removes ranges that were freed before, but are now overwritten.<br />
<br />
Freed blocks are not TRIMed immediately, there is a low priority thread that TRIMs ranges when the time comes.<br />
<br />
Support for TRIM has been demonstrated to significantly improved the general performance of SSD in the field, eliminating the need for regular secure erase cycles on busy hosts.<br />
<br />
An alternative method, which is arguably better, and works by tracking the metaslab allocator is also in progress and can be found here:<br />
[http://cr.illumos.org/~webrev/skiselkov/zfs_unmap/ ZFS TRIM Support for illumos]<br />
<br />
There is [https://github.com/zfsonlinux/zfs/pull/1016 a pull request for ZFS On Linux] which implements FreeBSD's (Sep 2012) ZFS TRIM support.<br />
<br />
{| class="wikitable"<br />
|-<br />
|'''illumos'''<br />
|not yet ported<br />
|-<br />
|'''FreeBSD'''<br />
|[http://svnweb.freebsd.org/base?view=revision&sortby=file&revision=240868 Sep 2012]<br />
|-<br />
|'''ZFS on Linux'''<br />
|not yet ported<br />
|-<br />
|'''OpenZFS on OS X'''<br />
|not yet ported<br />
|}<br />
<br />
==== FASTWRITE Algorithm ====<br />
<br />
Improves synchronous IO performance.<br />
<br />
{| class="wikitable"<br />
|-<br />
|'''illumos'''<br />
|not yet ported<br />
|-<br />
|'''FreeBSD'''<br />
|not yet ported<br />
|-<br />
|'''ZFS on Linux'''<br />
|[https://github.com/zfsonlinux/zfs/commit/920dd524fb2997225d4b1ac180bcbc14b045fda6 Oct 2012]<br />
|-<br />
|'''OpenZFS on OS X'''<br />
|[https://github.com/openzfsonosx/zfs/commit/920dd524fb2997225d4b1ac180bcbc14b045fda6 Oct 2012]<br />
|}<br />
<br />
Note that a [https://github.com/ryao/zfs/commit/858822a04b4563657b2267131e90d9687d67e31b locking enhancement] is being reviewed.<br />
<br />
==== Block Freeing Performance Improvments ====<br />
<br />
Performance analysis of OpenZFS revealed that the algorithms used when freeing blocks could cause significant performance problems when freeing a large amount of blocks in a single transaction or when dealing with fragmented pools. Several performance improvements were made in this area.<br />
<br />
{| class="wikitable"<br />
|-<br />
|'''illumos'''<br />
|[https://github.com/illumos/illumos-gate/commit/01f55e48fb4d524eaf70687728aa51b7762e2e97 Nov 2012]<br />
|[https://github.com/illumos/illumos-gate/commit/16a4a8074274d2d7cc408589cf6359f4a378c861 Feb 2013]<br />
|[https://github.com/illumos/illumos-gate/commit/9eb57f7f3fbb970d4b9b89dcd5ecf543fe2414d5 Feb 2013]<br />
|-<br />
|'''FreeBSD'''<br />
|[https://github.com/freebsd/freebsd/commit/5d9b3f284b13ac492326e05f6ba4c00e98adf05c Nov 2012]<br />
|[https://github.com/freebsd/freebsd/commit/18e9a0422b52091035dae9d69bde9dd571a8ff7e Feb 2013]<br />
|[https://github.com/freebsd/freebsd/commit/18e9a0422b52091035dae9d69bde9dd571a8ff7e Feb 2013]<br />
|-<br />
|'''ZFS on Linux'''<br />
|[https://github.com/zfsonlinux/zfs/commit/55d85d5a8c45c4559a4a0e675c37b0c3afb19c2f May 2013]<br />
|[https://github.com/zfsonlinux/zfs/commit/e51be06697762215dc3b679f8668987034a5a048 June 2013]<br />
|[https://github.com/zfsonlinux/zfs/commit/c2e42f9d53bec422abb71efade2c004383345038 Oct 2013]<br />
|-<br />
|'''OpenZFS on OS X'''<br />
|[https://github.com/openzfsonosx/zfs/commit/55d85d5a8c45c4559a4a0e675c37b0c3afb19c2f May 2013]<br />
|[https://github.com/openzfsonosx/zfs/commit/e51be06697762215dc3b679f8668987034a5a048 June 2013]<br />
|[https://github.com/openzfsonosx/zfs/commit/c2e42f9d53bec422abb71efade2c004383345038 Oct 2013]<br />
|}<br />
<br />
==== nop-write ====<br />
<br />
ZFS supports end-to-end checksumming of every data block. When a cryptographically secure checksum is being used OpenZFS will compare the checksums of incoming writes to checksum of the existing on-disk data and avoid issuing any write i/o for data that has not changed. This can help performance and snapshot space usage in situations were the same files are regularly overwritten with almost-identical data (e.g. regular full-backups of large random-access files).<br />
<br />
{| class="wikitable"<br />
|-<br />
|'''illumos'''<br />
|[https://github.com/illumos/illumos-gate/commit/80901aea8e78a2c20751f61f01bebd1d5b5c2ba5 Nov 2012]<br />
|-<br />
|'''FreeBSD'''<br />
|[https://github.com/freebsd/freebsd/commit/3a0bfecf052237768517963f169d0797e2978f59 Nov 2012]<br />
|-<br />
|'''ZFS on Linux'''<br />
|[https://github.com/zfsonlinux/zfs/commit/03c6040bee6c87a9413b7da41d9f580f79a8ab62 Nov 2013]<br />
|-<br />
|'''OpenZFS on OS X'''<br />
|[https://github.com/openzfsonosx/zfs/commit/03c6040bee6c87a9413b7da41d9f580f79a8ab62 Nov 2013]<br />
|}<br />
<br />
==== lz4 compression ====<br />
<br />
OpenZFS supports on-the-fly compression of all user data with a variety of compression algorithm. This feature adds support for the lz4 compression algorithm. lz4 is usually faster and compresses data better than lzjb, the old default OpenZFS compression algorithm.<br />
<br />
Note: The <tt>lz4_compress</tt> feature flag must be enabled to take advantage of this.<br />
<br />
{| class="wikitable"<br />
|-<br />
|'''illumos'''<br />
|[https://github.com/illumos/illumos-gate/commit/a6f561b4aee75d0d028e7b36b151c8ed8a86bc76 Jan 2013]<br />
|-<br />
|'''FreeBSD'''<br />
|[https://github.com/freebsd/freebsd/commit/c6d9dc1ad2d2e36220845b84a2d180bd97354797 Feb 2013]<br />
|-<br />
|'''ZFS on Linux'''<br />
|[https://github.com/zfsonlinux/zfs/commit/9759c60f1a1503e48dc5c45a209c3edd5758319f Jan 2013]<br />
|-<br />
|'''OpenZFS on OS X'''<br />
|[https://github.com/openzfsonosx/zfs/commit/9759c60f1a1503e48dc5c45a209c3edd5758319f Jan 2013]<br />
|}<br />
<br />
==== synctask rewrite ====<br />
<br />
{| class="wikitable"<br />
|-<br />
|'''illumos'''<br />
|[https://github.com/illumos/illumos-gate/commit/3b2aab18808792cbd248a12f1edf139b89833c13 Feb 2013]<br />
|-<br />
|'''FreeBSD'''<br />
|[https://github.com/freebsd/freebsd/commit/f1985e5cd725ff1816cd4afbdee2d95b661883f0 March 2013]<br />
|-<br />
|'''ZFS on Linux'''<br />
|[https://github.com/zfsonlinux/zfs/commit/13fe019870c8779bf2f5b3ff731b512cf89133ef Sept 2013]<br />
|-<br />
|'''OpenZFS on OS X'''<br />
|[https://github.com/openzfsonosx/zfs/commit/13fe019870c8779bf2f5b3ff731b512cf89133ef Sept 2013]<br />
|}<br />
<br />
==== l2arc compression ====<br />
<br />
{| class="wikitable"<br />
|-<br />
|'''illumos'''<br />
|[https://github.com/illumos/illumos-gate/commit/aad02571bc59671aa3103bb070ae365f531b0b62 Jun 2013]<br />
|-<br />
|'''FreeBSD'''<br />
|[https://github.com/freebsd/freebsd/commit/b20363fe596a7e3a55d5b62f4d3fdb482c65c47a Jun 2013]<br />
|-<br />
|'''ZFS on Linux'''<br />
|[https://github.com/zfsonlinux/zfs/commit/3a17a7a99a1a6332d0999f9be68e2b8dc3933de1 Aug 2013]<br />
|-<br />
|'''OpenZFS on OS X'''<br />
|[https://github.com/openzfsonosx/zfs/commit/3a17a7a99a1a6332d0999f9be68e2b8dc3933de1 Aug 2013]<br />
|}<br />
<br />
==== ARC Shouldn't Cache Freed Blocks ====<br />
<br />
Originally cached blocks in the ARC remained cached until they were evicted due to memory pressure, even if the underlying disk block was freed. In some workloads these freed blocks were so frequently accessed before they were freed that the ARC continued to cache them while evicting blocks which had not been freed yet. Since freed blocks could never be accessed again continuing to cache them was unnecessary. In OpenZFS ARC blocks are evicted immediately when their underlying data blocks are freed.<br />
<br />
{| class="wikitable"<br />
|-<br />
|'''illumos'''<br />
|[https://github.com/illumos/illumos-gate/commit/6e6d5868f52089b9026785bd90257a3d3f6e5ee2 Jun 2013]<br />
|-<br />
|'''FreeBSD'''<br />
|[https://github.com/freebsd/freebsd/commit/13d822743426263ee50bcf047ab41a1e386156a8 Jun 2013]<br />
|-<br />
|'''ZFS on Linux'''<br />
|[https://github.com/zfsonlinux/zfs/commit/df4474f92d0b1b8d54e1914fdd56be2b75f1ff5e Jun 2013]<br />
|-<br />
|'''OpenZFS on OS X'''<br />
|[https://github.com/openzfsonosx/zfs/commit/df4474f92d0b1b8d54e1914fdd56be2b75f1ff5e Jun 2013]<br />
|}<br />
<br />
==== Improve N-way mirror read performance ====<br />
<br />
Queues read requests to least busy leaf vdev in mirrors.<br />
<br />
In addition to the vdev load biasing first implemented by ZFS on Linux in July 2013, the FreeBSD October 2013 version added I/O locality and device rotational information to further enhance the performance.<br />
<br />
{| class="wikitable"<br />
!OS<br />
!Load<br />
!Load + I/O Locality & Rotational Information<br />
|-<br />
|'''illumos'''<br />
|not yet ported<br />
|not yet ported<br />
|-<br />
|'''FreeBSD'''<br />
|N/A<br />
|[http://svnweb.freebsd.org/changeset/base/256956 23rd October 2013]<br />
|-<br />
|'''ZFS on Linux'''<br />
|[https://github.com/zfsonlinux/zfs/commit/556011dbec2d10579819078559a77630fc559112 Jul 2013]<br />
|not yet ported<br />
|-<br />
|'''OpenZFS on OS X'''<br />
|[https://github.com/openzfsonosx/zfs/commit/556011dbec2d10579819078559a77630fc559112 Jul 2013]<br />
|not yet ported<br />
|}<br />
<br />
==== Smoother Write Throttle ====<br />
<br />
The write throttle (dsl_pool_tempreserve_space() and txg_constrain_throughput()) is rewritten to produce much more consistent delays when under constant load. The new write throttle is based on the amount of dirty data, rather than guesses about future performance of the system. When there is a lot of dirty data, each transaction (e.g. write() syscall) will be delayed by the same small amount. This eliminates the "brick wall of wait" that the old write throttle could hit, causing all transactions to wait several seconds until the next txg opens. One of the keys to the new write throttle is decrementing the amount of dirty data as i/o completes, rather than at the end of spa_sync(). Note that the write throttle is only applied once the i/o scheduler is issuing the maximum number of outstanding async writes. See the block comments in dsl_pool.c and above dmu_tx_delay() for more details.<br />
<br />
The ZFS i/o scheduler (vdev_queue.c) now divides i/os into 5 classes: sync read, sync write, async read, async write, and scrub/resilver. The scheduler issues a number of concurrent i/os from each class to the device. Once a class has been selected, an i/o is selected from this class using either an elevator algorithem (async, scrub classes) or FIFO (sync classes). The number of concurrent async write i/os is tuned dynamically based on i/o load, to achieve good sync i/o latency when there is not a high load of writes, and good write throughput when there is. See the block comment in vdev_queue.c for more details.<br />
<br />
{| class="wikitable"<br />
|-<br />
|'''illumos'''<br />
|[https://github.com/illumos/illumos-gate/commit/69962b5647e4a8b9b14998733b765925381b727e Aug 2013]<br />
|-<br />
|'''FreeBSD'''<br />
|[http://svnweb.freebsd.org/changeset/base/258632 Nov 2013]<br />
|-<br />
|'''ZFS on Linux'''<br />
|[https://github.com/zfsonlinux/zfs/commit/e8b96c6007bf97cdf34869c1ffbd0ce753873a3d Dec 2013]<br />
|-<br />
|'''OpenZFS on OS X'''<br />
|[https://github.com/openzfsonosx/zfs/commit/e8b96c6007bf97cdf34869c1ffbd0ce753873a3d Mar 2014]<br />
|}<br />
<br />
==== Disable LBA Weighting on files and SSDs ====<br />
<br />
On rotational media, the bandwidth of the outermost tracks is approximately twice that of innermost tracks. A heuristic called LBA weighting was put into the metaslab allocator to account for this by favoring the outermost tracks over the innermost tracks. This has the consequence that metaslabs tend to fill at different rates depending on their location. This causes the metaslabs corresponding to outermost tracks to enter the best-fit allocation strategy.<br />
<br />
The best-fit allocation strategy is more CPU intensive than the typical first-fit because it looks for the smallest region of free space able to fulfill an allocation rather than picking the next avaliable one. The CPU time is fairly excessive and is known to harm IOPS, but it exists to minimize use of gang blocks as a metaslab becomes excessively full. Gaining a bandwidth improvement from LBA weighting at the expense of an earlier switch to the best-fit allocation behavior on the weighted metaslabs is reasonable on rotational disks. However, it makes no sense on files, where the underlying filesystem is free to place things however way it sees fit, and on SSDs, where there is no bandwidth difference based on LBA.<br />
<br />
With this change, we will more evenly fill metaslabs on pools whose vdevs consist of only files and SSDs, which will minimize the metaslabs that enter the best fit allocation strategy when a pool is mostly full, but still below 96% full. This is particularly important on SSDs, where drops in IOPS are more pronounced.<br />
<br />
{| class="wikitable"<br />
|-<br />
|'''illumos'''<br />
|not yet<br />
|-<br />
|'''FreeBSD'''<br />
|not yet<br />
|-<br />
|'''ZFS on Linux'''<br />
|[https://github.com/zfsonlinux/zfs/commit/fb40095f5f0853946f8150481ca22602d1334dfe Aug 2015]<br />
|-<br />
|'''OpenZFS on OS X'''<br />
|not yet<br />
|}<br />
<br />
== Dataset Properties ==<br />
<br />
These are new filesystem, volume, and snapshot properties which can be accessed with the <tt>zfs(1)</tt> command's <tt>get</tt> subcommand. See the <tt>zfs(1)</tt> manpage for your distribution for more details on each of these properties.<br />
<br />
{| class="wikitable"<br />
!Property<br />
!Description<br />
!illumos<br />
!FreeBSD<br />
!ZFS on Linux<br />
!OpenZFS on OS X<br />
|-<br />
|<tt>refcompressratio</tt><br />
|The compression ratio acheived for all data referenced by (but not necessarily unique to) a snapshot, filesystem, or volume, expressed as a multiplier.<br />
|[https://github.com/illumos/illumos-gate/commit/187d6ac08adc31ea6868bde0cfbbb288826254e8 Jun 2011]<br />
|[https://github.com/freebsd/freebsd/commit/333e34b938a2b5e7b036e02b36408880b415109c Jun 2011]<br />
|[https://github.com/zfsonlinux/zfs/commit/77999e804fff35782ab4b578d2cecf064c54a841 Aug 2012]<br />
|[https://github.com/openzfsonosx/zfs/commit/77999e804fff35782ab4b578d2cecf064c54a841 Aug 2012]<br />
|-<br />
|<tt>clones</tt><br />
|For snapshots, this property is a comma-separated list of filesystems or volumes which are clones of this snapshot.<br />
|[https://github.com/illumos/illumos-gate/commit/e5351341b58845eee9d722bd71543d5a7c26b6cc Nov 2011]<br />
|[https://github.com/freebsd/freebsd/commit/73cab7197174153a718dedc97ff344341bcf6098 Nov 2011]<br />
|[https://github.com/zfsonlinux/zfs/commit/330d06f90d143b41b276796526a66a1c1fff046d Jul 2012]<br />
|[https://github.com/openzfsonosx/zfs/commit/330d06f90d143b41b276796526a66a1c1fff046d Jul 2012]<br />
|-<br />
|<tt>written</tt><br />
|The amount of referenced space written to this dataset since the previous snapshot.<br />
|[https://github.com/illumos/illumos-gate/commit/e5351341b58845eee9d722bd71543d5a7c26b6cc Nov 2011]<br />
|[https://github.com/freebsd/freebsd/commit/73cab7197174153a718dedc97ff344341bcf6098 Nov 2011]<br />
|[https://github.com/zfsonlinux/zfs/commit/330d06f90d143b41b276796526a66a1c1fff046d Jul 2012]<br />
|[https://github.com/openzfsonosx/zfs/commit/330d06f90d143b41b276796526a66a1c1fff046d Jul 2012]<br />
|-<br />
|<tt>written@''<snap>''</tt><br />
|The amount of referenced space written to this dataset since the specified snapshot. This is the space referenced by this dataset, but not referenced by the specified snapshot.<br />
|[https://github.com/illumos/illumos-gate/commit/e5351341b58845eee9d722bd71543d5a7c26b6cc Nov 2011]<br />
|[https://github.com/freebsd/freebsd/commit/73cab7197174153a718dedc97ff344341bcf6098 Nov 2011]<br />
|[https://github.com/zfsonlinux/zfs/commit/330d06f90d143b41b276796526a66a1c1fff046d Jul 2012]<br />
|[https://github.com/openzfsonosx/zfs/commit/330d06f90d143b41b276796526a66a1c1fff046d Jul 2012]<br />
|-<br />
|<tt>logicalused</tt>, <tt>logicalreferenced</tt><br />
|The amount of space used or referenced, before taking into account compression.<br />
|[https://github.com/illumos/illumos-gate/commit/77372cb0f35e8d3615ca2e16044f033397e88e21 Feb 2013]<br />
|[https://github.com/freebsd/freebsd/commit/2bed8f5691b7572d6f31bfc68e9f762a938af863 Mar 2013]<br />
|[https://github.com/zfsonlinux/zfs/commit/24a64651b4163d47b1187821152d762e9a263d5a Oct 2013]<br />
|not yet<br />
|-<br />
|}</div>Lundmanhttps://openzfs.org/w/index.php?title=Features&diff=2034Features2015-12-16T00:34:50Z<p>Lundman: /* nop-write */</p>
<hr />
<div>This page describes some of the more important features and performance improvements that are part of OpenZFS.<br />
<br />
Help would be appreciated in porting features between platforms whose status is "not yet".<br />
<br />
== Feature Flags ==<br />
<br />
See the [[Feature_Flags|Feature Flags]] wiki page.<br />
<br />
== libzfs_core ==<br />
<br />
See this [http://blog.delphix.com/matt/2012/01/17/the-future-of-libzfs/ blog post (Jan 2012)] and associated [http://blog.delphix.com/matt/files/2012/01/The_Future_of_LibZFS.pdf slides] and [http://www.youtube.com/watch?feature=player_embedded&list=PL1A94C8EECCAF7340&v=iJ0S91ygErE video] for more details.<br />
<br />
First introduced in:<br />
{| class="wikitable"<br />
|-<br />
|'''illumos'''<br />
|[https://github.com/illumos/illumos-gate/commit/4445fffbbb1ea25fd0e9ea68b9380dd7a6709025 June 2012]<br />
|-<br />
|'''FreeBSD'''<br />
|[https://github.com/freebsd/freebsd/commit/f1985e5cd725ff1816cd4afbdee2d95b661883f0 March 2013]<br />
|-<br />
|'''ZFS on Linux'''<br />
|[https://github.com/zfsonlinux/zfs/commit/6f1ffb06655008c9b519108ed29fbf03acd6e5de August 2013]<br />
|-<br />
|'''OpenZFS on OS X'''<br />
|[https://github.com/openzfsonosx/zfs/commit/50b0b2d9ea604d29ed729be8fa61bb77ae3ff4e9 October 2013]<br />
|}<br />
<br />
== CLI Usability ==<br />
<br />
These are improvements to the command line interface. While the end result is a generally more friendly user interface, getting the desired behavior often required modifications to the core of ZFS.<br />
<br />
''Listed in chronological order (oldest first).''<br />
<br />
==== Pool Comment ====<br />
<br />
OpenZFS has a per-pool comment property which can be set with the <tt>zpool set</tt> command and can be read even if the pool is not imported, so it is accessible even if pool import fails.<br />
<br />
{| class="wikitable"<br />
|-<br />
|'''illumos'''<br />
|[https://github.com/illumos/illumos-gate/commit/8704186e373c9ed74daa395ff3f7fd745396df9e Nov 2011]<br />
|-<br />
|'''FreeBSD'''<br />
|[https://github.com/freebsd/freebsd/commit/73cab7197174153a718dedc97ff344341bcf6098 Nov 2011]<br />
|-<br />
|'''ZFS on Linux'''<br />
|[https://github.com/zfsonlinux/zfs/commit/d96eb2b1538db13ee7a716ec0e1162f5735edc12 Aug 2012]<br />
|-<br />
|'''OpenZFS on OS X'''<br />
|[https://github.com/openzfsonosx/zfs/commit/d96eb2b1538db13ee7a716ec0e1162f5735edc12 Aug 2012]<br />
|}<br />
<br />
==== Size Estimates for <tt>zfs send</tt> and <tt>zfs destroy</tt> ====<br />
<br />
This feature enhances OpenZFS's internal space accounting information. This new accounting information is used to provide a <tt>-n</tt> (dry-run) option for <tt>zfs send</tt> which can instantly calculate the amount of send stream data a specific <tt>zfs send</tt> command would generate. It is also used for a <tt>-n</tt> option for <tt>zfs destroy</tt> which can instantly calculate the amount of space that would be reclaimed by a specific <tt>zfs destroy</tt> command.<br />
<br />
{| class="wikitable"<br />
|-<br />
|'''illumos'''<br />
|[https://github.com/illumos/illumos-gate/commit/e5351341b58845eee9d722bd71543d5a7c26b6cc Nov 2011]<br />
|-<br />
|'''FreeBSD'''<br />
|[https://github.com/freebsd/freebsd/commit/73cab7197174153a718dedc97ff344341bcf6098 Nov 2011]<br />
|-<br />
|'''ZFS on Linux'''<br />
|[https://github.com/zfsonlinux/zfs/commit/330d06f90d143b41b276796526a66a1c1fff046d Jul 2012]<br />
|-<br />
|'''OpenZFS on OS X'''<br />
|[https://github.com/openzfsonosx/zfs/commit/330d06f90d143b41b276796526a66a1c1fff046d Jul 2012]<br />
|}<br />
<br />
==== vdev Information in <tt>zpool list</tt> ====<br />
<br />
OpenZFS adds a <tt>-v</tt> option to the <tt>zpool list</tt> command which shows detailed sizing information about the vdevs in the pool:<br />
<br />
$ zpool list -v<br />
NAME SIZE ALLOC FREE EXPANDSZ CAP DEDUP HEALTH ALTROOT<br />
dcenter 5.24T 3.85T 1.39T - 73% 1.00x ONLINE -<br />
mirror 556G 469G 86.7G -<br />
c2t1d0 - - - -<br />
c2t0d0 - - - -<br />
mirror 556G 493G 63.0G -<br />
c2t3d0 - - - -<br />
c2t2d0 - - - -<br />
mirror 556G 493G 62.7G -<br />
c2t5d0 - - - -<br />
c2t4d0 - - - -<br />
mirror 556G 494G 62.5G -<br />
c2t8d0 - - - -<br />
c2t6d0 - - - -<br />
mirror 556G 494G 62.2G -<br />
c2t10d0 - - - -<br />
c2t9d0 - - - -<br />
mirror 556G 494G 61.9G -<br />
c2t12d0 - - - -<br />
c2t11d0 - - - -<br />
mirror 1016G 507G 509G -<br />
c1t1d0 - - - -<br />
c1t5d0 - - - -<br />
mirror 1016G 496G 520G -<br />
c1t3d0 - - - -<br />
c1t4d0 - - - -<br />
<br />
{| class="wikitable"<br />
|-<br />
|'''illumos'''<br />
|[https://github.com/illumos/illumos-gate/commit/4263d13f00c9691fa14620eff82abef795be0693 Jan 2012]<br />
|-<br />
|'''FreeBSD'''<br />
|[https://github.com/freebsd/freebsd/commit/38ef930079cbb1df5de9df3c1064426dba3976b1 May 2012]<br />
|-<br />
|'''ZFS on Linux'''<br />
|[https://github.com/zfsonlinux/zfs/commit/1bd201e70d57464fd26bf9089ea4b44fd49e4f2d Sept 2012]<br />
|-<br />
|'''OpenZFS on OS X'''<br />
|[https://github.com/openzfsonosx/zfs/commit/1bd201e70d57464fd26bf9089ea4b44fd49e4f2d Sept 2012]<br />
|}<br />
<br />
==== ZFS list snapshot property alias ====<br />
<br />
Functionally identical to Solaris 11 extension <code>zfs list -t snap</code>.<br />
<br />
{| class="wikitable"<br />
|-<br />
|'''illumos'''<br />
|not yet<br />
|-<br />
|'''FreeBSD'''<br />
|[http://svnweb.freebsd.org/changeset/base/256999 Oct 2013]<br />
|-<br />
|'''ZFS on Linux'''<br />
|[https://github.com/zfsonlinux/zfs/commit/cf81b00a73fe47fdb21586ac1cc179b734540973 Apr 2012]<br />
|-<br />
|'''OpenZFS on OS X'''<br />
|[https://github.com/openzfsonosx/zfs/commit/cf81b00a73fe47fdb21586ac1cc179b734540973 Apr 2012]<br />
|}<br />
<br />
==== ZFS snapshot alias ====<br />
<br />
Functionally identical to Solaris 11 extension <code>zfs snap</code>.<br />
<br />
{| class="wikitable"<br />
|-<br />
|'''illumos'''<br />
|not yet<br />
|-<br />
|'''FreeBSD'''<br />
|[http://svnweb.freebsd.org/changeset/base/256999 Oct 2013]<br />
|-<br />
|'''ZFS on Linux'''<br />
|[https://github.com/zfsonlinux/zfs/commit/10b75496bb0cb7a7b8146c263164adc37f1d176a Apr 2012]<br />
|-<br />
|'''OpenZFS on OS X'''<br />
|[https://github.com/openzfsonosx/zfs/commit/10b75496bb0cb7a7b8146c263164adc37f1d176a Apr 2012]<br />
|}<br />
<br />
==== <tt>zfs send</tt> Progress Reporting ====<br />
<br />
OpenZFS introduces a <tt>-v</tt> option to <tt>zfs send</tt> which reports per-second information on how much data has been sent, how long it has taken, and how much data remains to be sent.<br />
<br />
{| class="wikitable"<br />
|-<br />
|'''illumos'''<br />
|[https://github.com/illumos/illumos-gate/commit/4e3c9f4489a18514e5e8caeb91d4e6db07c98415 May 2012]<br />
|-<br />
|'''FreeBSD'''<br />
|[https://github.com/freebsd/freebsd/commit/046ff8962602e8d65b6b3fae48573513ab7e433f May 2012]<br />
|-<br />
|'''ZFS on Linux'''<br />
|[https://github.com/zfsonlinux/zfs/commit/37abac6d559a1da8ab8e5379442f491b73998f6a Sept 2012]<br />
|-<br />
|'''OpenZFS on OS X'''<br />
|[https://github.com/openzfsonosx/zfs/commit/37abac6d559a1da8ab8e5379442f491b73998f6a Sept 2012]<br />
|}<br />
<br />
==== Arbitrary Snapshot Arguments to <tt>zfs snapshot</tt> ====<br />
<br />
{| class="wikitable"<br />
|-<br />
|'''illumos'''<br />
|[https://github.com/illumos/illumos-gate/commit/4445fffbbb1ea25fd0e9ea68b9380dd7a6709025 June 2012]<br />
|-<br />
|'''FreeBSD'''<br />
|[https://github.com/freebsd/freebsd/commit/f1985e5cd725ff1816cd4afbdee2d95b661883f0 March 2013]<br />
|-<br />
|'''ZFS on Linux'''<br />
|[https://github.com/zfsonlinux/zfs/commit/6f1ffb06655008c9b519108ed29fbf03acd6e5de August 2013]<br />
|-<br />
|'''OpenZFS on OS X'''<br />
|[https://github.com/openzfsonosx/zfs/commit/6f1ffb06655008c9b519108ed29fbf03acd6e5de September 2013]<br />
|}<br />
<br />
== Performance ==<br />
<br />
These are significant performance improvements, often requiring substantial restructuring of the source code.<br />
<br />
''Listed in chronological order (oldest first).''<br />
<br />
==== SA based xattrs ====<br />
<br />
Improves performance of linux-style (short) xattrs by storing them in the dnode_phys_t's bonus block. (Not to be confused with [http://en.wikipedia.org/wiki/Extended_file_attributes#Solaris Solaris-style Extended Attributes] which are full-fledged files or "forks", like NTFS streams. This work could be extended to also improve the performance on illumos of small Extended Attributes whose permissions are the same as the containing file.)<br />
<br />
Requires a disk format change and is off by default until Filesystem (ZPL) Feature Flags are implemented (not to be confused with [[Features#Feature_Flags_Overview | zpool Feature Flags]]).<br />
<br />
{| class="wikitable"<br />
|-<br />
|'''illumos'''<br />
|not yet (needs additional functionality)<br />
|-<br />
|'''FreeBSD'''<br />
|??<br />
|-<br />
|'''ZFS on Linux'''<br />
|[https://github.com/zfsonlinux/zfs/commit/82a37189aac955c81a59a5ecc3400475adb56355 Oct 2011]<br />
|-<br />
|'''OpenZFS on OS X'''<br />
|[https://github.com/openzfsonosx/zfs/commit/6a06ef26abc87c6ede9bec8246713dc94c98fa78 May 2015]<br />
|}<br />
<br />
Note that SA based xattrs are [https://github.com/zfsonlinux/zfs/commit/6a7c0ccca44ad02c476a111d8f7911fc8b12fff7 no longer used on symlinks] as of Aug 2013 until an issue is resolved.<br />
<br />
==== Use the slog even with logbias=throughput ====<br />
<br />
{| class="wikitable"<br />
|-<br />
|'''illumos'''<br />
|??<br />
|-<br />
|'''FreeBSD'''<br />
|??<br />
|-<br />
|'''ZFS on Linux'''<br />
|[https://github.com/zfsonlinux/zfs/commit/5d7a86d114c2706a8d14d94b71f81ad5cdf066c5 Oct 2011]<br />
|-<br />
|'''OpenZFS on OS X'''<br />
|[https://github.com/openzfsonosx/zfs/commit/5d7a86d114c2706a8d14d94b71f81ad5cdf066c5 Oct 2011]<br />
|}<br />
<br />
==== Asynchronous Filesystem and Volume Destruction ====<br />
<br />
Destroying a filesystem requires traversing all of its data in order to return its used blocks to the pool's free list. Before this feature the filesystem was not fully removed until all blocks had been reclaimed. If the destroy operation was interrupted by a reboot or power outage the next attempt to import the pool (probably during boot) would need to complete the destroy operation synchronously, possibly delaying a boot for long periods of time.<br />
<br />
With asynchronous destruction the filesystem's data is immediately moved to a "to be freed" list, allowing the destroy operation to complete without traversing any of the filesystem's data. A background process reclaims blocks from this "to be freed" list and is capable of resuming this process after reboots without slowing the pool import process.<br />
<br />
The new freeing algorithm also has a significant performance improvement when destroying clones. The old algorithm took time proportional to the number of blocks ''referenced'' by the clone, even if most of those blocks could not be reclaimed because they were still referenced by the clone's origin. The new algorithm only takes time proportional to the number of blocks unique to the clone.<br />
<br />
See this [http://blog.delphix.com/matt/2012/07/11/performance-of-zfs-destroy/ blog post] for more detailed performance analysis.<br />
<br />
Note: The <tt>async_destroy</tt> feature flag must be enabled to take advantage of this.<br />
<br />
{| class="wikitable"<br />
|-<br />
|'''illumos'''<br />
|[https://github.com/illumos/illumos-gate/commit/ad135b5d644628e791c3188a6ecbd9c257961ef8 May 2012]<br />
|-<br />
|'''FreeBSD'''<br />
|[https://github.com/freebsd/freebsd/commit/cc61ab2f133566dca51970d44cc49a4355039b5d June 2012]<br />
|-<br />
|'''ZFS on Linux'''<br />
|[https://github.com/zfsonlinux/zfs/commit/9ae529ec5dbdc828ff8326beae58062971d74b2e Jan 2013]<br />
|-<br />
|'''OpenZFS on OS X'''<br />
|[https://github.com/openzfsonosx/zfs/commit/9ae529ec5dbdc828ff8326beae58062971d74b2e Jan 2013]<br />
|}<br />
<br />
==== Reduce Number of Empty bpobjs ====<br />
<br />
Every time OpenZFS takes a snapshot it creates on-disk block pointer objects (bpobj's) to track blocks associated with that snapshot. In common use cases most of these bpobj's are empty, but the number of bpobjs per-snapshot is proportional to the number of snapshots already taken of the same filesystem or volume. When a single filesystem or volume has many (tens of thousands) snapshots these unecessary empty bpobjs can waste space and cause performance problems. OpenZFS waits to create each bpobjs until the first entry is added to it, thus eliminating the empty bpobjs.<br />
<br />
Note: The <tt>empty_bpobj</tt> feature flag must be enabled to take advantage of this.<br />
<br />
{| class="wikitable"<br />
|-<br />
|'''illumos'''<br />
|[https://github.com/illumos/illumos-gate/commit/f17457368189aa911f774c38c1f21875a568bdca Aug 2012]<br />
|-<br />
|'''FreeBSD'''<br />
|[https://github.com/freebsd/freebsd/commit/d9fa2f486ee98b2557e1d5ad5f1af418c663cfc8 Aug 2012]<br />
|-<br />
|'''ZFS on Linux'''<br />
|[https://github.com/zfsonlinux/zfs/commit/753c38392ddff9d3cf140bb4d28f3bfba52c92d2 Dec 2012]<br />
|-<br />
|'''OpenZFS on OS X'''<br />
|[https://github.com/openzfsonosx/zfs/commit/753c38392ddff9d3cf140bb4d28f3bfba52c92d2 Dec 2012]<br />
|}<br />
<br />
==== Single Copy ARC ====<br />
<br />
OpenZFS caches disk blocks in-memory in the adaptive replacement cache (ARC). Originally when the same disk block was accessed from different clones it was cached multiple times (one for each clone accessing the block) in case a clone planned to modify the block. With these changes OpenZFS caches at most one copy of every block unless a clone is actually modifying the block.<br />
<br />
{| class="wikitable"<br />
|-<br />
|'''illumos'''<br />
|[https://github.com/illumos/illumos-gate/commit/9253d63df408bb48584e0b1abfcc24ef2472382e Sep 2012]<br />
|-<br />
|'''FreeBSD'''<br />
|[https://github.com/freebsd/freebsd/commit/8e1fdec2c76a948b16ebf8e4abe2cb73a60d3477 Nov 2012]<br />
|-<br />
|'''ZFS on Linux'''<br />
|[https://github.com/zfsonlinux/zfs/commit/1eb5bfa3dcdaecb19543d9df13131374a7a42947 Dec 2012]<br />
|-<br />
|'''OpenZFS on OS X'''<br />
|[https://github.com/openzfsonosx/zfs/commit/1eb5bfa3dcdaecb19543d9df13131374a7a42947 Dec 2012]<br />
|}<br />
<br />
==== TRIM Support ====<br />
<br />
TRIM support provides the ability to pass deletes / frees through to underlying vdevs that help to ensure devices such as SSD's, which rely on receiving TRIM / UNMAP requests for sectors which are no longer needed, maintain optimal performance.<br />
<br />
The current FreeBSD implementation builds a map of regions that were freed. On every write the<br />
code consults the map and removes ranges that were freed before, but are now overwritten.<br />
<br />
Freed blocks are not TRIMed immediately, there is a low priority thread that TRIMs ranges when the time comes.<br />
<br />
Support for TRIM has been demonstrated to significantly improved the general performance of SSD in the field, eliminating the need for regular secure erase cycles on busy hosts.<br />
<br />
An alternative method, which is arguably better, and works by tracking the metaslab allocator is also in progress and can be found here:<br />
[http://cr.illumos.org/~webrev/skiselkov/zfs_unmap/ ZFS TRIM Support for illumos]<br />
<br />
There is [https://github.com/zfsonlinux/zfs/pull/1016 a pull request for ZFS On Linux] which implements FreeBSD's (Sep 2012) ZFS TRIM support.<br />
<br />
{| class="wikitable"<br />
|-<br />
|'''illumos'''<br />
|not yet ported<br />
|-<br />
|'''FreeBSD'''<br />
|[http://svnweb.freebsd.org/base?view=revision&sortby=file&revision=240868 Sep 2012]<br />
|-<br />
|'''ZFS on Linux'''<br />
|not yet ported<br />
|-<br />
|'''OpenZFS on OS X'''<br />
|not yet ported<br />
|}<br />
<br />
==== FASTWRITE Algorithm ====<br />
<br />
Improves synchronous IO performance.<br />
<br />
{| class="wikitable"<br />
|-<br />
|'''illumos'''<br />
|not yet ported<br />
|-<br />
|'''FreeBSD'''<br />
|not yet ported<br />
|-<br />
|'''ZFS on Linux'''<br />
|[https://github.com/zfsonlinux/zfs/commit/920dd524fb2997225d4b1ac180bcbc14b045fda6 Oct 2012]<br />
|-<br />
|'''OpenZFS on OS X'''<br />
|[https://github.com/openzfsonosx/zfs/commit/920dd524fb2997225d4b1ac180bcbc14b045fda6 Oct 2012]<br />
|}<br />
<br />
Note that a [https://github.com/ryao/zfs/commit/858822a04b4563657b2267131e90d9687d67e31b locking enhancement] is being reviewed.<br />
<br />
==== Block Freeing Performance Improvments ====<br />
<br />
Performance analysis of OpenZFS revealed that the algorithms used when freeing blocks could cause significant performance problems when freeing a large amount of blocks in a single transaction or when dealing with fragmented pools. Several performance improvements were made in this area.<br />
<br />
{| class="wikitable"<br />
|-<br />
|'''illumos'''<br />
|[https://github.com/illumos/illumos-gate/commit/01f55e48fb4d524eaf70687728aa51b7762e2e97 Nov 2012]<br />
|[https://github.com/illumos/illumos-gate/commit/16a4a8074274d2d7cc408589cf6359f4a378c861 Feb 2013]<br />
|[https://github.com/illumos/illumos-gate/commit/9eb57f7f3fbb970d4b9b89dcd5ecf543fe2414d5 Feb 2013]<br />
|-<br />
|'''FreeBSD'''<br />
|[https://github.com/freebsd/freebsd/commit/5d9b3f284b13ac492326e05f6ba4c00e98adf05c Nov 2012]<br />
|[https://github.com/freebsd/freebsd/commit/18e9a0422b52091035dae9d69bde9dd571a8ff7e Feb 2013]<br />
|[https://github.com/freebsd/freebsd/commit/18e9a0422b52091035dae9d69bde9dd571a8ff7e Feb 2013]<br />
|-<br />
|'''ZFS on Linux'''<br />
|[https://github.com/zfsonlinux/zfs/commit/55d85d5a8c45c4559a4a0e675c37b0c3afb19c2f May 2013]<br />
|[https://github.com/zfsonlinux/zfs/commit/e51be06697762215dc3b679f8668987034a5a048 June 2013]<br />
|[https://github.com/zfsonlinux/zfs/commit/c2e42f9d53bec422abb71efade2c004383345038 Oct 2013]<br />
|-<br />
|'''OpenZFS on OS X'''<br />
|[https://github.com/openzfsonosx/zfs/commit/55d85d5a8c45c4559a4a0e675c37b0c3afb19c2f May 2013]<br />
|[https://github.com/openzfsonosx/zfs/commit/e51be06697762215dc3b679f8668987034a5a048 June 2013]<br />
|[https://github.com/openzfsonosx/zfs/commit/c2e42f9d53bec422abb71efade2c004383345038 Oct 2013]<br />
|}<br />
<br />
==== nop-write ====<br />
<br />
ZFS supports end-to-end checksumming of every data block. When a cryptographically secure checksum is being used OpenZFS will compare the checksums of incoming writes to checksum of the existing on-disk data and avoid issuing any write i/o for data that has not changed. This can help performance and snapshot space usage in situations were the same files are regularly overwritten with almost-identical data (e.g. regular full-backups of large random-access files).<br />
<br />
{| class="wikitable"<br />
|-<br />
|'''illumos'''<br />
|[https://github.com/illumos/illumos-gate/commit/80901aea8e78a2c20751f61f01bebd1d5b5c2ba5 Nov 2012]<br />
|-<br />
|'''FreeBSD'''<br />
|[https://github.com/freebsd/freebsd/commit/3a0bfecf052237768517963f169d0797e2978f59 Nov 2012]<br />
|-<br />
|'''ZFS on Linux'''<br />
|[https://github.com/zfsonlinux/zfs/commit/03c6040bee6c87a9413b7da41d9f580f79a8ab62 Nov 2013]<br />
|-<br />
|'''OpenZFS on OS X'''<br />
|[https://github.com/openzfsonosx/zfs/commit/03c6040bee6c87a9413b7da41d9f580f79a8ab62 Nov 2013]<br />
|}<br />
<br />
==== lz4 compression ====<br />
<br />
OpenZFS supports on-the-fly compression of all user data with a variety of compression algorithm. This feature adds support for the lz4 compression algorithm. lz4 is usually faster and compresses data better than lzjb, the old default OpenZFS compression algorithm.<br />
<br />
Note: The <tt>lz4_compress</tt> feature flag must be enabled to take advantage of this.<br />
<br />
{| class="wikitable"<br />
|-<br />
|'''illumos'''<br />
|[https://github.com/illumos/illumos-gate/commit/a6f561b4aee75d0d028e7b36b151c8ed8a86bc76 Jan 2013]<br />
|-<br />
|'''FreeBSD'''<br />
|[https://github.com/freebsd/freebsd/commit/c6d9dc1ad2d2e36220845b84a2d180bd97354797 Feb 2013]<br />
|-<br />
|'''ZFS on Linux'''<br />
|[https://github.com/zfsonlinux/zfs/commit/9759c60f1a1503e48dc5c45a209c3edd5758319f Jan 2013]<br />
|-<br />
|'''OpenZFS on OS X'''<br />
|[https://github.com/openzfsonosx/zfs/commit/9759c60f1a1503e48dc5c45a209c3edd5758319f Jan 2013]<br />
|}<br />
<br />
==== synctask rewrite ====<br />
<br />
{| class="wikitable"<br />
|-<br />
|'''illumos'''<br />
|[https://github.com/illumos/illumos-gate/commit/3b2aab18808792cbd248a12f1edf139b89833c13 Feb 2013]<br />
|-<br />
|'''FreeBSD'''<br />
|[https://github.com/freebsd/freebsd/commit/f1985e5cd725ff1816cd4afbdee2d95b661883f0 March 2013]<br />
|-<br />
|'''ZFS on Linux'''<br />
|[https://github.com/zfsonlinux/zfs/commit/13fe019870c8779bf2f5b3ff731b512cf89133ef Sept 2013]<br />
|-<br />
|'''OpenZFS on OS X'''<br />
|[https://github.com/openzfsonosx/zfs/commit/13fe019870c8779bf2f5b3ff731b512cf89133ef Sept 2013]<br />
|}<br />
<br />
==== l2arc compression ====<br />
<br />
{| class="wikitable"<br />
|-<br />
|'''illumos'''<br />
|[https://github.com/illumos/illumos-gate/commit/aad02571bc59671aa3103bb070ae365f531b0b62 Jun 2013]<br />
|-<br />
|'''FreeBSD'''<br />
|[https://github.com/freebsd/freebsd/commit/b20363fe596a7e3a55d5b62f4d3fdb482c65c47a Jun 2013]<br />
|-<br />
|'''ZFS on Linux'''<br />
|[https://github.com/zfsonlinux/zfs/commit/3a17a7a99a1a6332d0999f9be68e2b8dc3933de1 Aug 2013]<br />
|-<br />
|'''OpenZFS on OS X'''<br />
|[https://github.com/openzfsonosx/zfs/commit/3a17a7a99a1a6332d0999f9be68e2b8dc3933de1 Aug 2013]<br />
|}<br />
<br />
==== ARC Shouldn't Cache Freed Blocks ====<br />
<br />
Originally cached blocks in the ARC remained cached until they were evicted due to memory pressure, even if the underlying disk block was freed. In some workloads these freed blocks were so frequently accessed before they were freed that the ARC continued to cache them while evicting blocks which had not been freed yet. Since freed blocks could never be accessed again continuing to cache them was unnecessary. In OpenZFS ARC blocks are evicted immediately when their underlying data blocks are freed.<br />
<br />
{| class="wikitable"<br />
|-<br />
|'''illumos'''<br />
|[https://github.com/illumos/illumos-gate/commit/6e6d5868f52089b9026785bd90257a3d3f6e5ee2 Jun 2013]<br />
|-<br />
|'''FreeBSD'''<br />
|[https://github.com/freebsd/freebsd/commit/13d822743426263ee50bcf047ab41a1e386156a8 Jun 2013]<br />
|-<br />
|'''ZFS on Linux'''<br />
|[https://github.com/zfsonlinux/zfs/commit/df4474f92d0b1b8d54e1914fdd56be2b75f1ff5e Jun 2013]<br />
|-<br />
|'''OpenZFS on OS X'''<br />
|[https://github.com/openzfsonosx/zfs/commit/df4474f92d0b1b8d54e1914fdd56be2b75f1ff5e Jun 2013]<br />
|}<br />
<br />
==== Improve N-way mirror read performance ====<br />
<br />
Queues read requests to least busy leaf vdev in mirrors.<br />
<br />
In addition to the vdev load biasing first implemented by ZFS on Linux in July 2013, the FreeBSD October 2013 version added I/O locality and device rotational information to further enhance the performance.<br />
<br />
{| class="wikitable"<br />
!OS<br />
!Load<br />
!Load + I/O Locality & Rotational Information<br />
|-<br />
|'''illumos'''<br />
|not yet ported<br />
|not yet ported<br />
|-<br />
|'''FreeBSD'''<br />
|N/A<br />
|[http://svnweb.freebsd.org/changeset/base/256956 23rd October 2013]<br />
|-<br />
|'''ZFS on Linux'''<br />
|[https://github.com/zfsonlinux/zfs/commit/556011dbec2d10579819078559a77630fc559112 Jul 2013]<br />
|not yet ported<br />
|-<br />
|'''OpenZFS on OS X'''<br />
|[https://github.com/openzfsonosx/zfs/commit/556011dbec2d10579819078559a77630fc559112 Jul 2013]<br />
|not yet ported<br />
|}<br />
<br />
==== Smoother Write Throttle ====<br />
<br />
The write throttle (dsl_pool_tempreserve_space() and txg_constrain_throughput()) is rewritten to produce much more consistent delays when under constant load. The new write throttle is based on the amount of dirty data, rather than guesses about future performance of the system. When there is a lot of dirty data, each transaction (e.g. write() syscall) will be delayed by the same small amount. This eliminates the "brick wall of wait" that the old write throttle could hit, causing all transactions to wait several seconds until the next txg opens. One of the keys to the new write throttle is decrementing the amount of dirty data as i/o completes, rather than at the end of spa_sync(). Note that the write throttle is only applied once the i/o scheduler is issuing the maximum number of outstanding async writes. See the block comments in dsl_pool.c and above dmu_tx_delay() for more details.<br />
<br />
The ZFS i/o scheduler (vdev_queue.c) now divides i/os into 5 classes: sync read, sync write, async read, async write, and scrub/resilver. The scheduler issues a number of concurrent i/os from each class to the device. Once a class has been selected, an i/o is selected from this class using either an elevator algorithem (async, scrub classes) or FIFO (sync classes). The number of concurrent async write i/os is tuned dynamically based on i/o load, to achieve good sync i/o latency when there is not a high load of writes, and good write throughput when there is. See the block comment in vdev_queue.c for more details.<br />
<br />
{| class="wikitable"<br />
|-<br />
|'''illumos'''<br />
|[https://github.com/illumos/illumos-gate/commit/69962b5647e4a8b9b14998733b765925381b727e Aug 2013]<br />
|-<br />
|'''FreeBSD'''<br />
|[http://svnweb.freebsd.org/changeset/base/258632 Nov 2013]<br />
|-<br />
|'''ZFS on Linux'''<br />
|[https://github.com/zfsonlinux/zfs/commit/e8b96c6007bf97cdf34869c1ffbd0ce753873a3d Dec 2013]<br />
|-<br />
|'''OpenZFS on OS X'''<br />
|not yet<br />
|}<br />
<br />
==== Disable LBA Weighting on files and SSDs ====<br />
<br />
On rotational media, the bandwidth of the outermost tracks is approximately twice that of innermost tracks. A heuristic called LBA weighting was put into the metaslab allocator to account for this by favoring the outermost tracks over the innermost tracks. This has the consequence that metaslabs tend to fill at different rates depending on their location. This causes the metaslabs corresponding to outermost tracks to enter the best-fit allocation strategy.<br />
<br />
The best-fit allocation strategy is more CPU intensive than the typical first-fit because it looks for the smallest region of free space able to fulfill an allocation rather than picking the next avaliable one. The CPU time is fairly excessive and is known to harm IOPS, but it exists to minimize use of gang blocks as a metaslab becomes excessively full. Gaining a bandwidth improvement from LBA weighting at the expense of an earlier switch to the best-fit allocation behavior on the weighted metaslabs is reasonable on rotational disks. However, it makes no sense on files, where the underlying filesystem is free to place things however way it sees fit, and on SSDs, where there is no bandwidth difference based on LBA.<br />
<br />
With this change, we will more evenly fill metaslabs on pools whose vdevs consist of only files and SSDs, which will minimize the metaslabs that enter the best fit allocation strategy when a pool is mostly full, but still below 96% full. This is particularly important on SSDs, where drops in IOPS are more pronounced.<br />
<br />
{| class="wikitable"<br />
|-<br />
|'''illumos'''<br />
|not yet<br />
|-<br />
|'''FreeBSD'''<br />
|not yet<br />
|-<br />
|'''ZFS on Linux'''<br />
|[https://github.com/zfsonlinux/zfs/commit/fb40095f5f0853946f8150481ca22602d1334dfe Aug 2015]<br />
|-<br />
|'''OpenZFS on OS X'''<br />
|not yet<br />
|}<br />
<br />
== Dataset Properties ==<br />
<br />
These are new filesystem, volume, and snapshot properties which can be accessed with the <tt>zfs(1)</tt> command's <tt>get</tt> subcommand. See the <tt>zfs(1)</tt> manpage for your distribution for more details on each of these properties.<br />
<br />
{| class="wikitable"<br />
!Property<br />
!Description<br />
!illumos<br />
!FreeBSD<br />
!ZFS on Linux<br />
!OpenZFS on OS X<br />
|-<br />
|<tt>refcompressratio</tt><br />
|The compression ratio acheived for all data referenced by (but not necessarily unique to) a snapshot, filesystem, or volume, expressed as a multiplier.<br />
|[https://github.com/illumos/illumos-gate/commit/187d6ac08adc31ea6868bde0cfbbb288826254e8 Jun 2011]<br />
|[https://github.com/freebsd/freebsd/commit/333e34b938a2b5e7b036e02b36408880b415109c Jun 2011]<br />
|[https://github.com/zfsonlinux/zfs/commit/77999e804fff35782ab4b578d2cecf064c54a841 Aug 2012]<br />
|[https://github.com/openzfsonosx/zfs/commit/77999e804fff35782ab4b578d2cecf064c54a841 Aug 2012]<br />
|-<br />
|<tt>clones</tt><br />
|For snapshots, this property is a comma-separated list of filesystems or volumes which are clones of this snapshot.<br />
|[https://github.com/illumos/illumos-gate/commit/e5351341b58845eee9d722bd71543d5a7c26b6cc Nov 2011]<br />
|[https://github.com/freebsd/freebsd/commit/73cab7197174153a718dedc97ff344341bcf6098 Nov 2011]<br />
|[https://github.com/zfsonlinux/zfs/commit/330d06f90d143b41b276796526a66a1c1fff046d Jul 2012]<br />
|[https://github.com/openzfsonosx/zfs/commit/330d06f90d143b41b276796526a66a1c1fff046d Jul 2012]<br />
|-<br />
|<tt>written</tt><br />
|The amount of referenced space written to this dataset since the previous snapshot.<br />
|[https://github.com/illumos/illumos-gate/commit/e5351341b58845eee9d722bd71543d5a7c26b6cc Nov 2011]<br />
|[https://github.com/freebsd/freebsd/commit/73cab7197174153a718dedc97ff344341bcf6098 Nov 2011]<br />
|[https://github.com/zfsonlinux/zfs/commit/330d06f90d143b41b276796526a66a1c1fff046d Jul 2012]<br />
|[https://github.com/openzfsonosx/zfs/commit/330d06f90d143b41b276796526a66a1c1fff046d Jul 2012]<br />
|-<br />
|<tt>written@''<snap>''</tt><br />
|The amount of referenced space written to this dataset since the specified snapshot. This is the space referenced by this dataset, but not referenced by the specified snapshot.<br />
|[https://github.com/illumos/illumos-gate/commit/e5351341b58845eee9d722bd71543d5a7c26b6cc Nov 2011]<br />
|[https://github.com/freebsd/freebsd/commit/73cab7197174153a718dedc97ff344341bcf6098 Nov 2011]<br />
|[https://github.com/zfsonlinux/zfs/commit/330d06f90d143b41b276796526a66a1c1fff046d Jul 2012]<br />
|[https://github.com/openzfsonosx/zfs/commit/330d06f90d143b41b276796526a66a1c1fff046d Jul 2012]<br />
|-<br />
|<tt>logicalused</tt>, <tt>logicalreferenced</tt><br />
|The amount of space used or referenced, before taking into account compression.<br />
|[https://github.com/illumos/illumos-gate/commit/77372cb0f35e8d3615ca2e16044f033397e88e21 Feb 2013]<br />
|[https://github.com/freebsd/freebsd/commit/2bed8f5691b7572d6f31bfc68e9f762a938af863 Mar 2013]<br />
|[https://github.com/zfsonlinux/zfs/commit/24a64651b4163d47b1187821152d762e9a263d5a Oct 2013]<br />
|not yet<br />
|-<br />
|}</div>Lundmanhttps://openzfs.org/w/index.php?title=Features&diff=2033Features2015-12-16T00:34:27Z<p>Lundman: /* nop-write */</p>
<hr />
<div>This page describes some of the more important features and performance improvements that are part of OpenZFS.<br />
<br />
Help would be appreciated in porting features between platforms whose status is "not yet".<br />
<br />
== Feature Flags ==<br />
<br />
See the [[Feature_Flags|Feature Flags]] wiki page.<br />
<br />
== libzfs_core ==<br />
<br />
See this [http://blog.delphix.com/matt/2012/01/17/the-future-of-libzfs/ blog post (Jan 2012)] and associated [http://blog.delphix.com/matt/files/2012/01/The_Future_of_LibZFS.pdf slides] and [http://www.youtube.com/watch?feature=player_embedded&list=PL1A94C8EECCAF7340&v=iJ0S91ygErE video] for more details.<br />
<br />
First introduced in:<br />
{| class="wikitable"<br />
|-<br />
|'''illumos'''<br />
|[https://github.com/illumos/illumos-gate/commit/4445fffbbb1ea25fd0e9ea68b9380dd7a6709025 June 2012]<br />
|-<br />
|'''FreeBSD'''<br />
|[https://github.com/freebsd/freebsd/commit/f1985e5cd725ff1816cd4afbdee2d95b661883f0 March 2013]<br />
|-<br />
|'''ZFS on Linux'''<br />
|[https://github.com/zfsonlinux/zfs/commit/6f1ffb06655008c9b519108ed29fbf03acd6e5de August 2013]<br />
|-<br />
|'''OpenZFS on OS X'''<br />
|[https://github.com/openzfsonosx/zfs/commit/50b0b2d9ea604d29ed729be8fa61bb77ae3ff4e9 October 2013]<br />
|}<br />
<br />
== CLI Usability ==<br />
<br />
These are improvements to the command line interface. While the end result is a generally more friendly user interface, getting the desired behavior often required modifications to the core of ZFS.<br />
<br />
''Listed in chronological order (oldest first).''<br />
<br />
==== Pool Comment ====<br />
<br />
OpenZFS has a per-pool comment property which can be set with the <tt>zpool set</tt> command and can be read even if the pool is not imported, so it is accessible even if pool import fails.<br />
<br />
{| class="wikitable"<br />
|-<br />
|'''illumos'''<br />
|[https://github.com/illumos/illumos-gate/commit/8704186e373c9ed74daa395ff3f7fd745396df9e Nov 2011]<br />
|-<br />
|'''FreeBSD'''<br />
|[https://github.com/freebsd/freebsd/commit/73cab7197174153a718dedc97ff344341bcf6098 Nov 2011]<br />
|-<br />
|'''ZFS on Linux'''<br />
|[https://github.com/zfsonlinux/zfs/commit/d96eb2b1538db13ee7a716ec0e1162f5735edc12 Aug 2012]<br />
|-<br />
|'''OpenZFS on OS X'''<br />
|[https://github.com/openzfsonosx/zfs/commit/d96eb2b1538db13ee7a716ec0e1162f5735edc12 Aug 2012]<br />
|}<br />
<br />
==== Size Estimates for <tt>zfs send</tt> and <tt>zfs destroy</tt> ====<br />
<br />
This feature enhances OpenZFS's internal space accounting information. This new accounting information is used to provide a <tt>-n</tt> (dry-run) option for <tt>zfs send</tt> which can instantly calculate the amount of send stream data a specific <tt>zfs send</tt> command would generate. It is also used for a <tt>-n</tt> option for <tt>zfs destroy</tt> which can instantly calculate the amount of space that would be reclaimed by a specific <tt>zfs destroy</tt> command.<br />
<br />
{| class="wikitable"<br />
|-<br />
|'''illumos'''<br />
|[https://github.com/illumos/illumos-gate/commit/e5351341b58845eee9d722bd71543d5a7c26b6cc Nov 2011]<br />
|-<br />
|'''FreeBSD'''<br />
|[https://github.com/freebsd/freebsd/commit/73cab7197174153a718dedc97ff344341bcf6098 Nov 2011]<br />
|-<br />
|'''ZFS on Linux'''<br />
|[https://github.com/zfsonlinux/zfs/commit/330d06f90d143b41b276796526a66a1c1fff046d Jul 2012]<br />
|-<br />
|'''OpenZFS on OS X'''<br />
|[https://github.com/openzfsonosx/zfs/commit/330d06f90d143b41b276796526a66a1c1fff046d Jul 2012]<br />
|}<br />
<br />
==== vdev Information in <tt>zpool list</tt> ====<br />
<br />
OpenZFS adds a <tt>-v</tt> option to the <tt>zpool list</tt> command which shows detailed sizing information about the vdevs in the pool:<br />
<br />
$ zpool list -v<br />
NAME SIZE ALLOC FREE EXPANDSZ CAP DEDUP HEALTH ALTROOT<br />
dcenter 5.24T 3.85T 1.39T - 73% 1.00x ONLINE -<br />
mirror 556G 469G 86.7G -<br />
c2t1d0 - - - -<br />
c2t0d0 - - - -<br />
mirror 556G 493G 63.0G -<br />
c2t3d0 - - - -<br />
c2t2d0 - - - -<br />
mirror 556G 493G 62.7G -<br />
c2t5d0 - - - -<br />
c2t4d0 - - - -<br />
mirror 556G 494G 62.5G -<br />
c2t8d0 - - - -<br />
c2t6d0 - - - -<br />
mirror 556G 494G 62.2G -<br />
c2t10d0 - - - -<br />
c2t9d0 - - - -<br />
mirror 556G 494G 61.9G -<br />
c2t12d0 - - - -<br />
c2t11d0 - - - -<br />
mirror 1016G 507G 509G -<br />
c1t1d0 - - - -<br />
c1t5d0 - - - -<br />
mirror 1016G 496G 520G -<br />
c1t3d0 - - - -<br />
c1t4d0 - - - -<br />
<br />
{| class="wikitable"<br />
|-<br />
|'''illumos'''<br />
|[https://github.com/illumos/illumos-gate/commit/4263d13f00c9691fa14620eff82abef795be0693 Jan 2012]<br />
|-<br />
|'''FreeBSD'''<br />
|[https://github.com/freebsd/freebsd/commit/38ef930079cbb1df5de9df3c1064426dba3976b1 May 2012]<br />
|-<br />
|'''ZFS on Linux'''<br />
|[https://github.com/zfsonlinux/zfs/commit/1bd201e70d57464fd26bf9089ea4b44fd49e4f2d Sept 2012]<br />
|-<br />
|'''OpenZFS on OS X'''<br />
|[https://github.com/openzfsonosx/zfs/commit/1bd201e70d57464fd26bf9089ea4b44fd49e4f2d Sept 2012]<br />
|}<br />
<br />
==== ZFS list snapshot property alias ====<br />
<br />
Functionally identical to Solaris 11 extension <code>zfs list -t snap</code>.<br />
<br />
{| class="wikitable"<br />
|-<br />
|'''illumos'''<br />
|not yet<br />
|-<br />
|'''FreeBSD'''<br />
|[http://svnweb.freebsd.org/changeset/base/256999 Oct 2013]<br />
|-<br />
|'''ZFS on Linux'''<br />
|[https://github.com/zfsonlinux/zfs/commit/cf81b00a73fe47fdb21586ac1cc179b734540973 Apr 2012]<br />
|-<br />
|'''OpenZFS on OS X'''<br />
|[https://github.com/openzfsonosx/zfs/commit/cf81b00a73fe47fdb21586ac1cc179b734540973 Apr 2012]<br />
|}<br />
<br />
==== ZFS snapshot alias ====<br />
<br />
Functionally identical to Solaris 11 extension <code>zfs snap</code>.<br />
<br />
{| class="wikitable"<br />
|-<br />
|'''illumos'''<br />
|not yet<br />
|-<br />
|'''FreeBSD'''<br />
|[http://svnweb.freebsd.org/changeset/base/256999 Oct 2013]<br />
|-<br />
|'''ZFS on Linux'''<br />
|[https://github.com/zfsonlinux/zfs/commit/10b75496bb0cb7a7b8146c263164adc37f1d176a Apr 2012]<br />
|-<br />
|'''OpenZFS on OS X'''<br />
|[https://github.com/openzfsonosx/zfs/commit/10b75496bb0cb7a7b8146c263164adc37f1d176a Apr 2012]<br />
|}<br />
<br />
==== <tt>zfs send</tt> Progress Reporting ====<br />
<br />
OpenZFS introduces a <tt>-v</tt> option to <tt>zfs send</tt> which reports per-second information on how much data has been sent, how long it has taken, and how much data remains to be sent.<br />
<br />
{| class="wikitable"<br />
|-<br />
|'''illumos'''<br />
|[https://github.com/illumos/illumos-gate/commit/4e3c9f4489a18514e5e8caeb91d4e6db07c98415 May 2012]<br />
|-<br />
|'''FreeBSD'''<br />
|[https://github.com/freebsd/freebsd/commit/046ff8962602e8d65b6b3fae48573513ab7e433f May 2012]<br />
|-<br />
|'''ZFS on Linux'''<br />
|[https://github.com/zfsonlinux/zfs/commit/37abac6d559a1da8ab8e5379442f491b73998f6a Sept 2012]<br />
|-<br />
|'''OpenZFS on OS X'''<br />
|[https://github.com/openzfsonosx/zfs/commit/37abac6d559a1da8ab8e5379442f491b73998f6a Sept 2012]<br />
|}<br />
<br />
==== Arbitrary Snapshot Arguments to <tt>zfs snapshot</tt> ====<br />
<br />
{| class="wikitable"<br />
|-<br />
|'''illumos'''<br />
|[https://github.com/illumos/illumos-gate/commit/4445fffbbb1ea25fd0e9ea68b9380dd7a6709025 June 2012]<br />
|-<br />
|'''FreeBSD'''<br />
|[https://github.com/freebsd/freebsd/commit/f1985e5cd725ff1816cd4afbdee2d95b661883f0 March 2013]<br />
|-<br />
|'''ZFS on Linux'''<br />
|[https://github.com/zfsonlinux/zfs/commit/6f1ffb06655008c9b519108ed29fbf03acd6e5de August 2013]<br />
|-<br />
|'''OpenZFS on OS X'''<br />
|[https://github.com/openzfsonosx/zfs/commit/6f1ffb06655008c9b519108ed29fbf03acd6e5de September 2013]<br />
|}<br />
<br />
== Performance ==<br />
<br />
These are significant performance improvements, often requiring substantial restructuring of the source code.<br />
<br />
''Listed in chronological order (oldest first).''<br />
<br />
==== SA based xattrs ====<br />
<br />
Improves performance of linux-style (short) xattrs by storing them in the dnode_phys_t's bonus block. (Not to be confused with [http://en.wikipedia.org/wiki/Extended_file_attributes#Solaris Solaris-style Extended Attributes] which are full-fledged files or "forks", like NTFS streams. This work could be extended to also improve the performance on illumos of small Extended Attributes whose permissions are the same as the containing file.)<br />
<br />
Requires a disk format change and is off by default until Filesystem (ZPL) Feature Flags are implemented (not to be confused with [[Features#Feature_Flags_Overview | zpool Feature Flags]]).<br />
<br />
{| class="wikitable"<br />
|-<br />
|'''illumos'''<br />
|not yet (needs additional functionality)<br />
|-<br />
|'''FreeBSD'''<br />
|??<br />
|-<br />
|'''ZFS on Linux'''<br />
|[https://github.com/zfsonlinux/zfs/commit/82a37189aac955c81a59a5ecc3400475adb56355 Oct 2011]<br />
|-<br />
|'''OpenZFS on OS X'''<br />
|[https://github.com/openzfsonosx/zfs/commit/6a06ef26abc87c6ede9bec8246713dc94c98fa78 May 2015]<br />
|}<br />
<br />
Note that SA based xattrs are [https://github.com/zfsonlinux/zfs/commit/6a7c0ccca44ad02c476a111d8f7911fc8b12fff7 no longer used on symlinks] as of Aug 2013 until an issue is resolved.<br />
<br />
==== Use the slog even with logbias=throughput ====<br />
<br />
{| class="wikitable"<br />
|-<br />
|'''illumos'''<br />
|??<br />
|-<br />
|'''FreeBSD'''<br />
|??<br />
|-<br />
|'''ZFS on Linux'''<br />
|[https://github.com/zfsonlinux/zfs/commit/5d7a86d114c2706a8d14d94b71f81ad5cdf066c5 Oct 2011]<br />
|-<br />
|'''OpenZFS on OS X'''<br />
|[https://github.com/openzfsonosx/zfs/commit/5d7a86d114c2706a8d14d94b71f81ad5cdf066c5 Oct 2011]<br />
|}<br />
<br />
==== Asynchronous Filesystem and Volume Destruction ====<br />
<br />
Destroying a filesystem requires traversing all of its data in order to return its used blocks to the pool's free list. Before this feature the filesystem was not fully removed until all blocks had been reclaimed. If the destroy operation was interrupted by a reboot or power outage the next attempt to import the pool (probably during boot) would need to complete the destroy operation synchronously, possibly delaying a boot for long periods of time.<br />
<br />
With asynchronous destruction the filesystem's data is immediately moved to a "to be freed" list, allowing the destroy operation to complete without traversing any of the filesystem's data. A background process reclaims blocks from this "to be freed" list and is capable of resuming this process after reboots without slowing the pool import process.<br />
<br />
The new freeing algorithm also has a significant performance improvement when destroying clones. The old algorithm took time proportional to the number of blocks ''referenced'' by the clone, even if most of those blocks could not be reclaimed because they were still referenced by the clone's origin. The new algorithm only takes time proportional to the number of blocks unique to the clone.<br />
<br />
See this [http://blog.delphix.com/matt/2012/07/11/performance-of-zfs-destroy/ blog post] for more detailed performance analysis.<br />
<br />
Note: The <tt>async_destroy</tt> feature flag must be enabled to take advantage of this.<br />
<br />
{| class="wikitable"<br />
|-<br />
|'''illumos'''<br />
|[https://github.com/illumos/illumos-gate/commit/ad135b5d644628e791c3188a6ecbd9c257961ef8 May 2012]<br />
|-<br />
|'''FreeBSD'''<br />
|[https://github.com/freebsd/freebsd/commit/cc61ab2f133566dca51970d44cc49a4355039b5d June 2012]<br />
|-<br />
|'''ZFS on Linux'''<br />
|[https://github.com/zfsonlinux/zfs/commit/9ae529ec5dbdc828ff8326beae58062971d74b2e Jan 2013]<br />
|-<br />
|'''OpenZFS on OS X'''<br />
|[https://github.com/openzfsonosx/zfs/commit/9ae529ec5dbdc828ff8326beae58062971d74b2e Jan 2013]<br />
|}<br />
<br />
==== Reduce Number of Empty bpobjs ====<br />
<br />
Every time OpenZFS takes a snapshot it creates on-disk block pointer objects (bpobj's) to track blocks associated with that snapshot. In common use cases most of these bpobj's are empty, but the number of bpobjs per-snapshot is proportional to the number of snapshots already taken of the same filesystem or volume. When a single filesystem or volume has many (tens of thousands) snapshots these unecessary empty bpobjs can waste space and cause performance problems. OpenZFS waits to create each bpobjs until the first entry is added to it, thus eliminating the empty bpobjs.<br />
<br />
Note: The <tt>empty_bpobj</tt> feature flag must be enabled to take advantage of this.<br />
<br />
{| class="wikitable"<br />
|-<br />
|'''illumos'''<br />
|[https://github.com/illumos/illumos-gate/commit/f17457368189aa911f774c38c1f21875a568bdca Aug 2012]<br />
|-<br />
|'''FreeBSD'''<br />
|[https://github.com/freebsd/freebsd/commit/d9fa2f486ee98b2557e1d5ad5f1af418c663cfc8 Aug 2012]<br />
|-<br />
|'''ZFS on Linux'''<br />
|[https://github.com/zfsonlinux/zfs/commit/753c38392ddff9d3cf140bb4d28f3bfba52c92d2 Dec 2012]<br />
|-<br />
|'''OpenZFS on OS X'''<br />
|[https://github.com/openzfsonosx/zfs/commit/753c38392ddff9d3cf140bb4d28f3bfba52c92d2 Dec 2012]<br />
|}<br />
<br />
==== Single Copy ARC ====<br />
<br />
OpenZFS caches disk blocks in-memory in the adaptive replacement cache (ARC). Originally when the same disk block was accessed from different clones it was cached multiple times (one for each clone accessing the block) in case a clone planned to modify the block. With these changes OpenZFS caches at most one copy of every block unless a clone is actually modifying the block.<br />
<br />
{| class="wikitable"<br />
|-<br />
|'''illumos'''<br />
|[https://github.com/illumos/illumos-gate/commit/9253d63df408bb48584e0b1abfcc24ef2472382e Sep 2012]<br />
|-<br />
|'''FreeBSD'''<br />
|[https://github.com/freebsd/freebsd/commit/8e1fdec2c76a948b16ebf8e4abe2cb73a60d3477 Nov 2012]<br />
|-<br />
|'''ZFS on Linux'''<br />
|[https://github.com/zfsonlinux/zfs/commit/1eb5bfa3dcdaecb19543d9df13131374a7a42947 Dec 2012]<br />
|-<br />
|'''OpenZFS on OS X'''<br />
|[https://github.com/openzfsonosx/zfs/commit/1eb5bfa3dcdaecb19543d9df13131374a7a42947 Dec 2012]<br />
|}<br />
<br />
==== TRIM Support ====<br />
<br />
TRIM support provides the ability to pass deletes / frees through to underlying vdevs that help to ensure devices such as SSD's, which rely on receiving TRIM / UNMAP requests for sectors which are no longer needed, maintain optimal performance.<br />
<br />
The current FreeBSD implementation builds a map of regions that were freed. On every write the<br />
code consults the map and removes ranges that were freed before, but are now overwritten.<br />
<br />
Freed blocks are not TRIMed immediately, there is a low priority thread that TRIMs ranges when the time comes.<br />
<br />
Support for TRIM has been demonstrated to significantly improved the general performance of SSD in the field, eliminating the need for regular secure erase cycles on busy hosts.<br />
<br />
An alternative method, which is arguably better, and works by tracking the metaslab allocator is also in progress and can be found here:<br />
[http://cr.illumos.org/~webrev/skiselkov/zfs_unmap/ ZFS TRIM Support for illumos]<br />
<br />
There is [https://github.com/zfsonlinux/zfs/pull/1016 a pull request for ZFS On Linux] which implements FreeBSD's (Sep 2012) ZFS TRIM support.<br />
<br />
{| class="wikitable"<br />
|-<br />
|'''illumos'''<br />
|not yet ported<br />
|-<br />
|'''FreeBSD'''<br />
|[http://svnweb.freebsd.org/base?view=revision&sortby=file&revision=240868 Sep 2012]<br />
|-<br />
|'''ZFS on Linux'''<br />
|not yet ported<br />
|-<br />
|'''OpenZFS on OS X'''<br />
|not yet ported<br />
|}<br />
<br />
==== FASTWRITE Algorithm ====<br />
<br />
Improves synchronous IO performance.<br />
<br />
{| class="wikitable"<br />
|-<br />
|'''illumos'''<br />
|not yet ported<br />
|-<br />
|'''FreeBSD'''<br />
|not yet ported<br />
|-<br />
|'''ZFS on Linux'''<br />
|[https://github.com/zfsonlinux/zfs/commit/920dd524fb2997225d4b1ac180bcbc14b045fda6 Oct 2012]<br />
|-<br />
|'''OpenZFS on OS X'''<br />
|[https://github.com/openzfsonosx/zfs/commit/920dd524fb2997225d4b1ac180bcbc14b045fda6 Oct 2012]<br />
|}<br />
<br />
Note that a [https://github.com/ryao/zfs/commit/858822a04b4563657b2267131e90d9687d67e31b locking enhancement] is being reviewed.<br />
<br />
==== Block Freeing Performance Improvments ====<br />
<br />
Performance analysis of OpenZFS revealed that the algorithms used when freeing blocks could cause significant performance problems when freeing a large amount of blocks in a single transaction or when dealing with fragmented pools. Several performance improvements were made in this area.<br />
<br />
{| class="wikitable"<br />
|-<br />
|'''illumos'''<br />
|[https://github.com/illumos/illumos-gate/commit/01f55e48fb4d524eaf70687728aa51b7762e2e97 Nov 2012]<br />
|[https://github.com/illumos/illumos-gate/commit/16a4a8074274d2d7cc408589cf6359f4a378c861 Feb 2013]<br />
|[https://github.com/illumos/illumos-gate/commit/9eb57f7f3fbb970d4b9b89dcd5ecf543fe2414d5 Feb 2013]<br />
|-<br />
|'''FreeBSD'''<br />
|[https://github.com/freebsd/freebsd/commit/5d9b3f284b13ac492326e05f6ba4c00e98adf05c Nov 2012]<br />
|[https://github.com/freebsd/freebsd/commit/18e9a0422b52091035dae9d69bde9dd571a8ff7e Feb 2013]<br />
|[https://github.com/freebsd/freebsd/commit/18e9a0422b52091035dae9d69bde9dd571a8ff7e Feb 2013]<br />
|-<br />
|'''ZFS on Linux'''<br />
|[https://github.com/zfsonlinux/zfs/commit/55d85d5a8c45c4559a4a0e675c37b0c3afb19c2f May 2013]<br />
|[https://github.com/zfsonlinux/zfs/commit/e51be06697762215dc3b679f8668987034a5a048 June 2013]<br />
|[https://github.com/zfsonlinux/zfs/commit/c2e42f9d53bec422abb71efade2c004383345038 Oct 2013]<br />
|-<br />
|'''OpenZFS on OS X'''<br />
|[https://github.com/openzfsonosx/zfs/commit/55d85d5a8c45c4559a4a0e675c37b0c3afb19c2f May 2013]<br />
|[https://github.com/openzfsonosx/zfs/commit/e51be06697762215dc3b679f8668987034a5a048 June 2013]<br />
|[https://github.com/openzfsonosx/zfs/commit/c2e42f9d53bec422abb71efade2c004383345038 Oct 2013]<br />
|}<br />
<br />
==== nop-write ====<br />
<br />
ZFS supports end-to-end checksumming of every data block. When a cryptographically secure checksum is being used OpenZFS will compare the checksums of incoming writes to checksum of the existing on-disk data and avoid issuing any write i/o for data that has not changed. This can help performance and snapshot space usage in situations were the same files are regularly overwritten with almost-identical data (e.g. regular full-backups of large random-access files).<br />
<br />
{| class="wikitable"<br />
|-<br />
|'''illumos'''<br />
|[https://github.com/illumos/illumos-gate/commit/80901aea8e78a2c20751f61f01bebd1d5b5c2ba5 Nov 2012]<br />
|-<br />
|'''FreeBSD'''<br />
|[https://github.com/freebsd/freebsd/commit/3a0bfecf052237768517963f169d0797e2978f59 Nov 2012]<br />
|-<br />
|'''ZFS on Linux'''<br />
|[https://github.com/zfsonlinux/zfs/commit/03c6040bee6c87a9413b7da41d9f580f79a8ab62 Nov 2013]<br />
|-<br />
|'''OpenZFS on OS X'''<br />
|[https://github.com/openzfsonosx/zfs/commit/03c6040bee6c87a9413b7da41d9f580f79a8ab62 Nov 2013]}<br />
<br />
==== lz4 compression ====<br />
<br />
OpenZFS supports on-the-fly compression of all user data with a variety of compression algorithm. This feature adds support for the lz4 compression algorithm. lz4 is usually faster and compresses data better than lzjb, the old default OpenZFS compression algorithm.<br />
<br />
Note: The <tt>lz4_compress</tt> feature flag must be enabled to take advantage of this.<br />
<br />
{| class="wikitable"<br />
|-<br />
|'''illumos'''<br />
|[https://github.com/illumos/illumos-gate/commit/a6f561b4aee75d0d028e7b36b151c8ed8a86bc76 Jan 2013]<br />
|-<br />
|'''FreeBSD'''<br />
|[https://github.com/freebsd/freebsd/commit/c6d9dc1ad2d2e36220845b84a2d180bd97354797 Feb 2013]<br />
|-<br />
|'''ZFS on Linux'''<br />
|[https://github.com/zfsonlinux/zfs/commit/9759c60f1a1503e48dc5c45a209c3edd5758319f Jan 2013]<br />
|-<br />
|'''OpenZFS on OS X'''<br />
|[https://github.com/openzfsonosx/zfs/commit/9759c60f1a1503e48dc5c45a209c3edd5758319f Jan 2013]<br />
|}<br />
<br />
==== synctask rewrite ====<br />
<br />
{| class="wikitable"<br />
|-<br />
|'''illumos'''<br />
|[https://github.com/illumos/illumos-gate/commit/3b2aab18808792cbd248a12f1edf139b89833c13 Feb 2013]<br />
|-<br />
|'''FreeBSD'''<br />
|[https://github.com/freebsd/freebsd/commit/f1985e5cd725ff1816cd4afbdee2d95b661883f0 March 2013]<br />
|-<br />
|'''ZFS on Linux'''<br />
|[https://github.com/zfsonlinux/zfs/commit/13fe019870c8779bf2f5b3ff731b512cf89133ef Sept 2013]<br />
|-<br />
|'''OpenZFS on OS X'''<br />
|[https://github.com/openzfsonosx/zfs/commit/13fe019870c8779bf2f5b3ff731b512cf89133ef Sept 2013]<br />
|}<br />
<br />
==== l2arc compression ====<br />
<br />
{| class="wikitable"<br />
|-<br />
|'''illumos'''<br />
|[https://github.com/illumos/illumos-gate/commit/aad02571bc59671aa3103bb070ae365f531b0b62 Jun 2013]<br />
|-<br />
|'''FreeBSD'''<br />
|[https://github.com/freebsd/freebsd/commit/b20363fe596a7e3a55d5b62f4d3fdb482c65c47a Jun 2013]<br />
|-<br />
|'''ZFS on Linux'''<br />
|[https://github.com/zfsonlinux/zfs/commit/3a17a7a99a1a6332d0999f9be68e2b8dc3933de1 Aug 2013]<br />
|-<br />
|'''OpenZFS on OS X'''<br />
|[https://github.com/openzfsonosx/zfs/commit/3a17a7a99a1a6332d0999f9be68e2b8dc3933de1 Aug 2013]<br />
|}<br />
<br />
==== ARC Shouldn't Cache Freed Blocks ====<br />
<br />
Originally cached blocks in the ARC remained cached until they were evicted due to memory pressure, even if the underlying disk block was freed. In some workloads these freed blocks were so frequently accessed before they were freed that the ARC continued to cache them while evicting blocks which had not been freed yet. Since freed blocks could never be accessed again continuing to cache them was unnecessary. In OpenZFS ARC blocks are evicted immediately when their underlying data blocks are freed.<br />
<br />
{| class="wikitable"<br />
|-<br />
|'''illumos'''<br />
|[https://github.com/illumos/illumos-gate/commit/6e6d5868f52089b9026785bd90257a3d3f6e5ee2 Jun 2013]<br />
|-<br />
|'''FreeBSD'''<br />
|[https://github.com/freebsd/freebsd/commit/13d822743426263ee50bcf047ab41a1e386156a8 Jun 2013]<br />
|-<br />
|'''ZFS on Linux'''<br />
|[https://github.com/zfsonlinux/zfs/commit/df4474f92d0b1b8d54e1914fdd56be2b75f1ff5e Jun 2013]<br />
|-<br />
|'''OpenZFS on OS X'''<br />
|[https://github.com/openzfsonosx/zfs/commit/df4474f92d0b1b8d54e1914fdd56be2b75f1ff5e Jun 2013]<br />
|}<br />
<br />
==== Improve N-way mirror read performance ====<br />
<br />
Queues read requests to least busy leaf vdev in mirrors.<br />
<br />
In addition to the vdev load biasing first implemented by ZFS on Linux in July 2013, the FreeBSD October 2013 version added I/O locality and device rotational information to further enhance the performance.<br />
<br />
{| class="wikitable"<br />
!OS<br />
!Load<br />
!Load + I/O Locality & Rotational Information<br />
|-<br />
|'''illumos'''<br />
|not yet ported<br />
|not yet ported<br />
|-<br />
|'''FreeBSD'''<br />
|N/A<br />
|[http://svnweb.freebsd.org/changeset/base/256956 23rd October 2013]<br />
|-<br />
|'''ZFS on Linux'''<br />
|[https://github.com/zfsonlinux/zfs/commit/556011dbec2d10579819078559a77630fc559112 Jul 2013]<br />
|not yet ported<br />
|-<br />
|'''OpenZFS on OS X'''<br />
|[https://github.com/openzfsonosx/zfs/commit/556011dbec2d10579819078559a77630fc559112 Jul 2013]<br />
|not yet ported<br />
|}<br />
<br />
==== Smoother Write Throttle ====<br />
<br />
The write throttle (dsl_pool_tempreserve_space() and txg_constrain_throughput()) is rewritten to produce much more consistent delays when under constant load. The new write throttle is based on the amount of dirty data, rather than guesses about future performance of the system. When there is a lot of dirty data, each transaction (e.g. write() syscall) will be delayed by the same small amount. This eliminates the "brick wall of wait" that the old write throttle could hit, causing all transactions to wait several seconds until the next txg opens. One of the keys to the new write throttle is decrementing the amount of dirty data as i/o completes, rather than at the end of spa_sync(). Note that the write throttle is only applied once the i/o scheduler is issuing the maximum number of outstanding async writes. See the block comments in dsl_pool.c and above dmu_tx_delay() for more details.<br />
<br />
The ZFS i/o scheduler (vdev_queue.c) now divides i/os into 5 classes: sync read, sync write, async read, async write, and scrub/resilver. The scheduler issues a number of concurrent i/os from each class to the device. Once a class has been selected, an i/o is selected from this class using either an elevator algorithem (async, scrub classes) or FIFO (sync classes). The number of concurrent async write i/os is tuned dynamically based on i/o load, to achieve good sync i/o latency when there is not a high load of writes, and good write throughput when there is. See the block comment in vdev_queue.c for more details.<br />
<br />
{| class="wikitable"<br />
|-<br />
|'''illumos'''<br />
|[https://github.com/illumos/illumos-gate/commit/69962b5647e4a8b9b14998733b765925381b727e Aug 2013]<br />
|-<br />
|'''FreeBSD'''<br />
|[http://svnweb.freebsd.org/changeset/base/258632 Nov 2013]<br />
|-<br />
|'''ZFS on Linux'''<br />
|[https://github.com/zfsonlinux/zfs/commit/e8b96c6007bf97cdf34869c1ffbd0ce753873a3d Dec 2013]<br />
|-<br />
|'''OpenZFS on OS X'''<br />
|not yet<br />
|}<br />
<br />
==== Disable LBA Weighting on files and SSDs ====<br />
<br />
On rotational media, the bandwidth of the outermost tracks is approximately twice that of innermost tracks. A heuristic called LBA weighting was put into the metaslab allocator to account for this by favoring the outermost tracks over the innermost tracks. This has the consequence that metaslabs tend to fill at different rates depending on their location. This causes the metaslabs corresponding to outermost tracks to enter the best-fit allocation strategy.<br />
<br />
The best-fit allocation strategy is more CPU intensive than the typical first-fit because it looks for the smallest region of free space able to fulfill an allocation rather than picking the next avaliable one. The CPU time is fairly excessive and is known to harm IOPS, but it exists to minimize use of gang blocks as a metaslab becomes excessively full. Gaining a bandwidth improvement from LBA weighting at the expense of an earlier switch to the best-fit allocation behavior on the weighted metaslabs is reasonable on rotational disks. However, it makes no sense on files, where the underlying filesystem is free to place things however way it sees fit, and on SSDs, where there is no bandwidth difference based on LBA.<br />
<br />
With this change, we will more evenly fill metaslabs on pools whose vdevs consist of only files and SSDs, which will minimize the metaslabs that enter the best fit allocation strategy when a pool is mostly full, but still below 96% full. This is particularly important on SSDs, where drops in IOPS are more pronounced.<br />
<br />
{| class="wikitable"<br />
|-<br />
|'''illumos'''<br />
|not yet<br />
|-<br />
|'''FreeBSD'''<br />
|not yet<br />
|-<br />
|'''ZFS on Linux'''<br />
|[https://github.com/zfsonlinux/zfs/commit/fb40095f5f0853946f8150481ca22602d1334dfe Aug 2015]<br />
|-<br />
|'''OpenZFS on OS X'''<br />
|not yet<br />
|}<br />
<br />
== Dataset Properties ==<br />
<br />
These are new filesystem, volume, and snapshot properties which can be accessed with the <tt>zfs(1)</tt> command's <tt>get</tt> subcommand. See the <tt>zfs(1)</tt> manpage for your distribution for more details on each of these properties.<br />
<br />
{| class="wikitable"<br />
!Property<br />
!Description<br />
!illumos<br />
!FreeBSD<br />
!ZFS on Linux<br />
!OpenZFS on OS X<br />
|-<br />
|<tt>refcompressratio</tt><br />
|The compression ratio acheived for all data referenced by (but not necessarily unique to) a snapshot, filesystem, or volume, expressed as a multiplier.<br />
|[https://github.com/illumos/illumos-gate/commit/187d6ac08adc31ea6868bde0cfbbb288826254e8 Jun 2011]<br />
|[https://github.com/freebsd/freebsd/commit/333e34b938a2b5e7b036e02b36408880b415109c Jun 2011]<br />
|[https://github.com/zfsonlinux/zfs/commit/77999e804fff35782ab4b578d2cecf064c54a841 Aug 2012]<br />
|[https://github.com/openzfsonosx/zfs/commit/77999e804fff35782ab4b578d2cecf064c54a841 Aug 2012]<br />
|-<br />
|<tt>clones</tt><br />
|For snapshots, this property is a comma-separated list of filesystems or volumes which are clones of this snapshot.<br />
|[https://github.com/illumos/illumos-gate/commit/e5351341b58845eee9d722bd71543d5a7c26b6cc Nov 2011]<br />
|[https://github.com/freebsd/freebsd/commit/73cab7197174153a718dedc97ff344341bcf6098 Nov 2011]<br />
|[https://github.com/zfsonlinux/zfs/commit/330d06f90d143b41b276796526a66a1c1fff046d Jul 2012]<br />
|[https://github.com/openzfsonosx/zfs/commit/330d06f90d143b41b276796526a66a1c1fff046d Jul 2012]<br />
|-<br />
|<tt>written</tt><br />
|The amount of referenced space written to this dataset since the previous snapshot.<br />
|[https://github.com/illumos/illumos-gate/commit/e5351341b58845eee9d722bd71543d5a7c26b6cc Nov 2011]<br />
|[https://github.com/freebsd/freebsd/commit/73cab7197174153a718dedc97ff344341bcf6098 Nov 2011]<br />
|[https://github.com/zfsonlinux/zfs/commit/330d06f90d143b41b276796526a66a1c1fff046d Jul 2012]<br />
|[https://github.com/openzfsonosx/zfs/commit/330d06f90d143b41b276796526a66a1c1fff046d Jul 2012]<br />
|-<br />
|<tt>written@''<snap>''</tt><br />
|The amount of referenced space written to this dataset since the specified snapshot. This is the space referenced by this dataset, but not referenced by the specified snapshot.<br />
|[https://github.com/illumos/illumos-gate/commit/e5351341b58845eee9d722bd71543d5a7c26b6cc Nov 2011]<br />
|[https://github.com/freebsd/freebsd/commit/73cab7197174153a718dedc97ff344341bcf6098 Nov 2011]<br />
|[https://github.com/zfsonlinux/zfs/commit/330d06f90d143b41b276796526a66a1c1fff046d Jul 2012]<br />
|[https://github.com/openzfsonosx/zfs/commit/330d06f90d143b41b276796526a66a1c1fff046d Jul 2012]<br />
|-<br />
|<tt>logicalused</tt>, <tt>logicalreferenced</tt><br />
|The amount of space used or referenced, before taking into account compression.<br />
|[https://github.com/illumos/illumos-gate/commit/77372cb0f35e8d3615ca2e16044f033397e88e21 Feb 2013]<br />
|[https://github.com/freebsd/freebsd/commit/2bed8f5691b7572d6f31bfc68e9f762a938af863 Mar 2013]<br />
|[https://github.com/zfsonlinux/zfs/commit/24a64651b4163d47b1187821152d762e9a263d5a Oct 2013]<br />
|not yet<br />
|-<br />
|}</div>Lundmanhttps://openzfs.org/w/index.php?title=Features&diff=2032Features2015-12-16T00:33:28Z<p>Lundman: /* nop-write */ Updating OS X</p>
<hr />
<div>This page describes some of the more important features and performance improvements that are part of OpenZFS.<br />
<br />
Help would be appreciated in porting features between platforms whose status is "not yet".<br />
<br />
== Feature Flags ==<br />
<br />
See the [[Feature_Flags|Feature Flags]] wiki page.<br />
<br />
== libzfs_core ==<br />
<br />
See this [http://blog.delphix.com/matt/2012/01/17/the-future-of-libzfs/ blog post (Jan 2012)] and associated [http://blog.delphix.com/matt/files/2012/01/The_Future_of_LibZFS.pdf slides] and [http://www.youtube.com/watch?feature=player_embedded&list=PL1A94C8EECCAF7340&v=iJ0S91ygErE video] for more details.<br />
<br />
First introduced in:<br />
{| class="wikitable"<br />
|-<br />
|'''illumos'''<br />
|[https://github.com/illumos/illumos-gate/commit/4445fffbbb1ea25fd0e9ea68b9380dd7a6709025 June 2012]<br />
|-<br />
|'''FreeBSD'''<br />
|[https://github.com/freebsd/freebsd/commit/f1985e5cd725ff1816cd4afbdee2d95b661883f0 March 2013]<br />
|-<br />
|'''ZFS on Linux'''<br />
|[https://github.com/zfsonlinux/zfs/commit/6f1ffb06655008c9b519108ed29fbf03acd6e5de August 2013]<br />
|-<br />
|'''OpenZFS on OS X'''<br />
|[https://github.com/openzfsonosx/zfs/commit/50b0b2d9ea604d29ed729be8fa61bb77ae3ff4e9 October 2013]<br />
|}<br />
<br />
== CLI Usability ==<br />
<br />
These are improvements to the command line interface. While the end result is a generally more friendly user interface, getting the desired behavior often required modifications to the core of ZFS.<br />
<br />
''Listed in chronological order (oldest first).''<br />
<br />
==== Pool Comment ====<br />
<br />
OpenZFS has a per-pool comment property which can be set with the <tt>zpool set</tt> command and can be read even if the pool is not imported, so it is accessible even if pool import fails.<br />
<br />
{| class="wikitable"<br />
|-<br />
|'''illumos'''<br />
|[https://github.com/illumos/illumos-gate/commit/8704186e373c9ed74daa395ff3f7fd745396df9e Nov 2011]<br />
|-<br />
|'''FreeBSD'''<br />
|[https://github.com/freebsd/freebsd/commit/73cab7197174153a718dedc97ff344341bcf6098 Nov 2011]<br />
|-<br />
|'''ZFS on Linux'''<br />
|[https://github.com/zfsonlinux/zfs/commit/d96eb2b1538db13ee7a716ec0e1162f5735edc12 Aug 2012]<br />
|-<br />
|'''OpenZFS on OS X'''<br />
|[https://github.com/openzfsonosx/zfs/commit/d96eb2b1538db13ee7a716ec0e1162f5735edc12 Aug 2012]<br />
|}<br />
<br />
==== Size Estimates for <tt>zfs send</tt> and <tt>zfs destroy</tt> ====<br />
<br />
This feature enhances OpenZFS's internal space accounting information. This new accounting information is used to provide a <tt>-n</tt> (dry-run) option for <tt>zfs send</tt> which can instantly calculate the amount of send stream data a specific <tt>zfs send</tt> command would generate. It is also used for a <tt>-n</tt> option for <tt>zfs destroy</tt> which can instantly calculate the amount of space that would be reclaimed by a specific <tt>zfs destroy</tt> command.<br />
<br />
{| class="wikitable"<br />
|-<br />
|'''illumos'''<br />
|[https://github.com/illumos/illumos-gate/commit/e5351341b58845eee9d722bd71543d5a7c26b6cc Nov 2011]<br />
|-<br />
|'''FreeBSD'''<br />
|[https://github.com/freebsd/freebsd/commit/73cab7197174153a718dedc97ff344341bcf6098 Nov 2011]<br />
|-<br />
|'''ZFS on Linux'''<br />
|[https://github.com/zfsonlinux/zfs/commit/330d06f90d143b41b276796526a66a1c1fff046d Jul 2012]<br />
|-<br />
|'''OpenZFS on OS X'''<br />
|[https://github.com/openzfsonosx/zfs/commit/330d06f90d143b41b276796526a66a1c1fff046d Jul 2012]<br />
|}<br />
<br />
==== vdev Information in <tt>zpool list</tt> ====<br />
<br />
OpenZFS adds a <tt>-v</tt> option to the <tt>zpool list</tt> command which shows detailed sizing information about the vdevs in the pool:<br />
<br />
$ zpool list -v<br />
NAME SIZE ALLOC FREE EXPANDSZ CAP DEDUP HEALTH ALTROOT<br />
dcenter 5.24T 3.85T 1.39T - 73% 1.00x ONLINE -<br />
mirror 556G 469G 86.7G -<br />
c2t1d0 - - - -<br />
c2t0d0 - - - -<br />
mirror 556G 493G 63.0G -<br />
c2t3d0 - - - -<br />
c2t2d0 - - - -<br />
mirror 556G 493G 62.7G -<br />
c2t5d0 - - - -<br />
c2t4d0 - - - -<br />
mirror 556G 494G 62.5G -<br />
c2t8d0 - - - -<br />
c2t6d0 - - - -<br />
mirror 556G 494G 62.2G -<br />
c2t10d0 - - - -<br />
c2t9d0 - - - -<br />
mirror 556G 494G 61.9G -<br />
c2t12d0 - - - -<br />
c2t11d0 - - - -<br />
mirror 1016G 507G 509G -<br />
c1t1d0 - - - -<br />
c1t5d0 - - - -<br />
mirror 1016G 496G 520G -<br />
c1t3d0 - - - -<br />
c1t4d0 - - - -<br />
<br />
{| class="wikitable"<br />
|-<br />
|'''illumos'''<br />
|[https://github.com/illumos/illumos-gate/commit/4263d13f00c9691fa14620eff82abef795be0693 Jan 2012]<br />
|-<br />
|'''FreeBSD'''<br />
|[https://github.com/freebsd/freebsd/commit/38ef930079cbb1df5de9df3c1064426dba3976b1 May 2012]<br />
|-<br />
|'''ZFS on Linux'''<br />
|[https://github.com/zfsonlinux/zfs/commit/1bd201e70d57464fd26bf9089ea4b44fd49e4f2d Sept 2012]<br />
|-<br />
|'''OpenZFS on OS X'''<br />
|[https://github.com/openzfsonosx/zfs/commit/1bd201e70d57464fd26bf9089ea4b44fd49e4f2d Sept 2012]<br />
|}<br />
<br />
==== ZFS list snapshot property alias ====<br />
<br />
Functionally identical to Solaris 11 extension <code>zfs list -t snap</code>.<br />
<br />
{| class="wikitable"<br />
|-<br />
|'''illumos'''<br />
|not yet<br />
|-<br />
|'''FreeBSD'''<br />
|[http://svnweb.freebsd.org/changeset/base/256999 Oct 2013]<br />
|-<br />
|'''ZFS on Linux'''<br />
|[https://github.com/zfsonlinux/zfs/commit/cf81b00a73fe47fdb21586ac1cc179b734540973 Apr 2012]<br />
|-<br />
|'''OpenZFS on OS X'''<br />
|[https://github.com/openzfsonosx/zfs/commit/cf81b00a73fe47fdb21586ac1cc179b734540973 Apr 2012]<br />
|}<br />
<br />
==== ZFS snapshot alias ====<br />
<br />
Functionally identical to Solaris 11 extension <code>zfs snap</code>.<br />
<br />
{| class="wikitable"<br />
|-<br />
|'''illumos'''<br />
|not yet<br />
|-<br />
|'''FreeBSD'''<br />
|[http://svnweb.freebsd.org/changeset/base/256999 Oct 2013]<br />
|-<br />
|'''ZFS on Linux'''<br />
|[https://github.com/zfsonlinux/zfs/commit/10b75496bb0cb7a7b8146c263164adc37f1d176a Apr 2012]<br />
|-<br />
|'''OpenZFS on OS X'''<br />
|[https://github.com/openzfsonosx/zfs/commit/10b75496bb0cb7a7b8146c263164adc37f1d176a Apr 2012]<br />
|}<br />
<br />
==== <tt>zfs send</tt> Progress Reporting ====<br />
<br />
OpenZFS introduces a <tt>-v</tt> option to <tt>zfs send</tt> which reports per-second information on how much data has been sent, how long it has taken, and how much data remains to be sent.<br />
<br />
{| class="wikitable"<br />
|-<br />
|'''illumos'''<br />
|[https://github.com/illumos/illumos-gate/commit/4e3c9f4489a18514e5e8caeb91d4e6db07c98415 May 2012]<br />
|-<br />
|'''FreeBSD'''<br />
|[https://github.com/freebsd/freebsd/commit/046ff8962602e8d65b6b3fae48573513ab7e433f May 2012]<br />
|-<br />
|'''ZFS on Linux'''<br />
|[https://github.com/zfsonlinux/zfs/commit/37abac6d559a1da8ab8e5379442f491b73998f6a Sept 2012]<br />
|-<br />
|'''OpenZFS on OS X'''<br />
|[https://github.com/openzfsonosx/zfs/commit/37abac6d559a1da8ab8e5379442f491b73998f6a Sept 2012]<br />
|}<br />
<br />
==== Arbitrary Snapshot Arguments to <tt>zfs snapshot</tt> ====<br />
<br />
{| class="wikitable"<br />
|-<br />
|'''illumos'''<br />
|[https://github.com/illumos/illumos-gate/commit/4445fffbbb1ea25fd0e9ea68b9380dd7a6709025 June 2012]<br />
|-<br />
|'''FreeBSD'''<br />
|[https://github.com/freebsd/freebsd/commit/f1985e5cd725ff1816cd4afbdee2d95b661883f0 March 2013]<br />
|-<br />
|'''ZFS on Linux'''<br />
|[https://github.com/zfsonlinux/zfs/commit/6f1ffb06655008c9b519108ed29fbf03acd6e5de August 2013]<br />
|-<br />
|'''OpenZFS on OS X'''<br />
|[https://github.com/openzfsonosx/zfs/commit/6f1ffb06655008c9b519108ed29fbf03acd6e5de September 2013]<br />
|}<br />
<br />
== Performance ==<br />
<br />
These are significant performance improvements, often requiring substantial restructuring of the source code.<br />
<br />
''Listed in chronological order (oldest first).''<br />
<br />
==== SA based xattrs ====<br />
<br />
Improves performance of linux-style (short) xattrs by storing them in the dnode_phys_t's bonus block. (Not to be confused with [http://en.wikipedia.org/wiki/Extended_file_attributes#Solaris Solaris-style Extended Attributes] which are full-fledged files or "forks", like NTFS streams. This work could be extended to also improve the performance on illumos of small Extended Attributes whose permissions are the same as the containing file.)<br />
<br />
Requires a disk format change and is off by default until Filesystem (ZPL) Feature Flags are implemented (not to be confused with [[Features#Feature_Flags_Overview | zpool Feature Flags]]).<br />
<br />
{| class="wikitable"<br />
|-<br />
|'''illumos'''<br />
|not yet (needs additional functionality)<br />
|-<br />
|'''FreeBSD'''<br />
|??<br />
|-<br />
|'''ZFS on Linux'''<br />
|[https://github.com/zfsonlinux/zfs/commit/82a37189aac955c81a59a5ecc3400475adb56355 Oct 2011]<br />
|-<br />
|'''OpenZFS on OS X'''<br />
|[https://github.com/openzfsonosx/zfs/commit/6a06ef26abc87c6ede9bec8246713dc94c98fa78 May 2015]<br />
|}<br />
<br />
Note that SA based xattrs are [https://github.com/zfsonlinux/zfs/commit/6a7c0ccca44ad02c476a111d8f7911fc8b12fff7 no longer used on symlinks] as of Aug 2013 until an issue is resolved.<br />
<br />
==== Use the slog even with logbias=throughput ====<br />
<br />
{| class="wikitable"<br />
|-<br />
|'''illumos'''<br />
|??<br />
|-<br />
|'''FreeBSD'''<br />
|??<br />
|-<br />
|'''ZFS on Linux'''<br />
|[https://github.com/zfsonlinux/zfs/commit/5d7a86d114c2706a8d14d94b71f81ad5cdf066c5 Oct 2011]<br />
|-<br />
|'''OpenZFS on OS X'''<br />
|[https://github.com/openzfsonosx/zfs/commit/5d7a86d114c2706a8d14d94b71f81ad5cdf066c5 Oct 2011]<br />
|}<br />
<br />
==== Asynchronous Filesystem and Volume Destruction ====<br />
<br />
Destroying a filesystem requires traversing all of its data in order to return its used blocks to the pool's free list. Before this feature the filesystem was not fully removed until all blocks had been reclaimed. If the destroy operation was interrupted by a reboot or power outage the next attempt to import the pool (probably during boot) would need to complete the destroy operation synchronously, possibly delaying a boot for long periods of time.<br />
<br />
With asynchronous destruction the filesystem's data is immediately moved to a "to be freed" list, allowing the destroy operation to complete without traversing any of the filesystem's data. A background process reclaims blocks from this "to be freed" list and is capable of resuming this process after reboots without slowing the pool import process.<br />
<br />
The new freeing algorithm also has a significant performance improvement when destroying clones. The old algorithm took time proportional to the number of blocks ''referenced'' by the clone, even if most of those blocks could not be reclaimed because they were still referenced by the clone's origin. The new algorithm only takes time proportional to the number of blocks unique to the clone.<br />
<br />
See this [http://blog.delphix.com/matt/2012/07/11/performance-of-zfs-destroy/ blog post] for more detailed performance analysis.<br />
<br />
Note: The <tt>async_destroy</tt> feature flag must be enabled to take advantage of this.<br />
<br />
{| class="wikitable"<br />
|-<br />
|'''illumos'''<br />
|[https://github.com/illumos/illumos-gate/commit/ad135b5d644628e791c3188a6ecbd9c257961ef8 May 2012]<br />
|-<br />
|'''FreeBSD'''<br />
|[https://github.com/freebsd/freebsd/commit/cc61ab2f133566dca51970d44cc49a4355039b5d June 2012]<br />
|-<br />
|'''ZFS on Linux'''<br />
|[https://github.com/zfsonlinux/zfs/commit/9ae529ec5dbdc828ff8326beae58062971d74b2e Jan 2013]<br />
|-<br />
|'''OpenZFS on OS X'''<br />
|[https://github.com/openzfsonosx/zfs/commit/9ae529ec5dbdc828ff8326beae58062971d74b2e Jan 2013]<br />
|}<br />
<br />
==== Reduce Number of Empty bpobjs ====<br />
<br />
Every time OpenZFS takes a snapshot it creates on-disk block pointer objects (bpobj's) to track blocks associated with that snapshot. In common use cases most of these bpobj's are empty, but the number of bpobjs per-snapshot is proportional to the number of snapshots already taken of the same filesystem or volume. When a single filesystem or volume has many (tens of thousands) snapshots these unecessary empty bpobjs can waste space and cause performance problems. OpenZFS waits to create each bpobjs until the first entry is added to it, thus eliminating the empty bpobjs.<br />
<br />
Note: The <tt>empty_bpobj</tt> feature flag must be enabled to take advantage of this.<br />
<br />
{| class="wikitable"<br />
|-<br />
|'''illumos'''<br />
|[https://github.com/illumos/illumos-gate/commit/f17457368189aa911f774c38c1f21875a568bdca Aug 2012]<br />
|-<br />
|'''FreeBSD'''<br />
|[https://github.com/freebsd/freebsd/commit/d9fa2f486ee98b2557e1d5ad5f1af418c663cfc8 Aug 2012]<br />
|-<br />
|'''ZFS on Linux'''<br />
|[https://github.com/zfsonlinux/zfs/commit/753c38392ddff9d3cf140bb4d28f3bfba52c92d2 Dec 2012]<br />
|-<br />
|'''OpenZFS on OS X'''<br />
|[https://github.com/openzfsonosx/zfs/commit/753c38392ddff9d3cf140bb4d28f3bfba52c92d2 Dec 2012]<br />
|}<br />
<br />
==== Single Copy ARC ====<br />
<br />
OpenZFS caches disk blocks in-memory in the adaptive replacement cache (ARC). Originally when the same disk block was accessed from different clones it was cached multiple times (one for each clone accessing the block) in case a clone planned to modify the block. With these changes OpenZFS caches at most one copy of every block unless a clone is actually modifying the block.<br />
<br />
{| class="wikitable"<br />
|-<br />
|'''illumos'''<br />
|[https://github.com/illumos/illumos-gate/commit/9253d63df408bb48584e0b1abfcc24ef2472382e Sep 2012]<br />
|-<br />
|'''FreeBSD'''<br />
|[https://github.com/freebsd/freebsd/commit/8e1fdec2c76a948b16ebf8e4abe2cb73a60d3477 Nov 2012]<br />
|-<br />
|'''ZFS on Linux'''<br />
|[https://github.com/zfsonlinux/zfs/commit/1eb5bfa3dcdaecb19543d9df13131374a7a42947 Dec 2012]<br />
|-<br />
|'''OpenZFS on OS X'''<br />
|[https://github.com/openzfsonosx/zfs/commit/1eb5bfa3dcdaecb19543d9df13131374a7a42947 Dec 2012]<br />
|}<br />
<br />
==== TRIM Support ====<br />
<br />
TRIM support provides the ability to pass deletes / frees through to underlying vdevs that help to ensure devices such as SSD's, which rely on receiving TRIM / UNMAP requests for sectors which are no longer needed, maintain optimal performance.<br />
<br />
The current FreeBSD implementation builds a map of regions that were freed. On every write the<br />
code consults the map and removes ranges that were freed before, but are now overwritten.<br />
<br />
Freed blocks are not TRIMed immediately, there is a low priority thread that TRIMs ranges when the time comes.<br />
<br />
Support for TRIM has been demonstrated to significantly improved the general performance of SSD in the field, eliminating the need for regular secure erase cycles on busy hosts.<br />
<br />
An alternative method, which is arguably better, and works by tracking the metaslab allocator is also in progress and can be found here:<br />
[http://cr.illumos.org/~webrev/skiselkov/zfs_unmap/ ZFS TRIM Support for illumos]<br />
<br />
There is [https://github.com/zfsonlinux/zfs/pull/1016 a pull request for ZFS On Linux] which implements FreeBSD's (Sep 2012) ZFS TRIM support.<br />
<br />
{| class="wikitable"<br />
|-<br />
|'''illumos'''<br />
|not yet ported<br />
|-<br />
|'''FreeBSD'''<br />
|[http://svnweb.freebsd.org/base?view=revision&sortby=file&revision=240868 Sep 2012]<br />
|-<br />
|'''ZFS on Linux'''<br />
|not yet ported<br />
|-<br />
|'''OpenZFS on OS X'''<br />
|not yet ported<br />
|}<br />
<br />
==== FASTWRITE Algorithm ====<br />
<br />
Improves synchronous IO performance.<br />
<br />
{| class="wikitable"<br />
|-<br />
|'''illumos'''<br />
|not yet ported<br />
|-<br />
|'''FreeBSD'''<br />
|not yet ported<br />
|-<br />
|'''ZFS on Linux'''<br />
|[https://github.com/zfsonlinux/zfs/commit/920dd524fb2997225d4b1ac180bcbc14b045fda6 Oct 2012]<br />
|-<br />
|'''OpenZFS on OS X'''<br />
|[https://github.com/openzfsonosx/zfs/commit/920dd524fb2997225d4b1ac180bcbc14b045fda6 Oct 2012]<br />
|}<br />
<br />
Note that a [https://github.com/ryao/zfs/commit/858822a04b4563657b2267131e90d9687d67e31b locking enhancement] is being reviewed.<br />
<br />
==== Block Freeing Performance Improvments ====<br />
<br />
Performance analysis of OpenZFS revealed that the algorithms used when freeing blocks could cause significant performance problems when freeing a large amount of blocks in a single transaction or when dealing with fragmented pools. Several performance improvements were made in this area.<br />
<br />
{| class="wikitable"<br />
|-<br />
|'''illumos'''<br />
|[https://github.com/illumos/illumos-gate/commit/01f55e48fb4d524eaf70687728aa51b7762e2e97 Nov 2012]<br />
|[https://github.com/illumos/illumos-gate/commit/16a4a8074274d2d7cc408589cf6359f4a378c861 Feb 2013]<br />
|[https://github.com/illumos/illumos-gate/commit/9eb57f7f3fbb970d4b9b89dcd5ecf543fe2414d5 Feb 2013]<br />
|-<br />
|'''FreeBSD'''<br />
|[https://github.com/freebsd/freebsd/commit/5d9b3f284b13ac492326e05f6ba4c00e98adf05c Nov 2012]<br />
|[https://github.com/freebsd/freebsd/commit/18e9a0422b52091035dae9d69bde9dd571a8ff7e Feb 2013]<br />
|[https://github.com/freebsd/freebsd/commit/18e9a0422b52091035dae9d69bde9dd571a8ff7e Feb 2013]<br />
|-<br />
|'''ZFS on Linux'''<br />
|[https://github.com/zfsonlinux/zfs/commit/55d85d5a8c45c4559a4a0e675c37b0c3afb19c2f May 2013]<br />
|[https://github.com/zfsonlinux/zfs/commit/e51be06697762215dc3b679f8668987034a5a048 June 2013]<br />
|[https://github.com/zfsonlinux/zfs/commit/c2e42f9d53bec422abb71efade2c004383345038 Oct 2013]<br />
|-<br />
|'''OpenZFS on OS X'''<br />
|[https://github.com/openzfsonosx/zfs/commit/55d85d5a8c45c4559a4a0e675c37b0c3afb19c2f May 2013]<br />
|[https://github.com/openzfsonosx/zfs/commit/e51be06697762215dc3b679f8668987034a5a048 June 2013]<br />
|[https://github.com/openzfsonosx/zfs/commit/c2e42f9d53bec422abb71efade2c004383345038 Oct 2013]<br />
|}<br />
<br />
==== nop-write ====<br />
<br />
ZFS supports end-to-end checksumming of every data block. When a cryptographically secure checksum is being used OpenZFS will compare the checksums of incoming writes to checksum of the existing on-disk data and avoid issuing any write i/o for data that has not changed. This can help performance and snapshot space usage in situations were the same files are regularly overwritten with almost-identical data (e.g. regular full-backups of large random-access files).<br />
<br />
{| class="wikitable"<br />
|-<br />
|'''illumos'''<br />
|[https://github.com/illumos/illumos-gate/commit/80901aea8e78a2c20751f61f01bebd1d5b5c2ba5 Nov 2012]<br />
|-<br />
|'''FreeBSD'''<br />
|[https://github.com/freebsd/freebsd/commit/3a0bfecf052237768517963f169d0797e2978f59 Nov 2012]<br />
|-<br />
|'''ZFS on Linux'''<br />
|[https://github.com/zfsonlinux/zfs/commit/03c6040bee6c87a9413b7da41d9f580f79a8ab62 Nov 2013]<br />
|-<br />
|'''OpenZFS on OS X'''<br />
|[https://github.com/openzfsonosx/zfs/commit/03c6040bee6c87a9413b7da41d9f580f79a8ab62 Nov 2013]|}<br />
<br />
==== lz4 compression ====<br />
<br />
OpenZFS supports on-the-fly compression of all user data with a variety of compression algorithm. This feature adds support for the lz4 compression algorithm. lz4 is usually faster and compresses data better than lzjb, the old default OpenZFS compression algorithm.<br />
<br />
Note: The <tt>lz4_compress</tt> feature flag must be enabled to take advantage of this.<br />
<br />
{| class="wikitable"<br />
|-<br />
|'''illumos'''<br />
|[https://github.com/illumos/illumos-gate/commit/a6f561b4aee75d0d028e7b36b151c8ed8a86bc76 Jan 2013]<br />
|-<br />
|'''FreeBSD'''<br />
|[https://github.com/freebsd/freebsd/commit/c6d9dc1ad2d2e36220845b84a2d180bd97354797 Feb 2013]<br />
|-<br />
|'''ZFS on Linux'''<br />
|[https://github.com/zfsonlinux/zfs/commit/9759c60f1a1503e48dc5c45a209c3edd5758319f Jan 2013]<br />
|-<br />
|'''OpenZFS on OS X'''<br />
|[https://github.com/openzfsonosx/zfs/commit/9759c60f1a1503e48dc5c45a209c3edd5758319f Jan 2013]<br />
|}<br />
<br />
==== synctask rewrite ====<br />
<br />
{| class="wikitable"<br />
|-<br />
|'''illumos'''<br />
|[https://github.com/illumos/illumos-gate/commit/3b2aab18808792cbd248a12f1edf139b89833c13 Feb 2013]<br />
|-<br />
|'''FreeBSD'''<br />
|[https://github.com/freebsd/freebsd/commit/f1985e5cd725ff1816cd4afbdee2d95b661883f0 March 2013]<br />
|-<br />
|'''ZFS on Linux'''<br />
|[https://github.com/zfsonlinux/zfs/commit/13fe019870c8779bf2f5b3ff731b512cf89133ef Sept 2013]<br />
|-<br />
|'''OpenZFS on OS X'''<br />
|[https://github.com/openzfsonosx/zfs/commit/13fe019870c8779bf2f5b3ff731b512cf89133ef Sept 2013]<br />
|}<br />
<br />
==== l2arc compression ====<br />
<br />
{| class="wikitable"<br />
|-<br />
|'''illumos'''<br />
|[https://github.com/illumos/illumos-gate/commit/aad02571bc59671aa3103bb070ae365f531b0b62 Jun 2013]<br />
|-<br />
|'''FreeBSD'''<br />
|[https://github.com/freebsd/freebsd/commit/b20363fe596a7e3a55d5b62f4d3fdb482c65c47a Jun 2013]<br />
|-<br />
|'''ZFS on Linux'''<br />
|[https://github.com/zfsonlinux/zfs/commit/3a17a7a99a1a6332d0999f9be68e2b8dc3933de1 Aug 2013]<br />
|-<br />
|'''OpenZFS on OS X'''<br />
|[https://github.com/openzfsonosx/zfs/commit/3a17a7a99a1a6332d0999f9be68e2b8dc3933de1 Aug 2013]<br />
|}<br />
<br />
==== ARC Shouldn't Cache Freed Blocks ====<br />
<br />
Originally cached blocks in the ARC remained cached until they were evicted due to memory pressure, even if the underlying disk block was freed. In some workloads these freed blocks were so frequently accessed before they were freed that the ARC continued to cache them while evicting blocks which had not been freed yet. Since freed blocks could never be accessed again continuing to cache them was unnecessary. In OpenZFS ARC blocks are evicted immediately when their underlying data blocks are freed.<br />
<br />
{| class="wikitable"<br />
|-<br />
|'''illumos'''<br />
|[https://github.com/illumos/illumos-gate/commit/6e6d5868f52089b9026785bd90257a3d3f6e5ee2 Jun 2013]<br />
|-<br />
|'''FreeBSD'''<br />
|[https://github.com/freebsd/freebsd/commit/13d822743426263ee50bcf047ab41a1e386156a8 Jun 2013]<br />
|-<br />
|'''ZFS on Linux'''<br />
|[https://github.com/zfsonlinux/zfs/commit/df4474f92d0b1b8d54e1914fdd56be2b75f1ff5e Jun 2013]<br />
|-<br />
|'''OpenZFS on OS X'''<br />
|[https://github.com/openzfsonosx/zfs/commit/df4474f92d0b1b8d54e1914fdd56be2b75f1ff5e Jun 2013]<br />
|}<br />
<br />
==== Improve N-way mirror read performance ====<br />
<br />
Queues read requests to least busy leaf vdev in mirrors.<br />
<br />
In addition to the vdev load biasing first implemented by ZFS on Linux in July 2013, the FreeBSD October 2013 version added I/O locality and device rotational information to further enhance the performance.<br />
<br />
{| class="wikitable"<br />
!OS<br />
!Load<br />
!Load + I/O Locality & Rotational Information<br />
|-<br />
|'''illumos'''<br />
|not yet ported<br />
|not yet ported<br />
|-<br />
|'''FreeBSD'''<br />
|N/A<br />
|[http://svnweb.freebsd.org/changeset/base/256956 23rd October 2013]<br />
|-<br />
|'''ZFS on Linux'''<br />
|[https://github.com/zfsonlinux/zfs/commit/556011dbec2d10579819078559a77630fc559112 Jul 2013]<br />
|not yet ported<br />
|-<br />
|'''OpenZFS on OS X'''<br />
|[https://github.com/openzfsonosx/zfs/commit/556011dbec2d10579819078559a77630fc559112 Jul 2013]<br />
|not yet ported<br />
|}<br />
<br />
==== Smoother Write Throttle ====<br />
<br />
The write throttle (dsl_pool_tempreserve_space() and txg_constrain_throughput()) is rewritten to produce much more consistent delays when under constant load. The new write throttle is based on the amount of dirty data, rather than guesses about future performance of the system. When there is a lot of dirty data, each transaction (e.g. write() syscall) will be delayed by the same small amount. This eliminates the "brick wall of wait" that the old write throttle could hit, causing all transactions to wait several seconds until the next txg opens. One of the keys to the new write throttle is decrementing the amount of dirty data as i/o completes, rather than at the end of spa_sync(). Note that the write throttle is only applied once the i/o scheduler is issuing the maximum number of outstanding async writes. See the block comments in dsl_pool.c and above dmu_tx_delay() for more details.<br />
<br />
The ZFS i/o scheduler (vdev_queue.c) now divides i/os into 5 classes: sync read, sync write, async read, async write, and scrub/resilver. The scheduler issues a number of concurrent i/os from each class to the device. Once a class has been selected, an i/o is selected from this class using either an elevator algorithem (async, scrub classes) or FIFO (sync classes). The number of concurrent async write i/os is tuned dynamically based on i/o load, to achieve good sync i/o latency when there is not a high load of writes, and good write throughput when there is. See the block comment in vdev_queue.c for more details.<br />
<br />
{| class="wikitable"<br />
|-<br />
|'''illumos'''<br />
|[https://github.com/illumos/illumos-gate/commit/69962b5647e4a8b9b14998733b765925381b727e Aug 2013]<br />
|-<br />
|'''FreeBSD'''<br />
|[http://svnweb.freebsd.org/changeset/base/258632 Nov 2013]<br />
|-<br />
|'''ZFS on Linux'''<br />
|[https://github.com/zfsonlinux/zfs/commit/e8b96c6007bf97cdf34869c1ffbd0ce753873a3d Dec 2013]<br />
|-<br />
|'''OpenZFS on OS X'''<br />
|not yet<br />
|}<br />
<br />
==== Disable LBA Weighting on files and SSDs ====<br />
<br />
On rotational media, the bandwidth of the outermost tracks is approximately twice that of innermost tracks. A heuristic called LBA weighting was put into the metaslab allocator to account for this by favoring the outermost tracks over the innermost tracks. This has the consequence that metaslabs tend to fill at different rates depending on their location. This causes the metaslabs corresponding to outermost tracks to enter the best-fit allocation strategy.<br />
<br />
The best-fit allocation strategy is more CPU intensive than the typical first-fit because it looks for the smallest region of free space able to fulfill an allocation rather than picking the next avaliable one. The CPU time is fairly excessive and is known to harm IOPS, but it exists to minimize use of gang blocks as a metaslab becomes excessively full. Gaining a bandwidth improvement from LBA weighting at the expense of an earlier switch to the best-fit allocation behavior on the weighted metaslabs is reasonable on rotational disks. However, it makes no sense on files, where the underlying filesystem is free to place things however way it sees fit, and on SSDs, where there is no bandwidth difference based on LBA.<br />
<br />
With this change, we will more evenly fill metaslabs on pools whose vdevs consist of only files and SSDs, which will minimize the metaslabs that enter the best fit allocation strategy when a pool is mostly full, but still below 96% full. This is particularly important on SSDs, where drops in IOPS are more pronounced.<br />
<br />
{| class="wikitable"<br />
|-<br />
|'''illumos'''<br />
|not yet<br />
|-<br />
|'''FreeBSD'''<br />
|not yet<br />
|-<br />
|'''ZFS on Linux'''<br />
|[https://github.com/zfsonlinux/zfs/commit/fb40095f5f0853946f8150481ca22602d1334dfe Aug 2015]<br />
|-<br />
|'''OpenZFS on OS X'''<br />
|not yet<br />
|}<br />
<br />
== Dataset Properties ==<br />
<br />
These are new filesystem, volume, and snapshot properties which can be accessed with the <tt>zfs(1)</tt> command's <tt>get</tt> subcommand. See the <tt>zfs(1)</tt> manpage for your distribution for more details on each of these properties.<br />
<br />
{| class="wikitable"<br />
!Property<br />
!Description<br />
!illumos<br />
!FreeBSD<br />
!ZFS on Linux<br />
!OpenZFS on OS X<br />
|-<br />
|<tt>refcompressratio</tt><br />
|The compression ratio acheived for all data referenced by (but not necessarily unique to) a snapshot, filesystem, or volume, expressed as a multiplier.<br />
|[https://github.com/illumos/illumos-gate/commit/187d6ac08adc31ea6868bde0cfbbb288826254e8 Jun 2011]<br />
|[https://github.com/freebsd/freebsd/commit/333e34b938a2b5e7b036e02b36408880b415109c Jun 2011]<br />
|[https://github.com/zfsonlinux/zfs/commit/77999e804fff35782ab4b578d2cecf064c54a841 Aug 2012]<br />
|[https://github.com/openzfsonosx/zfs/commit/77999e804fff35782ab4b578d2cecf064c54a841 Aug 2012]<br />
|-<br />
|<tt>clones</tt><br />
|For snapshots, this property is a comma-separated list of filesystems or volumes which are clones of this snapshot.<br />
|[https://github.com/illumos/illumos-gate/commit/e5351341b58845eee9d722bd71543d5a7c26b6cc Nov 2011]<br />
|[https://github.com/freebsd/freebsd/commit/73cab7197174153a718dedc97ff344341bcf6098 Nov 2011]<br />
|[https://github.com/zfsonlinux/zfs/commit/330d06f90d143b41b276796526a66a1c1fff046d Jul 2012]<br />
|[https://github.com/openzfsonosx/zfs/commit/330d06f90d143b41b276796526a66a1c1fff046d Jul 2012]<br />
|-<br />
|<tt>written</tt><br />
|The amount of referenced space written to this dataset since the previous snapshot.<br />
|[https://github.com/illumos/illumos-gate/commit/e5351341b58845eee9d722bd71543d5a7c26b6cc Nov 2011]<br />
|[https://github.com/freebsd/freebsd/commit/73cab7197174153a718dedc97ff344341bcf6098 Nov 2011]<br />
|[https://github.com/zfsonlinux/zfs/commit/330d06f90d143b41b276796526a66a1c1fff046d Jul 2012]<br />
|[https://github.com/openzfsonosx/zfs/commit/330d06f90d143b41b276796526a66a1c1fff046d Jul 2012]<br />
|-<br />
|<tt>written@''<snap>''</tt><br />
|The amount of referenced space written to this dataset since the specified snapshot. This is the space referenced by this dataset, but not referenced by the specified snapshot.<br />
|[https://github.com/illumos/illumos-gate/commit/e5351341b58845eee9d722bd71543d5a7c26b6cc Nov 2011]<br />
|[https://github.com/freebsd/freebsd/commit/73cab7197174153a718dedc97ff344341bcf6098 Nov 2011]<br />
|[https://github.com/zfsonlinux/zfs/commit/330d06f90d143b41b276796526a66a1c1fff046d Jul 2012]<br />
|[https://github.com/openzfsonosx/zfs/commit/330d06f90d143b41b276796526a66a1c1fff046d Jul 2012]<br />
|-<br />
|<tt>logicalused</tt>, <tt>logicalreferenced</tt><br />
|The amount of space used or referenced, before taking into account compression.<br />
|[https://github.com/illumos/illumos-gate/commit/77372cb0f35e8d3615ca2e16044f033397e88e21 Feb 2013]<br />
|[https://github.com/freebsd/freebsd/commit/2bed8f5691b7572d6f31bfc68e9f762a938af863 Mar 2013]<br />
|[https://github.com/zfsonlinux/zfs/commit/24a64651b4163d47b1187821152d762e9a263d5a Oct 2013]<br />
|not yet<br />
|-<br />
|}</div>Lundmanhttps://openzfs.org/w/index.php?title=Features&diff=2031Features2015-12-16T00:31:37Z<p>Lundman: /* Block Freeing Performance Improvments */ Updating OS X</p>
<hr />
<div>This page describes some of the more important features and performance improvements that are part of OpenZFS.<br />
<br />
Help would be appreciated in porting features between platforms whose status is "not yet".<br />
<br />
== Feature Flags ==<br />
<br />
See the [[Feature_Flags|Feature Flags]] wiki page.<br />
<br />
== libzfs_core ==<br />
<br />
See this [http://blog.delphix.com/matt/2012/01/17/the-future-of-libzfs/ blog post (Jan 2012)] and associated [http://blog.delphix.com/matt/files/2012/01/The_Future_of_LibZFS.pdf slides] and [http://www.youtube.com/watch?feature=player_embedded&list=PL1A94C8EECCAF7340&v=iJ0S91ygErE video] for more details.<br />
<br />
First introduced in:<br />
{| class="wikitable"<br />
|-<br />
|'''illumos'''<br />
|[https://github.com/illumos/illumos-gate/commit/4445fffbbb1ea25fd0e9ea68b9380dd7a6709025 June 2012]<br />
|-<br />
|'''FreeBSD'''<br />
|[https://github.com/freebsd/freebsd/commit/f1985e5cd725ff1816cd4afbdee2d95b661883f0 March 2013]<br />
|-<br />
|'''ZFS on Linux'''<br />
|[https://github.com/zfsonlinux/zfs/commit/6f1ffb06655008c9b519108ed29fbf03acd6e5de August 2013]<br />
|-<br />
|'''OpenZFS on OS X'''<br />
|[https://github.com/openzfsonosx/zfs/commit/50b0b2d9ea604d29ed729be8fa61bb77ae3ff4e9 October 2013]<br />
|}<br />
<br />
== CLI Usability ==<br />
<br />
These are improvements to the command line interface. While the end result is a generally more friendly user interface, getting the desired behavior often required modifications to the core of ZFS.<br />
<br />
''Listed in chronological order (oldest first).''<br />
<br />
==== Pool Comment ====<br />
<br />
OpenZFS has a per-pool comment property which can be set with the <tt>zpool set</tt> command and can be read even if the pool is not imported, so it is accessible even if pool import fails.<br />
<br />
{| class="wikitable"<br />
|-<br />
|'''illumos'''<br />
|[https://github.com/illumos/illumos-gate/commit/8704186e373c9ed74daa395ff3f7fd745396df9e Nov 2011]<br />
|-<br />
|'''FreeBSD'''<br />
|[https://github.com/freebsd/freebsd/commit/73cab7197174153a718dedc97ff344341bcf6098 Nov 2011]<br />
|-<br />
|'''ZFS on Linux'''<br />
|[https://github.com/zfsonlinux/zfs/commit/d96eb2b1538db13ee7a716ec0e1162f5735edc12 Aug 2012]<br />
|-<br />
|'''OpenZFS on OS X'''<br />
|[https://github.com/openzfsonosx/zfs/commit/d96eb2b1538db13ee7a716ec0e1162f5735edc12 Aug 2012]<br />
|}<br />
<br />
==== Size Estimates for <tt>zfs send</tt> and <tt>zfs destroy</tt> ====<br />
<br />
This feature enhances OpenZFS's internal space accounting information. This new accounting information is used to provide a <tt>-n</tt> (dry-run) option for <tt>zfs send</tt> which can instantly calculate the amount of send stream data a specific <tt>zfs send</tt> command would generate. It is also used for a <tt>-n</tt> option for <tt>zfs destroy</tt> which can instantly calculate the amount of space that would be reclaimed by a specific <tt>zfs destroy</tt> command.<br />
<br />
{| class="wikitable"<br />
|-<br />
|'''illumos'''<br />
|[https://github.com/illumos/illumos-gate/commit/e5351341b58845eee9d722bd71543d5a7c26b6cc Nov 2011]<br />
|-<br />
|'''FreeBSD'''<br />
|[https://github.com/freebsd/freebsd/commit/73cab7197174153a718dedc97ff344341bcf6098 Nov 2011]<br />
|-<br />
|'''ZFS on Linux'''<br />
|[https://github.com/zfsonlinux/zfs/commit/330d06f90d143b41b276796526a66a1c1fff046d Jul 2012]<br />
|-<br />
|'''OpenZFS on OS X'''<br />
|[https://github.com/openzfsonosx/zfs/commit/330d06f90d143b41b276796526a66a1c1fff046d Jul 2012]<br />
|}<br />
<br />
==== vdev Information in <tt>zpool list</tt> ====<br />
<br />
OpenZFS adds a <tt>-v</tt> option to the <tt>zpool list</tt> command which shows detailed sizing information about the vdevs in the pool:<br />
<br />
$ zpool list -v<br />
NAME SIZE ALLOC FREE EXPANDSZ CAP DEDUP HEALTH ALTROOT<br />
dcenter 5.24T 3.85T 1.39T - 73% 1.00x ONLINE -<br />
mirror 556G 469G 86.7G -<br />
c2t1d0 - - - -<br />
c2t0d0 - - - -<br />
mirror 556G 493G 63.0G -<br />
c2t3d0 - - - -<br />
c2t2d0 - - - -<br />
mirror 556G 493G 62.7G -<br />
c2t5d0 - - - -<br />
c2t4d0 - - - -<br />
mirror 556G 494G 62.5G -<br />
c2t8d0 - - - -<br />
c2t6d0 - - - -<br />
mirror 556G 494G 62.2G -<br />
c2t10d0 - - - -<br />
c2t9d0 - - - -<br />
mirror 556G 494G 61.9G -<br />
c2t12d0 - - - -<br />
c2t11d0 - - - -<br />
mirror 1016G 507G 509G -<br />
c1t1d0 - - - -<br />
c1t5d0 - - - -<br />
mirror 1016G 496G 520G -<br />
c1t3d0 - - - -<br />
c1t4d0 - - - -<br />
<br />
{| class="wikitable"<br />
|-<br />
|'''illumos'''<br />
|[https://github.com/illumos/illumos-gate/commit/4263d13f00c9691fa14620eff82abef795be0693 Jan 2012]<br />
|-<br />
|'''FreeBSD'''<br />
|[https://github.com/freebsd/freebsd/commit/38ef930079cbb1df5de9df3c1064426dba3976b1 May 2012]<br />
|-<br />
|'''ZFS on Linux'''<br />
|[https://github.com/zfsonlinux/zfs/commit/1bd201e70d57464fd26bf9089ea4b44fd49e4f2d Sept 2012]<br />
|-<br />
|'''OpenZFS on OS X'''<br />
|[https://github.com/openzfsonosx/zfs/commit/1bd201e70d57464fd26bf9089ea4b44fd49e4f2d Sept 2012]<br />
|}<br />
<br />
==== ZFS list snapshot property alias ====<br />
<br />
Functionally identical to Solaris 11 extension <code>zfs list -t snap</code>.<br />
<br />
{| class="wikitable"<br />
|-<br />
|'''illumos'''<br />
|not yet<br />
|-<br />
|'''FreeBSD'''<br />
|[http://svnweb.freebsd.org/changeset/base/256999 Oct 2013]<br />
|-<br />
|'''ZFS on Linux'''<br />
|[https://github.com/zfsonlinux/zfs/commit/cf81b00a73fe47fdb21586ac1cc179b734540973 Apr 2012]<br />
|-<br />
|'''OpenZFS on OS X'''<br />
|[https://github.com/openzfsonosx/zfs/commit/cf81b00a73fe47fdb21586ac1cc179b734540973 Apr 2012]<br />
|}<br />
<br />
==== ZFS snapshot alias ====<br />
<br />
Functionally identical to Solaris 11 extension <code>zfs snap</code>.<br />
<br />
{| class="wikitable"<br />
|-<br />
|'''illumos'''<br />
|not yet<br />
|-<br />
|'''FreeBSD'''<br />
|[http://svnweb.freebsd.org/changeset/base/256999 Oct 2013]<br />
|-<br />
|'''ZFS on Linux'''<br />
|[https://github.com/zfsonlinux/zfs/commit/10b75496bb0cb7a7b8146c263164adc37f1d176a Apr 2012]<br />
|-<br />
|'''OpenZFS on OS X'''<br />
|[https://github.com/openzfsonosx/zfs/commit/10b75496bb0cb7a7b8146c263164adc37f1d176a Apr 2012]<br />
|}<br />
<br />
==== <tt>zfs send</tt> Progress Reporting ====<br />
<br />
OpenZFS introduces a <tt>-v</tt> option to <tt>zfs send</tt> which reports per-second information on how much data has been sent, how long it has taken, and how much data remains to be sent.<br />
<br />
{| class="wikitable"<br />
|-<br />
|'''illumos'''<br />
|[https://github.com/illumos/illumos-gate/commit/4e3c9f4489a18514e5e8caeb91d4e6db07c98415 May 2012]<br />
|-<br />
|'''FreeBSD'''<br />
|[https://github.com/freebsd/freebsd/commit/046ff8962602e8d65b6b3fae48573513ab7e433f May 2012]<br />
|-<br />
|'''ZFS on Linux'''<br />
|[https://github.com/zfsonlinux/zfs/commit/37abac6d559a1da8ab8e5379442f491b73998f6a Sept 2012]<br />
|-<br />
|'''OpenZFS on OS X'''<br />
|[https://github.com/openzfsonosx/zfs/commit/37abac6d559a1da8ab8e5379442f491b73998f6a Sept 2012]<br />
|}<br />
<br />
==== Arbitrary Snapshot Arguments to <tt>zfs snapshot</tt> ====<br />
<br />
{| class="wikitable"<br />
|-<br />
|'''illumos'''<br />
|[https://github.com/illumos/illumos-gate/commit/4445fffbbb1ea25fd0e9ea68b9380dd7a6709025 June 2012]<br />
|-<br />
|'''FreeBSD'''<br />
|[https://github.com/freebsd/freebsd/commit/f1985e5cd725ff1816cd4afbdee2d95b661883f0 March 2013]<br />
|-<br />
|'''ZFS on Linux'''<br />
|[https://github.com/zfsonlinux/zfs/commit/6f1ffb06655008c9b519108ed29fbf03acd6e5de August 2013]<br />
|-<br />
|'''OpenZFS on OS X'''<br />
|[https://github.com/openzfsonosx/zfs/commit/6f1ffb06655008c9b519108ed29fbf03acd6e5de September 2013]<br />
|}<br />
<br />
== Performance ==<br />
<br />
These are significant performance improvements, often requiring substantial restructuring of the source code.<br />
<br />
''Listed in chronological order (oldest first).''<br />
<br />
==== SA based xattrs ====<br />
<br />
Improves performance of linux-style (short) xattrs by storing them in the dnode_phys_t's bonus block. (Not to be confused with [http://en.wikipedia.org/wiki/Extended_file_attributes#Solaris Solaris-style Extended Attributes] which are full-fledged files or "forks", like NTFS streams. This work could be extended to also improve the performance on illumos of small Extended Attributes whose permissions are the same as the containing file.)<br />
<br />
Requires a disk format change and is off by default until Filesystem (ZPL) Feature Flags are implemented (not to be confused with [[Features#Feature_Flags_Overview | zpool Feature Flags]]).<br />
<br />
{| class="wikitable"<br />
|-<br />
|'''illumos'''<br />
|not yet (needs additional functionality)<br />
|-<br />
|'''FreeBSD'''<br />
|??<br />
|-<br />
|'''ZFS on Linux'''<br />
|[https://github.com/zfsonlinux/zfs/commit/82a37189aac955c81a59a5ecc3400475adb56355 Oct 2011]<br />
|-<br />
|'''OpenZFS on OS X'''<br />
|[https://github.com/openzfsonosx/zfs/commit/6a06ef26abc87c6ede9bec8246713dc94c98fa78 May 2015]<br />
|}<br />
<br />
Note that SA based xattrs are [https://github.com/zfsonlinux/zfs/commit/6a7c0ccca44ad02c476a111d8f7911fc8b12fff7 no longer used on symlinks] as of Aug 2013 until an issue is resolved.<br />
<br />
==== Use the slog even with logbias=throughput ====<br />
<br />
{| class="wikitable"<br />
|-<br />
|'''illumos'''<br />
|??<br />
|-<br />
|'''FreeBSD'''<br />
|??<br />
|-<br />
|'''ZFS on Linux'''<br />
|[https://github.com/zfsonlinux/zfs/commit/5d7a86d114c2706a8d14d94b71f81ad5cdf066c5 Oct 2011]<br />
|-<br />
|'''OpenZFS on OS X'''<br />
|[https://github.com/openzfsonosx/zfs/commit/5d7a86d114c2706a8d14d94b71f81ad5cdf066c5 Oct 2011]<br />
|}<br />
<br />
==== Asynchronous Filesystem and Volume Destruction ====<br />
<br />
Destroying a filesystem requires traversing all of its data in order to return its used blocks to the pool's free list. Before this feature the filesystem was not fully removed until all blocks had been reclaimed. If the destroy operation was interrupted by a reboot or power outage the next attempt to import the pool (probably during boot) would need to complete the destroy operation synchronously, possibly delaying a boot for long periods of time.<br />
<br />
With asynchronous destruction the filesystem's data is immediately moved to a "to be freed" list, allowing the destroy operation to complete without traversing any of the filesystem's data. A background process reclaims blocks from this "to be freed" list and is capable of resuming this process after reboots without slowing the pool import process.<br />
<br />
The new freeing algorithm also has a significant performance improvement when destroying clones. The old algorithm took time proportional to the number of blocks ''referenced'' by the clone, even if most of those blocks could not be reclaimed because they were still referenced by the clone's origin. The new algorithm only takes time proportional to the number of blocks unique to the clone.<br />
<br />
See this [http://blog.delphix.com/matt/2012/07/11/performance-of-zfs-destroy/ blog post] for more detailed performance analysis.<br />
<br />
Note: The <tt>async_destroy</tt> feature flag must be enabled to take advantage of this.<br />
<br />
{| class="wikitable"<br />
|-<br />
|'''illumos'''<br />
|[https://github.com/illumos/illumos-gate/commit/ad135b5d644628e791c3188a6ecbd9c257961ef8 May 2012]<br />
|-<br />
|'''FreeBSD'''<br />
|[https://github.com/freebsd/freebsd/commit/cc61ab2f133566dca51970d44cc49a4355039b5d June 2012]<br />
|-<br />
|'''ZFS on Linux'''<br />
|[https://github.com/zfsonlinux/zfs/commit/9ae529ec5dbdc828ff8326beae58062971d74b2e Jan 2013]<br />
|-<br />
|'''OpenZFS on OS X'''<br />
|[https://github.com/openzfsonosx/zfs/commit/9ae529ec5dbdc828ff8326beae58062971d74b2e Jan 2013]<br />
|}<br />
<br />
==== Reduce Number of Empty bpobjs ====<br />
<br />
Every time OpenZFS takes a snapshot it creates on-disk block pointer objects (bpobj's) to track blocks associated with that snapshot. In common use cases most of these bpobj's are empty, but the number of bpobjs per-snapshot is proportional to the number of snapshots already taken of the same filesystem or volume. When a single filesystem or volume has many (tens of thousands) snapshots these unecessary empty bpobjs can waste space and cause performance problems. OpenZFS waits to create each bpobjs until the first entry is added to it, thus eliminating the empty bpobjs.<br />
<br />
Note: The <tt>empty_bpobj</tt> feature flag must be enabled to take advantage of this.<br />
<br />
{| class="wikitable"<br />
|-<br />
|'''illumos'''<br />
|[https://github.com/illumos/illumos-gate/commit/f17457368189aa911f774c38c1f21875a568bdca Aug 2012]<br />
|-<br />
|'''FreeBSD'''<br />
|[https://github.com/freebsd/freebsd/commit/d9fa2f486ee98b2557e1d5ad5f1af418c663cfc8 Aug 2012]<br />
|-<br />
|'''ZFS on Linux'''<br />
|[https://github.com/zfsonlinux/zfs/commit/753c38392ddff9d3cf140bb4d28f3bfba52c92d2 Dec 2012]<br />
|-<br />
|'''OpenZFS on OS X'''<br />
|[https://github.com/openzfsonosx/zfs/commit/753c38392ddff9d3cf140bb4d28f3bfba52c92d2 Dec 2012]<br />
|}<br />
<br />
==== Single Copy ARC ====<br />
<br />
OpenZFS caches disk blocks in-memory in the adaptive replacement cache (ARC). Originally when the same disk block was accessed from different clones it was cached multiple times (one for each clone accessing the block) in case a clone planned to modify the block. With these changes OpenZFS caches at most one copy of every block unless a clone is actually modifying the block.<br />
<br />
{| class="wikitable"<br />
|-<br />
|'''illumos'''<br />
|[https://github.com/illumos/illumos-gate/commit/9253d63df408bb48584e0b1abfcc24ef2472382e Sep 2012]<br />
|-<br />
|'''FreeBSD'''<br />
|[https://github.com/freebsd/freebsd/commit/8e1fdec2c76a948b16ebf8e4abe2cb73a60d3477 Nov 2012]<br />
|-<br />
|'''ZFS on Linux'''<br />
|[https://github.com/zfsonlinux/zfs/commit/1eb5bfa3dcdaecb19543d9df13131374a7a42947 Dec 2012]<br />
|-<br />
|'''OpenZFS on OS X'''<br />
|[https://github.com/openzfsonosx/zfs/commit/1eb5bfa3dcdaecb19543d9df13131374a7a42947 Dec 2012]<br />
|}<br />
<br />
==== TRIM Support ====<br />
<br />
TRIM support provides the ability to pass deletes / frees through to underlying vdevs that help to ensure devices such as SSD's, which rely on receiving TRIM / UNMAP requests for sectors which are no longer needed, maintain optimal performance.<br />
<br />
The current FreeBSD implementation builds a map of regions that were freed. On every write the<br />
code consults the map and removes ranges that were freed before, but are now overwritten.<br />
<br />
Freed blocks are not TRIMed immediately, there is a low priority thread that TRIMs ranges when the time comes.<br />
<br />
Support for TRIM has been demonstrated to significantly improved the general performance of SSD in the field, eliminating the need for regular secure erase cycles on busy hosts.<br />
<br />
An alternative method, which is arguably better, and works by tracking the metaslab allocator is also in progress and can be found here:<br />
[http://cr.illumos.org/~webrev/skiselkov/zfs_unmap/ ZFS TRIM Support for illumos]<br />
<br />
There is [https://github.com/zfsonlinux/zfs/pull/1016 a pull request for ZFS On Linux] which implements FreeBSD's (Sep 2012) ZFS TRIM support.<br />
<br />
{| class="wikitable"<br />
|-<br />
|'''illumos'''<br />
|not yet ported<br />
|-<br />
|'''FreeBSD'''<br />
|[http://svnweb.freebsd.org/base?view=revision&sortby=file&revision=240868 Sep 2012]<br />
|-<br />
|'''ZFS on Linux'''<br />
|not yet ported<br />
|-<br />
|'''OpenZFS on OS X'''<br />
|not yet ported<br />
|}<br />
<br />
==== FASTWRITE Algorithm ====<br />
<br />
Improves synchronous IO performance.<br />
<br />
{| class="wikitable"<br />
|-<br />
|'''illumos'''<br />
|not yet ported<br />
|-<br />
|'''FreeBSD'''<br />
|not yet ported<br />
|-<br />
|'''ZFS on Linux'''<br />
|[https://github.com/zfsonlinux/zfs/commit/920dd524fb2997225d4b1ac180bcbc14b045fda6 Oct 2012]<br />
|-<br />
|'''OpenZFS on OS X'''<br />
|[https://github.com/openzfsonosx/zfs/commit/920dd524fb2997225d4b1ac180bcbc14b045fda6 Oct 2012]<br />
|}<br />
<br />
Note that a [https://github.com/ryao/zfs/commit/858822a04b4563657b2267131e90d9687d67e31b locking enhancement] is being reviewed.<br />
<br />
==== Block Freeing Performance Improvments ====<br />
<br />
Performance analysis of OpenZFS revealed that the algorithms used when freeing blocks could cause significant performance problems when freeing a large amount of blocks in a single transaction or when dealing with fragmented pools. Several performance improvements were made in this area.<br />
<br />
{| class="wikitable"<br />
|-<br />
|'''illumos'''<br />
|[https://github.com/illumos/illumos-gate/commit/01f55e48fb4d524eaf70687728aa51b7762e2e97 Nov 2012]<br />
|[https://github.com/illumos/illumos-gate/commit/16a4a8074274d2d7cc408589cf6359f4a378c861 Feb 2013]<br />
|[https://github.com/illumos/illumos-gate/commit/9eb57f7f3fbb970d4b9b89dcd5ecf543fe2414d5 Feb 2013]<br />
|-<br />
|'''FreeBSD'''<br />
|[https://github.com/freebsd/freebsd/commit/5d9b3f284b13ac492326e05f6ba4c00e98adf05c Nov 2012]<br />
|[https://github.com/freebsd/freebsd/commit/18e9a0422b52091035dae9d69bde9dd571a8ff7e Feb 2013]<br />
|[https://github.com/freebsd/freebsd/commit/18e9a0422b52091035dae9d69bde9dd571a8ff7e Feb 2013]<br />
|-<br />
|'''ZFS on Linux'''<br />
|[https://github.com/zfsonlinux/zfs/commit/55d85d5a8c45c4559a4a0e675c37b0c3afb19c2f May 2013]<br />
|[https://github.com/zfsonlinux/zfs/commit/e51be06697762215dc3b679f8668987034a5a048 June 2013]<br />
|[https://github.com/zfsonlinux/zfs/commit/c2e42f9d53bec422abb71efade2c004383345038 Oct 2013]<br />
|-<br />
|'''OpenZFS on OS X'''<br />
|[https://github.com/openzfsonosx/zfs/commit/55d85d5a8c45c4559a4a0e675c37b0c3afb19c2f May 2013]<br />
|[https://github.com/openzfsonosx/zfs/commit/e51be06697762215dc3b679f8668987034a5a048 June 2013]<br />
|[https://github.com/openzfsonosx/zfs/commit/c2e42f9d53bec422abb71efade2c004383345038 Oct 2013]<br />
|}<br />
<br />
==== nop-write ====<br />
<br />
ZFS supports end-to-end checksumming of every data block. When a cryptographically secure checksum is being used OpenZFS will compare the checksums of incoming writes to checksum of the existing on-disk data and avoid issuing any write i/o for data that has not changed. This can help performance and snapshot space usage in situations were the same files are regularly overwritten with almost-identical data (e.g. regular full-backups of large random-access files).<br />
<br />
{| class="wikitable"<br />
|-<br />
|'''illumos'''<br />
|[https://github.com/illumos/illumos-gate/commit/80901aea8e78a2c20751f61f01bebd1d5b5c2ba5 Nov 2012]<br />
|-<br />
|'''FreeBSD'''<br />
|[https://github.com/freebsd/freebsd/commit/3a0bfecf052237768517963f169d0797e2978f59 Nov 2012]<br />
|-<br />
|'''ZFS on Linux'''<br />
|[https://github.com/zfsonlinux/zfs/commit/03c6040bee6c87a9413b7da41d9f580f79a8ab62 Nov 2013]<br />
|-<br />
|'''OpenZFS on OS X'''<br />
|not yet<br />
|}<br />
<br />
==== lz4 compression ====<br />
<br />
OpenZFS supports on-the-fly compression of all user data with a variety of compression algorithm. This feature adds support for the lz4 compression algorithm. lz4 is usually faster and compresses data better than lzjb, the old default OpenZFS compression algorithm.<br />
<br />
Note: The <tt>lz4_compress</tt> feature flag must be enabled to take advantage of this.<br />
<br />
{| class="wikitable"<br />
|-<br />
|'''illumos'''<br />
|[https://github.com/illumos/illumos-gate/commit/a6f561b4aee75d0d028e7b36b151c8ed8a86bc76 Jan 2013]<br />
|-<br />
|'''FreeBSD'''<br />
|[https://github.com/freebsd/freebsd/commit/c6d9dc1ad2d2e36220845b84a2d180bd97354797 Feb 2013]<br />
|-<br />
|'''ZFS on Linux'''<br />
|[https://github.com/zfsonlinux/zfs/commit/9759c60f1a1503e48dc5c45a209c3edd5758319f Jan 2013]<br />
|-<br />
|'''OpenZFS on OS X'''<br />
|[https://github.com/openzfsonosx/zfs/commit/9759c60f1a1503e48dc5c45a209c3edd5758319f Jan 2013]<br />
|}<br />
<br />
==== synctask rewrite ====<br />
<br />
{| class="wikitable"<br />
|-<br />
|'''illumos'''<br />
|[https://github.com/illumos/illumos-gate/commit/3b2aab18808792cbd248a12f1edf139b89833c13 Feb 2013]<br />
|-<br />
|'''FreeBSD'''<br />
|[https://github.com/freebsd/freebsd/commit/f1985e5cd725ff1816cd4afbdee2d95b661883f0 March 2013]<br />
|-<br />
|'''ZFS on Linux'''<br />
|[https://github.com/zfsonlinux/zfs/commit/13fe019870c8779bf2f5b3ff731b512cf89133ef Sept 2013]<br />
|-<br />
|'''OpenZFS on OS X'''<br />
|[https://github.com/openzfsonosx/zfs/commit/13fe019870c8779bf2f5b3ff731b512cf89133ef Sept 2013]<br />
|}<br />
<br />
==== l2arc compression ====<br />
<br />
{| class="wikitable"<br />
|-<br />
|'''illumos'''<br />
|[https://github.com/illumos/illumos-gate/commit/aad02571bc59671aa3103bb070ae365f531b0b62 Jun 2013]<br />
|-<br />
|'''FreeBSD'''<br />
|[https://github.com/freebsd/freebsd/commit/b20363fe596a7e3a55d5b62f4d3fdb482c65c47a Jun 2013]<br />
|-<br />
|'''ZFS on Linux'''<br />
|[https://github.com/zfsonlinux/zfs/commit/3a17a7a99a1a6332d0999f9be68e2b8dc3933de1 Aug 2013]<br />
|-<br />
|'''OpenZFS on OS X'''<br />
|[https://github.com/openzfsonosx/zfs/commit/3a17a7a99a1a6332d0999f9be68e2b8dc3933de1 Aug 2013]<br />
|}<br />
<br />
==== ARC Shouldn't Cache Freed Blocks ====<br />
<br />
Originally cached blocks in the ARC remained cached until they were evicted due to memory pressure, even if the underlying disk block was freed. In some workloads these freed blocks were so frequently accessed before they were freed that the ARC continued to cache them while evicting blocks which had not been freed yet. Since freed blocks could never be accessed again continuing to cache them was unnecessary. In OpenZFS ARC blocks are evicted immediately when their underlying data blocks are freed.<br />
<br />
{| class="wikitable"<br />
|-<br />
|'''illumos'''<br />
|[https://github.com/illumos/illumos-gate/commit/6e6d5868f52089b9026785bd90257a3d3f6e5ee2 Jun 2013]<br />
|-<br />
|'''FreeBSD'''<br />
|[https://github.com/freebsd/freebsd/commit/13d822743426263ee50bcf047ab41a1e386156a8 Jun 2013]<br />
|-<br />
|'''ZFS on Linux'''<br />
|[https://github.com/zfsonlinux/zfs/commit/df4474f92d0b1b8d54e1914fdd56be2b75f1ff5e Jun 2013]<br />
|-<br />
|'''OpenZFS on OS X'''<br />
|[https://github.com/openzfsonosx/zfs/commit/df4474f92d0b1b8d54e1914fdd56be2b75f1ff5e Jun 2013]<br />
|}<br />
<br />
==== Improve N-way mirror read performance ====<br />
<br />
Queues read requests to least busy leaf vdev in mirrors.<br />
<br />
In addition to the vdev load biasing first implemented by ZFS on Linux in July 2013, the FreeBSD October 2013 version added I/O locality and device rotational information to further enhance the performance.<br />
<br />
{| class="wikitable"<br />
!OS<br />
!Load<br />
!Load + I/O Locality & Rotational Information<br />
|-<br />
|'''illumos'''<br />
|not yet ported<br />
|not yet ported<br />
|-<br />
|'''FreeBSD'''<br />
|N/A<br />
|[http://svnweb.freebsd.org/changeset/base/256956 23rd October 2013]<br />
|-<br />
|'''ZFS on Linux'''<br />
|[https://github.com/zfsonlinux/zfs/commit/556011dbec2d10579819078559a77630fc559112 Jul 2013]<br />
|not yet ported<br />
|-<br />
|'''OpenZFS on OS X'''<br />
|[https://github.com/openzfsonosx/zfs/commit/556011dbec2d10579819078559a77630fc559112 Jul 2013]<br />
|not yet ported<br />
|}<br />
<br />
==== Smoother Write Throttle ====<br />
<br />
The write throttle (dsl_pool_tempreserve_space() and txg_constrain_throughput()) is rewritten to produce much more consistent delays when under constant load. The new write throttle is based on the amount of dirty data, rather than guesses about future performance of the system. When there is a lot of dirty data, each transaction (e.g. write() syscall) will be delayed by the same small amount. This eliminates the "brick wall of wait" that the old write throttle could hit, causing all transactions to wait several seconds until the next txg opens. One of the keys to the new write throttle is decrementing the amount of dirty data as i/o completes, rather than at the end of spa_sync(). Note that the write throttle is only applied once the i/o scheduler is issuing the maximum number of outstanding async writes. See the block comments in dsl_pool.c and above dmu_tx_delay() for more details.<br />
<br />
The ZFS i/o scheduler (vdev_queue.c) now divides i/os into 5 classes: sync read, sync write, async read, async write, and scrub/resilver. The scheduler issues a number of concurrent i/os from each class to the device. Once a class has been selected, an i/o is selected from this class using either an elevator algorithem (async, scrub classes) or FIFO (sync classes). The number of concurrent async write i/os is tuned dynamically based on i/o load, to achieve good sync i/o latency when there is not a high load of writes, and good write throughput when there is. See the block comment in vdev_queue.c for more details.<br />
<br />
{| class="wikitable"<br />
|-<br />
|'''illumos'''<br />
|[https://github.com/illumos/illumos-gate/commit/69962b5647e4a8b9b14998733b765925381b727e Aug 2013]<br />
|-<br />
|'''FreeBSD'''<br />
|[http://svnweb.freebsd.org/changeset/base/258632 Nov 2013]<br />
|-<br />
|'''ZFS on Linux'''<br />
|[https://github.com/zfsonlinux/zfs/commit/e8b96c6007bf97cdf34869c1ffbd0ce753873a3d Dec 2013]<br />
|-<br />
|'''OpenZFS on OS X'''<br />
|not yet<br />
|}<br />
<br />
==== Disable LBA Weighting on files and SSDs ====<br />
<br />
On rotational media, the bandwidth of the outermost tracks is approximately twice that of innermost tracks. A heuristic called LBA weighting was put into the metaslab allocator to account for this by favoring the outermost tracks over the innermost tracks. This has the consequence that metaslabs tend to fill at different rates depending on their location. This causes the metaslabs corresponding to outermost tracks to enter the best-fit allocation strategy.<br />
<br />
The best-fit allocation strategy is more CPU intensive than the typical first-fit because it looks for the smallest region of free space able to fulfill an allocation rather than picking the next avaliable one. The CPU time is fairly excessive and is known to harm IOPS, but it exists to minimize use of gang blocks as a metaslab becomes excessively full. Gaining a bandwidth improvement from LBA weighting at the expense of an earlier switch to the best-fit allocation behavior on the weighted metaslabs is reasonable on rotational disks. However, it makes no sense on files, where the underlying filesystem is free to place things however way it sees fit, and on SSDs, where there is no bandwidth difference based on LBA.<br />
<br />
With this change, we will more evenly fill metaslabs on pools whose vdevs consist of only files and SSDs, which will minimize the metaslabs that enter the best fit allocation strategy when a pool is mostly full, but still below 96% full. This is particularly important on SSDs, where drops in IOPS are more pronounced.<br />
<br />
{| class="wikitable"<br />
|-<br />
|'''illumos'''<br />
|not yet<br />
|-<br />
|'''FreeBSD'''<br />
|not yet<br />
|-<br />
|'''ZFS on Linux'''<br />
|[https://github.com/zfsonlinux/zfs/commit/fb40095f5f0853946f8150481ca22602d1334dfe Aug 2015]<br />
|-<br />
|'''OpenZFS on OS X'''<br />
|not yet<br />
|}<br />
<br />
== Dataset Properties ==<br />
<br />
These are new filesystem, volume, and snapshot properties which can be accessed with the <tt>zfs(1)</tt> command's <tt>get</tt> subcommand. See the <tt>zfs(1)</tt> manpage for your distribution for more details on each of these properties.<br />
<br />
{| class="wikitable"<br />
!Property<br />
!Description<br />
!illumos<br />
!FreeBSD<br />
!ZFS on Linux<br />
!OpenZFS on OS X<br />
|-<br />
|<tt>refcompressratio</tt><br />
|The compression ratio acheived for all data referenced by (but not necessarily unique to) a snapshot, filesystem, or volume, expressed as a multiplier.<br />
|[https://github.com/illumos/illumos-gate/commit/187d6ac08adc31ea6868bde0cfbbb288826254e8 Jun 2011]<br />
|[https://github.com/freebsd/freebsd/commit/333e34b938a2b5e7b036e02b36408880b415109c Jun 2011]<br />
|[https://github.com/zfsonlinux/zfs/commit/77999e804fff35782ab4b578d2cecf064c54a841 Aug 2012]<br />
|[https://github.com/openzfsonosx/zfs/commit/77999e804fff35782ab4b578d2cecf064c54a841 Aug 2012]<br />
|-<br />
|<tt>clones</tt><br />
|For snapshots, this property is a comma-separated list of filesystems or volumes which are clones of this snapshot.<br />
|[https://github.com/illumos/illumos-gate/commit/e5351341b58845eee9d722bd71543d5a7c26b6cc Nov 2011]<br />
|[https://github.com/freebsd/freebsd/commit/73cab7197174153a718dedc97ff344341bcf6098 Nov 2011]<br />
|[https://github.com/zfsonlinux/zfs/commit/330d06f90d143b41b276796526a66a1c1fff046d Jul 2012]<br />
|[https://github.com/openzfsonosx/zfs/commit/330d06f90d143b41b276796526a66a1c1fff046d Jul 2012]<br />
|-<br />
|<tt>written</tt><br />
|The amount of referenced space written to this dataset since the previous snapshot.<br />
|[https://github.com/illumos/illumos-gate/commit/e5351341b58845eee9d722bd71543d5a7c26b6cc Nov 2011]<br />
|[https://github.com/freebsd/freebsd/commit/73cab7197174153a718dedc97ff344341bcf6098 Nov 2011]<br />
|[https://github.com/zfsonlinux/zfs/commit/330d06f90d143b41b276796526a66a1c1fff046d Jul 2012]<br />
|[https://github.com/openzfsonosx/zfs/commit/330d06f90d143b41b276796526a66a1c1fff046d Jul 2012]<br />
|-<br />
|<tt>written@''<snap>''</tt><br />
|The amount of referenced space written to this dataset since the specified snapshot. This is the space referenced by this dataset, but not referenced by the specified snapshot.<br />
|[https://github.com/illumos/illumos-gate/commit/e5351341b58845eee9d722bd71543d5a7c26b6cc Nov 2011]<br />
|[https://github.com/freebsd/freebsd/commit/73cab7197174153a718dedc97ff344341bcf6098 Nov 2011]<br />
|[https://github.com/zfsonlinux/zfs/commit/330d06f90d143b41b276796526a66a1c1fff046d Jul 2012]<br />
|[https://github.com/openzfsonosx/zfs/commit/330d06f90d143b41b276796526a66a1c1fff046d Jul 2012]<br />
|-<br />
|<tt>logicalused</tt>, <tt>logicalreferenced</tt><br />
|The amount of space used or referenced, before taking into account compression.<br />
|[https://github.com/illumos/illumos-gate/commit/77372cb0f35e8d3615ca2e16044f033397e88e21 Feb 2013]<br />
|[https://github.com/freebsd/freebsd/commit/2bed8f5691b7572d6f31bfc68e9f762a938af863 Mar 2013]<br />
|[https://github.com/zfsonlinux/zfs/commit/24a64651b4163d47b1187821152d762e9a263d5a Oct 2013]<br />
|not yet<br />
|-<br />
|}</div>Lundmanhttps://openzfs.org/w/index.php?title=Features&diff=2030Features2015-12-16T00:26:59Z<p>Lundman: /* SA based xattrs */ Updating OS X</p>
<hr />
<div>This page describes some of the more important features and performance improvements that are part of OpenZFS.<br />
<br />
Help would be appreciated in porting features between platforms whose status is "not yet".<br />
<br />
== Feature Flags ==<br />
<br />
See the [[Feature_Flags|Feature Flags]] wiki page.<br />
<br />
== libzfs_core ==<br />
<br />
See this [http://blog.delphix.com/matt/2012/01/17/the-future-of-libzfs/ blog post (Jan 2012)] and associated [http://blog.delphix.com/matt/files/2012/01/The_Future_of_LibZFS.pdf slides] and [http://www.youtube.com/watch?feature=player_embedded&list=PL1A94C8EECCAF7340&v=iJ0S91ygErE video] for more details.<br />
<br />
First introduced in:<br />
{| class="wikitable"<br />
|-<br />
|'''illumos'''<br />
|[https://github.com/illumos/illumos-gate/commit/4445fffbbb1ea25fd0e9ea68b9380dd7a6709025 June 2012]<br />
|-<br />
|'''FreeBSD'''<br />
|[https://github.com/freebsd/freebsd/commit/f1985e5cd725ff1816cd4afbdee2d95b661883f0 March 2013]<br />
|-<br />
|'''ZFS on Linux'''<br />
|[https://github.com/zfsonlinux/zfs/commit/6f1ffb06655008c9b519108ed29fbf03acd6e5de August 2013]<br />
|-<br />
|'''OpenZFS on OS X'''<br />
|[https://github.com/openzfsonosx/zfs/commit/50b0b2d9ea604d29ed729be8fa61bb77ae3ff4e9 October 2013]<br />
|}<br />
<br />
== CLI Usability ==<br />
<br />
These are improvements to the command line interface. While the end result is a generally more friendly user interface, getting the desired behavior often required modifications to the core of ZFS.<br />
<br />
''Listed in chronological order (oldest first).''<br />
<br />
==== Pool Comment ====<br />
<br />
OpenZFS has a per-pool comment property which can be set with the <tt>zpool set</tt> command and can be read even if the pool is not imported, so it is accessible even if pool import fails.<br />
<br />
{| class="wikitable"<br />
|-<br />
|'''illumos'''<br />
|[https://github.com/illumos/illumos-gate/commit/8704186e373c9ed74daa395ff3f7fd745396df9e Nov 2011]<br />
|-<br />
|'''FreeBSD'''<br />
|[https://github.com/freebsd/freebsd/commit/73cab7197174153a718dedc97ff344341bcf6098 Nov 2011]<br />
|-<br />
|'''ZFS on Linux'''<br />
|[https://github.com/zfsonlinux/zfs/commit/d96eb2b1538db13ee7a716ec0e1162f5735edc12 Aug 2012]<br />
|-<br />
|'''OpenZFS on OS X'''<br />
|[https://github.com/openzfsonosx/zfs/commit/d96eb2b1538db13ee7a716ec0e1162f5735edc12 Aug 2012]<br />
|}<br />
<br />
==== Size Estimates for <tt>zfs send</tt> and <tt>zfs destroy</tt> ====<br />
<br />
This feature enhances OpenZFS's internal space accounting information. This new accounting information is used to provide a <tt>-n</tt> (dry-run) option for <tt>zfs send</tt> which can instantly calculate the amount of send stream data a specific <tt>zfs send</tt> command would generate. It is also used for a <tt>-n</tt> option for <tt>zfs destroy</tt> which can instantly calculate the amount of space that would be reclaimed by a specific <tt>zfs destroy</tt> command.<br />
<br />
{| class="wikitable"<br />
|-<br />
|'''illumos'''<br />
|[https://github.com/illumos/illumos-gate/commit/e5351341b58845eee9d722bd71543d5a7c26b6cc Nov 2011]<br />
|-<br />
|'''FreeBSD'''<br />
|[https://github.com/freebsd/freebsd/commit/73cab7197174153a718dedc97ff344341bcf6098 Nov 2011]<br />
|-<br />
|'''ZFS on Linux'''<br />
|[https://github.com/zfsonlinux/zfs/commit/330d06f90d143b41b276796526a66a1c1fff046d Jul 2012]<br />
|-<br />
|'''OpenZFS on OS X'''<br />
|[https://github.com/openzfsonosx/zfs/commit/330d06f90d143b41b276796526a66a1c1fff046d Jul 2012]<br />
|}<br />
<br />
==== vdev Information in <tt>zpool list</tt> ====<br />
<br />
OpenZFS adds a <tt>-v</tt> option to the <tt>zpool list</tt> command which shows detailed sizing information about the vdevs in the pool:<br />
<br />
$ zpool list -v<br />
NAME SIZE ALLOC FREE EXPANDSZ CAP DEDUP HEALTH ALTROOT<br />
dcenter 5.24T 3.85T 1.39T - 73% 1.00x ONLINE -<br />
mirror 556G 469G 86.7G -<br />
c2t1d0 - - - -<br />
c2t0d0 - - - -<br />
mirror 556G 493G 63.0G -<br />
c2t3d0 - - - -<br />
c2t2d0 - - - -<br />
mirror 556G 493G 62.7G -<br />
c2t5d0 - - - -<br />
c2t4d0 - - - -<br />
mirror 556G 494G 62.5G -<br />
c2t8d0 - - - -<br />
c2t6d0 - - - -<br />
mirror 556G 494G 62.2G -<br />
c2t10d0 - - - -<br />
c2t9d0 - - - -<br />
mirror 556G 494G 61.9G -<br />
c2t12d0 - - - -<br />
c2t11d0 - - - -<br />
mirror 1016G 507G 509G -<br />
c1t1d0 - - - -<br />
c1t5d0 - - - -<br />
mirror 1016G 496G 520G -<br />
c1t3d0 - - - -<br />
c1t4d0 - - - -<br />
<br />
{| class="wikitable"<br />
|-<br />
|'''illumos'''<br />
|[https://github.com/illumos/illumos-gate/commit/4263d13f00c9691fa14620eff82abef795be0693 Jan 2012]<br />
|-<br />
|'''FreeBSD'''<br />
|[https://github.com/freebsd/freebsd/commit/38ef930079cbb1df5de9df3c1064426dba3976b1 May 2012]<br />
|-<br />
|'''ZFS on Linux'''<br />
|[https://github.com/zfsonlinux/zfs/commit/1bd201e70d57464fd26bf9089ea4b44fd49e4f2d Sept 2012]<br />
|-<br />
|'''OpenZFS on OS X'''<br />
|[https://github.com/openzfsonosx/zfs/commit/1bd201e70d57464fd26bf9089ea4b44fd49e4f2d Sept 2012]<br />
|}<br />
<br />
==== ZFS list snapshot property alias ====<br />
<br />
Functionally identical to Solaris 11 extension <code>zfs list -t snap</code>.<br />
<br />
{| class="wikitable"<br />
|-<br />
|'''illumos'''<br />
|not yet<br />
|-<br />
|'''FreeBSD'''<br />
|[http://svnweb.freebsd.org/changeset/base/256999 Oct 2013]<br />
|-<br />
|'''ZFS on Linux'''<br />
|[https://github.com/zfsonlinux/zfs/commit/cf81b00a73fe47fdb21586ac1cc179b734540973 Apr 2012]<br />
|-<br />
|'''OpenZFS on OS X'''<br />
|[https://github.com/openzfsonosx/zfs/commit/cf81b00a73fe47fdb21586ac1cc179b734540973 Apr 2012]<br />
|}<br />
<br />
==== ZFS snapshot alias ====<br />
<br />
Functionally identical to Solaris 11 extension <code>zfs snap</code>.<br />
<br />
{| class="wikitable"<br />
|-<br />
|'''illumos'''<br />
|not yet<br />
|-<br />
|'''FreeBSD'''<br />
|[http://svnweb.freebsd.org/changeset/base/256999 Oct 2013]<br />
|-<br />
|'''ZFS on Linux'''<br />
|[https://github.com/zfsonlinux/zfs/commit/10b75496bb0cb7a7b8146c263164adc37f1d176a Apr 2012]<br />
|-<br />
|'''OpenZFS on OS X'''<br />
|[https://github.com/openzfsonosx/zfs/commit/10b75496bb0cb7a7b8146c263164adc37f1d176a Apr 2012]<br />
|}<br />
<br />
==== <tt>zfs send</tt> Progress Reporting ====<br />
<br />
OpenZFS introduces a <tt>-v</tt> option to <tt>zfs send</tt> which reports per-second information on how much data has been sent, how long it has taken, and how much data remains to be sent.<br />
<br />
{| class="wikitable"<br />
|-<br />
|'''illumos'''<br />
|[https://github.com/illumos/illumos-gate/commit/4e3c9f4489a18514e5e8caeb91d4e6db07c98415 May 2012]<br />
|-<br />
|'''FreeBSD'''<br />
|[https://github.com/freebsd/freebsd/commit/046ff8962602e8d65b6b3fae48573513ab7e433f May 2012]<br />
|-<br />
|'''ZFS on Linux'''<br />
|[https://github.com/zfsonlinux/zfs/commit/37abac6d559a1da8ab8e5379442f491b73998f6a Sept 2012]<br />
|-<br />
|'''OpenZFS on OS X'''<br />
|[https://github.com/openzfsonosx/zfs/commit/37abac6d559a1da8ab8e5379442f491b73998f6a Sept 2012]<br />
|}<br />
<br />
==== Arbitrary Snapshot Arguments to <tt>zfs snapshot</tt> ====<br />
<br />
{| class="wikitable"<br />
|-<br />
|'''illumos'''<br />
|[https://github.com/illumos/illumos-gate/commit/4445fffbbb1ea25fd0e9ea68b9380dd7a6709025 June 2012]<br />
|-<br />
|'''FreeBSD'''<br />
|[https://github.com/freebsd/freebsd/commit/f1985e5cd725ff1816cd4afbdee2d95b661883f0 March 2013]<br />
|-<br />
|'''ZFS on Linux'''<br />
|[https://github.com/zfsonlinux/zfs/commit/6f1ffb06655008c9b519108ed29fbf03acd6e5de August 2013]<br />
|-<br />
|'''OpenZFS on OS X'''<br />
|[https://github.com/openzfsonosx/zfs/commit/6f1ffb06655008c9b519108ed29fbf03acd6e5de September 2013]<br />
|}<br />
<br />
== Performance ==<br />
<br />
These are significant performance improvements, often requiring substantial restructuring of the source code.<br />
<br />
''Listed in chronological order (oldest first).''<br />
<br />
==== SA based xattrs ====<br />
<br />
Improves performance of linux-style (short) xattrs by storing them in the dnode_phys_t's bonus block. (Not to be confused with [http://en.wikipedia.org/wiki/Extended_file_attributes#Solaris Solaris-style Extended Attributes] which are full-fledged files or "forks", like NTFS streams. This work could be extended to also improve the performance on illumos of small Extended Attributes whose permissions are the same as the containing file.)<br />
<br />
Requires a disk format change and is off by default until Filesystem (ZPL) Feature Flags are implemented (not to be confused with [[Features#Feature_Flags_Overview | zpool Feature Flags]]).<br />
<br />
{| class="wikitable"<br />
|-<br />
|'''illumos'''<br />
|not yet (needs additional functionality)<br />
|-<br />
|'''FreeBSD'''<br />
|??<br />
|-<br />
|'''ZFS on Linux'''<br />
|[https://github.com/zfsonlinux/zfs/commit/82a37189aac955c81a59a5ecc3400475adb56355 Oct 2011]<br />
|-<br />
|'''OpenZFS on OS X'''<br />
|[https://github.com/openzfsonosx/zfs/commit/6a06ef26abc87c6ede9bec8246713dc94c98fa78 May 2015]<br />
|}<br />
<br />
Note that SA based xattrs are [https://github.com/zfsonlinux/zfs/commit/6a7c0ccca44ad02c476a111d8f7911fc8b12fff7 no longer used on symlinks] as of Aug 2013 until an issue is resolved.<br />
<br />
==== Use the slog even with logbias=throughput ====<br />
<br />
{| class="wikitable"<br />
|-<br />
|'''illumos'''<br />
|??<br />
|-<br />
|'''FreeBSD'''<br />
|??<br />
|-<br />
|'''ZFS on Linux'''<br />
|[https://github.com/zfsonlinux/zfs/commit/5d7a86d114c2706a8d14d94b71f81ad5cdf066c5 Oct 2011]<br />
|-<br />
|'''OpenZFS on OS X'''<br />
|[https://github.com/openzfsonosx/zfs/commit/5d7a86d114c2706a8d14d94b71f81ad5cdf066c5 Oct 2011]<br />
|}<br />
<br />
==== Asynchronous Filesystem and Volume Destruction ====<br />
<br />
Destroying a filesystem requires traversing all of its data in order to return its used blocks to the pool's free list. Before this feature the filesystem was not fully removed until all blocks had been reclaimed. If the destroy operation was interrupted by a reboot or power outage the next attempt to import the pool (probably during boot) would need to complete the destroy operation synchronously, possibly delaying a boot for long periods of time.<br />
<br />
With asynchronous destruction the filesystem's data is immediately moved to a "to be freed" list, allowing the destroy operation to complete without traversing any of the filesystem's data. A background process reclaims blocks from this "to be freed" list and is capable of resuming this process after reboots without slowing the pool import process.<br />
<br />
The new freeing algorithm also has a significant performance improvement when destroying clones. The old algorithm took time proportional to the number of blocks ''referenced'' by the clone, even if most of those blocks could not be reclaimed because they were still referenced by the clone's origin. The new algorithm only takes time proportional to the number of blocks unique to the clone.<br />
<br />
See this [http://blog.delphix.com/matt/2012/07/11/performance-of-zfs-destroy/ blog post] for more detailed performance analysis.<br />
<br />
Note: The <tt>async_destroy</tt> feature flag must be enabled to take advantage of this.<br />
<br />
{| class="wikitable"<br />
|-<br />
|'''illumos'''<br />
|[https://github.com/illumos/illumos-gate/commit/ad135b5d644628e791c3188a6ecbd9c257961ef8 May 2012]<br />
|-<br />
|'''FreeBSD'''<br />
|[https://github.com/freebsd/freebsd/commit/cc61ab2f133566dca51970d44cc49a4355039b5d June 2012]<br />
|-<br />
|'''ZFS on Linux'''<br />
|[https://github.com/zfsonlinux/zfs/commit/9ae529ec5dbdc828ff8326beae58062971d74b2e Jan 2013]<br />
|-<br />
|'''OpenZFS on OS X'''<br />
|[https://github.com/openzfsonosx/zfs/commit/9ae529ec5dbdc828ff8326beae58062971d74b2e Jan 2013]<br />
|}<br />
<br />
==== Reduce Number of Empty bpobjs ====<br />
<br />
Every time OpenZFS takes a snapshot it creates on-disk block pointer objects (bpobj's) to track blocks associated with that snapshot. In common use cases most of these bpobj's are empty, but the number of bpobjs per-snapshot is proportional to the number of snapshots already taken of the same filesystem or volume. When a single filesystem or volume has many (tens of thousands) snapshots these unecessary empty bpobjs can waste space and cause performance problems. OpenZFS waits to create each bpobjs until the first entry is added to it, thus eliminating the empty bpobjs.<br />
<br />
Note: The <tt>empty_bpobj</tt> feature flag must be enabled to take advantage of this.<br />
<br />
{| class="wikitable"<br />
|-<br />
|'''illumos'''<br />
|[https://github.com/illumos/illumos-gate/commit/f17457368189aa911f774c38c1f21875a568bdca Aug 2012]<br />
|-<br />
|'''FreeBSD'''<br />
|[https://github.com/freebsd/freebsd/commit/d9fa2f486ee98b2557e1d5ad5f1af418c663cfc8 Aug 2012]<br />
|-<br />
|'''ZFS on Linux'''<br />
|[https://github.com/zfsonlinux/zfs/commit/753c38392ddff9d3cf140bb4d28f3bfba52c92d2 Dec 2012]<br />
|-<br />
|'''OpenZFS on OS X'''<br />
|[https://github.com/openzfsonosx/zfs/commit/753c38392ddff9d3cf140bb4d28f3bfba52c92d2 Dec 2012]<br />
|}<br />
<br />
==== Single Copy ARC ====<br />
<br />
OpenZFS caches disk blocks in-memory in the adaptive replacement cache (ARC). Originally when the same disk block was accessed from different clones it was cached multiple times (one for each clone accessing the block) in case a clone planned to modify the block. With these changes OpenZFS caches at most one copy of every block unless a clone is actually modifying the block.<br />
<br />
{| class="wikitable"<br />
|-<br />
|'''illumos'''<br />
|[https://github.com/illumos/illumos-gate/commit/9253d63df408bb48584e0b1abfcc24ef2472382e Sep 2012]<br />
|-<br />
|'''FreeBSD'''<br />
|[https://github.com/freebsd/freebsd/commit/8e1fdec2c76a948b16ebf8e4abe2cb73a60d3477 Nov 2012]<br />
|-<br />
|'''ZFS on Linux'''<br />
|[https://github.com/zfsonlinux/zfs/commit/1eb5bfa3dcdaecb19543d9df13131374a7a42947 Dec 2012]<br />
|-<br />
|'''OpenZFS on OS X'''<br />
|[https://github.com/openzfsonosx/zfs/commit/1eb5bfa3dcdaecb19543d9df13131374a7a42947 Dec 2012]<br />
|}<br />
<br />
==== TRIM Support ====<br />
<br />
TRIM support provides the ability to pass deletes / frees through to underlying vdevs that help to ensure devices such as SSD's, which rely on receiving TRIM / UNMAP requests for sectors which are no longer needed, maintain optimal performance.<br />
<br />
The current FreeBSD implementation builds a map of regions that were freed. On every write the<br />
code consults the map and removes ranges that were freed before, but are now overwritten.<br />
<br />
Freed blocks are not TRIMed immediately, there is a low priority thread that TRIMs ranges when the time comes.<br />
<br />
Support for TRIM has been demonstrated to significantly improved the general performance of SSD in the field, eliminating the need for regular secure erase cycles on busy hosts.<br />
<br />
An alternative method, which is arguably better, and works by tracking the metaslab allocator is also in progress and can be found here:<br />
[http://cr.illumos.org/~webrev/skiselkov/zfs_unmap/ ZFS TRIM Support for illumos]<br />
<br />
There is [https://github.com/zfsonlinux/zfs/pull/1016 a pull request for ZFS On Linux] which implements FreeBSD's (Sep 2012) ZFS TRIM support.<br />
<br />
{| class="wikitable"<br />
|-<br />
|'''illumos'''<br />
|not yet ported<br />
|-<br />
|'''FreeBSD'''<br />
|[http://svnweb.freebsd.org/base?view=revision&sortby=file&revision=240868 Sep 2012]<br />
|-<br />
|'''ZFS on Linux'''<br />
|not yet ported<br />
|-<br />
|'''OpenZFS on OS X'''<br />
|not yet ported<br />
|}<br />
<br />
==== FASTWRITE Algorithm ====<br />
<br />
Improves synchronous IO performance.<br />
<br />
{| class="wikitable"<br />
|-<br />
|'''illumos'''<br />
|not yet ported<br />
|-<br />
|'''FreeBSD'''<br />
|not yet ported<br />
|-<br />
|'''ZFS on Linux'''<br />
|[https://github.com/zfsonlinux/zfs/commit/920dd524fb2997225d4b1ac180bcbc14b045fda6 Oct 2012]<br />
|-<br />
|'''OpenZFS on OS X'''<br />
|[https://github.com/openzfsonosx/zfs/commit/920dd524fb2997225d4b1ac180bcbc14b045fda6 Oct 2012]<br />
|}<br />
<br />
Note that a [https://github.com/ryao/zfs/commit/858822a04b4563657b2267131e90d9687d67e31b locking enhancement] is being reviewed.<br />
<br />
==== Block Freeing Performance Improvments ====<br />
<br />
Performance analysis of OpenZFS revealed that the algorithms used when freeing blocks could cause significant performance problems when freeing a large amount of blocks in a single transaction or when dealing with fragmented pools. Several performance improvements were made in this area.<br />
<br />
{| class="wikitable"<br />
|-<br />
|'''illumos'''<br />
|[https://github.com/illumos/illumos-gate/commit/01f55e48fb4d524eaf70687728aa51b7762e2e97 Nov 2012]<br />
|[https://github.com/illumos/illumos-gate/commit/16a4a8074274d2d7cc408589cf6359f4a378c861 Feb 2013]<br />
|[https://github.com/illumos/illumos-gate/commit/9eb57f7f3fbb970d4b9b89dcd5ecf543fe2414d5 Feb 2013]<br />
|-<br />
|'''FreeBSD'''<br />
|[https://github.com/freebsd/freebsd/commit/5d9b3f284b13ac492326e05f6ba4c00e98adf05c Nov 2012]<br />
|[https://github.com/freebsd/freebsd/commit/18e9a0422b52091035dae9d69bde9dd571a8ff7e Feb 2013]<br />
|[https://github.com/freebsd/freebsd/commit/18e9a0422b52091035dae9d69bde9dd571a8ff7e Feb 2013]<br />
|-<br />
|'''ZFS on Linux'''<br />
|[https://github.com/zfsonlinux/zfs/commit/55d85d5a8c45c4559a4a0e675c37b0c3afb19c2f May 2013]<br />
|[https://github.com/zfsonlinux/zfs/commit/e51be06697762215dc3b679f8668987034a5a048 June 2013]<br />
|[https://github.com/zfsonlinux/zfs/commit/c2e42f9d53bec422abb71efade2c004383345038 Oct 2013]<br />
|-<br />
|'''OpenZFS on OS X'''<br />
|[https://github.com/openzfsonosx/zfs/commit/55d85d5a8c45c4559a4a0e675c37b0c3afb19c2f May 2013]<br />
|[https://github.com/openzfsonosx/zfs/commit/e51be06697762215dc3b679f8668987034a5a048 June 2013]<br />
|not yet<br />
|}<br />
<br />
==== nop-write ====<br />
<br />
ZFS supports end-to-end checksumming of every data block. When a cryptographically secure checksum is being used OpenZFS will compare the checksums of incoming writes to checksum of the existing on-disk data and avoid issuing any write i/o for data that has not changed. This can help performance and snapshot space usage in situations were the same files are regularly overwritten with almost-identical data (e.g. regular full-backups of large random-access files).<br />
<br />
{| class="wikitable"<br />
|-<br />
|'''illumos'''<br />
|[https://github.com/illumos/illumos-gate/commit/80901aea8e78a2c20751f61f01bebd1d5b5c2ba5 Nov 2012]<br />
|-<br />
|'''FreeBSD'''<br />
|[https://github.com/freebsd/freebsd/commit/3a0bfecf052237768517963f169d0797e2978f59 Nov 2012]<br />
|-<br />
|'''ZFS on Linux'''<br />
|[https://github.com/zfsonlinux/zfs/commit/03c6040bee6c87a9413b7da41d9f580f79a8ab62 Nov 2013]<br />
|-<br />
|'''OpenZFS on OS X'''<br />
|not yet<br />
|}<br />
<br />
==== lz4 compression ====<br />
<br />
OpenZFS supports on-the-fly compression of all user data with a variety of compression algorithm. This feature adds support for the lz4 compression algorithm. lz4 is usually faster and compresses data better than lzjb, the old default OpenZFS compression algorithm.<br />
<br />
Note: The <tt>lz4_compress</tt> feature flag must be enabled to take advantage of this.<br />
<br />
{| class="wikitable"<br />
|-<br />
|'''illumos'''<br />
|[https://github.com/illumos/illumos-gate/commit/a6f561b4aee75d0d028e7b36b151c8ed8a86bc76 Jan 2013]<br />
|-<br />
|'''FreeBSD'''<br />
|[https://github.com/freebsd/freebsd/commit/c6d9dc1ad2d2e36220845b84a2d180bd97354797 Feb 2013]<br />
|-<br />
|'''ZFS on Linux'''<br />
|[https://github.com/zfsonlinux/zfs/commit/9759c60f1a1503e48dc5c45a209c3edd5758319f Jan 2013]<br />
|-<br />
|'''OpenZFS on OS X'''<br />
|[https://github.com/openzfsonosx/zfs/commit/9759c60f1a1503e48dc5c45a209c3edd5758319f Jan 2013]<br />
|}<br />
<br />
==== synctask rewrite ====<br />
<br />
{| class="wikitable"<br />
|-<br />
|'''illumos'''<br />
|[https://github.com/illumos/illumos-gate/commit/3b2aab18808792cbd248a12f1edf139b89833c13 Feb 2013]<br />
|-<br />
|'''FreeBSD'''<br />
|[https://github.com/freebsd/freebsd/commit/f1985e5cd725ff1816cd4afbdee2d95b661883f0 March 2013]<br />
|-<br />
|'''ZFS on Linux'''<br />
|[https://github.com/zfsonlinux/zfs/commit/13fe019870c8779bf2f5b3ff731b512cf89133ef Sept 2013]<br />
|-<br />
|'''OpenZFS on OS X'''<br />
|[https://github.com/openzfsonosx/zfs/commit/13fe019870c8779bf2f5b3ff731b512cf89133ef Sept 2013]<br />
|}<br />
<br />
==== l2arc compression ====<br />
<br />
{| class="wikitable"<br />
|-<br />
|'''illumos'''<br />
|[https://github.com/illumos/illumos-gate/commit/aad02571bc59671aa3103bb070ae365f531b0b62 Jun 2013]<br />
|-<br />
|'''FreeBSD'''<br />
|[https://github.com/freebsd/freebsd/commit/b20363fe596a7e3a55d5b62f4d3fdb482c65c47a Jun 2013]<br />
|-<br />
|'''ZFS on Linux'''<br />
|[https://github.com/zfsonlinux/zfs/commit/3a17a7a99a1a6332d0999f9be68e2b8dc3933de1 Aug 2013]<br />
|-<br />
|'''OpenZFS on OS X'''<br />
|[https://github.com/openzfsonosx/zfs/commit/3a17a7a99a1a6332d0999f9be68e2b8dc3933de1 Aug 2013]<br />
|}<br />
<br />
==== ARC Shouldn't Cache Freed Blocks ====<br />
<br />
Originally cached blocks in the ARC remained cached until they were evicted due to memory pressure, even if the underlying disk block was freed. In some workloads these freed blocks were so frequently accessed before they were freed that the ARC continued to cache them while evicting blocks which had not been freed yet. Since freed blocks could never be accessed again continuing to cache them was unnecessary. In OpenZFS ARC blocks are evicted immediately when their underlying data blocks are freed.<br />
<br />
{| class="wikitable"<br />
|-<br />
|'''illumos'''<br />
|[https://github.com/illumos/illumos-gate/commit/6e6d5868f52089b9026785bd90257a3d3f6e5ee2 Jun 2013]<br />
|-<br />
|'''FreeBSD'''<br />
|[https://github.com/freebsd/freebsd/commit/13d822743426263ee50bcf047ab41a1e386156a8 Jun 2013]<br />
|-<br />
|'''ZFS on Linux'''<br />
|[https://github.com/zfsonlinux/zfs/commit/df4474f92d0b1b8d54e1914fdd56be2b75f1ff5e Jun 2013]<br />
|-<br />
|'''OpenZFS on OS X'''<br />
|[https://github.com/openzfsonosx/zfs/commit/df4474f92d0b1b8d54e1914fdd56be2b75f1ff5e Jun 2013]<br />
|}<br />
<br />
==== Improve N-way mirror read performance ====<br />
<br />
Queues read requests to least busy leaf vdev in mirrors.<br />
<br />
In addition to the vdev load biasing first implemented by ZFS on Linux in July 2013, the FreeBSD October 2013 version added I/O locality and device rotational information to further enhance the performance.<br />
<br />
{| class="wikitable"<br />
!OS<br />
!Load<br />
!Load + I/O Locality & Rotational Information<br />
|-<br />
|'''illumos'''<br />
|not yet ported<br />
|not yet ported<br />
|-<br />
|'''FreeBSD'''<br />
|N/A<br />
|[http://svnweb.freebsd.org/changeset/base/256956 23rd October 2013]<br />
|-<br />
|'''ZFS on Linux'''<br />
|[https://github.com/zfsonlinux/zfs/commit/556011dbec2d10579819078559a77630fc559112 Jul 2013]<br />
|not yet ported<br />
|-<br />
|'''OpenZFS on OS X'''<br />
|[https://github.com/openzfsonosx/zfs/commit/556011dbec2d10579819078559a77630fc559112 Jul 2013]<br />
|not yet ported<br />
|}<br />
<br />
==== Smoother Write Throttle ====<br />
<br />
The write throttle (dsl_pool_tempreserve_space() and txg_constrain_throughput()) is rewritten to produce much more consistent delays when under constant load. The new write throttle is based on the amount of dirty data, rather than guesses about future performance of the system. When there is a lot of dirty data, each transaction (e.g. write() syscall) will be delayed by the same small amount. This eliminates the "brick wall of wait" that the old write throttle could hit, causing all transactions to wait several seconds until the next txg opens. One of the keys to the new write throttle is decrementing the amount of dirty data as i/o completes, rather than at the end of spa_sync(). Note that the write throttle is only applied once the i/o scheduler is issuing the maximum number of outstanding async writes. See the block comments in dsl_pool.c and above dmu_tx_delay() for more details.<br />
<br />
The ZFS i/o scheduler (vdev_queue.c) now divides i/os into 5 classes: sync read, sync write, async read, async write, and scrub/resilver. The scheduler issues a number of concurrent i/os from each class to the device. Once a class has been selected, an i/o is selected from this class using either an elevator algorithem (async, scrub classes) or FIFO (sync classes). The number of concurrent async write i/os is tuned dynamically based on i/o load, to achieve good sync i/o latency when there is not a high load of writes, and good write throughput when there is. See the block comment in vdev_queue.c for more details.<br />
<br />
{| class="wikitable"<br />
|-<br />
|'''illumos'''<br />
|[https://github.com/illumos/illumos-gate/commit/69962b5647e4a8b9b14998733b765925381b727e Aug 2013]<br />
|-<br />
|'''FreeBSD'''<br />
|[http://svnweb.freebsd.org/changeset/base/258632 Nov 2013]<br />
|-<br />
|'''ZFS on Linux'''<br />
|[https://github.com/zfsonlinux/zfs/commit/e8b96c6007bf97cdf34869c1ffbd0ce753873a3d Dec 2013]<br />
|-<br />
|'''OpenZFS on OS X'''<br />
|not yet<br />
|}<br />
<br />
==== Disable LBA Weighting on files and SSDs ====<br />
<br />
On rotational media, the bandwidth of the outermost tracks is approximately twice that of innermost tracks. A heuristic called LBA weighting was put into the metaslab allocator to account for this by favoring the outermost tracks over the innermost tracks. This has the consequence that metaslabs tend to fill at different rates depending on their location. This causes the metaslabs corresponding to outermost tracks to enter the best-fit allocation strategy.<br />
<br />
The best-fit allocation strategy is more CPU intensive than the typical first-fit because it looks for the smallest region of free space able to fulfill an allocation rather than picking the next avaliable one. The CPU time is fairly excessive and is known to harm IOPS, but it exists to minimize use of gang blocks as a metaslab becomes excessively full. Gaining a bandwidth improvement from LBA weighting at the expense of an earlier switch to the best-fit allocation behavior on the weighted metaslabs is reasonable on rotational disks. However, it makes no sense on files, where the underlying filesystem is free to place things however way it sees fit, and on SSDs, where there is no bandwidth difference based on LBA.<br />
<br />
With this change, we will more evenly fill metaslabs on pools whose vdevs consist of only files and SSDs, which will minimize the metaslabs that enter the best fit allocation strategy when a pool is mostly full, but still below 96% full. This is particularly important on SSDs, where drops in IOPS are more pronounced.<br />
<br />
{| class="wikitable"<br />
|-<br />
|'''illumos'''<br />
|not yet<br />
|-<br />
|'''FreeBSD'''<br />
|not yet<br />
|-<br />
|'''ZFS on Linux'''<br />
|[https://github.com/zfsonlinux/zfs/commit/fb40095f5f0853946f8150481ca22602d1334dfe Aug 2015]<br />
|-<br />
|'''OpenZFS on OS X'''<br />
|not yet<br />
|}<br />
<br />
== Dataset Properties ==<br />
<br />
These are new filesystem, volume, and snapshot properties which can be accessed with the <tt>zfs(1)</tt> command's <tt>get</tt> subcommand. See the <tt>zfs(1)</tt> manpage for your distribution for more details on each of these properties.<br />
<br />
{| class="wikitable"<br />
!Property<br />
!Description<br />
!illumos<br />
!FreeBSD<br />
!ZFS on Linux<br />
!OpenZFS on OS X<br />
|-<br />
|<tt>refcompressratio</tt><br />
|The compression ratio acheived for all data referenced by (but not necessarily unique to) a snapshot, filesystem, or volume, expressed as a multiplier.<br />
|[https://github.com/illumos/illumos-gate/commit/187d6ac08adc31ea6868bde0cfbbb288826254e8 Jun 2011]<br />
|[https://github.com/freebsd/freebsd/commit/333e34b938a2b5e7b036e02b36408880b415109c Jun 2011]<br />
|[https://github.com/zfsonlinux/zfs/commit/77999e804fff35782ab4b578d2cecf064c54a841 Aug 2012]<br />
|[https://github.com/openzfsonosx/zfs/commit/77999e804fff35782ab4b578d2cecf064c54a841 Aug 2012]<br />
|-<br />
|<tt>clones</tt><br />
|For snapshots, this property is a comma-separated list of filesystems or volumes which are clones of this snapshot.<br />
|[https://github.com/illumos/illumos-gate/commit/e5351341b58845eee9d722bd71543d5a7c26b6cc Nov 2011]<br />
|[https://github.com/freebsd/freebsd/commit/73cab7197174153a718dedc97ff344341bcf6098 Nov 2011]<br />
|[https://github.com/zfsonlinux/zfs/commit/330d06f90d143b41b276796526a66a1c1fff046d Jul 2012]<br />
|[https://github.com/openzfsonosx/zfs/commit/330d06f90d143b41b276796526a66a1c1fff046d Jul 2012]<br />
|-<br />
|<tt>written</tt><br />
|The amount of referenced space written to this dataset since the previous snapshot.<br />
|[https://github.com/illumos/illumos-gate/commit/e5351341b58845eee9d722bd71543d5a7c26b6cc Nov 2011]<br />
|[https://github.com/freebsd/freebsd/commit/73cab7197174153a718dedc97ff344341bcf6098 Nov 2011]<br />
|[https://github.com/zfsonlinux/zfs/commit/330d06f90d143b41b276796526a66a1c1fff046d Jul 2012]<br />
|[https://github.com/openzfsonosx/zfs/commit/330d06f90d143b41b276796526a66a1c1fff046d Jul 2012]<br />
|-<br />
|<tt>written@''<snap>''</tt><br />
|The amount of referenced space written to this dataset since the specified snapshot. This is the space referenced by this dataset, but not referenced by the specified snapshot.<br />
|[https://github.com/illumos/illumos-gate/commit/e5351341b58845eee9d722bd71543d5a7c26b6cc Nov 2011]<br />
|[https://github.com/freebsd/freebsd/commit/73cab7197174153a718dedc97ff344341bcf6098 Nov 2011]<br />
|[https://github.com/zfsonlinux/zfs/commit/330d06f90d143b41b276796526a66a1c1fff046d Jul 2012]<br />
|[https://github.com/openzfsonosx/zfs/commit/330d06f90d143b41b276796526a66a1c1fff046d Jul 2012]<br />
|-<br />
|<tt>logicalused</tt>, <tt>logicalreferenced</tt><br />
|The amount of space used or referenced, before taking into account compression.<br />
|[https://github.com/illumos/illumos-gate/commit/77372cb0f35e8d3615ca2e16044f033397e88e21 Feb 2013]<br />
|[https://github.com/freebsd/freebsd/commit/2bed8f5691b7572d6f31bfc68e9f762a938af863 Mar 2013]<br />
|[https://github.com/zfsonlinux/zfs/commit/24a64651b4163d47b1187821152d762e9a263d5a Oct 2013]<br />
|not yet<br />
|-<br />
|}</div>Lundmanhttps://openzfs.org/w/index.php?title=Platform_code_differences&diff=2029Platform code differences2015-12-16T00:24:27Z<p>Lundman: /* OpenZFS on OS X */ Updating description</p>
<hr />
<div>It is useful to have a list of code differences between illumos and other platforms. Please separate changes that are trivially portable to other platforms (mainly illumos) from those that are not. Also, please include information on the rationale for each change. <br />
<br />
== ZFS on Linux ==<br />
<br />
=== Platform independent (portable) ===<br />
<br />
* Switched from C99 to C89<br />
** Linux's build system passes -std=gnu89 to GCC.<br />
* Converted large stack allocations to dynamic allocations<br />
** Linux has an 8KB stack in comparison to illumos' luxurious 24KB stacks.<br />
* [https://github.com/zfsonlinux/zfs/commit/b01615d5ac86913da1e092d0378bfb8f0e72af30 Constify structures containing function pointers]<br />
** The [http://pax.grsecurity.net/ PaX] effort to harden the Linux kernel considers writeable function pointers to be potential exploit targets. They modified the Linux kernel build system to report these as section mismatches. Function pointers were constified as a result.<br />
* Switched various allocations from KM_SLEEP to KM_PUSHPAGE<br />
** These were found to occur in code paths critical to swap on zvols. Swap on zvols would readily deadlock until they were changed.<br />
* [https://github.com/zfsonlinux/zfs/commit/bff32e0972bbc07ba5f2b9ce5b965813d8edcf78 Drive Identifier database]<br />
** This belongs in a different layer, but we do not have have the option of modifying the kernel itself, especially older ones. The database can be ported to illumos' sd.conf without little difficulty. Entries can also be ported to a similar database in FreeBSD (although not in the reverse direction).<br />
* -o ashift= in zpool create/attach/replace commands<br />
** The sector size determines ashift at vdev creation. This is a manual override that permits the system administrator to workaround drives that lie with relative ease. It complements the drive database.<br />
* [https://github.com/zfsonlinux/zfs/commit/82a37189aac955c81a59a5ecc3400475adb56355 SA based xattrs]<br />
** Improves get/set performance for small xattr values.<br />
** This would have resulted in a ZFS version change had it been imported into Open Solaris before the project was discontinued. It is off by default.<br />
* [https://github.com/zfsonlinux/zfs/commit/556011dbec2d10579819078559a77630fc559112 Better queuing of read IOs to leaves of mirror vdevs]<br />
** Improves throughput and IOPS on mirrored vdevs<br />
* [https://github.com/zfsonlinux/zfs/commit/920dd524fb2997225d4b1ac180bcbc14b045fda6 FASTWRITE algorithm]<br />
** Greedy selection of least busy top-level vdev when queuing writes. Improves IOPS performance.<br />
** [https://github.com/ryao/zfs/commit/858822a04b4563657b2267131e90d9687d67e31b Patch] being tested to remove mc_fastwrite_lock.<br />
<br />
=== Platform specific (non-portable) ===<br />
<br />
* Autotools build system<br />
** This could be adapted to other platforms, but the current code is extremely Linux-specific.<br />
* ZPIOS<br />
** Benchmark designed to exercise the the ZFS Transaction Object Layer<br />
** This could be adapted to other platforms with a rewrite to use illumos interfaces.<br />
* ZFS POSIX Layer<br />
** Linux VFS hooks that attempt to wrap the functions (zfs_vnops.c) used on illumos.<br />
* ZVOL code<br />
** A roughly 90% rewrite for Linux. Very little code shared with illumos.<br />
* [https://github.com/zfsonlinux/spl/commit/eb0f407a2b9089113ef6f2402ebd887511315b43 PF_NOFS thread flag]<br />
** A thread specific flag to indicate that we are in a path that might involve swap. Implemented in compatibility layer.<br />
** KM_SLEEP allocations made in the presence of PF_NOFS will be converted to KM_PUSHPAGE. A stack trace is also printed to dmesg.<br />
* [https://github.com/zfsonlinux/spl/commit/46a75aadb7c08085a4ad2e55dcf5b6fb387c1253 cv_wait_io()]<br />
** Compatibility layer extension to hook into Linux's I/O time accounting infrastructure. Otherwise identical to cv_wait().<br />
<br />
== OpenZFS on OS X ==<br />
<br />
* Mostly based on ZFS on Linux<br />
** Clone of source tree<br />
** Uses ZFS on Linux autoconf<br />
* Prefers clang or llvm-gcc for kernel module<br />
** IOKit kernel module requires C++ (strip Linux's variables named ''private'')<br />
* All UIO operations are kernel API calls. (uio_create() / uio_setoffset() ... ) the struct is opaque<br />
* zfs_vnops.c, zfs_vfops.c, zfs_acl.c, zfs_znode.c, zfs_fuid.c are FreeBSD based with OS X wrappers in zfs_vnops_osx.c<br />
* '''vnode_t''' is defined as '''struct vnode *''' on OS X, so most variables are now defined as '''struct vnode *vp'''<br />
** All vnode operations have API calls (vnode_fsnode(vp) == vp->v_data). the struct is opaque<br />
* zvols are mostly untouched from FreeBSD, but calls wrappers to IOKit C++ layer<br />
* '''vnode_create''' needs ALL information at call time (vtype, private ptr (znode), vnode_ops), can not pre-alloc like FreeBSD<br />
** '''vnode_create''' can call both '''reclaim''' and '''fdsync''' causing locking issues. OS X port attaches vnode ptr after VNOP's dmu_tx_commit is called to ensure no ZFS locks are held entering the VFS layer.<br />
<br />
== OSv ==<br />
<br />
* Based on FreeBSD ZFS<br />
* Removes jail and geom support<br />
* vfs integration (ZPL) modified for OSv<br />
* Thread-local support uses __thread</div>Lundmanhttps://openzfs.org/w/index.php?title=Distributions&diff=2028Distributions2015-12-16T00:20:08Z<p>Lundman: Updating OSX versions</p>
<hr />
<div>Open source distributions of OpenZFS are available for the following open source platforms. <br />
<br />
(For commercial products, see [[companies]].)<br />
<br />
== Darwin ==<br />
<br />
{|cellpadding="15"<br />
|[[File:UNIX-based.jpg | link=http://www.opensource.apple.com]]<br />
|<br />
At the core of [http://www.opengroup.org/openbrand/register/brand3612.htm Mac® OS X® El Capitan, which is certified to The Open Group UNIX® 03 standard], are [http://opensource.apple.com Apple® open source] [http://en.wikipedia.org/wiki/Darwin_(operating_system) Darwin] technologies. <br />
|}<br />
<br />
=== OpenZFS on OS X ===<br />
{|cellpadding="20" | width="100%"<br />
|<br />
[https://openzfsonosx.org OpenZFS on OS X] (O3X) brings OpenZFS features to Apple's OS X.<br />
<br />
The installer [https://openzfsonosx.org/wiki/Downloads release] of OpenZFS on OS X is [[OpenZFSOnOSX|ready for use]] by people who are comfortable with administering ZFS from the Terminal or who are willing to learn to do so. It's compatible with OS X 10.8 through OS X 10.11 (Mountain Lion, Mavericks, Yosemite and El Capitan). <br />
<br />
| align="right" valign="text-top"| [[file:o3x-logo.png | link=https://openzfsonosx.org]]<br />
|}<br />
<br />
== FreeBSD® ==<br />
<br />
{|cellpadding="15"<br />
|[[file:FreeBSD-logo.png | 120px | link=http://www.freebsd.org/]]<br />
|<br />
A full general purpose operating system with several specialized distributions.<br />
|}<br />
<br />
=== Debian® GNU/kFreeBSD ===<br />
{|cellpadding="25" | width="100%"<br />
|<br />
[https://wiki.debian.org/Debian_GNU/kFreeBSD Debian® GNU/kFreeBSD] is a general purpose GNU distribution for amd64/i386 that uses the FreeBSD kernel, which provides an OpenZFS implementation.<br />
<br />
An official Debian release, still using GNU libc and with ninety percent of the same software packages available.<br />
<br />
The ''wheezy'' stable release:<br />
* can dual-boot 9.0 (default) or 8.3 kernels of FreeBSD<br />
* uses pool version 28 (deduplication, raidz3, removable log devices)<br />
* lacks support for ''ashift='', and important development tools like DTrace<br />
* installer supports creation of pools, installing to them, and booting directly from them with GRUB2.<br />
<br />
The ''testing'' release will be updated with new FreeBSD kernel releases, gaining many OpenZFS enhancements, including support for lz4 compression.<br />
| align="right" valign="text-top" | [[file:Debian-openlogo-100.jpg | 80px | link=https://wiki.debian.org/Debian_GNU/kFreeBSD]]<br />
|}<br />
<br />
=== FreeBSD ===<br />
{|cellpadding="10" | width="100%"<br />
|<br />
[http://www.freebsd.org/ FreeBSD] is a general purpose server operating system. Versions 8.4 and 9.2 are OpenZFS; prior versions lack the associated feature set.<br />
* [http://www.freebsd.org/releases/ Download]<br />
* browse ZFS source code in [https://github.com/freebsd/freebsd/tree/master/sys/cddl/contrib/opensolaris/uts/common/fs/zfs GitHub] or [http://svnweb.freebsd.org/base/head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/ websvn] or [http://nxr.netbsd.org/search?q=&project=src-freebsd OpenGrok].<br />
| align="right" valign="text-top" | [[file:FreeBSD-logo.png |120px|link=http://freebsd.org]]<br />
|}<br />
<br />
=== FreeNAS® ===<br />
{|cellpadding="10" | width="100%"<br />
|<br />
[http://www.freenas.org/ FreeNAS] is NAS appliance software.<br />
<br />
[http://www.ixsystems.com/storage/ix/truenas/ Commercial support] is available for sister product TrueNAS from iXsystems.<br />
| align="right" valign="text-top" | [[file:FreeNAS_Shark_Transparent_on_dark.png |120px|link=http://www.freenas.org/]]<br />
|}<br />
<br />
=== PC-BSD® ===<br />
{|cellpadding="10" | width="100%"<br />
|<br />
[http://www.pcbsd.org/ PC-BSD] is a workstation/desktop operating system.<br />
<br />
[http://www.ixsystems.com/support-center/ix/software/pc-bsd.html Commercial support] is available from iXsystems.<br />
| align="right" valign="text-top" | [[file:Pcbsd-logo.png|120px|link=http://www.pcbsd.org/]]<br />
|}<br />
<br />
== illumos ==<br />
{|cellpadding="15"<br />
|[[file:BigHighResPhoenixLogotypeRGB.png |120px|link=http://illumos.org]]<br />
|<br />
The [http://www.illumos.org illumos] codebase is the foundation for various distributions – comparable to the relationship between the Linux kernel and Linux distributions.<br />
The codebase originated as a fork from the last release of OpenSolaris.<br />
* Browse ZFS source code in [http://src.illumos.org/source/xref/illumos-gate/usr/src/uts/common/fs/zfs opengrok] or [https://github.com/illumos/illumos-gate/tree/master/usr/src/uts/common/fs/zfs GitHub].<br />
|}<br />
<br />
=== OmniOS ===<br />
{|cellpadding="15" | width="100%"<br />
|<br />
[http://omnios.omniti.com/ OmniOS] is a general purpose server operating system. <br />
<br />
[http://omniti.com/does/omnios Commercial support] is available from [http://omniti.com/ OmniTI].<br />
<br />
* [http://omnios.omniti.com/wiki.php/Installation Download]<br />
* [https://github.com/omniti-labs/illumos-omnios/tree/master/usr/src/uts/common/fs/zfs source code]<br />
| align="right" valign="text-top"| [[file:OmniOS_logo.png |100px|link=http://omnios.omniti.com/]]<br />
|}<br />
<br />
=== OpenIndiana ===<br />
{|cellpadding="8" | width="100%"<br />
|<br />
[http://openindiana.org/ OpenIndiana] (OI) is a general purpose server operating system.<br />
<br />
* [http://openindiana.org/download/ Download]<br />
* [https://hg.openindiana.org/ source code]<br />
| align="right" valign="text-top" | [[file:OpenIndiana_logo_x1200.png |120px|link=http://openindiana.org/]]<br />
|}<br />
<br />
=== SmartOS™ ===<br />
{|cellpadding="8" | width="100%"<br />
|<br />
[http://smartos.org SmartOS] is a specialised type 1 hypervisor platform that is lean enough to run entirely in memory and powerful enough to run as much as you want to throw at it. Provisioning is blindingly fast, thanks to zones and ZFS file system creation. SmartOS is a fundamental component of the [http://www.joyent.com/products/private-cloud Joyent® SmartDataCenter™] (SDC) product.<br />
* [http://wiki.smartos.org/display/DOC/Download+SmartOS Download]<br />
* [https://github.com/joyent/smartos-live source code]<br />
| align="right" valign="text-top" | [[File:Smartos-stacked-blue.png | 120px | link= http://smartos.org]]<br />
|}<br />
<br />
== Linux ==<br />
<br />
Since its inception in the 1990s, the Linux operating system has become the most widely used software in the world.<br />
<br />
=== Gentoo ===<br />
{|cellpadding="10" | width="100%"<br />
|<br />
[http://www.gentoo.org Gentoo] provides first-party [[#ZFS_on_Linux | ZFS on Linux]] packages to itself and its derivatives. <br />
<br />
Gentoo can be automatically optimized and customized for just about any application or need. Extreme configurability, performance and a top-notch user and developer community are all hallmarks of the Gentoo experience.<br />
<br />
Derivatives include: <br />
| align="right" valign="text-top" | [[file:Gblend.png |80px|link=http://www.gentoo.org/]]<br />
|-<br />
|<br />
* [http://www.funtoo.org Funtoo Linux], which features native UTF-8 support enabled by default, a git-based, distributed Portage Tree and funtoo overlay, an enhanced Portage with more compact mini-manifest tree, automated imports of new Gentoo changes every 12 hours, GPT/GUID boot support and streamlined boot configuration, enhanced network configuration, up-to-date stable and current Funtoo stages, all built using Funtoo's Metro build tool<br />
| align="right" valign="text-top"| [[file:Funtoo.png |80px|link=http://www.funtoo.org]]<br />
|-<br />
|<br />
* [http://www.pentoo.ch Pentoo], a security-focused livecd<br />
| [[file:PentooLogo.jpeg |120px|link=http://www.pentoo.ch]]<br />
|-<br />
|<br />
* [http://www.sabayon.org Sabayon], which emanates substantially from Gentoo's testing branch. <br />
| [[file:Sabayon-logo.png |120px|link=http://www.sabayon.org]]<br />
|}<br />
<br />
=== ZFS on Linux ===<br />
{|cellpadding="10" | width="100%"<br />
|<br />
[http://www.zfsonlinux.org ZFS on Linux] provides self-building packages for Debian, Fedora, RHEL/CentOS/SL, Ubuntu and build instructions for several other distributions. <br />
* Implemented in the kernel <br />
* maintained in a code repository that is independent from the mainline kernel.<br />
| align="right" valign="text-top"| [[file:zfs-linux.png |100px|link=http://zfsonlinux.org/]]<br />
|}<br />
<br />
== OSv ==<br />
<br />
{|cellpadding="15"<br />
|<br />
[http://osv.io OSv] is a new operating system designed for the cloud. It only runs virtualized, and the only file system it supports is ZFS.<br />
* Implemented in the kernel <br />
* ZFS codebase forked from FreeBSD; but planning to move to open-zfs.org upstream ASAP.<br />
|[[file:osv.png |100px|link=http://osv.io/]]<br />
|}<br />
<br />
----<br />
<center>Distribution logos used with permission. All trademarks are the property of their respective owners.</center></div>Lundmanhttps://openzfs.org/w/index.php?title=File:O3x-logo.png&diff=1372File:O3x-logo.png2014-03-14T00:35:35Z<p>Lundman: </p>
<hr />
<div></div>Lundmanhttps://openzfs.org/w/index.php?title=Distributions&diff=1371Distributions2014-03-14T00:35:21Z<p>Lundman: /* OpenZFS on OS X */</p>
<hr />
<div>Open source distributions of OpenZFS are available for the following open source platforms. <br />
<br />
(For commercial products, see [[companies]].)<br />
<br />
== Darwin ==<br />
<br />
{|cellpadding="15"<br />
|[[File:UNIX-based.jpg | link=http://www.opensource.apple.com]]<br />
|<br />
At the core of [http://blog.opengroup.org/2012/07/25/apple-registers-mac-os-x-10-8-mountain-lion-to-the-unix-03-standard/ Mac® OS X® Mountain Lion, which is certified to The Open Group UNIX® 03 standard], are [http://opensource.apple.com Apple® open source] [http://en.wikipedia.org/wiki/Darwin_(operating_system) Darwin] technologies. <br />
|}<br />
<br />
=== OpenZFS on OS X ===<br />
{|cellpadding="20" | width="100%"<br />
|<br />
OpenZFS On OS X (O3X) brings OpenZFS features to Apple's OS X. Previously known as "ZFS-OSX" and "MacZFS development build". [http://openzfsonosx.org http://openzfsonosx.org/]<br />
<br />
[https://github.com/zfs-osx O3X] is a well-developed beta that is [[MacZFS | ready for testing]] by people who are happy to use Terminal. It's designed for use with Mac OS X 10.6 – OS X 10.9 (Snow Leopard, Lion, Mountain Lion and Mavericks). <br />
<br />
O3X is a port of ZFS on Linux®. <br />
| align="right" valign="text-top"| [[file:o3x-logo.png | link=http://openzfsonosx.org]]<br />
|}<br />
<br />
== FreeBSD® ==<br />
<br />
{|cellpadding="15"<br />
|[[file:FreeBSD-logo.png | 120px | link=http://www.freebsd.org/]]<br />
|<br />
A full general purpose operating system with several specialized distributions.<br />
|}<br />
<br />
=== Debian® GNU/kFreeBSD ===<br />
{|cellpadding="25" | width="100%"<br />
|<br />
[https://wiki.debian.org/Debian_GNU/kFreeBSD Debian® GNU/kFreeBSD] is a general purpose GNU distribution for amd64/i386 that uses the FreeBSD kernel, which provides an OpenZFS implementation.<br />
<br />
An official Debian release, still using GNU libc and with ninety percent of the same software packages available.<br />
<br />
The ''wheezy'' stable release:<br />
* can dual-boot 9.0 (default) or 8.3 kernels of FreeBSD<br />
* uses pool version 28 (deduplication, raidz3, removable log devices)<br />
* lacks support for ''ashift='', and important development tools like DTrace<br />
* installer supports creation of pools, installing to them, and booting directly from them with GRUB2.<br />
<br />
The ''testing'' release will be updated with new FreeBSD kernel releases, gaining many OpenZFS enhancements, including support for lz4 compression.<br />
| align="right" valign="text-top" | [[file:Debian-openlogo-100.jpg | 80px | link=https://wiki.debian.org/Debian_GNU/kFreeBSD]]<br />
|}<br />
<br />
=== FreeBSD ===<br />
{|cellpadding="10" | width="100%"<br />
|<br />
[http://www.freebsd.org/ FreeBSD] is a general purpose server operating system. Versions 8.4 and 9.2 are OpenZFS; prior versions lack the associated feature set.<br />
* [http://www.freebsd.org/releases/ Download]<br />
* browse ZFS source code in [https://github.com/freebsd/freebsd/tree/master/sys/cddl/contrib/opensolaris/uts/common/fs/zfs GitHub] or [http://svnweb.freebsd.org/base/head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/ websvn] or [http://nxr.netbsd.org/search?q=&project=src-freebsd OpenGrok].<br />
| align="right" valign="text-top" | [[file:FreeBSD-logo.png |120px|link=http://freebsd.org]]<br />
|}<br />
<br />
=== FreeNAS® ===<br />
{|cellpadding="10" | width="100%"<br />
|<br />
[http://www.freenas.org/ FreeNAS] is NAS appliance software.<br />
<br />
[http://www.ixsystems.com/storage/ix/truenas/ Commercial support] is available for sister product TrueNAS from iXsystems.<br />
| align="right" valign="text-top" | [[file:FreeNAS_Shark_Transparent_on_dark.png |120px|link=http://www.freenas.org/]]<br />
|}<br />
<br />
=== PC-BSD® ===<br />
{|cellpadding="10" | width="100%"<br />
|<br />
[http://www.pcbsd.org/ PC-BSD] is a workstation/desktop operating system.<br />
<br />
[http://www.ixsystems.com/support-center/ix/software/pc-bsd.html Commercial support] is available from iXsystems.<br />
| align="right" valign="text-top" | [[file:Pcbsd-logo.png|120px|link=http://www.pcbsd.org/]]<br />
|}<br />
<br />
== illumos ==<br />
{|cellpadding="15"<br />
|[[file:BigHighResPhoenixLogotypeRGB.png |120px|link=http://illumos.org]]<br />
|<br />
The [http://www.illumos.org illumos] codebase is the foundation for various distributions – comparable to the relationship between the Linux kernel and Linux distributions.<br />
The codebase originated as a fork from the last release of OpenSolaris.<br />
* Browse ZFS source code in [http://src.illumos.org/source/xref/illumos-gate/usr/src/uts/common/fs/zfs opengrok] or [https://github.com/illumos/illumos-gate/tree/master/usr/src/uts/common/fs/zfs GitHub].<br />
|}<br />
<br />
=== OmniOS ===<br />
{|cellpadding="15" | width="100%"<br />
|<br />
[http://omnios.omniti.com/ OmniOS] is a general purpose server operating system. <br />
<br />
[http://omniti.com/does/omnios Commercial support] is available from [http://omniti.com/ OmniTI].<br />
<br />
* [http://omnios.omniti.com/wiki.php/Installation Download]<br />
* [https://github.com/omniti-labs/illumos-omnios/tree/master/usr/src/uts/common/fs/zfs source code]<br />
| align="right" valign="text-top"| [[file:OmniOS_logo.png |100px|link=http://omnios.omniti.com/]]<br />
|}<br />
<br />
=== OpenIndiana ===<br />
{|cellpadding="8" | width="100%"<br />
|<br />
[http://openindiana.org/ OpenIndiana] (OI) is a general purpose server operating system.<br />
<br />
* [http://openindiana.org/download/ Download]<br />
* [https://hg.openindiana.org/ source code]<br />
| align="right" valign="text-top" | [[file:OpenIndiana_logo_x1200.png |120px|link=http://openindiana.org/]]<br />
|}<br />
<br />
=== SmartOS™ ===<br />
{|cellpadding="8" | width="100%"<br />
|<br />
[http://smartos.org SmartOS] is a specialised type 1 hypervisor platform that is lean enough to run entirely in memory and powerful enough to run as much as you want to throw at it. Provisioning is blindingly fast, thanks to zones and ZFS file system creation. SmartOS is a fundamental component of the [http://www.joyent.com/products/private-cloud Joyent® SmartDataCenter™] (SDC) product.<br />
* [http://wiki.smartos.org/display/DOC/Download+SmartOS Download]<br />
* [https://github.com/joyent/smartos-live source code]<br />
| align="right" valign="text-top" | [[File:Smartos-stacked-blue.png | 120px | link= http://smartos.org]]<br />
|}<br />
<br />
== Linux ==<br />
<br />
Since its inception in the 1990s, the Linux operating system has become the most widely used software in the world.<br />
<br />
=== Gentoo ===<br />
{|cellpadding="10" | width="100%"<br />
|<br />
[http://www.gentoo.org Gentoo] provides first-party [[#ZFS_on_Linux | ZFS on Linux]] packages to itself and its derivatives. <br />
<br />
Gentoo can be automatically optimized and customized for just about any application or need. Extreme configurability, performance and a top-notch user and developer community are all hallmarks of the Gentoo experience.<br />
<br />
Derivatives include: <br />
| align="right" valign="text-top" | [[file:Gblend.png |80px|link=http://www.gentoo.org/]]<br />
|-<br />
|<br />
* [http://www.funtoo.org Funtoo Linux], which features native UTF-8 support enabled by default, a git-based, distributed Portage Tree and funtoo overlay, an enhanced Portage with more compact mini-manifest tree, automated imports of new Gentoo changes every 12 hours, GPT/GUID boot support and streamlined boot configuration, enhanced network configuration, up-to-date stable and current Funtoo stages, all built using Funtoo's Metro build tool<br />
| align="right" valign="text-top"| [[file:Funtoo.png |80px|link=http://www.funtoo.org]]<br />
|-<br />
|<br />
* [http://www.pentoo.ch Pentoo], a security-focused livecd<br />
| [[file:PentooLogo.jpeg |120px|link=http://www.pentoo.ch]]<br />
|-<br />
|<br />
* [http://www.sabayon.org Sabayon], which emanates substantially from Gentoo's testing branch. <br />
| [[file:Sabayon-logo.png |120px|link=http://www.sabayon.org]]<br />
|}<br />
<br />
=== ZFS on Linux ===<br />
{|cellpadding="10" | width="100%"<br />
|<br />
[http://www.zfsonlinux.org ZFS on Linux] provides self-building packages for Debian, Fedora, RHEL/CentOS/SL, Ubuntu and build instructions for several other distributions. <br />
* Implemented in the kernel <br />
* maintained in a code repository that is independent from the mainline kernel.<br />
| align="right" valign="text-top"| [[file:zfs-linux.png |100px|link=http://zfsonlinux.org/]]<br />
|}<br />
<br />
== OSv ==<br />
<br />
{|cellpadding="15"<br />
|<br />
[http://osv.io OSv] is a new operating system designed for the cloud. It only runs virtualized, and the only file system it supports is ZFS.<br />
* Implemented in the kernel <br />
* ZFS codebase forked from FreeBSD; but planning to move to open-zfs.org upstream ASAP.<br />
|[[file:osv.png |100px|link=http://osv.io/]]<br />
|}<br />
<br />
----<br />
<center>Distribution logos used with permission. All trademarks are the property of their respective owners.</center></div>Lundmanhttps://openzfs.org/w/index.php?title=Distributions&diff=1370Distributions2014-03-14T00:34:40Z<p>Lundman: /* ZFS-OSX */ Updating wwwpage</p>
<hr />
<div>Open source distributions of OpenZFS are available for the following open source platforms. <br />
<br />
(For commercial products, see [[companies]].)<br />
<br />
== Darwin ==<br />
<br />
{|cellpadding="15"<br />
|[[File:UNIX-based.jpg | link=http://www.opensource.apple.com]]<br />
|<br />
At the core of [http://blog.opengroup.org/2012/07/25/apple-registers-mac-os-x-10-8-mountain-lion-to-the-unix-03-standard/ Mac® OS X® Mountain Lion, which is certified to The Open Group UNIX® 03 standard], are [http://opensource.apple.com Apple® open source] [http://en.wikipedia.org/wiki/Darwin_(operating_system) Darwin] technologies. <br />
|}<br />
<br />
=== OpenZFS on OS X ===<br />
{|cellpadding="20" | width="100%"<br />
|<br />
OpenZFS On OS X (O3X) brings OpenZFS features to Apple's OS X. Previously known as "ZFS-OSX" and "MacZFS development build". [http://openzfsonosx.org http://openzfsonosx.org/]<br />
<br />
[https://github.com/zfs-osx O3X] is a well-developed beta that is [[MacZFS | ready for testing]] by people who are happy to use Terminal. It's designed for use with Mac OS X 10.6 – OS X 10.9 (Snow Leopard, Lion, Mountain Lion and Mavericks). <br />
<br />
O3X is a port of ZFS on Linux®. <br />
| align="right" valign="text-top"| [[file:MacZFS-logo.png | link=http://openzfsonosx.org]]<br />
|}<br />
<br />
== FreeBSD® ==<br />
<br />
{|cellpadding="15"<br />
|[[file:FreeBSD-logo.png | 120px | link=http://www.freebsd.org/]]<br />
|<br />
A full general purpose operating system with several specialized distributions.<br />
|}<br />
<br />
=== Debian® GNU/kFreeBSD ===<br />
{|cellpadding="25" | width="100%"<br />
|<br />
[https://wiki.debian.org/Debian_GNU/kFreeBSD Debian® GNU/kFreeBSD] is a general purpose GNU distribution for amd64/i386 that uses the FreeBSD kernel, which provides an OpenZFS implementation.<br />
<br />
An official Debian release, still using GNU libc and with ninety percent of the same software packages available.<br />
<br />
The ''wheezy'' stable release:<br />
* can dual-boot 9.0 (default) or 8.3 kernels of FreeBSD<br />
* uses pool version 28 (deduplication, raidz3, removable log devices)<br />
* lacks support for ''ashift='', and important development tools like DTrace<br />
* installer supports creation of pools, installing to them, and booting directly from them with GRUB2.<br />
<br />
The ''testing'' release will be updated with new FreeBSD kernel releases, gaining many OpenZFS enhancements, including support for lz4 compression.<br />
| align="right" valign="text-top" | [[file:Debian-openlogo-100.jpg | 80px | link=https://wiki.debian.org/Debian_GNU/kFreeBSD]]<br />
|}<br />
<br />
=== FreeBSD ===<br />
{|cellpadding="10" | width="100%"<br />
|<br />
[http://www.freebsd.org/ FreeBSD] is a general purpose server operating system. Versions 8.4 and 9.2 are OpenZFS; prior versions lack the associated feature set.<br />
* [http://www.freebsd.org/releases/ Download]<br />
* browse ZFS source code in [https://github.com/freebsd/freebsd/tree/master/sys/cddl/contrib/opensolaris/uts/common/fs/zfs GitHub] or [http://svnweb.freebsd.org/base/head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/ websvn] or [http://nxr.netbsd.org/search?q=&project=src-freebsd OpenGrok].<br />
| align="right" valign="text-top" | [[file:FreeBSD-logo.png |120px|link=http://freebsd.org]]<br />
|}<br />
<br />
=== FreeNAS® ===<br />
{|cellpadding="10" | width="100%"<br />
|<br />
[http://www.freenas.org/ FreeNAS] is NAS appliance software.<br />
<br />
[http://www.ixsystems.com/storage/ix/truenas/ Commercial support] is available for sister product TrueNAS from iXsystems.<br />
| align="right" valign="text-top" | [[file:FreeNAS_Shark_Transparent_on_dark.png |120px|link=http://www.freenas.org/]]<br />
|}<br />
<br />
=== PC-BSD® ===<br />
{|cellpadding="10" | width="100%"<br />
|<br />
[http://www.pcbsd.org/ PC-BSD] is a workstation/desktop operating system.<br />
<br />
[http://www.ixsystems.com/support-center/ix/software/pc-bsd.html Commercial support] is available from iXsystems.<br />
| align="right" valign="text-top" | [[file:Pcbsd-logo.png|120px|link=http://www.pcbsd.org/]]<br />
|}<br />
<br />
== illumos ==<br />
{|cellpadding="15"<br />
|[[file:BigHighResPhoenixLogotypeRGB.png |120px|link=http://illumos.org]]<br />
|<br />
The [http://www.illumos.org illumos] codebase is the foundation for various distributions – comparable to the relationship between the Linux kernel and Linux distributions.<br />
The codebase originated as a fork from the last release of OpenSolaris.<br />
* Browse ZFS source code in [http://src.illumos.org/source/xref/illumos-gate/usr/src/uts/common/fs/zfs opengrok] or [https://github.com/illumos/illumos-gate/tree/master/usr/src/uts/common/fs/zfs GitHub].<br />
|}<br />
<br />
=== OmniOS ===<br />
{|cellpadding="15" | width="100%"<br />
|<br />
[http://omnios.omniti.com/ OmniOS] is a general purpose server operating system. <br />
<br />
[http://omniti.com/does/omnios Commercial support] is available from [http://omniti.com/ OmniTI].<br />
<br />
* [http://omnios.omniti.com/wiki.php/Installation Download]<br />
* [https://github.com/omniti-labs/illumos-omnios/tree/master/usr/src/uts/common/fs/zfs source code]<br />
| align="right" valign="text-top"| [[file:OmniOS_logo.png |100px|link=http://omnios.omniti.com/]]<br />
|}<br />
<br />
=== OpenIndiana ===<br />
{|cellpadding="8" | width="100%"<br />
|<br />
[http://openindiana.org/ OpenIndiana] (OI) is a general purpose server operating system.<br />
<br />
* [http://openindiana.org/download/ Download]<br />
* [https://hg.openindiana.org/ source code]<br />
| align="right" valign="text-top" | [[file:OpenIndiana_logo_x1200.png |120px|link=http://openindiana.org/]]<br />
|}<br />
<br />
=== SmartOS™ ===<br />
{|cellpadding="8" | width="100%"<br />
|<br />
[http://smartos.org SmartOS] is a specialised type 1 hypervisor platform that is lean enough to run entirely in memory and powerful enough to run as much as you want to throw at it. Provisioning is blindingly fast, thanks to zones and ZFS file system creation. SmartOS is a fundamental component of the [http://www.joyent.com/products/private-cloud Joyent® SmartDataCenter™] (SDC) product.<br />
* [http://wiki.smartos.org/display/DOC/Download+SmartOS Download]<br />
* [https://github.com/joyent/smartos-live source code]<br />
| align="right" valign="text-top" | [[File:Smartos-stacked-blue.png | 120px | link= http://smartos.org]]<br />
|}<br />
<br />
== Linux ==<br />
<br />
Since its inception in the 1990s, the Linux operating system has become the most widely used software in the world.<br />
<br />
=== Gentoo ===<br />
{|cellpadding="10" | width="100%"<br />
|<br />
[http://www.gentoo.org Gentoo] provides first-party [[#ZFS_on_Linux | ZFS on Linux]] packages to itself and its derivatives. <br />
<br />
Gentoo can be automatically optimized and customized for just about any application or need. Extreme configurability, performance and a top-notch user and developer community are all hallmarks of the Gentoo experience.<br />
<br />
Derivatives include: <br />
| align="right" valign="text-top" | [[file:Gblend.png |80px|link=http://www.gentoo.org/]]<br />
|-<br />
|<br />
* [http://www.funtoo.org Funtoo Linux], which features native UTF-8 support enabled by default, a git-based, distributed Portage Tree and funtoo overlay, an enhanced Portage with more compact mini-manifest tree, automated imports of new Gentoo changes every 12 hours, GPT/GUID boot support and streamlined boot configuration, enhanced network configuration, up-to-date stable and current Funtoo stages, all built using Funtoo's Metro build tool<br />
| align="right" valign="text-top"| [[file:Funtoo.png |80px|link=http://www.funtoo.org]]<br />
|-<br />
|<br />
* [http://www.pentoo.ch Pentoo], a security-focused livecd<br />
| [[file:PentooLogo.jpeg |120px|link=http://www.pentoo.ch]]<br />
|-<br />
|<br />
* [http://www.sabayon.org Sabayon], which emanates substantially from Gentoo's testing branch. <br />
| [[file:Sabayon-logo.png |120px|link=http://www.sabayon.org]]<br />
|}<br />
<br />
=== ZFS on Linux ===<br />
{|cellpadding="10" | width="100%"<br />
|<br />
[http://www.zfsonlinux.org ZFS on Linux] provides self-building packages for Debian, Fedora, RHEL/CentOS/SL, Ubuntu and build instructions for several other distributions. <br />
* Implemented in the kernel <br />
* maintained in a code repository that is independent from the mainline kernel.<br />
| align="right" valign="text-top"| [[file:zfs-linux.png |100px|link=http://zfsonlinux.org/]]<br />
|}<br />
<br />
== OSv ==<br />
<br />
{|cellpadding="15"<br />
|<br />
[http://osv.io OSv] is a new operating system designed for the cloud. It only runs virtualized, and the only file system it supports is ZFS.<br />
* Implemented in the kernel <br />
* ZFS codebase forked from FreeBSD; but planning to move to open-zfs.org upstream ASAP.<br />
|[[file:osv.png |100px|link=http://osv.io/]]<br />
|}<br />
<br />
----<br />
<center>Distribution logos used with permission. All trademarks are the property of their respective owners.</center></div>Lundmanhttps://openzfs.org/w/index.php?title=Main_Page&diff=1369Main Page2014-03-14T00:31:24Z<p>Lundman: Updating OSX www page.</p>
<hr />
<div><div id="mf-home"><br />
= Welcome to OpenZFS =<br />
__NOTOC__<br />
<br />
OpenZFS was [[announcement | announced in September 2013]] as the truly '''open source''' successor to the [[History | ZFS project]]. Our community '''brings together developers''' from the illumos, FreeBSD, Linux, and OS X [[distributions | platforms]], and a wide range of [[companies]] that build products on top of OpenZFS. <br />
<br />
OpenZFS is an '''outstanding storage platform''' that encompasses the functionality of traditional filesystems, volume managers, and more, with consistent reliability, functionality and performance across all [[distributions]]: <br />
<br />
{| class="wikitable"<br />
| '''illumos'''<br />
|[http://wiki.illumos.org/display/illumos/ZFS Webpage]<br />
|[https://github.com/illumos/illumos-gate/ GitHub]<br />
|-<br />
| '''FreeBSD'''<br />
|[https://wiki.freebsd.org/ZFS Webpage]<br />
|[https://github.com/freebsd/freebsd/ GitHub] <br />
|-<br />
| '''ZFS on Linux'''<br />
|[http://zfsonlinux.org/ Webpage]<br />
|[https://github.com/zfsonlinux/zfs/ GitHub]<br />
|-<br />
| '''OpenZFS on OS X'''<br />
|[http://openzfsonosx.org/ Webpage]<br />
|[https://github.com/zfs-osx/ GitHub]<br />
|}<br />
<br />
== Goals ==<br />
<br />
The high-level goals of OpenZFS are:<br />
* to '''raise awareness''' of the quality, utility, and availability of open source implementations of ZFS<br />
* to encourage '''open communication''' about ongoing efforts to improve open source ZFS<br />
* to ensure '''consistent reliability''', functionality, and performance of all distributions of ZFS.<br />
<br />
The main technical goal of OpenZFS is '''easier sharing of code''' between platforms. Strategies include:<br />
* creating a platform-independent [[mailing list]] for developers to review ZFS code and architecture changes from all platforms<br />
* smoothing the [[illumos integration process]]<br />
* making it easy to run both ztest and the ZFS test suite (TestRunner or STF based) on each platform<br />
* [[Reduce code differences | reducing code differences]] between the platforms.<br />
<br />
== What's new? ==<br />
<br />
March: [[User:mahrens | Matt Ahrens]] will be delivering a keynote presentation at [http://2014.asiabsdcon.org/timetable.html.en#K1 AsiaBSDcon] in Tokyo. With additional ZFS-focused talks by Michael Dexter, Dru Lavigne, and Kris Moore.<br />
<br />
February: Adam Leventhal wrote about the new OpenZFS write throttle in a [http://blog.delphix.com/ahl/2014/openzfs-write-throttle/ blog post].<br />
<br />
January: [[User:Behlendorf | Brian Behlendorf]], lead engineer for [http://zfsonlinux.org ZFS on Linux], hosted [[OpenZFS Office Hours]]. View the [https://www.youtube.com/watch?v=GvCqOyDa1W8&list=PLaUVvul17xSegxJjny2Gz85IgIyq9wu8n video recording].<br />
<br />
November: [http://www.beginningwithi.com/2013/11/18/openzfs-developer-summit/ video] and [[Publications#2013_OpenZFS_Developer_Summit | slides]] from the [[OpenZFS Developer Summit]].<br />
<br />
== Site orientation ==<br />
* [[FAQ]]<br />
* How to [[participate]]<br />
* [[Companies]] with products that are based on OpenZFS<br />
* Download [[distributions]] that include OpenZFS<br />
* [[Events]] – the forthcoming [[OpenZFS Developer Summit]] and more<br />
* [[Developer resources]]<br />
** [[mailing list]]<br />
** [[illumos integration process]]<br />
** [[contributors]]<br />
** [[platform code differences]]<br />
** [[OpenZFS Office Hours]]<br />
** implementation<br />
*** [[Documentation/ZfsSend | ZFS send]]<br />
*** [[Documentation/Administrative Commands | administrative commands]]<br />
* [[Documentation]]<br />
** [[features]]<br />
** [[Publications| publications and conference talks]]<br />
** [[history]] – from ZFS to OpenZFS<br />
*** OpenZFS launch [[announcement]] – September 2013<br />
** [[performance tuning]]<br />
* [[Projects]]<br />
** [[reduce code differences]]<br />
** the [[Projects/ZFS Channel Programs | ZFS Channel Programs]] (ZCP) proposal<br />
* [[About OpenZFS]]<br />
<br />
[http://open-zfs.org/w/index.php?title=Special%3AAllPages&from=&to=&namespace=0&hideredirects=1 All main pages] (alphabetical order) …<br />
<br />
== Twitter ==<br />
<br />
<html><br />
<a class="twitter-timeline" href="https://twitter.com/OpenZFS" data-widget-id="378639669799288832">Tweets by @OpenZFS</a><br />
<script>!function(d,s,id){var js,fjs=d.getElementsByTagName(s)[0],p=/^http:/.test(d.location)?'http':'https';if(!d.getElementById(id)){js=d.createElement(s);js.id=id;js.src=p+"://platform.twitter.com/widgets.js";fjs.parentNode.insertBefore(js,fjs);}}(document,"script","twitter-wjs");</script><br />
<br />
<span><br />
<br><br />
<a href="https://twitter.com/openzfs" class="twitter-follow-button" data-show-count="true">Follow @openzfs</a><br />
<br><br />
<a href="https://twitter.com/share" class="twitter-share-button" data-via="OpenZFS">Tweet</a><br />
</span><br />
<script>!function(d,s,id){var js,fjs=d.getElementsByTagName(s)[0],p=/^http:/.test(d.location)?'http':'https';if(!d.getElementById(id)){js=d.createElement(s);js.id=id;js.src=p+'://platform.twitter.com/widgets.js';fjs.parentNode.insertBefore(js,fjs);}}(document, 'script', 'twitter-wjs');</script><br />
</html></div>Lundmanhttps://openzfs.org/w/index.php?title=Features&diff=1231Features2013-11-15T07:52:41Z<p>Lundman: /* libzfs_core */</p>
<hr />
<div>This page describes some of the more important features and performance improvements that are part of OpenZFS.<br />
<br />
Help would be appreciated in porting features between platforms whose status is "not yet".<br />
<br />
== Feature Flags ==<br />
<br />
Originally the ZFS on-disk format was versioned with a single number which was increased whenever a new on-disk format change was introduced. This worked well when a single entity controlled the development of ZFS; however, in the more distributed development model of OpenZFS a single version number is not ideal. Every OpenZFS implementation would need to agree on every change to the on-disk format.<br />
<br />
One of the first OpenZFS projects was a new versioning system called "feature flags" which tags on-disk format changes with unique names. The system supports both completely independent format changes, as well as format changes that depend on each other. A pool's on-disk format is portable between OpenZFS implementations as long as all of the feature flags in use by the pool are supported by both implementations.<br />
<br />
All OpenZFS implementations now support feature flags and regularly port features between them to remain compatible.<br />
<br />
{| class="wikitable"<br />
|<br />
| '''illumos'''<br />
| '''FreeBSD'''<br />
| '''ZFS on Linux'''<br />
| '''ZFS-OSX'''<br />
|-<br />
| '''async_destroy'''<br />
| Y<br />
| Y<br />
| Y<br />
| Y<br />
|-<br />
| '''empty_bpobj'''<br />
| Y<br />
| Y<br />
| Y<br />
| Y<br />
|-<br />
| '''lz4_compress'''<br />
| Y<br />
| Y<br />
| Y<br />
| Y<br />
|-<br />
| '''spacemap_histogram'''<br />
| Y<br />
|<br />
|<br />
|<br />
|-<br />
| '''extensible_dataset'''<br />
| Y<br />
|<br />
|<br />
|<br />
|}<br />
<br />
For more details see these [http://blog.delphix.com/csiden/files/2012/01/ZFS_Feature_Flags.pdf slides (Jan 2012)] and [http://illumos.org/man/5/zpool-features <tt>zpool-features(5)</tt>].<br />
<br />
== libzfs_core ==<br />
<br />
See this [http://blog.delphix.com/matt/2012/01/17/the-future-of-libzfs/ blog post (Jan 2012)] and associated [http://blog.delphix.com/matt/files/2012/01/The_Future_of_LibZFS.pdf slides] and [http://www.youtube.com/watch?feature=player_embedded&list=PL1A94C8EECCAF7340&v=iJ0S91ygErE video] for more details.<br />
<br />
First introduced in:<br />
{| class="wikitable"<br />
|-<br />
|'''illumos'''<br />
|[https://github.com/illumos/illumos-gate/commit/4445fffbbb1ea25fd0e9ea68b9380dd7a6709025 June 2012]<br />
|-<br />
|'''FreeBSD'''<br />
|[https://github.com/freebsd/freebsd/commit/f1985e5cd725ff1816cd4afbdee2d95b661883f0 March 2013]<br />
|-<br />
|'''ZFS on Linux'''<br />
|[https://github.com/zfsonlinux/zfs/commit/6f1ffb06655008c9b519108ed29fbf03acd6e5de August 2013]<br />
|-<br />
|'''ZFS-OSX'''<br />
|[https://github.com/zfs-osx/zfs/commit/50b0b2d9ea604d29ed729be8fa61bb77ae3ff4e9 October 2013]<br />
|}<br />
<br />
== CLI Usability ==<br />
<br />
These are improvements to the command line interface. While the end result is a generally more friendly user interface, getting the desired behavior often required modifications to the core of ZFS.<br />
<br />
''Listed in chronological order (oldest first).''<br />
<br />
==== Pool Comment ====<br />
<br />
OpenZFS has a per-pool comment property which can be set with the <tt>zpool set</tt> command and can be read even if the pool is not imported, so it is accessible even if pool import fails.<br />
<br />
{| class="wikitable"<br />
|-<br />
|'''illumos'''<br />
|[https://github.com/illumos/illumos-gate/commit/8704186e373c9ed74daa395ff3f7fd745396df9e Nov 2011]<br />
|-<br />
|'''FreeBSD'''<br />
|[https://github.com/freebsd/freebsd/commit/73cab7197174153a718dedc97ff344341bcf6098 Nov 2011]<br />
|-<br />
|'''ZFS on Linux'''<br />
|[https://github.com/zfsonlinux/zfs/commit/d96eb2b1538db13ee7a716ec0e1162f5735edc12 Aug 2012]<br />
|-<br />
|'''ZFS-OSX'''<br />
|[https://github.com/zfs-osx/zfs/commit/d96eb2b1538db13ee7a716ec0e1162f5735edc12 Aug 2012]<br />
|}<br />
<br />
==== Size Estimates for <tt>zfs send</tt> and <tt>zfs destroy</tt> ====<br />
<br />
This feature enhances OpenZFS's internal space accounting information. This new accounting information is used to provide a <tt>-n</tt> (dry-run) option for <tt>zfs send</tt> which can instantly calculate the amount of send stream data a specific <tt>zfs send</tt> command would generate. It is also used for a <tt>-n</tt> option for <tt>zfs destroy</tt> which can instantly calculate the amount of space that would be reclaimed by a specific <tt>zfs destroy</tt> command.<br />
<br />
{| class="wikitable"<br />
|-<br />
|'''illumos'''<br />
|[https://github.com/illumos/illumos-gate/commit/e5351341b58845eee9d722bd71543d5a7c26b6cc Nov 2011]<br />
|-<br />
|'''FreeBSD'''<br />
|[https://github.com/freebsd/freebsd/commit/73cab7197174153a718dedc97ff344341bcf6098 Nov 2011]<br />
|-<br />
|'''ZFS on Linux'''<br />
|[https://github.com/zfsonlinux/zfs/commit/330d06f90d143b41b276796526a66a1c1fff046d Jul 2012]<br />
|-<br />
|'''ZFS-OSX'''<br />
|[https://github.com/zfs-osx/zfs/commit/330d06f90d143b41b276796526a66a1c1fff046d Jul 2012]<br />
|}<br />
<br />
==== vdev Information in <tt>zpool list</tt> ====<br />
<br />
OpenZFS adds a <tt>-v</tt> option to the <tt>zpool list</tt> command which shows detailed sizing information about the vdevs in the pool:<br />
<br />
$ zpool list -v<br />
NAME SIZE ALLOC FREE EXPANDSZ CAP DEDUP HEALTH ALTROOT<br />
dcenter 5.24T 3.85T 1.39T - 73% 1.00x ONLINE -<br />
mirror 556G 469G 86.7G -<br />
c2t1d0 - - - -<br />
c2t0d0 - - - -<br />
mirror 556G 493G 63.0G -<br />
c2t3d0 - - - -<br />
c2t2d0 - - - -<br />
mirror 556G 493G 62.7G -<br />
c2t5d0 - - - -<br />
c2t4d0 - - - -<br />
mirror 556G 494G 62.5G -<br />
c2t8d0 - - - -<br />
c2t6d0 - - - -<br />
mirror 556G 494G 62.2G -<br />
c2t10d0 - - - -<br />
c2t9d0 - - - -<br />
mirror 556G 494G 61.9G -<br />
c2t12d0 - - - -<br />
c2t11d0 - - - -<br />
mirror 1016G 507G 509G -<br />
c1t1d0 - - - -<br />
c1t5d0 - - - -<br />
mirror 1016G 496G 520G -<br />
c1t3d0 - - - -<br />
c1t4d0 - - - -<br />
<br />
{| class="wikitable"<br />
|-<br />
|'''illumos'''<br />
|[https://github.com/illumos/illumos-gate/commit/4263d13f00c9691fa14620eff82abef795be0693 Jan 2012]<br />
|-<br />
|'''FreeBSD'''<br />
|[https://github.com/freebsd/freebsd/commit/38ef930079cbb1df5de9df3c1064426dba3976b1 May 2012]<br />
|-<br />
|'''ZFS on Linux'''<br />
|[https://github.com/zfsonlinux/zfs/commit/1bd201e70d57464fd26bf9089ea4b44fd49e4f2d Sept 2012]<br />
|-<br />
|'''ZFS-OSX'''<br />
|[https://github.com/zfs-osx/zfs/commit/1bd201e70d57464fd26bf9089ea4b44fd49e4f2d Sept 2012]<br />
|}<br />
<br />
==== ZFS list snapshot property alias ====<br />
<br />
Functionally identical to Solaris 11 extension <code>zfs list -t snap</code>.<br />
<br />
{| class="wikitable"<br />
|-<br />
|'''illumos'''<br />
|not yet<br />
|-<br />
|'''FreeBSD'''<br />
|[http://svnweb.freebsd.org/changeset/base/256999 Oct 2013]<br />
|-<br />
|'''ZFS on Linux'''<br />
|[https://github.com/zfsonlinux/zfs/commit/cf81b00a73fe47fdb21586ac1cc179b734540973 Apr 2012]<br />
|-<br />
|'''ZFS-OSX'''<br />
|[https://github.com/zfs-osx/zfs/commit/cf81b00a73fe47fdb21586ac1cc179b734540973 Apr 2012]<br />
|}<br />
<br />
==== ZFS snapshot alias ====<br />
<br />
Functionally identical to Solaris 11 extension <code>zfs snap</code>.<br />
<br />
{| class="wikitable"<br />
|-<br />
|'''illumos'''<br />
|not yet<br />
|-<br />
|'''FreeBSD'''<br />
|[http://svnweb.freebsd.org/changeset/base/256999 Oct 2013]<br />
|-<br />
|'''ZFS on Linux'''<br />
|[https://github.com/zfsonlinux/zfs/commit/10b75496bb0cb7a7b8146c263164adc37f1d176a Apr 2012]<br />
|-<br />
|'''ZFS-OSX'''<br />
|[https://github.com/zfs-osx/zfs/commit/10b75496bb0cb7a7b8146c263164adc37f1d176a Apr 2012]<br />
|}<br />
<br />
==== <tt>zfs send</tt> Progress Reporting ====<br />
<br />
OpenZFS introduces a <tt>-v</tt> option to <tt>zfs send</tt> which reports per-second information on how much data has been sent, how long it has taken, and how much data remains to be sent.<br />
<br />
{| class="wikitable"<br />
|-<br />
|'''illumos'''<br />
|[https://github.com/illumos/illumos-gate/commit/4e3c9f4489a18514e5e8caeb91d4e6db07c98415 May 2012]<br />
|-<br />
|'''FreeBSD'''<br />
|[https://github.com/freebsd/freebsd/commit/046ff8962602e8d65b6b3fae48573513ab7e433f May 2012]<br />
|-<br />
|'''ZFS on Linux'''<br />
|[https://github.com/zfsonlinux/zfs/commit/37abac6d559a1da8ab8e5379442f491b73998f6a Sept 2012]<br />
|-<br />
|'''ZFS-OSX'''<br />
|[https://github.com/zfs-osx/zfs/commit/37abac6d559a1da8ab8e5379442f491b73998f6a Sept 2012]<br />
|}<br />
<br />
==== Arbitrary Snapshot Arguments to <tt>zfs snapshot</tt> ====<br />
<br />
{| class="wikitable"<br />
|-<br />
|'''illumos'''<br />
|[https://github.com/illumos/illumos-gate/commit/4445fffbbb1ea25fd0e9ea68b9380dd7a6709025 June 2012]<br />
|-<br />
|'''FreeBSD'''<br />
|[https://github.com/freebsd/freebsd/commit/f1985e5cd725ff1816cd4afbdee2d95b661883f0 March 2013]<br />
|-<br />
|'''ZFS on Linux'''<br />
|[https://github.com/zfsonlinux/zfs/commit/6f1ffb06655008c9b519108ed29fbf03acd6e5de August 2013]<br />
|-<br />
|'''ZFS-OSX'''<br />
|not yet<br />
|}<br />
<br />
== Performance ==<br />
<br />
These are significant performance improvements, often requiring substantial restructuring of the source code.<br />
<br />
''Listed in chronological order (oldest first).''<br />
<br />
==== SA based xattrs ====<br />
<br />
Improves performance of linux-style (short) xattrs by storing them in the dnode_phys_t's bonus block. (Not to be confused with [http://en.wikipedia.org/wiki/Extended_file_attributes#Solaris Solaris-style Extended Attributes] which are full-fledged files or "forks", like NTFS streams. This work could be extended to also improve the performance on illumos of small Extended Attributes whose permissions are the same as the containing file.)<br />
<br />
Requires a disk format change and is off by default until Filesystem (ZPL) Feature Flags are implemented (not to be confused with [[Features#Feature_Flags_Overview | zpool Feature Flags]]).<br />
<br />
{| class="wikitable"<br />
|-<br />
|'''illumos'''<br />
|not yet (needs additional functionality)<br />
|-<br />
|'''FreeBSD'''<br />
|??<br />
|-<br />
|'''ZFS on Linux'''<br />
|[https://github.com/zfsonlinux/zfs/commit/82a37189aac955c81a59a5ecc3400475adb56355 Oct 2011]<br />
|-<br />
|'''ZFS-OSX'''<br />
|??<br />
|}<br />
<br />
Note that SA based xattrs are [https://github.com/zfsonlinux/zfs/commit/6a7c0ccca44ad02c476a111d8f7911fc8b12fff7 no longer used on symlinks] as of Aug 2013 until an issue is resolved.<br />
<br />
==== Use the slog even with logbias=throughput ====<br />
<br />
{| class="wikitable"<br />
|-<br />
|'''illumos'''<br />
|??<br />
|-<br />
|'''FreeBSD'''<br />
|??<br />
|-<br />
|'''ZFS on Linux'''<br />
|[https://github.com/zfsonlinux/zfs/commit/5d7a86d114c2706a8d14d94b71f81ad5cdf066c5 Oct 2011]<br />
|-<br />
|'''ZFS-OSX'''<br />
|[https://github.com/zfs-osx/zfs/commit/5d7a86d114c2706a8d14d94b71f81ad5cdf066c5 Oct 2011]<br />
|}<br />
<br />
==== Asynchronous Filesystem and Volume Destruction ====<br />
<br />
Destroying a filesystem requires traversing all of its data in order to return its used blocks to the pool's free list. Before this feature the filesystem was not fully removed until all blocks had been reclaimed. If the destroy operation was interrupted by a reboot or power outage the next attempt to import the pool (probably during boot) would need to complete the destroy operation synchronously, possibly delaying a boot for long periods of time.<br />
<br />
With asynchronous destruction the filesystem's data is immediately moved to a "to be freed" list, allowing the destroy operation to complete without traversing any of the filesystem's data. A background process reclaims blocks from this "to be freed" list and is capable of resuming this process after reboots without slowing the pool import process.<br />
<br />
The new freeing algorithm also has a significant performance improvement when destroying clones. The old algorithm took time proportional to the number of blocks ''referenced'' by the clone, even if most of those blocks could not be reclaimed because they were still referenced by the clone's origin. The new algorithm only takes time proportional to the number of blocks unique to the clone.<br />
<br />
See this [http://blog.delphix.com/matt/2012/07/11/performance-of-zfs-destroy/ blog post] for more detailed performance analysis.<br />
<br />
Note: The <tt>async_destroy</tt> feature flag must be enabled to take advantage of this.<br />
<br />
{| class="wikitable"<br />
|-<br />
|'''illumos'''<br />
|[https://github.com/illumos/illumos-gate/commit/ad135b5d644628e791c3188a6ecbd9c257961ef8 May 2012]<br />
|-<br />
|'''FreeBSD'''<br />
|[https://github.com/freebsd/freebsd/commit/cc61ab2f133566dca51970d44cc49a4355039b5d June 2012]<br />
|-<br />
|'''ZFS on Linux'''<br />
|[https://github.com/zfsonlinux/zfs/commit/9ae529ec5dbdc828ff8326beae58062971d74b2e Jan 2013]<br />
|-<br />
|'''ZFS-OSX'''<br />
|[https://github.com/zfs-osx/zfs/commit/9ae529ec5dbdc828ff8326beae58062971d74b2e Jan 2013]<br />
|}<br />
<br />
==== Reduce Number of Empty bpobjs ====<br />
<br />
Every time OpenZFS takes a snapshot it creates on-disk block pointer objects (bpobj's) to track blocks associated with that snapshot. In common use cases most of these bpobj's are empty, but the number of bpobjs per-snapshot is proportional to the number of snapshots already taken of the same filesystem or volume. When a single filesystem or volume has many (tens of thousands) snapshots these unecessary empty bpobjs can waste space and cause performance problems. OpenZFS waits to create each bpobjs until the first entry is added to it, thus eliminating the empty bpobjs.<br />
<br />
Note: The <tt>empty_bpobj</tt> feature flag must be enabled to take advantage of this.<br />
<br />
{| class="wikitable"<br />
|-<br />
|'''illumos'''<br />
|[https://github.com/illumos/illumos-gate/commit/f17457368189aa911f774c38c1f21875a568bdca Aug 2012]<br />
|-<br />
|'''FreeBSD'''<br />
|[https://github.com/freebsd/freebsd/commit/d9fa2f486ee98b2557e1d5ad5f1af418c663cfc8 Aug 2012]<br />
|-<br />
|'''ZFS on Linux'''<br />
|[https://github.com/zfsonlinux/zfs/commit/753c38392ddff9d3cf140bb4d28f3bfba52c92d2 Dec 2012]<br />
|-<br />
|'''ZFS-OSX'''<br />
|[https://github.com/zfs-osx/zfs/commit/753c38392ddff9d3cf140bb4d28f3bfba52c92d2 Dec 2012]<br />
|}<br />
<br />
==== Single Copy ARC ====<br />
<br />
OpenZFS caches disk blocks in-memory in the adaptive replacement cache (ARC). Originally when the same disk block was accessed from different clones it was cached multiple times (one for each clone accessing the block) in case a clone planned to modify the block. With these changes OpenZFS caches at most one copy of every block unless a clone is actually modifying the block.<br />
<br />
{| class="wikitable"<br />
|-<br />
|'''illumos'''<br />
|[https://github.com/illumos/illumos-gate/commit/9253d63df408bb48584e0b1abfcc24ef2472382e Sep 2012]<br />
|-<br />
|'''FreeBSD'''<br />
|[https://github.com/freebsd/freebsd/commit/8e1fdec2c76a948b16ebf8e4abe2cb73a60d3477 Nov 2012]<br />
|-<br />
|'''ZFS on Linux'''<br />
|[https://github.com/zfsonlinux/zfs/commit/1eb5bfa3dcdaecb19543d9df13131374a7a42947 Dec 2012]<br />
|-<br />
|'''ZFS-OSX'''<br />
|[https://github.com/zfs-osx/zfs/commit/1eb5bfa3dcdaecb19543d9df13131374a7a42947 Dec 2012]<br />
|}<br />
<br />
==== TRIM Support ====<br />
<br />
TRIM support provides the ability to pass deletes / frees through to underlying vdevs that help to ensure devices such as SSD's, which rely on receiving TRIM / UNMAP requests for sectors which are no longer needed, maintain optimal performance.<br />
<br />
The current FreeBSD implementation builds a map of regions that were freed. On every write the<br />
code consults the map and removes ranges that were freed before, but are now overwritten.<br />
<br />
Freed blocks are not TRIMed immediately, there is a low priority thread that TRIMs ranges when the time comes.<br />
<br />
Support for TRIM has been demonstrated to significantly improved the general performance of SSD in the field, eliminating the need for regular secure erase cycles on busy hosts.<br />
<br />
An alternative method, which is arguably better, and works by tracking the metaslab allocator is also in progress and can be found here:<br />
[http://cr.illumos.org/~webrev/skiselkov/zfs_unmap/ ZFS TRIM Support for illumos]<br />
<br />
There is [https://github.com/zfsonlinux/zfs/pull/1016 a pull request for ZFS On Linux] which implements FreeBSD's (Sep 2012) ZFS TRIM support.<br />
<br />
{| class="wikitable"<br />
|-<br />
|'''illumos'''<br />
|not yet ported<br />
|-<br />
|'''FreeBSD'''<br />
|[http://svnweb.freebsd.org/base?view=revision&sortby=file&revision=240868 Sep 2012]<br />
|-<br />
|'''ZFS on Linux'''<br />
|not yet ported<br />
|-<br />
|'''ZFS-OSX'''<br />
|not yet ported<br />
|}<br />
<br />
==== FASTWRITE Algorithm ====<br />
<br />
Improves synchronous IO performance.<br />
<br />
{| class="wikitable"<br />
|-<br />
|'''illumos'''<br />
|not yet ported<br />
|-<br />
|'''FreeBSD'''<br />
|??<br />
|-<br />
|'''ZFS on Linux'''<br />
|[https://github.com/zfsonlinux/zfs/commit/920dd524fb2997225d4b1ac180bcbc14b045fda6 Oct 2012]<br />
|-<br />
|'''ZFS-OSX'''<br />
|[https://github.com/zfs-osx/zfs/commit/920dd524fb2997225d4b1ac180bcbc14b045fda6 Oct 2012]<br />
|}<br />
<br />
Note that a [https://github.com/ryao/zfs/commit/858822a04b4563657b2267131e90d9687d67e31b locking enhancement] is being reviewed.<br />
<br />
==== Block Freeing Performance Improvments ====<br />
<br />
Performance analysis of OpenZFS revealed that the algorithms used when freeing blocks could cause significant performance problems when freeing a large amount of blocks in a single transaction or when dealing with fragmented pools. Several performance improvements were made in this area.<br />
<br />
{| class="wikitable"<br />
|-<br />
|'''illumos'''<br />
|[https://github.com/illumos/illumos-gate/commit/01f55e48fb4d524eaf70687728aa51b7762e2e97 Nov 2012]<br />
|[https://github.com/illumos/illumos-gate/commit/16a4a8074274d2d7cc408589cf6359f4a378c861 Feb 2013]<br />
|[https://github.com/illumos/illumos-gate/commit/9eb57f7f3fbb970d4b9b89dcd5ecf543fe2414d5 Feb 2013]<br />
|-<br />
|'''FreeBSD'''<br />
|[https://github.com/freebsd/freebsd/commit/5d9b3f284b13ac492326e05f6ba4c00e98adf05c Nov 2012]<br />
|[https://github.com/freebsd/freebsd/commit/18e9a0422b52091035dae9d69bde9dd571a8ff7e Feb 2013]<br />
|[https://github.com/freebsd/freebsd/commit/18e9a0422b52091035dae9d69bde9dd571a8ff7e Feb 2013]<br />
|-<br />
|'''ZFS on Linux'''<br />
|[https://github.com/zfsonlinux/zfs/commit/55d85d5a8c45c4559a4a0e675c37b0c3afb19c2f May 2013]<br />
|[https://github.com/zfsonlinux/zfs/commit/e51be06697762215dc3b679f8668987034a5a048 June 2013]<br />
|not yet<br />
|-<br />
|'''ZFS-OSX'''<br />
|[https://github.com/zfs-osx/zfs/commit/55d85d5a8c45c4559a4a0e675c37b0c3afb19c2f May 2013]<br />
|[https://github.com/zfs-osx/zfs/commit/e51be06697762215dc3b679f8668987034a5a048 June 2013]<br />
|not yet<br />
|}<br />
<br />
==== nop-write ====<br />
<br />
ZFS supports end-to-end checksumming of every data block. When a cryptographically secure checksum is being used OpenZFS will compare the checksums of incoming writes to checksum of the existing on-disk data and avoid issuing any write i/o for data that has not changed. This can help performance and snapshot space usage in situations were the same files are regularly overwritten with almost-identical data (e.g. regular full-backups of large random-access files).<br />
<br />
{| class="wikitable"<br />
|-<br />
|'''illumos'''<br />
|[https://github.com/illumos/illumos-gate/commit/80901aea8e78a2c20751f61f01bebd1d5b5c2ba5 Nov 2012]<br />
|-<br />
|'''FreeBSD'''<br />
|[https://github.com/freebsd/freebsd/commit/3a0bfecf052237768517963f169d0797e2978f59 Nov 2012]<br />
|-<br />
|'''ZFS on Linux'''<br />
|Not yet (as of Sept. 13, 2013)<br />
|-<br />
|'''ZFS-OSX'''<br />
|not yet<br />
|}<br />
<br />
==== lz4 compression ====<br />
<br />
OpenZFS supports on-the-fly compression of all user data with a variety of compression algorithm. This feature adds support for the lz4 compression algorithm. lz4 is usually faster and compresses data better than lzjb, the old default OpenZFS compression algorithm.<br />
<br />
Note: The <tt>lz4_compress</tt> feature flag must be enabled to take advantage of this.<br />
<br />
{| class="wikitable"<br />
|-<br />
|'''illumos'''<br />
|[https://github.com/illumos/illumos-gate/commit/a6f561b4aee75d0d028e7b36b151c8ed8a86bc76 Jan 2013]<br />
|-<br />
|'''FreeBSD'''<br />
|[https://github.com/freebsd/freebsd/commit/c6d9dc1ad2d2e36220845b84a2d180bd97354797 Feb 2013]<br />
|-<br />
|'''ZFS on Linux'''<br />
|[https://github.com/zfsonlinux/zfs/commit/9759c60f1a1503e48dc5c45a209c3edd5758319f Jan 2013]<br />
|-<br />
|'''ZFS-OSX'''<br />
|[https://github.com/zfs-osx/zfs/commit/9759c60f1a1503e48dc5c45a209c3edd5758319f Jan 2013]<br />
|}<br />
<br />
==== synctask rewrite ====<br />
<br />
{| class="wikitable"<br />
|-<br />
|'''illumos'''<br />
|[https://github.com/illumos/illumos-gate/commit/3b2aab18808792cbd248a12f1edf139b89833c13 Feb 2013]<br />
|-<br />
|'''FreeBSD'''<br />
|[https://github.com/freebsd/freebsd/commit/f1985e5cd725ff1816cd4afbdee2d95b661883f0 March 2013]<br />
|-<br />
|'''ZFS on Linux'''<br />
|[https://github.com/zfsonlinux/zfs/commit/13fe019870c8779bf2f5b3ff731b512cf89133ef Sept 2013]<br />
|-<br />
|'''ZFS-OSX'''<br />
|not yet<br />
|}<br />
<br />
==== l2arc compression ====<br />
<br />
{| class="wikitable"<br />
|-<br />
|'''illumos'''<br />
|[https://github.com/illumos/illumos-gate/commit/aad02571bc59671aa3103bb070ae365f531b0b62 Jun 2013]<br />
|-<br />
|'''FreeBSD'''<br />
|[https://github.com/freebsd/freebsd/commit/b20363fe596a7e3a55d5b62f4d3fdb482c65c47a Jun 2013]<br />
|-<br />
|'''ZFS on Linux'''<br />
|[https://github.com/zfsonlinux/zfs/commit/3a17a7a99a1a6332d0999f9be68e2b8dc3933de1 Aug 2013]<br />
|-<br />
|'''ZFS-OSX'''<br />
|[https://github.com/zfs-osx/zfs/commit/3a17a7a99a1a6332d0999f9be68e2b8dc3933de1 Aug 2013]<br />
|}<br />
<br />
==== ARC Shouldn't Cache Freed Blocks ====<br />
<br />
Originally cached blocks in the ARC remained cached until they were evicted due to memory pressure, even if the underlying disk block was freed. In some workloads these freed blocks were so frequently accessed before they were freed that the ARC continued to cache them while evicting blocks which had not been freed yet. Since freed blocks could never be accessed again continuing to cache them was unnecessary. In OpenZFS ARC blocks are evicted immediately when their underlying data blocks are freed.<br />
<br />
{| class="wikitable"<br />
|-<br />
|'''illumos'''<br />
|[https://github.com/illumos/illumos-gate/commit/6e6d5868f52089b9026785bd90257a3d3f6e5ee2 Jun 2013]<br />
|-<br />
|'''FreeBSD'''<br />
|[https://github.com/freebsd/freebsd/commit/13d822743426263ee50bcf047ab41a1e386156a8 Jun 2013]<br />
|-<br />
|'''ZFS on Linux'''<br />
|[https://github.com/zfsonlinux/zfs/commit/df4474f92d0b1b8d54e1914fdd56be2b75f1ff5e Jun 2013]<br />
|-<br />
|'''ZFS-OSX'''<br />
|[https://github.com/zfs-osx/zfs/commit/df4474f92d0b1b8d54e1914fdd56be2b75f1ff5e Jun 2013]<br />
|}<br />
<br />
==== Improve N-way mirror read performance ====<br />
<br />
Queues read requests to least busy leaf vdev in mirrors.<br />
<br />
In addition to the vdev load biasing first implemented by ZFS on Linux in July 2013, the FreeBSD October 2013 version added I/O locality and device rotational information to further enhance the performance.<br />
<br />
{| class="wikitable"<br />
!OS<br />
!Load<br />
!Load + I/O Locality & Rotational Information<br />
|-<br />
|'''illumos'''<br />
|not yet ported<br />
|not yet ported<br />
|-<br />
|'''FreeBSD'''<br />
|N/A<br />
|[http://svnweb.freebsd.org/changeset/base/256956 23rd October 2013]<br />
|-<br />
|'''ZFS on Linux'''<br />
|[https://github.com/zfsonlinux/zfs/commit/556011dbec2d10579819078559a77630fc559112 Jul 2013]<br />
|not yet ported<br />
|-<br />
|'''ZFS-OSX'''<br />
|[https://github.com/zfs-osx/zfs/commit/556011dbec2d10579819078559a77630fc559112 Jul 2013]<br />
|not yet ported<br />
|}<br />
<br />
==== Smoother Write Throttle ====<br />
<br />
The write throttle (dsl_pool_tempreserve_space() and txg_constrain_throughput()) is rewritten to produce much more consistent delays when under constant load. The new write throttle is based on the amount of dirty data, rather than guesses about future performance of the system. When there is a lot of dirty data, each transaction (e.g. write() syscall) will be delayed by the same small amount. This eliminates the "brick wall of wait" that the old write throttle could hit, causing all transactions to wait several seconds until the next txg opens. One of the keys to the new write throttle is decrementing the amount of dirty data as i/o completes, rather than at the end of spa_sync(). Note that the write throttle is only applied once the i/o scheduler is issuing the maximum number of outstanding async writes. See the block comments in dsl_pool.c and above dmu_tx_delay() for more details.<br />
<br />
The ZFS i/o scheduler (vdev_queue.c) now divides i/os into 5 classes: sync read, sync write, async read, async write, and scrub/resilver. The scheduler issues a number of concurrent i/os from each class to the device. Once a class has been selected, an i/o is selected from this class using either an elevator algorithem (async, scrub classes) or FIFO (sync classes). The number of concurrent async write i/os is tuned dynamically based on i/o load, to achieve good sync i/o latency when there is not a high load of writes, and good write throughput when there is. See the block comment in vdev_queue.c for more details.<br />
<br />
{| class="wikitable"<br />
|-<br />
|'''illumos'''<br />
|[https://github.com/illumos/illumos-gate/commit/69962b5647e4a8b9b14998733b765925381b727e Aug 2013]<br />
|-<br />
|'''FreeBSD'''<br />
|not yet<br />
|-<br />
|'''ZFS on Linux'''<br />
|not yet<br />
|-<br />
|'''ZFS-OSX'''<br />
|not yet<br />
|}<br />
<br />
== Dataset Properties ==<br />
<br />
These are new filesystem, volume, and snapshot properties which can be accessed with the <tt>zfs(1)</tt> command's <tt>get</tt> subcommand. See the <tt>zfs(1)</tt> manpage for your distribution for more details on each of these properties.<br />
<br />
{| class="wikitable"<br />
!Property<br />
!Description<br />
!illumos<br />
!FreeBSD<br />
!ZFS on Linux<br />
!ZFS-OSX<br />
|-<br />
|<tt>refcompressratio</tt><br />
|The compression ratio acheived for all data referenced by (but not necessarily unique to) a snapshot, filesystem, or volume, expressed as a multiplier.<br />
|[https://github.com/illumos/illumos-gate/commit/187d6ac08adc31ea6868bde0cfbbb288826254e8 Jun 2011]<br />
|[https://github.com/freebsd/freebsd/commit/333e34b938a2b5e7b036e02b36408880b415109c Jun 2011]<br />
|[https://github.com/zfsonlinux/zfs/commit/77999e804fff35782ab4b578d2cecf064c54a841 Aug 2012]<br />
|[https://github.com/zfs-osx/zfs/commit/77999e804fff35782ab4b578d2cecf064c54a841 Aug 2012]<br />
|-<br />
|<tt>clones</tt><br />
|For snapshots, this property is a comma-separated list of filesystems or volumes which are clones of this snapshot.<br />
|[https://github.com/illumos/illumos-gate/commit/e5351341b58845eee9d722bd71543d5a7c26b6cc Nov 2011]<br />
|[https://github.com/freebsd/freebsd/commit/73cab7197174153a718dedc97ff344341bcf6098 Nov 2011]<br />
|[https://github.com/zfsonlinux/zfs/commit/330d06f90d143b41b276796526a66a1c1fff046d Jul 2012]<br />
|[https://github.com/zfs-osx/zfs/commit/330d06f90d143b41b276796526a66a1c1fff046d Jul 2012]<br />
|-<br />
|<tt>written</tt><br />
|The amount of referenced space written to this dataset since the previous snapshot.<br />
|[https://github.com/illumos/illumos-gate/commit/e5351341b58845eee9d722bd71543d5a7c26b6cc Nov 2011]<br />
|[https://github.com/freebsd/freebsd/commit/73cab7197174153a718dedc97ff344341bcf6098 Nov 2011]<br />
|[https://github.com/zfsonlinux/zfs/commit/330d06f90d143b41b276796526a66a1c1fff046d Jul 2012]<br />
|[https://github.com/zfs-osx/zfs/commit/330d06f90d143b41b276796526a66a1c1fff046d Jul 2012]<br />
|-<br />
|<tt>written@''<snap>''</tt><br />
|The amount of referenced space written to this dataset since the specified snapshot. This is the space referenced by this dataset, but not referenced by the specified snapshot.<br />
|[https://github.com/illumos/illumos-gate/commit/e5351341b58845eee9d722bd71543d5a7c26b6cc Nov 2011]<br />
|[https://github.com/freebsd/freebsd/commit/73cab7197174153a718dedc97ff344341bcf6098 Nov 2011]<br />
|[https://github.com/zfsonlinux/zfs/commit/330d06f90d143b41b276796526a66a1c1fff046d Jul 2012]<br />
|[https://github.com/zfs-osx/zfs/commit/330d06f90d143b41b276796526a66a1c1fff046d Jul 2012]<br />
|-<br />
|<tt>logicalused</tt>, <tt>logicalreferenced</tt><br />
|The amount of space used or referenced, before taking into account compression.<br />
|[https://github.com/illumos/illumos-gate/commit/77372cb0f35e8d3615ca2e16044f033397e88e21 Feb 2013]<br />
|[https://github.com/freebsd/freebsd/commit/2bed8f5691b7572d6f31bfc68e9f762a938af863 Mar 2013]<br />
|not yet<br />
|not yet<br />
|-<br />
|}</div>Lundmanhttps://openzfs.org/w/index.php?title=OpenZFS_Developer_Summit&diff=1129OpenZFS Developer Summit2013-10-21T01:38:11Z<p>Lundman: /* Registration */</p>
<hr />
<div>== OpenZFS Developer Summit 2013 ==<br />
Delphix is hosting a developer-focused event for OpenZFS. The goal of the event is to foster cross-platform community discussions of OpenZFS work, and to make progress on some of the projects proposed for this community.<br />
<br />
''We were previously calling this event "OpenZFS Day", but decided to rename it to reflect its target audience of ZFS developers.''<br />
<br />
The high-level agenda is:<br />
{|border="1" cellpadding="10"<br />
|- <br />
|valign="top"|Monday, Nov 18<br />
|<br />
* Talks<br />
* Breakout sessions<br />
* Hackathon planning<br />
* Beer bash<br />
|-<br />
|Tuesday, Nov 19<br />
|Hackathon (hopefully start work on some of the [[Projects]] the community has suggested)<br />
|}<br />
<br />
=== Location ===<br />
The event will be in the San Francisco Bay Area, most likely in San Francisco. The specific location will depend on how many people plan to attend. The hope is that we can have it at the [http://www.delphix.com/company/about-delphix/ Delphix office] in San Francisco. If it becomes too big, we'll have to reconsider and find a different location.<br />
<br />
=== Speaker Info ===<br />
'''Note: If you are in the room, you are potentially a speaker.''' This will be done in unconference style, so every attendee should come prepared to present or otherwise lead a discussion or session of up to 45 minutes. You can indicate potential topics in the registration table below.<br />
<br />
Equipment available:<br />
* Projector<br />
* Whiteboard<br />
<br />
=== Hackathon ===<br />
The goals of the hackathon are:<br />
* to get people working with ZFS engineers from outside their normal circles<br />
* to start work on some of the [[projects]] we'd like to accomplish<br />
Therefore, we should plan to work in small teams of 2-3 engineers. The team members could be pair-programming, splitting up the work into discrete tasks for each person, or advising / implementing.<br />
<br />
==== Hackathon ideas ====<br />
''Add your idea and your name below. Be prepared to explain your idea at the beginning of the hackathon and enlist/entice others to help with it.''<br />
* Userland ioctls: support for send/recv (fd operations over the wire) [[User:mahrens]]<br />
* larger (1MB) blocksize: shouldn't be too hard if we ignore performance impact [[User:mahrens]]<br />
* dedicated kmem_cache for dedup table entries<br />
* stdin / stdout buffer to improve performance of zfs send and receive<br />
* replace dn_ranges/free_range_t with range_tree_t [[User:mahrens]]<br />
* ZFS mechanism to override devices' reported sector size (512 vs 4k)<br />
<br />
=== Registration ===<br />
If you plan to attend the event, please edit this page and add yourself below, or contact [mailto:ann.togasaki@gmail.com ann.togasaki@gmail.com]. If you would like to present and/or have suggestions for what you would like to learn about, please include those details. We are expecting everyone will be there to contribute/participate. (If you need edit permission for this page, email your login name to [mailto:admin@open-zfs.org admin@open-zfs.org])<br />
<br />
'''The sign up deadline is 11:59pm Pacific Time on Sunday, October 27, 2013'''. We need to have a cutoff date so that we can plan for a space that is large enough to accommodate everyone who wants to attend.<br />
<br />
{|border="1" cellpadding="10"<br />
|- <br />
!| Name<br />
!| Affiliation<br />
!| What do you want to talk about?<br />
!| Your experience with ZFS<br />
!| Travel information<br />
!| T-shirt Size<br />
!| Food allergies/preferences? (please list)<br />
|-<br />
| [[User:mahrens | Matt Ahrens]]<br />
| Delphix<br />
| OpenZFS repo: what interfaces should be supported<br />
| Founded ZFS, OpenZFS<br />
| Local to SF<br />
| M<br />
| none<br />
|-<br />
|[[User:sanjeev | Sanjeev Bagewadi]]<br />
| Pluribus Networks<br />
| <br />
| Was part of the RPE team in Sun which fixed ZFS issues faced by customers<br />
| Will be in the Bay Area around that time<br />
| M<br />
| none<br />
|-<br />
| [[User:behlendorf | Brian Behlendorf]]<br />
| LLNL<br />
| Portable memory management & FMA infrastructure<br />
| ZFS on Linux Maintainer<br />
| Local to east Bay Area<br />
| L<br />
| none<br />
|-<br />
| [[User:Max | Max Grossman]]<br />
| Delphix<br />
| Making it easier to get new ZFS developers up to speed (retrospective on the hole birth feature)<br />
| 3 months so far, still so much to learn...<br />
| Local<br />
| L<br />
| none<br />
|-<br />
| [[User:ahl | Adam Leventhal]]<br />
| Delphix<br />
| ZFS performance investigations?<br />
| RAID-Z2/3, performance work, some small ZFS tasks here and there<br />
| local<br />
| L<br />
| none<br />
|-<br />
| [[User:lundman | Jorgen Lundman]]<br />
| GMO Internet<br />
| ZFS, portability<br />
| ZFS on OSX<br />
| Tokyo<br />
| XL<br />
| none<br />
|-<br />
| [[User:maxim | Maxim Martynov]]<br />
| <br />
| <br />
| <br />
| <br />
| M<br />
| none<br />
|-<br />
| [[User:kritter | Karyn Ritter]]<br />
| Delphix<br />
| Community management (discussion)<br />
| <br />
| local<br />
| M<br />
| <br />
|-<br />
| [[User:csiden | Chris Siden]]<br />
| Delphix<br />
| ZFS Channel Programs<br />
| Worked on feature flags and async destroy<br />
| local<br />
| L<br />
| none<br />
|-<br />
| Alex Solomatnikov<br />
| <br />
| <br />
| <br />
| <br />
| M<br />
| none<br />
|-<br />
| [[User:prakashsurya | Prakash Surya]]<br />
| LLNL<br />
| <br />
| Misc. work on Linux port. Much to learn, still.<br />
| Local to east Bay Area<br />
| M<br />
| none<br />
|-<br />
| [[User:gwilson | George Wilson]]<br />
| Delphix<br />
| performance on full & fragmented pools<br />
| Implemented lots of SPA & VDEV stuff<br />
| flying in from Atlanta ~Monday - Thursday (TBD)<br />
| ?<br />
| none<br />
|}<br />
<br />
– ''please keep the table above sorted by last name.''<br />
<br />
=== Sponsors ===<br />
Please contact [mailto:ann.togasaki@gmail.com ann.togasaki@gmail.com] if you'd like to be a sponsor of this event.<br />
<br />
Sponsorship opportunities include:<br />
<br />
* Breakfast (2 days)<br />
* Lunch (2 days)<br />
* Coffee Breaks (2 days)<br />
* Beer Bash (day 1)<br />
* T-Shirts <br />
* Unspecified - for all the miscellaneous expenses<br />
<br />
What do you get for sponsoring:<br />
<br />
* Your name/link on this page!<br />
* Thank you mention during the opening and closing<br />
* Space to put your pop-up banner at the conference venue<br />
* An opportunity to be known as a ZFS supporter in a very talented and influential community.</div>Lundmanhttps://openzfs.org/w/index.php?title=OpenZFS_Developer_Summit&diff=1128OpenZFS Developer Summit2013-10-21T01:37:46Z<p>Lundman: </p>
<hr />
<div>== OpenZFS Developer Summit 2013 ==<br />
Delphix is hosting a developer-focused event for OpenZFS. The goal of the event is to foster cross-platform community discussions of OpenZFS work, and to make progress on some of the projects proposed for this community.<br />
<br />
''We were previously calling this event "OpenZFS Day", but decided to rename it to reflect its target audience of ZFS developers.''<br />
<br />
The high-level agenda is:<br />
{|border="1" cellpadding="10"<br />
|- <br />
|valign="top"|Monday, Nov 18<br />
|<br />
* Talks<br />
* Breakout sessions<br />
* Hackathon planning<br />
* Beer bash<br />
|-<br />
|Tuesday, Nov 19<br />
|Hackathon (hopefully start work on some of the [[Projects]] the community has suggested)<br />
|}<br />
<br />
=== Location ===<br />
The event will be in the San Francisco Bay Area, most likely in San Francisco. The specific location will depend on how many people plan to attend. The hope is that we can have it at the [http://www.delphix.com/company/about-delphix/ Delphix office] in San Francisco. If it becomes too big, we'll have to reconsider and find a different location.<br />
<br />
=== Speaker Info ===<br />
'''Note: If you are in the room, you are potentially a speaker.''' This will be done in unconference style, so every attendee should come prepared to present or otherwise lead a discussion or session of up to 45 minutes. You can indicate potential topics in the registration table below.<br />
<br />
Equipment available:<br />
* Projector<br />
* Whiteboard<br />
<br />
=== Hackathon ===<br />
The goals of the hackathon are:<br />
* to get people working with ZFS engineers from outside their normal circles<br />
* to start work on some of the [[projects]] we'd like to accomplish<br />
Therefore, we should plan to work in small teams of 2-3 engineers. The team members could be pair-programming, splitting up the work into discrete tasks for each person, or advising / implementing.<br />
<br />
==== Hackathon ideas ====<br />
''Add your idea and your name below. Be prepared to explain your idea at the beginning of the hackathon and enlist/entice others to help with it.''<br />
* Userland ioctls: support for send/recv (fd operations over the wire) [[User:mahrens]]<br />
* larger (1MB) blocksize: shouldn't be too hard if we ignore performance impact [[User:mahrens]]<br />
* dedicated kmem_cache for dedup table entries<br />
* stdin / stdout buffer to improve performance of zfs send and receive<br />
* replace dn_ranges/free_range_t with range_tree_t [[User:mahrens]]<br />
* ZFS mechanism to override devices' reported sector size (512 vs 4k)<br />
<br />
=== Registration ===<br />
If you plan to attend the event, please edit this page and add yourself below, or contact [mailto:ann.togasaki@gmail.com ann.togasaki@gmail.com]. If you would like to present and/or have suggestions for what you would like to learn about, please include those details. We are expecting everyone will be there to contribute/participate. (If you need edit permission for this page, email your login name to [mailto:admin@open-zfs.org admin@open-zfs.org])<br />
<br />
'''The sign up deadline is 11:59pm Pacific Time on Sunday, October 27, 2013'''. We need to have a cutoff date so that we can plan for a space that is large enough to accommodate everyone who wants to attend.<br />
<br />
{|border="1" cellpadding="10"<br />
|- <br />
!| Name<br />
!| Affiliation<br />
!| What do you want to talk about?<br />
!| Your experience with ZFS<br />
!| Travel information<br />
!| T-shirt Size<br />
!| Food allergies/preferences? (please list)<br />
|-<br />
| [[User:mahrens | Matt Ahrens]]<br />
| Delphix<br />
| OpenZFS repo: what interfaces should be supported<br />
| Founded ZFS, OpenZFS<br />
| Local to SF<br />
| M<br />
| none<br />
|-<br />
|[[User:sanjeev | Sanjeev Bagewadi]]<br />
| Pluribus Networks<br />
| <br />
| Was part of the RPE team in Sun which fixed ZFS issues faced by customers<br />
| Will be in the Bay Area around that time<br />
| M<br />
| none<br />
|-<br />
| [[User:behlendorf | Brian Behlendorf]]<br />
| LLNL<br />
| Portable memory management & FMA infrastructure<br />
| ZFS on Linux Maintainer<br />
| Local to east Bay Area<br />
| L<br />
| none<br />
|-<br />
| [[User:Max | Max Grossman]]<br />
| Delphix<br />
| Making it easier to get new ZFS developers up to speed (retrospective on the hole birth feature)<br />
| 3 months so far, still so much to learn...<br />
| Local<br />
| L<br />
| none<br />
|-<br />
| [[User:ahl | Adam Leventhal]]<br />
| Delphix<br />
| ZFS performance investigations?<br />
| RAID-Z2/3, performance work, some small ZFS tasks here and there<br />
| local<br />
| L<br />
| none<br />
|-<br />
| [[User:lundman | Jorgen Lundman]]<br />
| GMO Internet<br />
| ZFS, portability<br />
| ZFS on OSX<br />
| Tokyo<br />
| XL<br />
| none<br />
-<br />
| [[User:maxim | Maxim Martynov]]<br />
| <br />
| <br />
| <br />
| <br />
| M<br />
| none<br />
|-<br />
| [[User:kritter | Karyn Ritter]]<br />
| Delphix<br />
| Community management (discussion)<br />
| <br />
| local<br />
| M<br />
| <br />
|-<br />
| [[User:csiden | Chris Siden]]<br />
| Delphix<br />
| ZFS Channel Programs<br />
| Worked on feature flags and async destroy<br />
| local<br />
| L<br />
| none<br />
|-<br />
| Alex Solomatnikov<br />
| <br />
| <br />
| <br />
| <br />
| M<br />
| none<br />
|-<br />
| [[User:prakashsurya | Prakash Surya]]<br />
| LLNL<br />
| <br />
| Misc. work on Linux port. Much to learn, still.<br />
| Local to east Bay Area<br />
| M<br />
| none<br />
|-<br />
| [[User:gwilson | George Wilson]]<br />
| Delphix<br />
| performance on full & fragmented pools<br />
| Implemented lots of SPA & VDEV stuff<br />
| flying in from Atlanta ~Monday - Thursday (TBD)<br />
| ?<br />
| none<br />
|}<br />
<br />
– ''please keep the table above sorted by last name.''<br />
<br />
=== Sponsors ===<br />
Please contact [mailto:ann.togasaki@gmail.com ann.togasaki@gmail.com] if you'd like to be a sponsor of this event.<br />
<br />
Sponsorship opportunities include:<br />
<br />
* Breakfast (2 days)<br />
* Lunch (2 days)<br />
* Coffee Breaks (2 days)<br />
* Beer Bash (day 1)<br />
* T-Shirts <br />
* Unspecified - for all the miscellaneous expenses<br />
<br />
What do you get for sponsoring:<br />
<br />
* Your name/link on this page!<br />
* Thank you mention during the opening and closing<br />
* Space to put your pop-up banner at the conference venue<br />
* An opportunity to be known as a ZFS supporter in a very talented and influential community.</div>Lundmanhttps://openzfs.org/w/index.php?title=Projects&diff=1083Projects2013-10-11T08:23:10Z<p>Lundman: Adding desired quota work, tell me off in Talks if it is too weird.</p>
<hr />
<div>== Active projects ==<br />
<br />
=== Resumable send/receive ===<br />
<br />
[https://www.illumos.org/issues/2605 illumos gate - Feature #2605: Partial/incremental ZFS send/receive - illumos.org]<br />
<br />
Work in progress by [[User:Csiden | Chris Siden]].<br />
<br />
=== Storage of small files in dnode === <br />
<br />
Work in progress by [[User:Mahrens | Matt Ahrens]].<br />
<br />
=== Raspberry Pi® support ===<br />
<br />
Based on ZFS on Linux, which already works on ARM. <br />
<br />
Unresolved issues include: running out of kernel virtual address space.<br />
<br />
Work in progress by [[User:Ryao | Ryao]].<br />
<br />
== Notes from meetings ==<br />
<br />
=== Brainstorm, 18th September 2013 ===<br />
<br />
[[Delphix_Brainstorming | Notes from the meeting that preceded Delphix's semi-annual Engineering Kick Off]] (EKO)<br />
* immediately pursuable ideas, plus long-term and strategic thoughts.<br />
<br />
== Inter-platform coordination ideas ==<br />
<br />
Ideas for projects that would help coordinate changes between platforms …<br />
<br />
=== Mechanism for pull changes from one place to another ===<br />
<br />
Make it easier to build, test, code review, and integrate ZFS changes into illumos.<br />
<br />
=== Cross-platform test suite ===<br />
<br />
One sourcebase, rather than porting STF to every platform?<br />
<br />
Maybe integrate [https://github.com/behlendorf/xfstests XFS Test Suite].<br />
<br />
=== Userland ZFS ===<br />
<br />
We already have ztest / libzpool and want to: <br />
* expand this to also be able to test more of zfs in userland<br />
* be able to run /sbin/zfs, /sbin/zpool against userland implementation<br />
* be able to run most of testrunner (and/or STF) test suite against userland implementation<br />
<br />
=== ZFS (ZPL) version feature flags ===<br />
<br />
Import ZFS on Linux sa=xattr into illumos.<br />
<br />
=== /dev/zfs ioctl interface versioning ===<br />
<br />
Ensure that future additions/changes to the interface maintain maximum compatibility with userland tools. <br />
<br />
Enable FreeBSD Linux jails / illumos lx brandz to use ZFS on Linux utilities. <br />
<br />
=== Port ZPIOS from ZFS on Linux to illumos ===<br />
<br />
[http://zfsonlinux.org/example-zpios.html ZPIOS example]<br />
<br />
This would require a rewrite to not use Linux interfaces.<br />
<br />
=== Virtual machine images with OpenZFS ===<br />
<br />
To easily try OpenZFS on a choice of distributions within a virtual machine:<br />
* images could be built for running on public clouds<br />
* images for installing to real hardware.<br />
<br />
[[Talk:Project_Ideas#Virtual_machine_images | Discuss]] …<br />
<br />
== General feature ideas ==<br />
<br />
=== [[Projects/ZFS Channel Programs | ZFS channel programs]] ===<br />
<br />
=== Device removal ===<br />
<br />
Based on indirect vdevs, rather than bprewrite.<br />
<br />
=== Reflink support ===<br />
<br />
[http://lwn.net/Articles/331808/ The two sides of reflink() <nowiki>[LWN.net]</nowiki>]<br />
<br />
=== Unified ashift handling ===<br />
<br />
[http://www.listbox.com/member/archive/182191/2013/07/search/YXNoaWZ0/sort/subj/page/3/entry/7:58/20130703201427:AEA03DD0-E43E-11E2-A883-F4AAC72FE4D2/ <nowiki>[illumos-zfs]</nowiki> Specifying ashift when creating vdevs] (2013-07-03)<br />
<br />
=== 1MB blocksize ===<br />
<br />
Preferably compatible with pool version 32, as pool-feature-flag. <br />
<br />
=== RAID-Z hybrid allocator ===<br />
<br />
Preferably compatible with pool version 29 for Solaris 10u11 compatibility.<br />
<br />
=== Replace larger ZIO caches with explicit pages ===<br />
<br />
Subproject: document useful kernel interfaces for page manipulation on various platforms<br />
<br />
=== Improved SPA namespace collision management ===<br />
<br />
Needed mostly by virtual machine hosts. Work in progress in Gentoo.<br />
<br />
Temporary pool names in zpool import <br />
* [http://www.listbox.com/member/archive/182191/2013/07/search/YXNoaWZ0/sort/subj/page/3/entry/6:58/20130701131204:56A77554-E271-11E2-8F75-EDC51164E148/ <nowiki>[illumos-zfs]</nowiki> RFC: zpool import -t for temporary pool names] (2013-07-01)<br />
<br />
Temporary pool names in zpool create. <br />
<br />
=== TRIM support ===<br />
<br />
Realtime TRIM. <br />
<br />
Free space TRIM: <br />
<br />
* walk metaslab space maps and issue discard commands to the vdevs.<br />
<br />
=== Platform agnostic encryption support ===<br />
<br />
Preferably compatible with pool version 30, as pool-feature-flag.<br />
<br />
The early ZFS encryption code published in the zfs-crypto repository of OpenSolaris.org could be a starting point. A copy is available from [[User:Ryao | Richard Yao]] upon request.<br />
<br />
=== Deduplication improvements ===<br />
<br />
[http://www.listbox.com/member/archive/182191/2013/02/search/Ymxvb20gZmlsdGVycw/sort/time_rev/page/1/entry/8:16/20130212183221:70E13332-756C-11E2-996D-F0C715E11FC0/ Bloom filter].<br />
<br />
Convert synchronous writes to asynchronous writes when an ARC miss occurs during a lookup against the DDT.<br />
<br />
Use dedicated kmem_cache for deduplication table entries: <br />
* easy to implement<br />
* will reduce DDT entries from 512-bytes to 320-bytes.<br />
<br />
=== ZFS Compression / Dedup to favour provider ===<br />
<br />
Currently, as a storage provider, if a customer has 100MB of quota available, and upload 50MB of data<br />
which compresses/dedups to 25MB. The customer's quota is only reduced by 25MB. The reward favours the customer.<br />
It is desirable as a provider, to be able to reverse this logic such that the customer's quota is reduced by<br />
50MB and the 25MB compression/dedup saved, is to the provider's benefit. Similar to how Google/Amazon/Cloud-Feature.acme already handles it. You get 2G of quota, and any compression saved is to Google's benefit.<br />
<br />
* property(?) to charge quota usage by before-compression-dedup size.<br />
<br />
== Lustre feature ideas ==<br />
<br />
The [http://www.lustre.org/ Lustre project] supports the use of ZFS as an Object Storage Target. They maintain their [http://wiki.lustre.org/index.php/Architecture_-_ZFS_for_Lustre#ZFS_Features_Required_by_Lustre own feature request page] with ZFS project ideas. Below is a list of project ideas that are well defined, benefit Lustre and have no clear benefit outside of that context.<br />
<br />
=== Collapsible ZAP objects ===<br />
<br />
E.g. fatzap -> microzap downgrades.<br />
<br />
=== Data on separate devices ===<br />
<br />
[http://wiki.lustre.org/index.php/Architecture_-_ZFS_for_Lustre#Data_on_Separate_Devices Architecture - ZFS for Lustre] …<br />
<br />
=== Large dnodes ===<br />
<br />
[http://wiki.lustre.org/index.php/Architecture_-_ZFS_large_dnodes Architecture - ZFS large dnodes] …<br />
<br />
=== TinyZAP ===<br />
<br />
[http://wiki.lustre.org/index.php/Architecture_-_ZFS_TinyZAP Architecture - ZFS TinyZAP] …<br />
<br />
== Awareness-raising ideas ==<br />
<br />
… awareness of the [[Main_Page | quality, utility, and availability]] of open source implementations of ZFS. <br />
<br />
=== Quality ===<br />
<br />
Please add or [[Talk:Projects | discuss]] your ideas. <br />
<br />
=== Utility ===<br />
<br />
==== ZFS and OpenZFS in three minutes (or less) ====<br />
<br />
A very short and light video/animation to grab the attention of people who don't yet realise why ZFS is an extraordinarily good thing. <br />
<br />
For an entertaining example of how a little history (completely unrelated to storage) can be taught in ninety seconds, see [http://www.youtube.com/watch?v=sqohqlTnLrE&list=PL2E867DCE2D1CEF00 Hohenwerfen Fortress - The Imprisoned Prince Bishop] ([http://www.salzburg-burgen.at/en/werfen/ context]) (part of the [http://www.zonemedia.at/en/projects/ ZONE Media] portfolio).<br />
<br />
A very short video for ZFS and OpenZFS might throw in all that's good, using plain english wherever possible, including: <br />
* very close to the beginning, the word ''resilience''<br />
* ''verifiable integrity of data'' and so on<br />
* some basic comparisons (NTFS, HFS Plus, ReFS)<br />
<br />
– with the 2010 fork in the midst but (blink and you'll miss that milestone) the lasting impression from the video is that '''ZFS is great''' ('''years ahead of the alternatives''') and OpenZFS is rapidly making it better for a broader user base. <br />
<br />
Hint: there exist many ZFS-related videos but many are a tad dry, and cover a huge amount of content. Aim for two minutes :-) … [[Talk:Projects | discuss…]]<br />
<br />
=== Availability ===<br />
<br />
Please add or [[Talk:Projects | discuss]] your ideas. <br />
<br />
=== General ===<br />
<br />
An OpenZFS channel on YouTube. Something more appealing and naturally better organised than the automatically generated [http://www.youtube.com/channel/HCNjOOYCUqXF8 ZFS] channel.<br />
<br />
https://twitter.com/DeirdreS/status/322422786184314881 (2013-02) draws attention to ZFS-related content amongst [http://www.beginningwithi.com/2013/04/11/technical-videos/ videos listed by Deirdré Straughan].</div>Lundmanhttps://openzfs.org/w/index.php?title=Distributions&diff=808Distributions2013-09-18T12:16:08Z<p>Lundman: /* ZFS-OSX */ remove PureDarwin, remove negative "unstable" connotation</p>
<hr />
<div>Open source distributions of OpenZFS are available for the following open source platforms. <br />
<br />
(For commercial products, see [[companies]].)<br />
<br />
= Darwin =<br />
<br />
At the core of [http://blog.opengroup.org/2012/07/25/apple-registers-mac-os-x-10-8-mountain-lion-to-the-unix-03-standard/ Mac OS X Mountain Lion, which is certified to The Open Group UNIX® 03 standard], are [http://opensource.apple.com Apple open source] [http://en.wikipedia.org/wiki/Darwin_(operating_system) Darwin] technologies. <br />
<br />
== [https://github.com/zfs-osx ZFS-OSX] ==<br />
{|cellpadding="20"<br />
|align="center"|[[file:MacZFS-logo.png |100px|link=https://github.com/zfs-osx]]<br> MacZFS<br />
|<br />
* Port of ZFS on Linux<br />
* alpha, developer preview – please use only with test pools<br />
* for use with Mac OS X 10.6 – OS X 10.9<br />
<br />
* occasional disk images at http://lundman.net/ftp/osx.zfs/<br />
* will eventually become new version of [http://maczfs.org/ MacZFS].<br />
|}<br />
<br />
= FreeBSD =<br />
<br />
FreeBSD is a full general purpose operating system. There are also several specialized distributions.<br />
<br />
== [https://wiki.debian.org/Debian_GNU/kFreeBSD Debian GNU/kFreeBSD] ==<br />
{|cellpadding="25"<br />
|[[file:Debian-openlogo-100.jpg |80px|link=https://wiki.debian.org/Debian_GNU/kFreeBSD]]<br />
|<br />
* General purpose GNU distribution for amd64/i386<br />
* Uses the FreeBSD kernel, which provides an OpenZFS implementation<br />
* An official Debian release, still using GNU libc and with ninety percent of the same software packages available<br />
* ''wheezy'' stable release:<br />
** able to dual-boot 9.0 (default) or 8.3 kernels of FreeBSD<br />
** zpool version 28 (deduplication, raidz3, removable log devices)<br />
** still lacks support for ''ashift='', and important development tools like DTrace<br />
** installer supports creation of zpools, installing to them, and booting directly from them with GRUB2<br />
* ''testing'' release will be updated with new FreeBSD kernel releases, gaining many OpenZFS enhancements, including support for lz4 compression<br />
|}<br />
<br />
== [http://www.freebsd.org/ FreeBSD] ==<br />
{|cellpadding="10"<br />
|[[file:FreeBSD-logo.png |120px|link=http://freebsd.org]]<br />
|<br />
* General purpose server OS<br />
* [http://www.freebsd.org/releases/ download]<br />
* browse ZFS source code in [https://github.com/freebsd/freebsd/tree/master/sys/cddl/contrib/opensolaris/uts/common/fs/zfs github] or [http://svnweb.freebsd.org/base/head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/ websvn] or [http://nxr.netbsd.org/search?q=&project=src-freebsd OpenGrok]<br />
|}<br />
<br />
== [http://www.freenas.org/ FreeNAS] ==<br />
{|cellpadding="10"<br />
|[[file:FreeNAS_Shark_Transparent_on_dark.png |120px|link=http://www.freenas.org/]]<br />
|<br />
* NAS appliance software<br />
* [http://www.ixsystems.com/storage/ix/truenas/ commercial support] available for sister product TrueNAS from iXsystems.<br />
|}<br />
<br />
== [http://www.pcbsd.org/ PC-BSD] ==<br />
{|cellpadding="10"<br />
|[[file:Pcbsd-logo.png|120px|link=http://www.pcbsd.org/]]<br />
|<br />
* Workstation/desktop OS<br />
* [http://www.ixsystems.com/support-center/ix/software/pc-bsd.html commercial support] available from iXsystems.<br />
|}<br />
<br />
= illumos =<br />
{|cellpadding="15"<br />
|[[file:BigHighResPhoenixLogotypeRGB.png |120px|link=http://illumos.org]]<br />
|<br />
The [http://www.illumos.org illumos] codebase is the foundation for various distributions – comparable to the relationship between the Linux kernel and Linux distributions.<br />
* Forked from the OpenSolaris codebase in 2010<br />
* browse ZFS source code in [http://src.illumos.org/source/xref/illumos-gate/usr/src/uts/common/fs/zfs opengrok] or [https://github.com/illumos/illumos-gate/tree/master/usr/src/uts/common/fs/zfs github]<br />
|}<br />
<br />
== [http://omnios.omniti.com/ OmniOS] ==<br />
{|cellpadding="15"<br />
|[[file:OmniOS_logo.png |100px|link=http://omnios.omniti.com/]]<br />
|<br />
* General purpose server OS<br />
* [http://omnios.omniti.com/wiki.php/Installation download]<br />
* [https://github.com/omniti-labs/illumos-omnios/tree/master/usr/src/uts/common/fs/zfs source code]<br />
* [http://omniti.com/does/omnios commercial support] available from [http://omniti.com/ OmniTI].<br />
|}<br />
<br />
== [http://openindiana.org/ OpenIndiana] ==<br />
* General purpose server OS<br />
* [http://openindiana.org/download/ download]<br />
* [https://hg.openindiana.org/ source code]<br />
<br />
= Linux =<br />
<br />
== Gentoo ==<br />
{|cellpadding="20"<br />
|[[file:Gblend.png |80px|link=http://www.gentoo.org/]]<br />
|<br />
* [http://www.gentoo.org Gentoo] provides first-party ZFS on Linux packages to itself and its derivatives. <br />
* Derivatives include:<br><br />
{|cellpadding="15"<br />
|valign="top"|[[file:Funtoo.png |80px|link=http://www.funtoo.org/]]<br />
|valign="bottom"|[[file:PentooLogo.jpeg |120px|link=http://www.pentoo.ch/]]<br />
|valign="bottom"|[[file:Sabayon-logo.png |120px|link=http://www.sabayon.org/]]<br />
|}<br />
|}<br />
<br />
== [http://www.zfsonlinux.org ZFS on Linux] ==<br />
{|cellpadding="10"<br />
|[[file:zfs-linux.png |100px|link=http://zfsonlinux.org/]]<br />
|<br />
* Implemented in the kernel<br />
* maintained in an independent code repository (not the mainline kernel)<br />
* provides self-building packages for Debian, Fedora, RHEL/CentOS/SL, Ubuntu and build instructions for several other distributions.<br />
|}<br />
<br />
----<br />
<center>Distribution logos used with permission. All trademarks are the property of their respective owners</center></div>Lundmanhttps://openzfs.org/w/index.php?title=Distributions&diff=807Distributions2013-09-18T12:14:27Z<p>Lundman: /* ZFS-OSX */ Cleanup for focus, avoiding development speculation</p>
<hr />
<div>Open source distributions of OpenZFS are available for the following open source platforms. <br />
<br />
(For commercial products, see [[companies]].)<br />
<br />
= Darwin =<br />
<br />
At the core of [http://blog.opengroup.org/2012/07/25/apple-registers-mac-os-x-10-8-mountain-lion-to-the-unix-03-standard/ Mac OS X Mountain Lion, which is certified to The Open Group UNIX® 03 standard], are [http://opensource.apple.com Apple open source] [http://en.wikipedia.org/wiki/Darwin_(operating_system) Darwin] technologies. <br />
<br />
== [https://github.com/zfs-osx ZFS-OSX] ==<br />
{|cellpadding="20"<br />
|align="center"|[[file:MacZFS-logo.png |100px|link=https://github.com/zfs-osx]]<br> MacZFS<br />
|<br />
* Port of ZFS on Linux<br />
* alpha, developer preview – please use only with test pools<br />
* for use with Mac OS X 10.6 – OS X 10.9<br />
<br />
* not yet tested with Darwin – might need slight compile tweaks<br />
* occasional disk images at http://lundman.net/ftp/osx.zfs/<br />
* when ZFS-OSX becomes stable it will be the preferred stable version of [http://maczfs.org/ MacZFS].<br />
|}<br />
<br />
= FreeBSD =<br />
<br />
FreeBSD is a full general purpose operating system. There are also several specialized distributions.<br />
<br />
== [https://wiki.debian.org/Debian_GNU/kFreeBSD Debian GNU/kFreeBSD] ==<br />
{|cellpadding="25"<br />
|[[file:Debian-openlogo-100.jpg |80px|link=https://wiki.debian.org/Debian_GNU/kFreeBSD]]<br />
|<br />
* General purpose GNU distribution for amd64/i386<br />
* Uses the FreeBSD kernel, which provides an OpenZFS implementation<br />
* An official Debian release, still using GNU libc and with ninety percent of the same software packages available<br />
* ''wheezy'' stable release:<br />
** able to dual-boot 9.0 (default) or 8.3 kernels of FreeBSD<br />
** zpool version 28 (deduplication, raidz3, removable log devices)<br />
** still lacks support for ''ashift='', and important development tools like DTrace<br />
** installer supports creation of zpools, installing to them, and booting directly from them with GRUB2<br />
* ''testing'' release will be updated with new FreeBSD kernel releases, gaining many OpenZFS enhancements, including support for lz4 compression<br />
|}<br />
<br />
== [http://www.freebsd.org/ FreeBSD] ==<br />
{|cellpadding="10"<br />
|[[file:FreeBSD-logo.png |120px|link=http://freebsd.org]]<br />
|<br />
* General purpose server OS<br />
* [http://www.freebsd.org/releases/ download]<br />
* browse ZFS source code in [https://github.com/freebsd/freebsd/tree/master/sys/cddl/contrib/opensolaris/uts/common/fs/zfs github] or [http://svnweb.freebsd.org/base/head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/ websvn] or [http://nxr.netbsd.org/search?q=&project=src-freebsd OpenGrok]<br />
|}<br />
<br />
== [http://www.freenas.org/ FreeNAS] ==<br />
{|cellpadding="10"<br />
|[[file:FreeNAS_Shark_Transparent_on_dark.png |120px|link=http://www.freenas.org/]]<br />
|<br />
* NAS appliance software<br />
* [http://www.ixsystems.com/storage/ix/truenas/ commercial support] available for sister product TrueNAS from iXsystems.<br />
|}<br />
<br />
== [http://www.pcbsd.org/ PC-BSD] ==<br />
{|cellpadding="10"<br />
|[[file:Pcbsd-logo.png|120px|link=http://www.pcbsd.org/]]<br />
|<br />
* Workstation/desktop OS<br />
* [http://www.ixsystems.com/support-center/ix/software/pc-bsd.html commercial support] available from iXsystems.<br />
|}<br />
<br />
= illumos =<br />
{|cellpadding="15"<br />
|[[file:BigHighResPhoenixLogotypeRGB.png |120px|link=http://illumos.org]]<br />
|<br />
The [http://www.illumos.org illumos] codebase is the foundation for various distributions – comparable to the relationship between the Linux kernel and Linux distributions.<br />
* Forked from the OpenSolaris codebase in 2010<br />
* browse ZFS source code in [http://src.illumos.org/source/xref/illumos-gate/usr/src/uts/common/fs/zfs opengrok] or [https://github.com/illumos/illumos-gate/tree/master/usr/src/uts/common/fs/zfs github]<br />
|}<br />
<br />
== [http://omnios.omniti.com/ OmniOS] ==<br />
{|cellpadding="15"<br />
|[[file:OmniOS_logo.png |100px|link=http://omnios.omniti.com/]]<br />
|<br />
* General purpose server OS<br />
* [http://omnios.omniti.com/wiki.php/Installation download]<br />
* [https://github.com/omniti-labs/illumos-omnios/tree/master/usr/src/uts/common/fs/zfs source code]<br />
* [http://omniti.com/does/omnios commercial support] available from [http://omniti.com/ OmniTI].<br />
|}<br />
<br />
== [http://openindiana.org/ OpenIndiana] ==<br />
* General purpose server OS<br />
* [http://openindiana.org/download/ download]<br />
* [https://hg.openindiana.org/ source code]<br />
<br />
= Linux =<br />
<br />
== Gentoo ==<br />
{|cellpadding="20"<br />
|[[file:Gblend.png |80px|link=http://www.gentoo.org/]]<br />
|<br />
* [http://www.gentoo.org Gentoo] provides first-party ZFS on Linux packages to itself and its derivatives. <br />
* Derivatives include:<br><br />
{|cellpadding="15"<br />
|valign="top"|[[file:Funtoo.png |80px|link=http://www.funtoo.org/]]<br />
|valign="bottom"|[[file:PentooLogo.jpeg |120px|link=http://www.pentoo.ch/]]<br />
|valign="bottom"|[[file:Sabayon-logo.png |120px|link=http://www.sabayon.org/]]<br />
|}<br />
|}<br />
<br />
== [http://www.zfsonlinux.org ZFS on Linux] ==<br />
{|cellpadding="10"<br />
|[[file:zfs-linux.png |100px|link=http://zfsonlinux.org/]]<br />
|<br />
* Implemented in the kernel<br />
* maintained in an independent code repository (not the mainline kernel)<br />
* provides self-building packages for Debian, Fedora, RHEL/CentOS/SL, Ubuntu and build instructions for several other distributions.<br />
|}<br />
<br />
----<br />
<center>Distribution logos used with permission. All trademarks are the property of their respective owners</center></div>Lundmanhttps://openzfs.org/w/index.php?title=FAQ&diff=805FAQ2013-09-18T00:56:09Z<p>Lundman: /* Where is the source code? */ Fixed ZOL's 404 github URL</p>
<hr />
<div>=== Where is the source code? ===<br />
<br />
There is no central source repository for OpenZFS. Each supported operating system has it's own repository.<br />
<br />
{| class="wikitable"<br />
| '''illumos'''<br />
|[http://wiki.illumos.org/display/illumos/ZFS Webpage]<br />
|[https://github.com/illumos/illumos-gate/ Github]<br />
|-<br />
| '''FreeBSD'''<br />
|[https://wiki.freebsd.org/ZFS Webpage]<br />
|[https://github.com/freebsd/freebsd/ Github] <br />
|-<br />
| '''ZFS on Linux'''<br />
|[http://zfsonlinux.org/ Webpage]<br />
|[https://github.com/zfsonlinux/zfs/ Github]<br />
|-<br />
| '''Mac ZFS'''<br />
|[https://code.google.com/p/maczfs/ Webpage]<br />
|[https://github.com/zfs-osx/zfs/ Github]<br />
|}<br />
<br />
Even though the core of OpenZFS is platform independent, separate repositories are necessary because significant platform-specific changes need to be maintained for the parts of ZFS which interact with the rest of the operating system (VFS, memory management, disk i/o, etc.). Platform-independent changes are regularly ported between the different operating systems. One of our goals is to more clearly separate the platform-dependent from platform-independent parts of OpenZFS to make porting changes easier.<br />
<br />
=== Are storage pools created by OpenZFS portable between operating systems? ===<br />
<br />
Yes. Storage pools can be moved freely between the different implementations of OpenZFS as long as all implementations involved support the same [[Features#Feature Flags|feature flags]]. New feature flags are usually ported to all operating systems very quickly to maintain compatibility. Storage pools can also be created with certain feature flags disabled to maintain compatibility.<br />
<br />
=== Is this a re-implementation of ZFS? ===<br />
<br />
No. See [[#How is OpenZFS related to ZFS on Solaris?|How is OpenZFS related to ZFS on Solaris?]]<br />
<br />
=== How is OpenZFS related to ZFS on Solaris? ===<br />
<br />
OpenZFS is a fork of ZFS on Solaris based on the last release of OpenSolaris from 2010. Source code changes to Solaris [[History|have not been released since 2010]], so development of OpenZFS has continued completely separately from ZFS on Solaris. Each now has features the other does not. The on-disk formats of ZFS on Solaris and OpenZFS have also diverged, unless you explicitly create storage pools with format version 28 (the last version released with OpenSolaris) ZFS pools cannot be moved between OpenZFS distributions and ZFS on Solaris.<br />
<br />
=== Will OpenZFS ever be released under a licence other than the CDDL? ===<br />
<br />
No single entity holds the copyright to all of the OpenZFS code, every individual contributor to OpenZFS maintains copyright to his or her changes. This means that changing the license would require participation from all contributors which makes it highly unlikely.</div>Lundmanhttps://openzfs.org/w/index.php?title=Companies&diff=706Companies2013-09-17T00:10:19Z<p>Lundman: </p>
<hr />
<div>The following companies have built products for which OpenZFS is an integral part.<br />
<br />
{|cellpadding="10"<br />
|-<br />
|valign="top" |[[file:Delphix_logo.png |120px|link=http://delphix.com]]<br>[https://github.com/delphix/delphix-os/tree/3.2/usr/src/uts/common/fs/zfs Source code]<br />
|valign="top" |The Delphix Engine allows companies to create up-to-the-minute copies of production databases: making it easier to backup and upgrade databases as well as develop applications. The Delphix Engine uses ZFS cloning and compression to minimize the storage footprint of these virtual databases.<br />
|-<br />
|valign="top" |[[file:GMO_logo.jpg |80px|link=http://www.gmo.jp/]]<br />
|valign="top" |GMO Internet is an Internet infrastructure company, with branches in Internet service providing, web and service hosting, cloud computing, and mobile development based in Japan. Deploying ZFS in the Internet Service Provider sections, including Back-end storage, to Front-end clustered servers. With services starting from Shared Hosting to full Virtual Machines.<br />
|-<br />
|valign="top" |[[file:HELiOS-logo.png |120px|link=http://www3.gehealthcare.com/en/Global_Gateway]]<br />
|valign="top" |Description<br />
|-<br />
|valign="top" |[[file:HybridCluster-logo.png |120px|link=http://www.hybridcluster.com/]]<br />
|valign="top" |HybridCluster builds on top of OpenZFS to create a distributed storage layer for clusters with local storage - with High Availability and Disaster Recovery built in. On top of this exists a container (chroot and jail) based virtualization platform which includes efficient container-based live-migration, enabling Auto Scaling. It also includes a Data Vault feature which exposes ZFS snapshots to end users. On top of this storage and virtualization stack, we have built a LAMP web hosting platform suitable for shared and dedicated hosting service providers to provision public and private clouds. <br />
|-<br />
|valign="top" |[[file:Ixsystems.jpg |120px | link=http://www.ixsystems.com/]]<br />
|valign="top" |Description<br />
|-<br />
|valign="top" |[[file:Joyent-logo.png |100px|link=http://joyent.com]]<br>[https://github.com/joyent/illumos-joyent/tree/master/usr/src/uts/common/fs/zfs Source code]<br />
|valign="top" |Description<br />
|-<br />
|valign="top" |[[file:Logo_LLNL.png |130px|link=https://www.llnl.gov/]]<br />
|valign="top" |Description<br />
|-<br />
|valign="top" |[[file:Nexenta_logo.jpg |120px|link=http://www.nexenta.com/]]<br />
|valign="top" |Description<br />
|-<br />
|valign="top" |[[file:OmniTI-logo.jpeg |80px|link=http://www.omniti.com/]]<br>[https://github.com/omniti-labs/illumos-omnios/tree/master/usr/src/uts/common/fs/zfs Source code]<br />
|valign="top" |OmniOS builds on illumos to make a complete operating system, providing users with a familiar, installable operating system with a minimal package set to ease regulatory compliance. It delivers a self-hosting environment with simplified processes for ongoing maintenance and up-to-date third-party software.<br />
|-<br />
|valign="top" |[[file:Pogolinux_logo.png |120px|link=http://www.pogolinux.com/]]<br />
|valign="top" |Description<br />
|-<br />
|valign="top" |[[File:RackTop-Systems.jpg |120px|link=http://www.racktopsystems.com/]]<br />
|valign="top" |Description<br />
|-<br />
|valign="top" |[[file:SageCloud-logo-RGB-large-optimized.jpg |120px|link=http://sagecloud.com/]]<br />
|valign="top" |SageCloud is an object-oriented Cold Data Storage system built on top of OpenZFS. With OpenZFS, the copy-on-write semantics and strong end-to-end checksums are particularly engineered for data reliability at petabyte scale.<br />
|-<br />
|valign="top" |[[file:SpectraLogicLogo.jpg |120px|link=http://www.spectralogic.com/]]<br />
|valign="top" |Spectra Logic is a manufacturer of Deep Storage systems for cost effective, long-term data storage on disk and tape. Spectra focuses on architecting products that are reliable, cost effective and supportable for years into the future to accommodate the needs of the long-term data retention market. Spectra uses OpenZFS as a key product building block in our high data integrity, easily managed file storage solutions.<br />
|-<br />
|valign="top" |[[file:Wheel_153x35.jpg |120px|link=http://www.wheelsystems.com/]]<br />
|valign="top" |Description<br />
|}</div>Lundmanhttps://openzfs.org/w/index.php?title=Companies&diff=702Companies2013-09-17T00:02:31Z<p>Lundman: GMO: Jazz up description, +hands.</p>
<hr />
<div>The following companies have built products for which OpenZFS is an integral part.<br />
<br />
{|cellpadding="10"<br />
|-<br />
|valign="top" |[[file:Delphix_logo.png |120px|link=http://delphix.com]]<br>[https://github.com/delphix/delphix-os/tree/3.2/usr/src/uts/common/fs/zfs Source code]<br />
|valign="top" |The Delphix Engine allows companies to create up-to-the-minute copies of production databases: making it easier to backup and upgrade databases as well as develop applications. The Delphix Engine uses ZFS cloning and compression to minimize the storage footprint of these virtual databases.<br />
|-<br />
|valign="top" |[[file:GMO_logo.jpg |80px|link=http://www.gmo.jp/]]<br />
|valign="top" |GMO Internet is an Internet infrastructure company, with branches in Internet service providing, web and service hosting, cloud computing, and mobile development based in Japan. Deploying ZFS in the Internet Service Provider sections, including Back-end storage, to Front-end clustered servers. With services starting from Shared Hosting to full Virtual Machines, with data centres in Tokyo, Vietnam, Singapore and California.<br />
|-<br />
|valign="top" |[[file:HELiOS-logo.png |120px|link=http://www3.gehealthcare.com/en/Global_Gateway]]<br />
|valign="top" |Description<br />
|-<br />
|valign="top" |[[file:HybridCluster-logo.png |120px|link=http://www.hybridcluster.com/]]<br />
|valign="top" |HybridCluster builds on top of OpenZFS to create a distributed storage layer for clusters with local storage - with High Availability and Disaster Recovery built in. On top of this exists a container (chroot and jail) based virtualization platform which includes efficient container-based live-migration, enabling Auto Scaling. It also includes a Data Vault feature which exposes ZFS snapshots to end users. On top of this storage and virtualization stack, we have built a LAMP web hosting platform suitable for shared and dedicated hosting service providers to provision public and private clouds. <br />
|-<br />
|valign="top" |[[file:Ixsystems.jpg |120px | link=http://www.ixsystems.com/]]<br />
|valign="top" |Description<br />
|-<br />
|valign="top" |[[file:Joyent-logo.png |100px|link=http://joyent.com]]<br>[https://github.com/joyent/illumos-joyent/tree/master/usr/src/uts/common/fs/zfs Source code]<br />
|valign="top" |Description<br />
|-<br />
|valign="top" |[[file:Logo_LLNL.png |130px|link=https://www.llnl.gov/]]<br />
|valign="top" |Description<br />
|-<br />
|valign="top" |[[file:Nexenta_logo.jpg |120px|link=http://www.nexenta.com/]]<br />
|valign="top" |Description<br />
|-<br />
|valign="top" |[[file:OmniTI-logo.jpeg |80px|link=http://www.omniti.com/]]<br>[https://github.com/omniti-labs/illumos-omnios/tree/master/usr/src/uts/common/fs/zfs Source code]<br />
|valign="top" |OmniOS builds on illumos to make a complete operating system, providing users with a familiar, installable operating system with a minimal package set to ease regulatory compliance. It delivers a self-hosting environment with simplified processes for ongoing maintenance and up-to-date third-party software.<br />
|-<br />
|valign="top" |[[file:Pogolinux_logo.png |120px|link=http://www.pogolinux.com/]]<br />
|valign="top" |Description<br />
|-<br />
|valign="top" |[[File:RackTop-Systems.jpg |120px|link=http://www.racktopsystems.com/]]<br />
|valign="top" |Description<br />
|-<br />
|valign="top" |[[file:SageCloud-logo-RGB-large-optimized.jpg |120px|link=http://sagecloud.com/]]<br />
|valign="top" |SageCloud is an object-oriented Cold Data Storage system built on top of OpenZFS. With OpenZFS, the copy-on-write semantics and strong end-to-end checksums are particularly engineered for data reliability at petabyte scale.<br />
|-<br />
|valign="top" |[[file:SpectraLogicLogo.jpg |120px|link=http://www.spectralogic.com/]]<br />
|valign="top" |Spectra Logic is a manufacturer of Deep Storage systems for cost effective, long-term data storage on disk and tape. Spectra focuses on architecting products that are reliable, cost effective and supportable for years into the future to accommodate the needs of the long-term data retention market. Spectra uses OpenZFS as a key product building block in our high data integrity, easily managed file storage solutions.<br />
|-<br />
|valign="top" |[[file:Wheel_153x35.jpg |120px|link=http://www.wheelsystems.com/]]<br />
|valign="top" |Description<br />
|}</div>Lundmanhttps://openzfs.org/w/index.php?title=Companies&diff=699Companies2013-09-16T23:33:07Z<p>Lundman: GMO: Draft description v1</p>
<hr />
<div>The following companies have built products for which OpenZFS is an integral part.<br />
<br />
{|cellpadding="10"<br />
|-<br />
|valign="top" |[[file:Delphix_logo.png |120px|link=http://delphix.com]]<br>[https://github.com/delphix/delphix-os/tree/3.2/usr/src/uts/common/fs/zfs Source code]<br />
|valign="top" |The Delphix Engine allows companies to create up-to-the-minute copies of production databases: making it easier to backup and upgrade databases as well as develop applications. The Delphix Engine uses ZFS cloning and compression to minimize the storage footprint of these virtual databases.<br />
|-<br />
|valign="top" |[[file:GMO_logo.jpg |80px|link=http://www.gmo.jp/]]<br />
|valign="top" |GMO Internet is an Internet Service Provider in Japan. Deploying ZFS everywhere from Back-end storage, to Front-end clustered servers, offering everything from Shared Hosting to full Virtual Machines, with data centres in Tokyo, Vietnam, Singapore and California.<br />
|-<br />
|valign="top" |[[file:HELiOS-logo.png |120px|link=http://www3.gehealthcare.com/en/Global_Gateway]]<br />
|valign="top" |Description<br />
|-<br />
|valign="top" |[[file:HybridCluster-logo.png |120px|link=http://www.hybridcluster.com/]]<br />
|valign="top" |HybridCluster builds on top of OpenZFS to create a distributed storage layer for clusters with local storage - with High Availability and Disaster Recovery built in. On top of this exists a container (chroot and jail) based virtualization platform which includes efficient container-based live-migration, enabling Auto Scaling. It also includes a Data Vault feature which exposes ZFS snapshots to end users. On top of this storage and virtualization stack, we have built a LAMP web hosting platform suitable for shared and dedicated hosting service providers to provision public and private clouds. <br />
|-<br />
|valign="top" |[[file:Ixsystems.jpg |120px | link=http://www.ixsystems.com/]]<br />
|valign="top" |Description<br />
|-<br />
|valign="top" |[[file:Joyent-logo.png |100px|link=http://joyent.com]]<br>[https://github.com/joyent/illumos-joyent/tree/master/usr/src/uts/common/fs/zfs Source code]<br />
|valign="top" |Description<br />
|-<br />
|valign="top" |[[file:Logo_LLNL.png |130px|link=https://www.llnl.gov/]]<br />
|valign="top" |Description<br />
|-<br />
|valign="top" |[[file:Nexenta_logo.jpg |120px|link=http://www.nexenta.com/]]<br />
|valign="top" |Description<br />
|-<br />
|valign="top" |[[file:OmniTI-logo.jpeg |80px|link=http://www.omniti.com/]]<br>[https://github.com/omniti-labs/illumos-omnios/tree/master/usr/src/uts/common/fs/zfs Source code]<br />
|valign="top" |OmniOS builds on illumos to make a complete operating system, providing users with a familiar, installable operating system with a minimal package set to ease regulatory compliance. It delivers a self-hosting environment with simplified processes for ongoing maintenance and up-to-date third-party software.<br />
|-<br />
|valign="top" |[[file:Pogolinux_logo.png |120px|link=http://www.pogolinux.com/]]<br />
|valign="top" |Description<br />
|-<br />
|valign="top" |[[File:RackTop-Systems.jpg |120px|link=http://www.racktopsystems.com/]]<br />
|valign="top" |Description<br />
|-<br />
|valign="top" |[[file:SageCloud-logo-RGB-large-optimized.jpg |120px|link=http://sagecloud.com/]]<br />
|valign="top" |SageCloud is an object-oriented Cold Data Storage system built on top of OpenZFS. With OpenZFS, the copy-on-write semantics and strong end-to-end checksums are particularly engineered for data reliability at petabyte scale.<br />
|-<br />
|valign="top" |[[file:SpectraLogicLogo.jpg |120px|link=http://www.spectralogic.com/]]<br />
|valign="top" |Spectra Logic is a manufacturer of Deep Storage systems for cost effective, long-term data storage on disk and tape. Spectra focuses on architecting products that are reliable, cost effective and supportable for years into the future to accommodate the needs of the long-term data retention market. Spectra uses OpenZFS as a key product building block in our high data integrity, easily managed file storage solutions.<br />
|-<br />
|valign="top" |[[file:Wheel_153x35.jpg |120px|link=http://www.wheelsystems.com/]]<br />
|valign="top" |Description<br />
|}</div>Lundmanhttps://openzfs.org/w/index.php?title=User:Lundman&diff=530User:Lundman2013-09-13T23:48:48Z<p>Lundman: </p>
<hr />
<div><br />
Type: Swede<br />
Location: Tokyo<br />
Profession: GMO Internet ISP<br />
Position: Senior Beverage Technician<br />
Awards: First Annual Montgomery Burns Award for Outstanding Achievement in the Field of Excellence<br />
[http://pgp.mit.edu:11371/pks/lookup?op=get&search=0x5D9BB901383537C4 PGP]</div>Lundmanhttps://openzfs.org/w/index.php?title=OpenZFS_talk:Current_events&diff=323OpenZFS talk:Current events2013-09-10T00:03:27Z<p>Lundman: </p>
<hr />
<div><br />
== OpenZFS Day ==<br />
<br />
I have floated the idea of attending the ZFS Open Day event to the company and they are generally responding favourably. <br />
Is the event a 2 day event, or just undecided which day? Is it worth sticking around for 2 days either way (first time to SF for me).<br />
Is the "bay area" a place where you would stay, or would one stay further out a bit and travel in?<br />
<br />
-- lundman<br />
<br />
We are thinking that the event will be 2 days: 1 day of "unconference", with presentations/discussions decided on-site, and 1 day "hackathon" where people can work together in small groups to implement ideas discussed the previous day. I will probably be available for an additional day or two after that for anyone who wants to stick around for additional collaborative work.<br />
<br />
Assuming that we have the event in San Francisco (our current plan), I would recommend staying either in the city of SF itself, or near a [http://www.bart.gov/stations/index.aspx BART stop] (light rail train in the Bay Area). The Delphix SF office is just 1 block from the Montgomery stop.<br />
<br />
--[[User:Mahrens|Mahrens]] ([[User talk:Mahrens|talk]]) 14:59, 9 September 2013 (UTC)<br />
<br />
Thanks for the feedback. I will wait until it is formally announced with venue details. I will probably pad each side of the 2 days to recover, it is a 10 hour flight after all :)<br />
<br />
--[[User:Lundman|lundman]] ([[User talk:Lundman|talk]]) 09:02, 10 September 2013 (JST)</div>Lundmanhttps://openzfs.org/w/index.php?title=OpenZFS_talk:Current_events&diff=307OpenZFS talk:Current events2013-09-09T00:51:39Z<p>Lundman: Created page with " I have floated the idea of attending the ZFS Open Day event to the company and they are generally responding favourably. Is the event a 2 day event, or just undecided which ..."</p>
<hr />
<div><br />
I have floated the idea of attending the ZFS Open Day event to the company and they are generally responding favourably. <br />
Is the event a 2 day event, or just undecided which day? Is it worth sticking around for 2 days either way (first time to SF for me).<br />
Is the "bay area" a place where you would stay, or would one stay further out a bit and travel in?<br />
<br />
-- lundman</div>Lundmanhttps://openzfs.org/w/index.php?title=Platform_code_differences&diff=306Platform code differences2013-09-09T00:42:07Z<p>Lundman: /* osxzfs */</p>
<hr />
<div>It is useful to have a list of code differences between Illumos and other platforms. Please separate changes that are trivially portable to other platforms (mainly Illumos) from those that are not. Also, please include information on the rationale for each change. <br />
<br />
= ZFSOnLinux =<br />
<br />
== Platform Independent (portable) ==<br />
* Switched from C99 to C89<br />
** Linux's build system passes -std=gnu89 to GCC.<br />
* Converted large stack allocations to dynamic allocations<br />
** Linux has an 8KB stack in comparison to Illumos' luxurious 24KB stacks.<br />
* [https://github.com/zfsonlinux/zfs/commit/b01615d5ac86913da1e092d0378bfb8f0e72af30 Constify structures containing function pointers]<br />
** The [http://pax.grsecurity.net/ PaX] effort to harden the Linux kernel considers writeable function pointers to be potential exploit targets. They modified the Linux kernel build system to report these as section mismatches. Function pointers were constified as a result.<br />
* Switched various allocations from KM_SLEEP to KM_PUSHPAGE<br />
** These were found to occur in code paths critical to swap on zvols. Swap on zvols would readily deadlock until they were changed.<br />
* [https://github.com/zfsonlinux/zfs/commit/bff32e0972bbc07ba5f2b9ce5b965813d8edcf78 Drive Identifier database]<br />
** This belongs in a different layer, but we do not have have the option of modifying the kernel itself, especially older ones. The database can be ported to Illumos' sd.conf without little difficulty. Entries can also be ported to a similar database in FreeBSD (although not in the reverse direction).<br />
* -o ashift= in zpool create/attach/replace commands<br />
** The sector size determines ashift at vdev creation. This is a manual override that permits the system administrator to workaround drives that lie with relative ease. It complements the drive database.<br />
* [https://github.com/zfsonlinux/zfs/commit/82a37189aac955c81a59a5ecc3400475adb56355 SA based xattrs]<br />
** Improves get/set performance for small xattr values.<br />
** This would have resulted in a ZFS version change had it been imported into Open Solaris before the project was discontinued. It is off by default.<br />
* [https://github.com/zfsonlinux/zfs/commit/556011dbec2d10579819078559a77630fc559112 Better queuing of read IOs to leaves of mirror vdevs]<br />
** Improves throughput and IOPS on mirrored vdevs<br />
* [https://github.com/zfsonlinux/zfs/commit/920dd524fb2997225d4b1ac180bcbc14b045fda6 FASTWRITE algorithm]<br />
** Greedy selection of least busy top-level vdev when queuing writes. Improves IOPS performance.<br />
** [https://github.com/ryao/zfs/commit/858822a04b4563657b2267131e90d9687d67e31b Patch] being tested to remove mc_fastwrite_lock.<br />
<br />
== Platform Specific (non-portable) ==<br />
* Autotools build system<br />
** This could be adapted to other platforms, but the current code is extremely Linux-specific.<br />
* ZPIOS<br />
** Benchmark designed to exercise the the ZFS Transaction Object Layer<br />
** This could be adapted to other platforms with a rewrite to use Illumos interfaces.<br />
* ZFS POSIX Layer<br />
** Linux VFS hooks that attempt to wrap the functions (zfs_vnops.c) used on Illumos.<br />
* ZVOL code<br />
** A roughly 90% rewrite for Linux. Very little code shared with Illumos.<br />
* [https://github.com/zfsonlinux/spl/commit/eb0f407a2b9089113ef6f2402ebd887511315b43 PF_NOFS thread flag]<br />
** A thread specific flag to indicate that we are in a path that might involve swap. Implemented in compatibility layer.<br />
** KM_SLEEP allocations made in the presence of PF_NOFS will be converted to KM_PUSHPAGE. A stack trace is also printed to dmesg.<br />
* [https://github.com/zfsonlinux/spl/commit/46a75aadb7c08085a4ad2e55dcf5b6fb387c1253 cv_wait_io()]<br />
** Compatibility layer extension to hook into Linux's I/O time accounting infrastructure. Otherwise identical to cv_wait().<br />
<br />
= osxzfs =<br />
<br />
* Mostly based on ZFSOnLinux<br />
** Clone of source tree<br />
** Uses ZFSOnLinux autoconf<br />
* Prefers clang or llvm-gcc for kernel module<br />
** IOKit kernel module requires C++ (strip Linux's variables named ''private'')<br />
* All UIO operations are kernel API calls. (uio_create() / uio_setoffset() ... ) the struct is opaque<br />
* zfs_vnops.c, zfs_vfops.c, zfs_acl.c, zfs_znode.c, zfs_fuid.c are FreeBSD based with OSX wrappers in zfs_vnops_osx.c<br />
* '''vnode_t''' is defined as '''struct vnode *''' on OSX, so most variables are now defined as '''struct vnode *vp'''<br />
** All vnode operations have API calls (vnode_fsnode(vp) == vp->v_data). the struct is opaque<br />
* zvols are mostly untouched from FreeBSD, but calls wrappers to IOKit C++ layer<br />
* '''vnode_create''' needs ALL information at call time (vtype, private ptr (znode), vnode_ops), can not pre-alloc like FreeBSD<br />
** '''vnode_create''' can call both '''reclaim''' and '''fdsync''' causing locking issues. OSX port has a reclaim thread to defer reclaims.</div>Lundmanhttps://openzfs.org/w/index.php?title=Platform_code_differences&diff=305Platform code differences2013-09-09T00:41:07Z<p>Lundman: </p>
<hr />
<div>It is useful to have a list of code differences between Illumos and other platforms. Please separate changes that are trivially portable to other platforms (mainly Illumos) from those that are not. Also, please include information on the rationale for each change. <br />
<br />
= ZFSOnLinux =<br />
<br />
== Platform Independent (portable) ==<br />
* Switched from C99 to C89<br />
** Linux's build system passes -std=gnu89 to GCC.<br />
* Converted large stack allocations to dynamic allocations<br />
** Linux has an 8KB stack in comparison to Illumos' luxurious 24KB stacks.<br />
* [https://github.com/zfsonlinux/zfs/commit/b01615d5ac86913da1e092d0378bfb8f0e72af30 Constify structures containing function pointers]<br />
** The [http://pax.grsecurity.net/ PaX] effort to harden the Linux kernel considers writeable function pointers to be potential exploit targets. They modified the Linux kernel build system to report these as section mismatches. Function pointers were constified as a result.<br />
* Switched various allocations from KM_SLEEP to KM_PUSHPAGE<br />
** These were found to occur in code paths critical to swap on zvols. Swap on zvols would readily deadlock until they were changed.<br />
* [https://github.com/zfsonlinux/zfs/commit/bff32e0972bbc07ba5f2b9ce5b965813d8edcf78 Drive Identifier database]<br />
** This belongs in a different layer, but we do not have have the option of modifying the kernel itself, especially older ones. The database can be ported to Illumos' sd.conf without little difficulty. Entries can also be ported to a similar database in FreeBSD (although not in the reverse direction).<br />
* -o ashift= in zpool create/attach/replace commands<br />
** The sector size determines ashift at vdev creation. This is a manual override that permits the system administrator to workaround drives that lie with relative ease. It complements the drive database.<br />
* [https://github.com/zfsonlinux/zfs/commit/82a37189aac955c81a59a5ecc3400475adb56355 SA based xattrs]<br />
** Improves get/set performance for small xattr values.<br />
** This would have resulted in a ZFS version change had it been imported into Open Solaris before the project was discontinued. It is off by default.<br />
* [https://github.com/zfsonlinux/zfs/commit/556011dbec2d10579819078559a77630fc559112 Better queuing of read IOs to leaves of mirror vdevs]<br />
** Improves throughput and IOPS on mirrored vdevs<br />
* [https://github.com/zfsonlinux/zfs/commit/920dd524fb2997225d4b1ac180bcbc14b045fda6 FASTWRITE algorithm]<br />
** Greedy selection of least busy top-level vdev when queuing writes. Improves IOPS performance.<br />
** [https://github.com/ryao/zfs/commit/858822a04b4563657b2267131e90d9687d67e31b Patch] being tested to remove mc_fastwrite_lock.<br />
<br />
== Platform Specific (non-portable) ==<br />
* Autotools build system<br />
** This could be adapted to other platforms, but the current code is extremely Linux-specific.<br />
* ZPIOS<br />
** Benchmark designed to exercise the the ZFS Transaction Object Layer<br />
** This could be adapted to other platforms with a rewrite to use Illumos interfaces.<br />
* ZFS POSIX Layer<br />
** Linux VFS hooks that attempt to wrap the functions (zfs_vnops.c) used on Illumos.<br />
* ZVOL code<br />
** A roughly 90% rewrite for Linux. Very little code shared with Illumos.<br />
* [https://github.com/zfsonlinux/spl/commit/eb0f407a2b9089113ef6f2402ebd887511315b43 PF_NOFS thread flag]<br />
** A thread specific flag to indicate that we are in a path that might involve swap. Implemented in compatibility layer.<br />
** KM_SLEEP allocations made in the presence of PF_NOFS will be converted to KM_PUSHPAGE. A stack trace is also printed to dmesg.<br />
* [https://github.com/zfsonlinux/spl/commit/46a75aadb7c08085a4ad2e55dcf5b6fb387c1253 cv_wait_io()]<br />
** Compatibility layer extension to hook into Linux's I/O time accounting infrastructure. Otherwise identical to cv_wait().<br />
<br />
= osxzfs =<br />
<br />
* Mostly based on ZFSOnLinux source tree<br />
* Uses ZFSOnLinux autoconf<br />
* Prefers clang or llvm-gcc for kernel module<br />
* IOKit kernel module requires C++ (strip Linux's variables named ''private'')<br />
* All UIO operations are kernel API calls. (uio_create() / uio_setoffset() ... ) the struct is opaque<br />
* zfs_vnops.c, zfs_vfops.c, zfs_acl.c, zfs_znode.c, zfs_fuid.c are FreeBSD based with OSX wrappers in zfs_vnops_osx.c<br />
* '''vnode_t''' is defined as '''struct vnode *''' on OSX, so most variables are now defined as '''struct vnode *vp'''<br />
* All vnode operations have API calls (vnode_fsnode(vp) == vp->v_data). the struct is opaque<br />
* zvols are mostly untouched from FreeBSD, but calls wrappers to IOKit C++ layer<br />
* '''vnode_create''' needs ALL information at call time (vtype, private ptr (znode), vnode_ops), can not pre-alloc like FreeBSD<br />
** '''vnode_create''' can call both '''reclaim''' and '''fdsync''' causing locking issues. OSX port has a reclaim thread to defer reclaims.</div>Lundmanhttps://openzfs.org/w/index.php?title=File:GMO_logo.jpg&diff=304File:GMO logo.jpg2013-09-09T00:24:57Z<p>Lundman: </p>
<hr />
<div></div>Lundmanhttps://openzfs.org/w/index.php?title=Companies&diff=303Companies2013-09-09T00:24:42Z<p>Lundman: </p>
<hr />
<div>The following companies and organizations use Open ZFS (listed alphabetically):<br />
<br />
----<br />
<br />
[[file:BigHighResPhoenixLogotypeRGB.png |120px|link=http://illumos.org]]<br />
<br />
Products/Distributions based on illumos [https://github.com/illumos/illumos-gate/tree/master/usr/src/uts/common/fs/zfs source code] include:<br />
<br />
{|cellpadding="10"<br />
|align="bottom" |[[file:Delphix-Logo.jpg |120px|link=http://delphix.com]]<br>[https://github.com/delphix/delphix-os/tree/3.2/usr/src/uts/common/fs/zfs Source code]<br />
|align="bottom" |[[file:Joyent-logo.png |120px|link=http://joyent.com]]<br>[https://github.com/joyent/illumos-joyent/tree/master/usr/src/uts/common/fs/zfs Source code]<br />
|align="bottom" |[[file:Nexenta_logo.jpg |120px|link=http://www.nexenta.com/]]<br />
|align="bottom" |[[file:OmniTI-logo.jpeg |120px|link=http://www.omniti.com/]]<br>[https://github.com/omniti-labs/illumos-omnios/tree/master/usr/src/uts/common/fs/zfs Source code]<br />
|align="bottom" |[[file:GMO_logo.jpg |120px|link=http://www.gmo.jp/]]<br />
|}<br />
<br><br />
<br />
----<br />
<br />
[[file:FreeBSD-logo.png |120px|link=http://freebsd.org]]<br />
<br />
Products/Distributions based on FreeBSD [http://svnweb.freebsd.org/base/head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/ source code] include:<br />
<br />
{|cellpadding="10"<br />
|[[file:Debian-openlogo-100.jpg |40px|link=https://wiki.debian.org/Debian_GNU/kFreeBSD]]<br />
|[[file:HybridCluster-logo.png |120px|link=http://www.hybridcluster.com/]]<br />
|[http://www.ixsystems.com/ iX Systems]<br />
|[[file:SpectraLogicLogo.jpg |120px|link=http://www.spectralogic.com/]]<br />
|[[file:Wheel_153x35.jpg |120px|link=http://www.wheelsystems.com/]]<br />
|}<br />
<br><br />
<br />
----<br />
<br />
[[file:zfs-linux.png |120px|link=https://zfsonlinux.org/]] Linux-based<br />
<br />
Products/Distributions based on ZFS on Linux [https://github.com/zfsonlinux/zfs/tree/master/module/zfs source code] include:<br />
<br />
{|cellpadding="10"<br />
|[[file:Debian-openlogo-100.jpg |40px|link=http://zfsonlinux.org/debian.html]]<br />
|[[file:Funtoo.png |100px|link=http://www.funtoo.org/]]<br />
|[[file:Gblend.png |40px|link=http://www.gentoo.org/]]<br />
|[[file:HELiOS-logo.png |120px|link=http://www3.gehealthcare.com/en/Global_Gateway]]<br />
|[[file:Logo_LLNL.png |130px|link=https://www.llnl.gov/]]<br />
|[[file:Pogolinux_logo.png |120px|link=http://www.pogolinux.com/]]<br />
|[[file:Sl-logo-2000.png |40px|link=https://www.scientificlinux.org/]]<br />
|}</div>Lundmanhttps://openzfs.org/w/index.php?title=Distributions&diff=268Distributions2013-09-03T23:54:46Z<p>Lundman: </p>
<hr />
<div>The following open-source operating system distributions use Open ZFS (listed alphabetically):<br />
== illumos-based ==<br />
=== [http://omnios.omniti.com/ OmniOS] ===<br />
* general-purpose server OS<br />
* [http://omnios.omniti.com/wiki.php/Installation download page]; [https://github.com/omniti-labs/illumos-omnios/tree/master/usr/src/uts/common/fs/zfs source code]<br />
* [http://omniti.com/does/omnios commercial support] available from [http://omniti.com/ OmniTI]<br />
=== [http://openindiana.org/ OpenIndiana] ===<br />
* general-purpose server OS<br />
* [http://openindiana.org/download/ download page]; [https://hg.openindiana.org/ source code]<br />
<br />
== FreeBSD-based ==<br />
=== [http://www.freebsd.org/ FreeBSD] ===<br />
* general-purpose server OS<br />
* [http://www.freebsd.org/releases/ download page]; [https://github.com/freebsd/freebsd/tree/master/sys/cddl/contrib/opensolaris/uts/common/fs/zfs source code]<br />
=== [http://www.freenas.org/ FreeNAS] ===<br />
* NAS appliance software, based on FreeBSD<br />
* [http://www.ixsystems.com/storage/ix/truenas/ commercial support] available for sister product TrueNAS from ixSystems<br />
''incomplete list, please help!''<br />
=== [https://wiki.debian.org/Debian_GNU/kFreeBSD Debian GNU/kFreeBSD] ===<br />
* Debian variant with ~90% of the same software packages, based on GNU libc, but using the FreeBSD kernel which provides ZFS<br />
* Installer supports creation of ZFS pools, installing to them, and booting directly from them with GRUB2<br />
* We'd like to know how we're doing, and what major features are missing (DTrace comes to mind)<br />
<br />
== Linux-based ==<br />
<br />
=== ZFS on Linux ===<br />
* [http://www.zfsonlinux.org ZFS on Linux] provides self-building packages for Debian, Fedora, RHEL/CentOS/SL, Ubuntu and build instructions for several other distributions<br />
==== Gentoo ====<br />
* [http://www.gentoo.org Gentoo] provides first-party ZFSOnLinux packages to itself and its derivatives.<br />
<br />
== Apple OS-X based ==<br />
<br />
=== MacZFS (stable) ===<br />
<br />
* [http://code.google.com/p/maczfs/ MacZFS] Original fork of Apple work, open source.<br />
** Pool version '''8''', dataset version 2.<br />
** 10.5 - 10.9<br />
** Latest release: 2013/04/02<br />
<br />
=== ZEVO ===<br />
<br />
* [http://getgreenbytes.com/solutions/zevo/ ZEVO] Commercial version. Originally ''tenscomplement.com'' ZFS.<br />
** Pool version '''28''', dataset version 5. (lacking zvolume support). <br />
** 10.6.8 - 10.8 (panics on 10.9 Maverick)<br />
** Last release: 2012/9<br />
<br />
=== ZFS-OSX (MacZFS development) ===<br />
<br />
* [https://github.com/zfs-osx ZFS-OSX] [http://lundman.net/ftp/osx.zfs/] Development port of ZFSonLinux, early beta release, open source. Will eventually become MacZFS.<br />
** Pool version '''5000''' (feature-flags), dataset version 5. <br />
** 10.6-10.9<br />
** Last release: active development, weekly (please only use on test pools)</div>Lundmanhttps://openzfs.org/w/index.php?title=User:Lundman&diff=256User:Lundman2013-09-03T07:38:14Z<p>Lundman: </p>
<hr />
<div><br />
Type: Swede<br />
Location: Tokyo<br />
Profession: GMO Internet ISP<br />
Position: Senior Beverage Technician<br />
Awards: First Annual Montgomery Burns Award for Outstanding Achievement in the Field of Excellence</div>Lundmanhttps://openzfs.org/w/index.php?title=User:Lundman&diff=255User:Lundman2013-09-03T07:37:08Z<p>Lundman: Created page with " Type: Swede Location: Tokyo Profession: GMO Internet ISP Position: Senior Beverage Technician Awards: First Annual Montgomery Burns Award for Outstanding Achievement in the F..."</p>
<hr />
<div><br />
Type: Swede<br />
Location: Tokyo<br />
Profession: GMO Internet ISP<br />
Position: Senior Beverage Technician<br />
Awards: First Annual Montgomery Burns Award for Outstanding Achievement in the Field of Excellence</div>Lundmanhttps://openzfs.org/w/index.php?title=Contributors&diff=254Contributors2013-09-03T07:34:15Z<p>Lundman: Added myself, not sure about expert.. is there a wannabe-expert level? :)</p>
<hr />
<div>== ZFS Experts ==<br />
The following people have volunteered to be resources help answer questions in their specific areas of expertise. The [[mailing list]] is also a general resource for code-related questions. Individuals listed alphabetically by last name:<br />
<br />
''Please add yourself here with a sentence about your experience with ZFS, a sentence about your areas of expertise, and a link to how to contact you (could be via your User: page on this site).''<br />
<br />
* [[User:mahrens | Matt Ahrens]]<br />
** Co-founded the ZFS project at Sun in 2001; designed & implemented many features including snapshot & clones, send and receive, scrub/resilver.<br />
** Broad knowledge of ZFS, but most expertise in DMU, DSL, and ZAP.<br />
* Chris Siden<br />
** Implemented zpool feature flags and background destroy of filesystems.<br />
** Most expertise in Feature Flags, ztest, and illumos development process.<br />
* George Wilson<br />
** ZFS developer since 2005; implemented single-copy ARC and many SPA-layer performance enhancements.<br />
** Most expertise in SPA (space maps, ZIO pipeline, block allocation, etc), ARC, and corrupt pool recovery.<br />
* [[User:Ryao | Richard Yao]]<br />
** The Gentoo Linux ZFS maintainer since January 2012; many miscellaneous improvements to Linux port<br />
** Most expertise in Linux integration and ZFSOnLinux development process.<br />
* [[User:lundman | Jorgen Lundman]]<br />
** Added ZFS support to [http://www.denx.de/wiki/U-Boot U-Boot] and initial ZFSonLinux port to ARM.<br />
** Working on ZFSonLinux port to Apple OS-X [https://github.com/zfs-osx zfs-osx]<br />
<br />
== Old content; will be removed before launch ==<br />
* Matt Ahrens: Open ZFS<br />
* Will Andrews: FreeBSD<br />
* Brian Behlendorf: Linux<br />
* Chris Brown: Scientific Linux<br />
* Pawel Dawidek (FreeBSD)<br />
* Justin Gibbs: President, FreeBSD Foundation<br />
* Darik Horn: Ubuntu<br />
* Jorgen Lundman: ZFS on MacOS<br />
* Martin Matuska: FreeBSD<br />
* Ken Merry: FreeBSD<br />
* Chris Siden: illumos<br />
* George Wilson: illumos<br />
* Richard Yao: Gentoo<br />
* Aron Xu: Debian<br />
<br />
From Confluence: <br />
* Logos of the different OS communities and consumers: FreeBSD, illumos, gentoo, Debian, MacZFS, Nexenta, Linux distros, other distros<br />
** Getting as many company logos as possible would be great to show people that for-profit companies are dependent on this functionality: it is real and reliable.<br />
<br />
''What should we do with this page? Should we make a section for companies? Should we provide more details/links?''<br />
<br />
''I'd suggest we use [[companies and organizations]] for contributing companies. And a separate page for distros. How do we decide what individuals should be listed here? People with edit privs on the webpage? :) How do we decide who edits?''<br />
<br />
''One idea would be to list people who are willing to be listed as resources to help others in particular areas -- subject matter experts. That way we don't have to judge if anyone has contributed "enough" to be listed.''</div>Lundmanhttps://openzfs.org/w/index.php?title=Projects&diff=186Projects2013-08-27T02:30:52Z<p>Lundman: /* General features */</p>
<hr />
<div>== Inter-platform coordination ==<br />
<br />
Ideas for projects that would help coordinate changes between platforms:<br />
<br />
* Mechanism for pull changes from one place to another<br />
** Make it easier to build, test, code review, and integrate ZFS changes into illumos<br />
* Cross-Platform Test Suite<br />
** One sourcebase rather than porting STF to every platform?<br />
* Userland ZFS<br />
** we already have ztest / libzpool<br />
** want to expand this to also be able to test more of zfs in userland<br />
** want to be able to run /sbin/zfs, /sbin/zpool against userland implementation<br />
** want to be able to run most of testrunner (and/or STF) test suite against userland implementation<br />
* ZFS (ZPL) Version Feature Flags<br />
** Import ZFSOnLinux sa=xattr into Illumos<br />
* /dev/zfs ioctl interface versioning<br />
** Ensure that future additions/changes to the interface maintain maximum compatibility with userland tools<br />
** Enable FreeBSD Linux jails / Illumos lx brandz to use ZFSOnLinux utilities<br />
* Port ZPIOS [http://zfsonlinux.org/example-zpios.html] to Illumos from ZFSOnLinux<br />
** This requires a rewrite to stop using Linux interfaces.<br />
* Virtual machine images of various distributions? To play around with ZFS preconfigured on each of them<br />
** Suggest a common design/format of these (e.g. qcow2? vdi? ~256MiB raw disk image of a compressed ZFS root filesystem? BIOS bootable?)<br />
** Images could even be designed to work directly on some public clouds<br />
** Raspberry Pi images ~Ryao<br />
*** Is that really possible?? ZFS on 32-bit ARM? With only 512MiB RAM? I've managed this on i386 with Debian GNU/kFreeBSD but it was understandably slow. It would be great to demo and share knowledge of extreme use-cases like this; some platforms/distros may possess an advantage where others simply wouldn't be able to do it. ~StevenC<br />
<br />
== General features ==<br />
* device removal<br />
** based on indirect vdevs, rather than bprewrite<br />
* resumable send/receive<br />
** work in progress at Delphix<br />
* Storage of small files in dnode<br />
** work in progress at Delphix<br />
* Reflink[http://lwn.net/Articles/331808/] support<br />
* Unified ashift handling [http://www.listbox.com/member/archive/182191/2013/07/search/YXNoaWZ0/sort/subj/page/3/entry/7:58/20130703201427:AEA03DD0-E43E-11E2-A883-F4AAC72FE4D2/]<br />
* Collapsible ZAP objects (e.g. fatzip -> microzap downgrades)<br />
* Raidz Hybrid Allocator (preferably compatible with pool version 29 for Solaris 10u11 compatibility)<br />
* 1MB blocksize (preferably compatible with pool version 32, as pool-feature-flag)<br />
* Replace larger ZIO caches with explicit pages.<br />
** Subproject: Document useful kernel interfaces for page manipulation on various platforms<br />
* Improved SPA namespace collision management<br />
** Mostly needed by virtual machine hosts<br />
** work in progress in Gentoo<br />
** Temporary pool names in zpool import [http://www.listbox.com/member/archive/182191/2013/07/search/YXNoaWZ0/sort/subj/page/3/entry/6:58/20130701131204:56A77554-E271-11E2-8F75-EDC51164E148/]<br />
** Temporary pool names in zpool create<br />
* TRIM Support<br />
** Realtime TRIM<br />
** Freespace TRIM<br />
*** Walk metaslab space maps and issue discard commands to the vdevs.<br />
* Crypto (platform agnostic crypto support)<br />
<br />
''Please add and edit ideas here''</div>Lundman