F2FS 開発 かいはつ 者 しゃ
サムスン電子 でんし 、モトローラ・モビリティ 、ファーウェイ 正式 せいしき 名 めい
Flash-Friendly File System 導入 どうにゅう
2012年 ねん 12月 がつ 20日 はつか (2012-12-20 ) (Linux 3.8) 構造 こうぞう ディレクトリ
マルチレベルハッシュテーブル 領域 りょういき 管理 かんり
ビットマップ (空 あ き容量 ようりょう )、テーブル 限度 げんど 最大 さいだい ファイル サイズ
3.94 TiB 最大 さいだい ファイル数 すう
ボリュームサイズに依存 いぞん 最大 さいだい ファイル名 めい 長 ちょう
255バイト 最大 さいだい ボリューム サイズ
16 TiB ファイル名 めい の文字 もじ
NUL と '/' 以外 いがい の全 すべ ての文字 もじ 特徴 とくちょう タイムスタンプ
変更 へんこう 、属性 ぞくせい 変更 へんこう 、アクセス 日付 ひづけ 分解能 ぶんかいのう
1ナノ秒 びょう 属性 ぞくせい
POSIX 、拡張 かくちょう 属性 ぞくせい パーミッション
POSIX、ACL 透過 とうか 的 てき 圧縮 あっしゅく
なし 透過 とうか 的 てき 暗号 あんごう 化 か
あり 対応 たいおう OS
Linux テンプレートを表示 ひょうじ
F2FS (Flash-Friendly File System ) は、サムスン電子 でんし の金 かね 載 の 極 ごく (朝 あさ : 김재극 、英 えい : Jaegeuk Kim ) によって開発 かいはつ されたLinux 向 む けのフラッシュファイルシステム である[ 1] 。
NANDフラッシュメモリ ベースのストレージ[ 注釈 ちゅうしゃく 1] は、スマートフォン・タブレット からサーバ まで、様々 さまざま な種類 しゅるい のコンピュータ で利用 りよう されている。F2FSはこれらのストレージの特性 とくせい を考慮 こうりょ したファイルシステム として設計 せっけい が行 おこな われている[ 2] 。
F2FSはログ構造 こうぞう ファイルシステム を、NANDフラッシュメモリベースのストレージに適 てき したものにして取 と り入 い れている。F2FSでは、従来 じゅうらい のログ構造 こうぞう ファイルシステムの問題 もんだい 点 てん であるガベージコレクション の負荷 ふか の高 たか さなどを解消 かいしょう している[ 1] 。NANDフラッシュメモリベースのストレージではフラッシュ変換 へんかん レイヤ (英 えい : Flash Translation Layer 、FTL) が実装 じっそう されており、フラッシュメモリ の特性 とくせい [ 注釈 ちゅうしゃく 2] の隠蔽 いんぺい とHDD のエミュレート を行 おこな い、SATA などのインタフェース で利用 りよう ができるようにしている。F2FSはFTLの存在 そんざい を前提 ぜんてい として、NANDフラッシュメモリベースのストレージの性能 せいのう を引 ひ き出 だ すことができるように設計 せっけい されている[ 1] 。
F2FSには、以下 いか の機能 きのう が実装 じっそう されている[ 3] 。
マルチヘッドログ
マルチレベルハッシュテーブル
静的 せいてき /動的 どうてき なホットデータとコールドデータの分離 ぶんり
Adaptive logging scheme
Configurable operational units
二 に 重 じゅう チェックポイント
巻 ま き戻 もど しと前進 ぜんしん 復帰 ふっき の対応 たいおう
ヒープ形式 けいしき のブロック割 わ り当 あ て
TRIM / FITRIMのサポート
オンラインデフラグメンテーション
インライン拡張 かくちょう 属性 ぞくせい
インラインデータ
インラインディレクトリ
オフラインファイルシステムチェック
Atomic operations
ファイルシステム全体 ぜんたい の暗号 あんごう 化 か
オフラインでのファイルシステムのサイズ変更 へんこう
キャッシュ (コンピュータシステム) の定期 ていき 的 てき な書 か き込 こ み
Extent cache
Move_file_range
Host-managed SMR
複数 ふくすう のデバイスに対応 たいおう
Large IO submission
Disk Quota (user/group)
また、以下 いか の機能 きのう の実装 じっそう が予定 よてい されている[ 3] 。
F2FSはボリューム全体 ぜんたい を多数 たすう のセグメントに分割 ぶんかつ する。各 かく セグメントのサイズは2MB固定 こてい である。連続 れんぞく する複数 ふくすう セグメントをまとめてセクションが定義 ていぎ され、セクションの集合 しゅうごう としてゾーンが定義 ていぎ される。デフォルト設定 せってい では、セクションとゾーンは同 おな じサイズに設定 せってい されるが、ユーザはmkfs
を用 もち いて簡単 かんたん にサイズを変更 へんこう できる。
F2FSはボリューム全体 ぜんたい を6個 こ のエリアに分割 ぶんかつ する。以下 いか に記述 きじゅつ するように、スーパーブロックエリアを除 のぞ き、各 かく エリアは複数 ふくすう のセグメントから構成 こうせい される。
スーパーブロック (SB)
パーティションの先頭 せんとう に配置 はいち される。ファイルシステムが壊 こわ れないよう、2 ふた つのコピーが作 つく られる。スーパーブロックはパーティションの基本 きほん 情報 じょうほう とF2FSのデフォルトパラメータを持 も つ。
チェックポイント (CP)
ファイルシステム情報 じょうほう 、有効 ゆうこう NAT/SIT集合 しゅうごう のビットマップ、orphan inodeリスト、現在 げんざい アクティブなセグメントのエントリーサマリーを持 も つ。
セグメント情報 じょうほう テーブル (SIT)
有効 ゆうこう ブロック数 すう と、全 すべ てのメインエリアブロックの有効 ゆうこう ビットマップを持 も つ。
ノードアドレステーブル (NAT)
メインエリアを構成 こうせい するノードブロックのアドレステーブル。
セグメントサマリーエリア (SSA)
メインエリアとノードブロックの所有 しょゆう 者 しゃ 情報 じょうほう エントリーを持 も つ。
メインエリア
ファイル、ディレクトリ、およびそれらのインデックスを持 も つ。
ファイルシステムとフラッシュ記憶 きおく 装置 そうち の不 ふ 整合 せいごう を避 さ けるため、F2FSはCPの開始 かいし ブロックアドレスをセグメントサイズ境界 きょうかい に配置 はいち する。また、メインエリアの開始 かいし ブロックアドレスもゾーンサイズ境界 きょうかい に配置 はいち する。このためにSSAにセグメントを追加 ついか 確保 かくほ している。
F2FSはチェックポイント(CP)を用 もち いてファイルシステムの一貫 いっかん 性 せい を保持 ほじ する。F2FSはマウント時 じ にCPエリアをスキャンし、最後 さいご に作 つく られた有効 ゆうこう なCPを探 さが す。スキャンにかかる時間 じかん を短縮 たんしゅく するため、F2FSはCPのコピーを2 ふた つしか持 も たない。2 ふた つのコピーのうち1 ひと つが、最後 さいご に作 つく られた有効 ゆうこう なCPである。この方式 ほうしき をシャドーコピー方式 ほうしき と呼 よ ぶ。CPだけでなく、ノードアドレステーブル(NAT)とセグメント情報 じょうほう テーブル(SIT)にもシャドーコピー方式 ほうしき が使 つか われる。ファイルシステムの一貫 いっかん 性 せい を保 たも つため、各 かく CPは有効 ゆうこう なノードアドレステーブル(NAT)とセグメント情報 じょうほう テーブル(SIT)に関連付 かんれんづ けられる。
ファイルシステムの鍵 かぎ となるデータ構造 こうぞう は「ノード」である。伝統 でんとう 的 てき なファイルシステムと同様 どうよう に、F2FSも3種類 しゅるい のノード、すなわち、iノード(inode )、直接 ちょくせつ ノード、間接 かんせつ ノードを持 も つ。iノードブロック1 ひと つのサイズは4KBである。以下 いか に示 しめ すように、iノードブロックは923のデータブロックインデックス、2 ふた つの直接 ちょくせつ ノードポインタ、2 ふた つの間接 かんせつ ノードポインタ、そして1 ひと つの二 に 重 じゅう 間接 かんせつ ノードポインタを持 も つ。直接 ちょくせつ ノードブロックは1018のデータブロックインデックスを持 も ち、間接 かんせつ ノードブロックは1018のノードブロックインデックスを持 も つ。よって、1 ひと つのiノードブロック (すなわち一 ひと つのファイル) は以下 いか のサイズのデータを保持 ほじ できる。
4 KB × (923 + 2×1018 + 2×10182 + 10183 ) = 3.94 TB
全 すべ てのノードブロックの配置 はいち は、ノードアドレステーブル(NAT)によって管理 かんり される。すなわち、各 かく ノードの配置 はいち アドレスはNATを参照 さんしょう して取得 しゅとく する。F2FSは、このインデックス構造 こうぞう により葉 は (リーフ) に当 あ たるデータを書 か き換 か えたときのノード情報 じょうほう 更新 こうしん 範囲 はんい を限定 げんてい し、木 き 構造 こうぞう 放浪 ほうろう 問題 もんだい (wandering tree problem)を軽減 けいげん している。
ディレクトリエントリ (dentry) は11バイトのサイズをもち、以下 いか の属性 ぞくせい を持 も つ。
ディレクトリエントリ構造 こうぞう
hash
ファイル名 めい のハッシュ値 ち
ino
inode 番号 ばんごう
len
ファイル名 めい の長 なが さ
type
ディレクトリ、シンボリックリンクなどのファイルタイプ
dentryブロックは214のdentryスロットとファイル名 めい を持 も つ。各 かく dentryが有効 ゆうこう かどうかは、ビットマップにより管理 かんり される。dentryブロックは4KBのサイズを持 も ち、以下 いか の構造 こうぞう を持 も っている。
dentry ブロック (4 K) = ビットマップ (27 bytes) + 予 よ 約 やく 域 いき (3 bytes) +
dentryスロット (11 * 214 bytes) + ファイル名 めい (8 * 214 bytes)
F2FSのディレクトリ構造 こうぞう はマルチレベルハッシュテーブルとして実装 じっそう されている。以下 いか に示 しめ すように、各 かく レベルのハッシュテーブルは専用 せんよう のハッシュバケットを複数 ふくすう 持 も っている。"A(2B)"は、1 ひと つのハッシュバケットが2 ふた つのデータブロックを持 も つことを意味 いみ する。
定義 ていぎ
A ... ハッシュバケット
B ... ブロック
N ... MAX_DIR_HASH_DEPTH (最大 さいだい ハッシュ深 ふか さ)
レベル #0 A(2B)
レベル #1 A(2B) - A(2B)
レベル #2 A(2B) - A(2B) - A(2B) - A(2B)
...
レベル #N/2 A(2B) - A(2B) - A(2B) - A(2B) - A(2B) - ... - A(2B)
...
レベル #N A(4B) - A(4B) - A(4B) - A(4B) - A(4B) - ... - A(4B)
F2FSはディレクトリの中 なか にあるファイル名 めい をみつけると、まずそのファイル名 めい のハッシュ値 ち を計算 けいさん する。次 つぎ にレベル#0のハッシュテーブルを走査 そうさ し、そのファイル名 めい を持 も つdentryとそのinodeを見 み つける。見 み つからない場合 ばあい は、レベル#1のハッシュテーブルを走査 そうさ する。以下 いか 同様 どうよう に、各 かく レベルのハッシュテーブルを1からN まで順次 じゅんじ 走査 そうさ していく。このとき、各 かく レベルの走査 そうさ 対象 たいしょう となるハッシュテーブルは、以下 いか の式 しき によって決 き まるテーブル1 ひと つですむ。この式 しき の複雑 ふくざつ さはO(log(ファイル数 すう ))である。
レベル#nにおいて走査 そうさ するバケット番号 ばんごう = (ハッシュ値 ち ) % (レベル#nのバケットの数 かず )
ファイル作成 さくせい 時 じ には、F2FSはファイル名 めい を格納 かくのう できる連続 れんぞく する空 そら エントリを探 さが す。この空 そら エントリの探索 たんさく は、ファイル名 めい の走査 そうさ と同様 どうよう に、ハッシュテーブルの全 ぜん レベルについて、レベル1からN まで順次 じゅんじ 行 おこな われる。
F2FSはメインエリアに6 むっ つのアクティブログを持 も つ。Hot/Warm/Coldノード、およびHot/Warm/Coldデータの6 むっ つである.
ブロック割 わ り当 あ てポリシー
Hotノード
ディレクトリの直接 ちょくせつ ノードブロック
Warmノード
Hotノード以外 いがい の直接 ちょくせつ ノードブロック
Coldノード
間接 かんせつ ノードブロック
Hotデータ
dentryブロック
Warmデータ
Hotデータ、Coldデータ以外 いがい のデータブロック
Coldデータ
マルチメディアデータブロックと移行 いこう データブロック
F2FSの空 そら 領域 りょういき 管理 かんり 方式 ほうしき は「スレディッドログ方式 ほうしき 」と「コピーコンパクション方式 ほうしき 」の2 ふた つである。コピーコンパクション方式 ほうしき は「消去 しょうきょ 処理 しょり (クリーニング)」とも呼 よ ばれ、空 そら 領域 りょういき を常 つね に新 あたら しいデータの書 か き込 こ みに使用 しよう するため、高 たか い順次 じゅんじ 書 か き込 こ み性能 せいのう を持 も つデバイスに適 てき している。一方 いっぽう 、使用 しよう 率 りつ が高 たか くなると消去 しょうきょ 処理 しょり のオーバーヘッドが大 おお きくなるという欠点 けってん がある。対照 たいしょう 的 てき に、スレディッドログ方式 ほうしき はランダム書 か き込 こ みのオーバーヘッドが大 おお きいが、消去 しょうきょ 処理 しょり は不要 ふよう である。F2FSはこれらの方式 ほうしき のハイブリッド方式 ほうしき を採用 さいよう している。デフォルトの空 そら 領域 りょういき 管理 かんり 方式 ほうしき はコピーコンパクション方式 ほうしき であるが、ファイルシステムの状態 じょうたい に応 おう じて、動的 どうてき にスレディッドログ方式 ほうしき に切 き り替 か える。
F2FSとフラッシュストレージ境界 きょうかい の整合 せいごう を取 と るため、F2FSのセグメントはセクションを単位 たんい として確保 かくほ される。F2FSは、セクションのサイズが、FTLのガベージコレクションの単位 たんい サイズと同 おな じであることを仮定 かてい している。FTLの持 も つマッピング精度 せいど の観点 かんてん から、F2FSはアクティブログの各 かく セクションを、より多 おお くの異 こと なるゾーンから確保 かくほ しようとする。FTLはアクティブログのデータを、FTLのマッピング精度 せいど と同 おな じ単位 たんい で書 か き込 こ むことができる。
F2FSは、オンデマンドとバックグラウンド、両方 りょうほう のタイミングで消去 しょうきょ 処理 しょり を実行 じっこう する。オンデマンド消去 しょうきょ 処理 しょり は、VFSコールの実行 じっこう に必要 ひつよう な空 あ きセグメントが足 た りないときに実行 じっこう される。バックグラウンド消去 しょうきょ 処理 しょり は、システムアイドル時 じ にカーネルスレッドにより実行 じっこう される。
F2FSは2 ふた つの犠牲 ぎせい 者 しゃ 選択 せんたく ポリシー(victim selection policy)を持 も つ。貪欲 どんよく (greedy)アルゴリズムと、費用 ひよう 便益 べんえき (cost-benefit)アルゴリズムである。貪欲 どんよく アルゴリズムでは、最小 さいしょう の有効 ゆうこう ブロック数 すう を持 も つセグメントが選択 せんたく される。費用 ひよう 便益 べんえき アルゴリズムでは、セグメントの寿命 じゅみょう と有効 ゆうこう ブロック数 すう から対象 たいしょう セグメントを選択 せんたく することで、貪欲 どんよく アルゴリズムのスラッシング問題 もんだい を避 さ けている。F2FSは、オンデマンド消去 しょうきょ 処理 しょり に貪欲 どんよく アルゴリズムを用 もち い、バックグラウンド消去 しょうきょ 処理 しょり には費用 ひよう 便益 べんえき アルゴリズムを用 もち いている。
犠牲 ぎせい 者 しゃ セグメントに含 ふく まれるデータが有効 ゆうこう かどうかを確認 かくにん するため、F2FSはビットマップを管理 かんり している。このビットマップはメインエリアに含 ふく まれるブロック全体 ぜんたい をカバーしており。各 かく ビットは各 かく ブロック1 ひと つが有効 ゆうこう かどうかを示 しめ す。
2012年 ねん 、Motorola Mobility はF2FSをMoto G/E/XとDroid phoneに適用 てきよう した。
2014年 ねん 、Google はF2FSを初 はじ めてNexus 9 に適用 てきよう した。[ 4] その後 ご しばらくGoogleは自社 じしゃ 製品 せいひん にF2FSを適用 てきよう しなかったが、F2FSをインライン暗号 あんごう 化 か ハードウェアに対応 たいおう させてPixel 3 に適用 てきよう した。 [ 5]
2016年 ねん 、ファーウェイはHuawei P9 にF2FSを適用 てきよう した。[ 6] [ 7]
2016年 ねん 、OnePlus はOnePlus 3TにF2FSを適用 てきよう した。[ 8]
2019年 ねん 、ZTE はF2FSを ZTE Axon 10 Proに適用 てきよう した。[ 9]
ディスク
ネットワーク型 がた 特殊 とくしゅ 用途 ようと
その他 た
カテゴリ