FreeBSD Daily Topics

2009年12月15日≪注目≫FreeBSD UFS+Softupdateにミニジャーナリングを追加してバックグラウンドfsckを不要にする取り組み

heads-up

Journaled Softupdates Hybrid system

current - Jeff Roberson氏およびKirk McKusick氏がFreeBSD UFS/Softupdatesに最小限のジャーナリング機能を追加することで、バッググラウンドfsckを不用にするための取り組みをしていると発表しています。2009年12月の間には9-CURRENTにコードをマージするとしており、向こう2週間の間にはソースコードを公開すると説明されています。

設計と実装の解説や評価はBSDCan 2010で発表される見通しです。この取り組みはiXsystems、Yahoo!、Juniper networksの支援を得て実施されたものだと説明されています。

ファイルシステムのfsckを不用にする取り組みはいくつかあります。ジャーナリングを使う、コピーオンライトを使う、Softupdates+bgfsckを使う、などです。コピーオンライトのアイディアは1990年にはすでに論文で登場しており、現在最もよく知られているのはZFSです。ZFSはファイルシステムのデータ書き込みの仕組み上(コピーオンライト⁠⁠、ファイルシステムの不整合が発生することがなく、fsckが不要とされています。フラッシュのようなメディアと相性がいいのも特徴の1つです。既存のファイルシステムにジャーナリングの機能を追加するのもよくとられる方法です。

仕組みや実装が簡単という特徴がありますが、性能を発揮させようとするとコードが複雑になりがちという問題もあります。

FreeBSD UFSはコピーオンライトやジャーナリングではなく、Softupdatesという機能を実装することで性能の向上とfsckの不要化の双方を実現しました。Softupdatesはディスクに書き込む前に確実に処理すべき必要がある依存関係のリストを保持しつつ、書き込むべきタイミングまで対象となる書き込みを待ちます。こうすることでファイルシステムの一貫性が保証できるとともに、不要な書き込みを減らし、さらに小さいファイル操作に関してはオンメモリで処理が実施されディスク操作が発生しないという特徴があります。小さいファイルの作成、数ブロックのデータの書き込み、ファイルの削除といった操作は実際にディスクに書き込まれることなくオンメモリで処理されます。

Softupdatesでファイルシステムに不整合が発生するのはシャットダウンが正しく実施されなかったケースで、inodeリークとブロックリークが発生します。FreeBSDではバックグラウンドfsckを実行することで、システムを起動した状態でリーク部分の修正を実施します。問題はバックグラウンドfsckのコストがきわめて高いことです。IO負荷が高く、しかもかなり時間がかかります。大規模ストレージでバックグラウンドfsckを実行するのは、実用的とは言い難いところがあります。

Jeff Roberson氏およびKirk McKusick氏の取り組みは、inodeリークとブロックリークに関連する部分のみをジャーナリングするというものです。ジャーナルごとのサイズが32バイトとほかのジャーナリングファイルシステムと比較してきわめてサイズが小さいといった特徴があります。さらに従来のUFS+Softupdatesが実現していたディスク書き込みの低減と並列性能の高さには影響を与えないとしています。1MBのジャーナルで32,768のファイルオペレーションを処理するようですが、この復旧にかかる時間は2秒未満と報告されています。バックグラウンドfsckと比較して圧倒的な高速化と言えます。

FreeBSD UFS/Softupdatesには長い実績があり、高負荷がかかるような状況で安定して動作するファイルシステムとして定評があります。このファイルシステムの基本構造を保ったまま、ここにジャーナルの機能が追加されるというところがポイントです。バックグラウンドfsckのコストの高さは大規模ストレージにおけるUFS/Softupdates採用の懸念点であるため、Jeff Roberson氏およびKirk McKusick氏の取り組みはきわめて注目の高いものと言えます。

おすすめ記事

記事・ニュース一覧