memo:test

差分

このページの2つのバージョン間の差分を表示します。

この比較画面にリンクする

両方とも前のリビジョン 前のリビジョン
次のリビジョン
前のリビジョン
memo:test [2020-12-03 09:33]
Decomo
memo:test [2020-12-09 09:21]
Decomo 削除
行 1: 行 1:
-27. ZFS Primer+====== ZFSのヤバげな機能Special Allocation ClassがFreeBSD 12.2で対応されてた ======
  
-ZFSは先進的で現代的なファイルシステムで、特に伝統的なUNIXファイルシステムでは利用できなかった機能の提供を目的に設計されました。 +OpenZFS 2.0リリースの陰でひっそりと、FreeBSD 12.2-RELEASEZFS実装Special Allocation Class(以下SACと略すことが追加されていた。
-ジナルはSunにおいてソースのオープン化意向ととも開発されたため他のオペレーティングシステムへ移植ことが可能でした。 +
-OracleによSunの買収後、ZFSのオリジナル開発者の何人か、オープンソースバージョンの継続的な共同開発を提供するために[[http://open-zfs.org/wiki/Main_Page|OpenZFS]]を創設しました。+
  
-ここZFS特徴概要を記し+時系列的はOpenZFS 2.0が2020年12月1日、FreeBSD 12.2Rが10月27日リリースなで、まったく陰ってはないんですけどね、インパクトありそうな機能割にはリリースノートに載がなく、''zpool status''たら「プールのアップグレードができるぜ!」と出たので調べてみたら追加されていたという。関連るコミットはこの辺→[[https://svnweb.freebsd.org/base?view=revision&revision=354382|Rev.354382]] [[https://svnweb.freebsd.org/base?view=revision&revision=354385|Rev.354385]] [[https://svnweb.freebsd.org/base?view=revision&revision=354941|Rev.354941]]
  
-**ZFSトランザクションを持つCopy-On-Write ([[https://en.wikipedia.org/wiki/ZFS#Copy-on-write_transactional_model|COW]])なファイルシステムす。** +Special Allocation Class自体は[[https://github.com/openzfs/zfs/releases/tag/zfs-0.8.0|ZoL 0.8.0]]で2019年5月24日リリーれ、その後、illumosへックポートを経て、めFreeBSD取り込れた模様ZFS実装が新生OpenZFSベ切り替わろうとしている、Legacy ZFSをきっちりメンテする姿勢には頭が下がります。
-各書き込み要求ついて、関係するディクブロックのコピーが作られ、そして全て変更は元ブロックではなコピー対して作用し +
-書き込み完了すると、全てのブロックポインタの指す先がそのしいコピーに変更されます。 +
-これは、ZFSは常に空き領域に書き込み、ほんどの書き込みはシーケンシャルで、そしてバージョンのファイルは新バージョンの書き込みが完全に成功す分離されないことを意味します。 +
-ZFSはディスクへの直接アクセス行い、複数の読み込み/込み要求をトラザクションにまとめます。 +
-ほとんどのファイルシスムはこれを行わず、ただディスクブロックへアクセスするのみです。 +
-完了か失敗どちらか一方定まるトランザクション、[[https://blogs.oracle.com/bonwick/raid-z|ライトホール]]は決して存在せず、そしてファイルシステムの確認ユーティリティは必要ないことを意味します。 +
-このトランザクションベースの設計により、追加のストレージ領域足されれば、それはすぐさま書き込み用に利用可能となります。 +
-データの再均衡化のために、データをコピーして既存のデータを全ての利用可能なディスクに横断的に上書きすることができます。 +
-128ビットファイルシステムなので、ファイルシステムとファイルの最大サイズは16エクサバイトです。+
  
-**ZFS自己修復ファイルシステムして設計されました。** +で、肝心のSpecial Allocation Class何かというと、I/O性能直結データを専用のvdev格納て性能改善るもののよう多少確さを欠く表現だが、階層化トレージのZFS版いえる。
-ZFSはデータを書くたびに対象のディスクブロックごとチェックサムを生成し記録しま。 +
-ZFSはデータを読むたび、対象のディスクブロックごとのチェックサムを読み込み検証ます。 +
-メディアのエラーや“ビット腐敗”はデータに変化引き起こし、そのチェックサムが一致すことはありません。 +
-ZFSがミラーないしRAIDZ構成のプール上にディスクブロックのチェックサムエラーを検出した場合、ZFSは壊れたデータを正しいデータで置き換えます。 +
-滅多に読まれないディスクブロックあることから、定期的なscrubをスケジューリングし、ZFSが全データブロックを読んでチェックサム検証と異常ブロック訂正が行えるようにすると良いでしょう +
-冗長性とデータ訂の提供のために複数のディスク要求される一方で1ディクのシステムにおいてもZFSはデタ異常検出を提供します。 +
-FreeNAS®は各ZFSプールに対し月1回のscrubを自動的にスケュールし、そ結果は[[https://www.ixsystems.com/documentation/freenas/11.3-U5/storage.html#pools|Pools]]を選択し (Settings)→Statusクリックすと表示されます。 +
-scrub結果をチェックすることは、ディスクの潜在的な問題の早期発見につながる可能性があります+
  
-伝統的なUNIXファイルシステムと違い、**ファイルシステム作成時にパーティションサイズを決める必要ありません。** +ZFSで扱うータ種類に応じてvdevをAllocation Classという概念で分類しておりOpenZFS 2.0時点では以下5種類となっているちなみAllocation Classは、元は[[blog:2020:2020-10-07|dRAID]]で導入さたもので、その後、開発コミュニティよっされ現在ったそうだ
-代わりに、vdevと呼ばれるィスクグループがZFSプールに組み込まれます。 +
-ファイルシステムは必要に応じて、プールから生成されます +
-より多くの容量が必要なった時は、同一のvdevをプールにストライピングすることができます。 +
-FreeNAS®の[[https://www.ixsystems.com/documentation/freenas/11.3-U5/storage.html#pools|Pools]]はプールの作成と拡張に使わます。 +
-プール作成後、必要応じ、プールから動的サイズのデータセットまたは固定サイズのzvolを切り出すことができます。 +
-データセットをい、格納されるデータ種類に応じたパーミッションや容量制限・圧縮ったプロパティをデータセット単位で設定し、ストレージを最適化することができます。 +
-zvolは本質的には生の仮想ブロックデバイスで、iSCSIデバイスエクステントなどのローデバイスを必要とするアプリケーションで使用されます+
  
-**ZFSはリアルタイムデータ圧縮サポトします** +^  クラス  ^  SAC  ^  用途  ^  専用vdevを割り当てた時の効果 
-ブロックがディスクに書き込まれたときに圧縮が行われますが、そのデータが圧縮恩恵を受けられる場合に限ります。 +| Normal |  ×  | 通常のデータを扱うvdev。ミラとかRAIDZとか。 | | 
-圧縮済みブロックにアクセスがあった時は、自動的に展開されます。 +| Log |  ×  |ZILのレコード。いわゆるSLOG。 | 同期書き込みの高速化 | 
-圧縮はファイルレベルではなくブロックレベルで行われるため、あらゆるアプリケーョンが透過的に圧縮データにアクセします。 +| Dedup |  ○  |重複排除テーブル(DDT)のデータ | 重複排除パフォーマンス向上とDDTのメモリ使用量の削減 | 
-FreeNAS®バジョン9.2.1降で作られたZFSプールは、推奨LZ4圧縮アルゴリムを使います+| Metadata |  ○  | プールとファイルシステムのメタデータ | メタデータ操作(ファイル一覧の取得など)パフォーマンの向上 | 
 +| Small Blocks |  ○  | レコドサイズブロック | 小さなサイの膨大なI/O性能の改善詳細は後述 |
  
-**ZFSは低コストの即時スナップショットを提供します。**対象となるのはプール、データセット、あるいはzvolす。 +付けAllocation ClassSpecial Allocation Classとされて。それのSAC役割は名前、専用vdev (Special vdev)割り当てるとそれりに効果がありそうだ。とけSmall Blocks[[https://www.napp-it.org/doc/downloads/special-vdev.pdf|劇的な性能改善の可能性]](PDF)秘めている
-COWのおかげで、スナップショットは最初は余分な領域必要としません。 +
-スナップショットのサイズは時間とともに、スナップショットに含まれるファイルがディスクに書き込まれ、変更があるにつれ増加します。 +
-スナップショットを使うと、スナップショットを取得し時点のデータのコピーを提供することできます。 +
-通常、ファイル削除される対応するディスクブロックは空きリストに追加されます。しかし、スナップショット内にファイルが存在する場合、参照するすべのスナップショットが削除されまで、ファイルブロックが空きリストに追加さることはありません。 +
-により、スナップショットはファイル履歴保持、古いコピーや削除されたファイル復元に便利な賢い手段なります。 +
-こうした理由, 多くの管理者は頻繁にスナップショット取得し、一定期間保存し、そし別のシステムに保管します。 +
-このような戦略は、管理者にシステムを特定の時点へロールバックすを可能とします。 +
-もし破滅的データ消失があった場合、オフサイトのスナップショットはシステムを最後の定期スナップショット─例えばデータ消失の直前15分の時点に、システムを復元することができます +
-スナップショットはローカルに保管されますが、リモートのZFSプールにレプリケートするこもできます。 +
-レプリケーションでは、ZFSはバイト単位のコピーは行ず、代わりにスナップショットをデータストリームへ変換します。 +
-この設計、受信側ZFSプール構成が同一である必要はなく、異なるRAIDZレベル、プールサイズ、あるいは圧縮設定が使用可能なこと意味します+
  
 +ZFSのファイルI/Oは原則的に128KiB単位((データセット毎にrecordsizeプロパティで変更可能))で行われ、それに満たないデータは、より小さなレコードが使われる。この小さなレコードがI/O性能にそれなりに影響するようで、Small Blocksは指定サイズ以下のブロックの読み書きをSpecial vdevにオフロードするようなイメージとなる。つまり、Special vdevとしてSSDを割り当てると、その特性を活かして膨大な小規模I/Oを捌けるようになる、というわけだ。
  
-**ZFS Boot Environemtシステム更新失敗から復旧する手段を提供します。** +ここで注意が必要なの、Small Blocks処理はファイルサイズベースではなくあくまでブロクサイズベースで行われるということ。な小さなファイルの全体Special vdevに格納され訳ではない((Small Blocksの閾値をレコードサイズと同値にして全データをSpecial vdevに送るとは可能))。そもそも、ZFS書き込みは一旦メモリキャッシュされ、トランザクションループ(txg)にまとめられた上でードに書き出される必ずも小さいファイル=小さなレコドとは限ない逆に、大きなファイルでもレコドサイズ以下の端数は必ず存在するわけ、これらtxgでレコードサイズ未満となった分がSpecial vdev行きとなようだ。の辺が一般的な階層化ストレージく異なる部分である
-FreeNAS®では、プグレドやシテム更新前にOS存在するデータセットのスナップショットが自動取得されます。 +
-この保存済Boot Environment自動的GRUBブートローダに追加されます。 +
-万が一アップグレードや設定変更が失敗し単にシステムを再起動起動メニュ以前のBoot Environmentを選択します +
-ユーザーは必要に応じて、例えば設定変更を行う前にSystem ➞ Boot自身Boot Environmentを作ることもでます+
  
-**ZFSはライトキャシュを提供します。**オンメモリキャッシュとZFSンテントログ(ZIL)があります。 +Small Blocksの対象となるブロクサは、レコドサイズ以下の2の冪を任意指定できる。128KiB以上のレコードサイズが使えるようlarge_blocksフィーチャーと合わせ使うと、よりパフォーマンスチューニングの幅が広がだろうなお、FreeBSDレコードサイズが128KiBを超えるデータセットからの起動は対応してないので要注意
-ZILは、[[https://pthree.org/2013/04/19/zfs-administration-appendix-a-visualizing-the-zfs-intent-log/|「同期書き込み」を、ZFSプ込まれまで一時的保持す]]ストレジ領域です。 +
-高速(低遅延)で電源保護されたSSDをSLOG (Separate Log)デバイス追加すると、かに高い性能を得られます +
-これESXi越しのNFSに不可欠で、またデータベースサーバや同期書き込み依存する他アプリケーション強く推奨します +
-SLOGの恩恵と使い方の詳細は、以下のブログとフォーラムの投稿をご覧ください:+
  
-  * [[http://www.freenas.org/blog/zfs-zil-and-slog-demystified/|The ZFS ZIL and SLOG Demystified]] +Special Allocation Classで性能向上が見込める一方で、その仕組み上、Special vdevが死ぬと一発でプール全体のデータが飛ぶ恐れがある、というかメタデータという極めて重要なデータが飛ぶんだから、ほぼ確実に死ぬと思われる。なので今まで以上に冗長性には留意する必要がある。信頼のおけるSSDで最低でもミラーリング、可能なら電源喪失保護付きSSDで3重ミラーにしたいところ。
-  * [[https://forums.freenas.org/index.php?threads/some-insights-into-slog-zil-with-zfs-on-freenas.13633/|Some insights into SLOG/ZIL with ZFS on FreeNAS®]] +
-  * [[http://nex7.blogspot.com/2013/04/zfs-intent-log.html|ZFS Intent Log]]+
  
-SMB、AFP、iSCSIでは同期書き込みは比較的まれで、すわち、これらプロトコルの性能改善のめのSLOG追加は特別な場合のみであると意味します。 +Special vdevの容量が一杯にた場合は、従来通り普通vdevの方使われるそうだ。
-システムSLOGの恩恵を受けられるかの判定のため、zilstatユーティリティをShellで実行することができます。 +
-使い方の情報は[[http://www.richardelling.com/Home/scripts-and-programs-1/zilstat|このウェブサイト]]をご覧くさい+
  
-現在のところZFSはSLOG用に16GiBの領域を使います。 +そのうち試してみたい。
-より大きなSSDを組み込んでも、余分な領域は使用されません。 +
-SLOGデバイスはプール間で共有できません。 +
-れぞれプールは別々のSLOGデバイスを要求します。 +
-帯域とスループットの制約により、SLOGデバイスはこの単一目的のためだけに使用されなければなりません。 +
-同一のSSDに他のキャッシュ機能を追加しよしてはなりません。さもないと性能を損なうことになるでしょう。 +
- +
-ミッションクリティカルなシステムでは、ミラー構成のSLOGデバイスを強く推奨します。 +
-ミラー構成のSLOGデバイスはZFSバージョン19以前のZFSプールで要求されます。 +
-ZFSプールのバージョンはShellで''zpool get version プール名''コマンドで確認します。 +
-バージョン番号が「-」の場合、そのZFSプールは(Feature Flagとしても知られる)バージョン5000かそれ以降を意味します。 +
- +
-**ZFSはリードキャッシュを提供します。**ARCとして知られる読込みレイテンシを削減するオンメモリキャッシュです。 +
-FreeNAS®はARCの状態をtop(1)に追加し、まARCの効率をモニタリングするためのarc_suymmary.pyとarcstat.pyツールを含みます。 +
-SSDを専用キャッシュデバイスとして使う場合、それはL2ARCとして知られてます +
-追加の読み込みデータはL2ARCにキャッシュされ、ランダム読み込み性能を向上させます。 +
-L2ARCは(ZFSにおける)十分なメモリの必要性を低減するものではありません。 +
-事実、L2ARCは機能するのにメモリを必要とします。 +
-ARC用に必要十分なメモリがない場合、L2ARCを追加しても性能は増加しません。 +
-実際のところ、殆どの場合で性能が低下し、潜在的にシステムの不安定性を引き起こします。 +
-RAMは常にディスクより速いので、システムがL2ARCデバイスからの恩恵を享受できるかどうかを考える前に、まずは可能な限りのRAMを追加します。 +
- +
-アプリケーションがデータセットに対し、L2ARCに十分に収まるサイズ程度の膨大な量のランダム読み込みを行う場合、専用キャッシュデバイスの追加によって読み込み性能が向上する可能性があります。 +
-SSDキャッシュデバイスは、活きているデータ量がシステムRAMより大きく、かつSSDの大きさに対し十分に小さい場合にのみ有効に働きます。 +
-原則として、32GiBのRAMより小さなシステムにL2ARCを追加するべきではなく、L2ARCの大きさはRAM量の10倍を超えるべきではありません。 +
-幾つかのケースにおいて、2つの別々のプールを持つ方が効率的かもしれません:1つはアクティブデータ用としてSSDに、そしてもう1つは稀に使われるコンテンツ用としてHDDに。L2ARCデバイスの追加後、arcstatなどのツールでその効率を監視します。 +
-既存のL2ARCのサイズを増やすには、別のキャッシュデバイスを取り付けストライピングします。 +
-ウェブインタフェースからは、L2ARCをミラーではなく常にストライピングで追加します。そして、L2ARCの内容は起動のたびに再生成されます。 +
-プールのL2ARCを構成する個々のSSDの障害はプールの整合性に影響しませんが、読み込み性能にインパクトを与える可能性があり、これはワークロードおよびデータセットサイズとキャッシュサイズの比率に依存します。 +
-専用L2ARCデバイスはZFSプール間で共有できないことに留意してください。 +
- +
-**ZFSは冗長性を提供すると同時にハードウェアRAIDに内在する幾つかの問題に取り組むよう設計されました。**その問題とは、ライトホール問題とハードウェアコントローラが警告を出す前に、書き込まれたデータが時間とともに壊れる問題です。 +
-ZFSは3レベルの冗長性を提供し、それはRAIDZとして知られ、そしてRAIDZの後ろの数値はデータを保ったまま失うことのできるvdevあたりのディスク数を示します。 +
-ZFSはミラー構成にも対応し、ミラー中のディスク数に制限はありません。 +
-ZFSは一般品のディスク向けに設計されたため、RAIDコントローラは必要ありません。 +
-ZFSをRAIDコントローラとともに使うこともできますが、ZFSはディスクの全制御を行うため、コントローラをJBODモードにすることを推奨します。 +
- +
-使用するZFS冗長性の種類を決定する際、ゴールはディスク容量の最大化なのか性能の最大化なのかを考えます: +
- +
-  * RAIDZ1はディスク容量を最大化し、一般的に大きなチャンク(128KB以上)のデータの読み書きの時に良く機能します。 +
-  * RAIDZ2はRAIDZ1よりも良いデータ可用性と有意に良好な平均データ消失時間(MTTDL)を提示します。 +
-  * ミラーリングはディスク容量をより消費しますが、一般的に小さなランダムリードでより良く機能します。より良い性能のためには、あらゆるRAIDZよりミラーを強く推奨します。巨大で、キャッシュ不可能なランダムリードの負荷ではなおさらです。 +
-  * vdevあたり12を超えるディスクの利用は非推奨です。vdev毎の推奨ディスク数は3~9です。より多くのディスクを扱う場合は、複数のvdevを使ってください。 +
-  * 古いZFSドキュメントのなかには、最適性能の達成のため各RAIDZタイプごとに特定数のディスクを推奨しているものがあります。LZ4圧縮を使うシステムにおいて、これには標準のFreeNAS® 9.2.1以降も含まれますが、もはや真実ではありません。詳細は[[https://www.delphix.com/blog/delphix-engineering/zfs-raidz-stripe-width-or-how-i-learned-stop-worrying-and-love-raidz|ZFS RAIDZ stripe width, or: How I Learned to Stop Worrying and Love RAIDZ]]をご覧ください。 +
- +
- +
-以下の情報源も、特定のストレージ要求に対する最適なRAID設定の選定に役立つでしょう: +
- +
-  * [[https://forums.freenas.org/index.php?threads/getting-the-most-out-of-zfs-pools.16/|Getting the Most out of ZFS Pools]] +
-  * [[https://constantin.glez.de/2010/06/04/a-closer-look-zfs-vdevs-and-performance/|A Closer Look at ZFS, Vdevs and Performance]] +
- +
-<note warning>警告 +
- +
-__ +
-RAIDとディスク冗長化は、信頼あるバックアップ戦略の代わりではありません。 +
-悲運に見舞われた時、価値あるデータを守るために善きバックアップ戦略が依然として求められます。 +
-__ +
-[[https://www.ixsystems.com/documentation/freenas/11.2/tasks.html#periodic-snapshot-tasks|Periodic Snapshot Tasks]]と[[https://www.ixsystems.com/documentation/freenas/11.2/tasks.html#replication-tasks|Replication Tasks]]を見て、バックアップ戦略の一部として複製されたZFSスナップショットを使ってください。 +
-</note> +
- +
-**ZFSはデバイスを管理します。** +
-ミラーやRAIDZの構成デバイスに障害が発生しユーザーによって交換された時、ZFSは置き換えられたデバイスをvdevに追加し、resilveringと呼ばれる処理の中で冗長データを新デバイスにコピーします。 +
-ハードウェアRAIDコントローラは、通常、どのブロックが使われているかを知る術がないため、全てのブロックを新デバイスにコピーしなければなりません。 +
-ZFSは使用中のブロックだけをコピーするので、vdevの再構築時間を削減します。 +
-Resilveringは中断可能でもあります。 +
-中断後、resilveringは最初から開始するのではなく、中断した部分から再開します。 +
- +
-ZFSは多くの恩恵を提供する一方、いくつかの注意点があります: +
- +
-  * 容量の90%に達すると、ZFSは最適化戦略を性能ベースから空間ベースへと切り替えます。これは性能に関して大変な意味合いを持ちます。最大書き込み性能とドライブ置き換え時の問題を防ぐために、プールの使用率が80%に達する前に容量を増やしてください。 +
-  * vdevあたりの使用ディスク数を考える時、そのディスクのサイズとvdevの再構築処理であるresilveringに要する時間を考慮します。大きなサイズのvdevは、それだけresilveringが長くなります。RAIDZ内のディスクを置き換える場合、resilvering処理の完了前に別のディスクが故障する可能性があります。故障ディスクの数がRAIDZの種類によって決まるvdevあたりの耐障害数を超えると、そのプールのデータは失われます。この理由により、1TiB以上のドライブでRAIDZ1はおすすめしません。 +
-  * vdevを作成する場合、使用するドライブの容量を合わせることを推奨します。ZFSは異なる容量のドライブでvdevを作成できるものの、vdevの容量は最小のディスクの容量によって制限されます。 +
- +
- +
-ZFS入門者にとって、WikipediaのページはZFSの特徴をより知るための素晴らしい出発地点を提供します。 +
-参考までに、以下の情報源も有益です: +
- +
-  * [[https://wiki.freebsd.org/ZFSTuningGuide|FreeBSD ZFS Tuning Guide]] +
-  * [[https://docs.oracle.com/cd/E19253-01/819-5461/index.html|ZFS Administration Guide]] +
-  * [[https://www.youtube.com/watch?v=tPsV_8k-aVU|Becoming a ZFS Ninja Part 1 (video)]] と [[https://www.youtube.com/watch?v=wy6cJRVHiYU|Becoming a ZFS Ninja Part 2 (video)]] +
-  * [[https://www.freebsd.org/doc/en_US.ISO8859-1/books/handbook/zfs.html|The Z File System (ZFS)]] +
-  * [[https://www.youtube.com/watch?v=aTXKxpL_0OI&list=PL5AD0E43959919807|ZFS: The Last Word in File Systems - Part 1 (video)]] +
-  * [[https://www.youtube.com/watch?v=ptY6-K78McY|The Zettabyte Filesystem]] +
- +
-27.1. ZFS Feature Flags +
- +
-OracleのZFSバージョン番号との識別のため、OpenZFSは機能フラグ(feature flags)を使います。 +
-機能フラグは、異なるプラットフォーム上で動くOpenZFS実装同士の移植性を保つため、一意の名前を機能にタグ付けするのに用いられ、ZFSプールの全ての機能フラグ +
-FreeNAS®はOpenZFSを採用し、 +
- +
-To differentiate itself from Oracle ZFS version numbers, OpenZFS uses feature flags. Feature flags are used to tag features with unique names to provide portability between OpenZFS implementations running on different platforms, as long as all of the feature flags enabled on the ZFS pool are supported by both platforms. FreeNAS® uses OpenZFS and each new version of FreeNAS® keeps up-to-date with the latest feature flags and OpenZFS bug fixes. +
- +
-See zpool-features(7) for a complete listing of all OpenZFS feature flags available on FreeBSD.+
  
 +===== 参考サイト =====
  
 +  * [[https://github.com/openzfs/zfs/pull/5182|Metadata Allocation Classes by don-brady · Pull Request #5182 · openzfs/zfs · GitHub]]
 +  * [[https://docs.google.com/presentation/d/17nYRgs-TAIOPODOMaq-VwuJ0LqJHEXBfM9sUDxJUJ54|Pool Allocation Classes - 5182]]
 +  * [[https://forums.servethehome.com/index.php?threads/zfs-allocation-classes-special-vdev.28862/|ZFS Allocation Classes / Special VDEV | ServeTheHome Forums]]
 +  * [[https://forum.level1techs.com/t/zfs-metadata-special-device-z/159954|ZFS Metadata Special Device: Z - Wikis & How-to Guides - Level1Techs Forums]]
 +  * [[https://zfs.datto.com/2017_slides/brady.pdf|Using Allocation Class]](PDF)
 +  * [[https://www.napp-it.org/doc/downloads/special-vdev.pdf|Allocation Classes Feature - Benchmarks and use case on OmniOS]]