概要
- 1994 年の論文でボンウィックは slab allocator を記述しました。これはカーネルオブジェクトを名前のないメモリブロックではなく再利用可能な型付き構造体として扱うもので、他のオペレーティングシステムにも影響を与えました。
- 2001 年、ジョナサン・アダムスとともに CPU ローカルのキャッシュと vmem アロケータによってこの発想を発展させ、マルチプロセッサシステムや通常のメモリ以外のリソースへと拡張しました。
- ボンウィックはマット・アーレンズとともに ZFS を開始し、プール、copy-on-write、エンドツーエンドのチェックサム、スナップショット、復旧を統合した Sun のより広いチームを率いました。彼を唯一の発明者と呼ぶのは誤りです。
- DSSD の買収とその後のスタンドアロン製品の中止、そして現在の iodyne 共同社長の地位は、優れたアーキテクチャ、取引コスト、持続可能な製品市場が別物であることを示しています。
ストレージシステムはエラーを通知せずに不正なブロックを返すことがある
ストレージの基本的な約束は単純です。読み出しの際、アプリケーションは書き込まれたものを受け取るべきです。従来のスタックでは、この責任はファイルシステム、ボリュームマネージャ、コントローラ、デバイスの間に分散しています。各部分は、チェーン全体が古いデータ、リダイレクトされたデータ、破損したデータを返していながら、成功を報告することがあります。
ZFS は子ブロックのチェックサムを親ブロックに保存します。期待される同一性はポインタのツリーを通じて伝わり、検証対象の内容から分離されています。読み出しの際、ZFS は受け取ったブロックを期待値と比較します。正しいミラーやパリティのコピーが存在すれば、システムはそれを読み、検証し、正しいデータを返し、破損した複製を修復できます。scrub は同じ論理を割り当て済みデータに適用し、破損がアプリケーションに検出される前に対処します。
このメカニズムは ZFS の評判とその限界の両方を説明します。チェックサムは不一致を検出しますが、すべてのコピーが不正な場合にデータを再生成するわけではありません。冗長性は独立したバックアップ、検証済みの復旧、健全な物理トポロジの代替にはなりません。管理者のミス、正当な権限を持つランサムウェア、火災、相関する障害はモデルの限界を超える可能性があります。
ボンウィックの貢献は、サイレントな障害を観測可能にし、検証と修復を通常の動作経路に組み込んだことです。データ損失のリスクは消えません。優れたアーキテクチャの価値は、保証の境界をより正確に示すことにあります。
ZFS の前に、ボンウィックはカーネルオブジェクトを安価で理解しやすくした
カーネルはファイル、接続、プロセス、仮想メモリのために構造体を絶えず割り当てています。それらには型、サイズ、不変条件、初期化コストがあります。毎回生のメモリを要求し、オブジェクトを生成し破壊することは、小さな作業をシステム全体に掛け算することに相当します。
1994 年の論文の slab allocator はメモリをスラブに整理し、オブジェクトクラスごとのキャッシュを維持します。コンストラクタが状態を準備し、デストラクタがリソースを解放し、空きオブジェクトは再利用のために残されます。カーネルは型についての知識を保持し、局所性、断片化、デバッグ、会計を改善できます。
元の実装は SunOS と Solaris の一部でした。Linux、FreeBSD、その他のシステムは独自のコードとトレードオフを作りました。すべての現代のアロケータをボンウィックに帰することはできません。キャッシュはメモリを消費し、余分な状態を保持し、圧力下でのバランス調整を必要とします。中心的な達成は、生成コスト、ロック、局所性、ライフサイクルを明示的にモデル化したことです。
ローカルキャッシュがアロケータをマルチプロセッサアーキテクチャに変えた
多数の CPU が単一のロックを奪い合うとき、グローバルキャッシュはボトルネックになります。2001 年の論文Magazines and Vmemで、ボンウィックとジョナサン・アダムスはプロセッサごとの小さなローカルオブジェクト集合を提案しました。頻繁な操作はローカルで実行され、共有 depot とのやり取りはまとめて行われます。
vmem はこの階層的なアプローチをアドレス範囲、識別子、その他のリソースに拡張しました。アリーナは下位のアロケータから容量を取り込みます。調整の単位が変わります。システムは中央集権的に各オブジェクトではなく、グループと所有関係を管理します。
局所性にはコストがあります。ある CPU にオブジェクトが蓄積し、別の CPU には足りなくなることがあります。バランス調整と調整は残ります。歴史的な結果は特定のハードウェアに依存します。長く続く発想は、汎用インターフェイスが失ってしまう情報を捨てないことです。
ZFS はストレージスタックを再構築するというチームの決断から始まった
ボンウィックとマット・アーレンズは 2001 年に Sun で ZFS の作業を開始しました。その後、ビル・ムーや多くのエンジニアが加わりました。ボンウィックはプロジェクトを率い、公に説明しましたが、成熟したファイルシステムにはディスク上のフォーマット、キャッシュ、ツール、ドライバ、テスト、そして何年にもわたる集団的なデバッグが含まれます。
以前のモデルでは、RAID またはボリュームを作成し、それを分割し、その上に厳密な成長予測を持つファイルシステムを構築する必要がありました。ZFS はファイルシステムとボリューム管理をプールの周りに統合しました。vdev が容量を提供し、dataset がそれを動的に利用します。quota、reservation、snapshot、プロパティは一つのモデルの中にあります。
日常的な簡潔さは、初期トポロジの重要性を高めます。vdev の構成は冗長性、性能、拡張、障害耐性を決定します。プールを後から任意に再構成することはできません。Sun は 2004 年に ZFS を発表し、2005 年に OpenSolaris でコードを公開し、2006 年に Solaris 10 で出荷しました。
歴史的な意義は一つの機能ではなく、pool、copy-on-write、checksums、snapshots、RAID-Z、cache、管理の協調的な組み合わせにあります。
Copy-on-write は木全体をコミットの単位にした
その場での更新は、古い状態と新しい状態の間にメタデータを残す可能性があります。ZFS は新しいブロックを書き込み、親を更新し、transaction group のために新しい root へアトミックに切り替えます。コミット前は、以前のバージョンが整合したまま残ります。
snapshot は古いブロックへの参照を保持します。clone はデータを共有し、新しい書き込みに応じて分岐します。代償は追加の書き込み、断片化、領域の保持です。それでも保証は、デバイスとコントローラが書き込みの順序と永続性を守るかどうかに依存します。
システムは、どのバージョンが完全か、どのブロックが期待されていたか、どの root をコミットできるかをより多く知るために構造を費やします。この知識は物理的な機械を無効化するものではありません。
チェックサムと自己修復は「成功した読み出し」の意味を変えた
ZFS は、デバイスが成功と見なす操作でさえ検証します。不一致があればシステムは別のコピーを試し、正しいものが見つかれば破損した複製を修復できます。scrub は反応を計画的なメンテナンスに変え、冗長性がまだ存在するうちに潜在エラーを発見します。
検出、修復、完全な復旧は別々の能力です。ランサムウェアはチェックサムの正しい暗号化データを書き込むことがあります。複数のコピーが同時に障害することもあります。同じ障害ドメイン内のバックアップは独立していません。オペレータは、どのコピーが存在するか、想定された冗長性が尽きたときに何が利用可能かを知っておく必要があります。
RAID-Z、ARC、scrub は整合性を日常の運用に結びつけた
RAID-Z は copy-on-write とパリティストライプを利用して、古典的な write hole を回避します。小さな書き込みのコスト、rebuild、相関する障害は残ります。大容量ディスクは復旧中の脆弱期間を長くします。
ARC は最近読まれたデータと頻繁に読まれるデータのバランスを取ります。セカンダリキャッシュは階層を拡張します。どのキャッシュも、遅い媒体をあらゆるワークロードに対して速くするわけではありません。メモリ、メタデータ、ワークロードの挙動は測定が必要です。
scrub、resilvering、snapshot の削除、replication は I/O、CPU、ネットワークを消費します。メンテナンスのための余裕は容量の一部です。限界で動き続けるプールは、復旧に最も苦労する可能性があります。
ボンウィックはオペレータに理解しやすい語彙も与えました。pool、vdev、transaction group、scrub です。これは普及に役立ちましたが、短い定式が適用条件を失ってはなりません。
OpenSolaris は終わったが、プロジェクトは生みの親の会社を超えて生き延びた
Oracle は 2010 年に Sun を買収し、プロプライエタリとオープンの両系統が分かれました。OpenZFS は 2013 年に illumos、FreeBSD、Linux、その他のコミュニティを調整するために登場しました。現代のプロジェクトは Sun のコードに由来しますが、大幅に変更されており、ボンウィックの管理下にはありません。
この継続は、アーキテクチャが制度を超えて生き延びられることを証明します。しかし滑らかではありませんでした。CDDL は Linux カーネルの GPL と単純には組み合わせられず、各プラットフォームは機能を異なる速度で採用し、feature flags はプールの可搬性に影響します。
公開リポジトリだけでは不十分です。メンテナ、テスト、資金、リリースが必要です。ガバナンスは制度的な障害ドメインになります。OpenZFS はボンウィックの遺産の一部ですが、運用上は現在の責任者たちに属します。
DSSD は、野心的なアーキテクチャが製品競争に負けうることを示した
ボンウィックはマイク・シャピロとビル・ムーアとともに DSSD を設立し、ラックスケールのフラッシュシステムを目指しました。EMC は 2014 年に同社を買収し、2017 年には D5 がスタンドアロン製品ではなくなりました。
このエピソードは、必然的な成功という物語を崩します。性能、独創性、資本が持続可能な地位を保証するわけではありません。移行、コスト、認証、サポート、販売チャネル、買主の優先事項、NVMe やクラウドの経済性がベンチマークより重要になることがあります。
情報源からは単一の原因を特定したり、創業者個人の財産を評価したりすることはできません。情報源が確認するのは買収と製品の中止だけです。DSSD は技術的価値、取引の価値、商業的生存を切り離します。
iodyne は新しい ZFS ではなく、親しみのある課題を専門メディア市場に持ち込む
ボンウィックとシャピロは 2018 年に iodyne を設立し、共同社長を務めています。同社は映像・音響制作向けの高速で暗号化された冗長な NVMe ストレージを提供しています。
継続性は概念的なものです。実際のワークフローにおける性能、保護、修復です。iodyne は「箱に入った ZFS」ではなく、DSSD の直接の続きでもありません。規模、インターフェイス、市場、メカニズムが異なります。
製品ページは宣伝された機能を裏付けますが、監査された信頼性、市場シェア、収益を証明するものではありません。メディア制作では障害が編集と納品を止めます。暗号化は資産を保護し、複数のユーザーが作業を続けられるなら速度に価値があります。統合はサポートを簡素化する一方で、民間ベンダーへの依存を集中させます。
管理は信頼性モデルの一部になった
ZFS プールは、それ自体がエラーを生んでいた管理上の境界を減らします。dataset、quota、reservation、snapshot、replication が、無関係なツールの連鎖ではなく一つのポリシーの中にあります。
責任は消えません。一つの dataset がプールを満杯にでき、snapshot はブロックを保持し、replication は受け手が健全で復旧が検証されている場合にのみ役立ちます。二つの論理コピーが同じコントローラ、電源、ファームウェアの欠陥を共有することがあります。論理モデルを物理モデルに対応させなければなりません。
zfs listの整然とした出力だけで、組織がアプリケーションを復旧させ、データベースの整合性を保ち、復号用の鍵を見つけられることの証明にはなりません。論理ビューは管理を簡素化しますが、試された復旧や物理的・アプリケーションレベルの依存関係の知識の代わりにはなりません。
アロケータとファイルシステムは、メンテナンスを第一級のワークロードにした
キャッシュは補充とバランス調整を必要とします。pool は検査、再構築、複製が必要です。この作業はユーザー負荷と競合しますが、長期的な持続性を決定します。空きリソースは、次の障害の前に修復を完了させる余裕となり得ます。
ソフトウェアにも同じことが当てはまります。OpenZFS にはテスト、互換性、リリースが必要です。iodyne は販売後もファームウェア、ホストソフトウェア、ハードウェアを維持しなければなりません。発明がシステムを作り、メンテナンスがそれをインフラに変えます。
技術的リーダーシップとは、他のエンジニアが作業できるように境界を定めることだった
ボンウィックのリーダーシップは重要でありながら集団的なものでした。アーレンズ、ムーア、アダムス、Sun のチーム、その後のメンテナは可視のままであるべきです。キャッシュ、アリーナ、プール、dataset、transaction group といった抽象化が、共通のモデルのもとで作業を分割することを可能にしました。
歴史的な権威は現在の責任の代わりにはなりません。今日のコードを決めるのは OpenZFS のメンテナです。iodyne では指揮はシャピロと分担されています。参加者を挙げることは、決定、維持、責任がどこにあるかを示すことです。
ライセンスとガバナンスはもう一つの障害隔離の形になった
企業は戦略を変えることがあります。オープンコードによって、他のグループが Sun の後に ZFS を続けることができました。この冗長性が機能したのは、権利、知識、リリースを行う実際の能力が存在したからです。
メンテナのいない二つのブランチは、同じコントローラの後ろにある二台のディスクより確実ではありません。企業とボランティアは資源をもたらすと同時に依存関係を作ります。OpenZFS は制度的にも技術的にも生き延びました。
繰り返される方法論は、薄い層が捨ててしまう情報を保持する
汎用アロケータはサイズしか見ません。slab は型とライフサイクルを見ます。スタックは成功した読み出ししか見ません。ZFS は期待される同一性を持つブロックを見ます。製品はスループットを約束します。運用は修復、暗号化、継続性を考慮します。
追加情報はリソースを消費し、全体の障害ドメインを広げることがあります。優れた設計は単にコンポーネントを隠すのではなく、組織が理解し復旧できる境界を示します。
ZFS はストレージの比較基準を変えた
volume、filesystem、checksums、snapshots、repair を統合することで、ZFS は完全な経路での比較を強いました。XFS、Btrfs、APFS、ReFS、Ceph、商用アレイとの論争では、機能一覧ではなく、整合性モデル、トポロジ、サポート、退出経路が重要になります。
万能の勝者は存在しません。商用製品は検証済みのハードウェアと契約を提供します。オープンコードは透明性と可搬性を提供します。分散システムはネットワーク依存を伴う規模を提供します。専用アプライアンスは最適化されたワークフローと、可能性としてのロックインを提供します。
障害ドメインの思考はメモリ、ストレージ、企業の生存を結びつける
障害ドメインはディスク、ラック、グローバルロック、企業、サプライヤであり得ます。Magazines は単一ロックへの集中を減らし、checksums はデバイスへの盲目的な信頼を減らし、OpenZFS は単一企業への依存を減らします。
冗長性は脅威の水準に合わせなければなりません。同じコントローラの後ろのディスク、失われた単一鍵の下のコピー、メンテナのいないブランチは、持続性を装っているだけです。簡略化は共通の運命を隠すことがあります。相関は地図化し、独立した復旧はテストする必要があります。
誠実な遺産は、絶対的な保証ではなくより良い問いです
slab allocator はオブジェクトの取り扱いに影響を与えました。magazines と vmem は割り当てを拡張しました。ZFS は運用と整合性を統合しました。OpenZFS は制度的な転換を生き延びました。DSSD は商業的な限界を示し、iodyne は別の市場でこのテーマを続けています。
ボンウィックを共同設計者、指導者、アーキテクトと呼ぶことは正しいですが、唯一の著者や現在の OpenZFS の管理者と呼ぶことは正しくありません。ZFS は多くの破損を検出しますが、有効なコピーを必要とします。copy-on-write はハードウェアに依存します。RAID-Z はバックアップの代わりになりません。scrub は将来の読み出しを保証しません。
観測可能なテストは、彼の仕事が避けられないようにした問いにシステムが今も答え続けているかです。アロケータはオブジェクトについて何を知っているか。ブロック検証のための期待値はどこに保存されているか。どの状態が完全か。コピーは本当に独立しているか。冗長性が尽きた後、誰が復旧するのか。
完全な一覧、正確な貢献の配分、iodyne の監査済みデータがないことは、可視のままであるべきです。この正確さ自体が同じ規律の一部です。
会員向け解説
トレンドの深掘り
適切な会員レベルでログインすると、解説全文と出典メモをご覧いただけます。
ストラテジックサークル
あなたの言語で毎日届く、私たちが確認した変化に基づくブリーフィング。
USD 20/月で参加いつでも解約できます。
公開記事は無料のままです。会員向けリサーチ、毎日のブリーフィング、フォーラムには会員資格が必要です。






