(Translated by https://www.hiragana.jp/)
F2FS - Wikipedia コンテンツにスキップ

F2FS

出典しゅってん: フリー百科ひゃっか事典じてん『ウィキペディア(Wikipedia)』
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)
パーティションの先頭せんとう配置はいちされる。ファイルシステムがこわれないよう、ふたつのコピーがつくられる。スーパーブロックはパーティションの基本きほん情報じょうほうとF2FSのデフォルトパラメータをつ。
チェックポイント (CP)
ファイルシステム情報じょうほう有効ゆうこうNAT/SIT集合しゅうごうのビットマップ、orphan inodeリスト、現在げんざいアクティブなセグメントのエントリーサマリーをつ。
セグメント情報じょうほうテーブル (SIT)
有効ゆうこうブロックすうと、すべてのメインエリアブロックの有効ゆうこうビットマップをつ。
ノードアドレステーブル (NAT)
メインエリアを構成こうせいするノードブロックのアドレステーブル。
セグメントサマリーエリア (SSA)
メインエリアとノードブロックの所有しょゆうしゃ情報じょうほうエントリーをつ。
メインエリア
ファイル、ディレクトリ、およびそれらのインデックスをつ。

ファイルシステムとフラッシュ記憶きおく装置そうち整合せいごうけるため、F2FSはCPの開始かいしブロックアドレスをセグメントサイズ境界きょうかい配置はいちする。また、メインエリアの開始かいしブロックアドレスもゾーンサイズ境界きょうかい配置はいちする。このためにSSAにセグメントを追加ついか確保かくほしている。

メタデータ構造こうぞう

[編集へんしゅう]

F2FSはチェックポイント(CP)をもちいてファイルシステムの一貫いっかんせい保持ほじする。F2FSはマウントにCPエリアをスキャンし、最後さいごつくられた有効ゆうこうなCPをさがす。スキャンにかかる時間じかん短縮たんしゅくするため、F2FSはCPのコピーをふたつしかたない。ふたつのコピーのうちひとつが、最後さいごつくられた有効ゆうこうなCPである。この方式ほうしきをシャドーコピー方式ほうしきぶ。CPだけでなく、ノードアドレステーブル(NAT)とセグメント情報じょうほうテーブル(SIT)にもシャドーコピー方式ほうしき使つかわれる。ファイルシステムの一貫いっかんせいたもつため、かくCPは有効ゆうこうなノードアドレステーブル(NAT)とセグメント情報じょうほうテーブル(SIT)に関連付かんれんづけられる。

インデックス構造こうぞう

[編集へんしゅう]

ファイルシステムのかぎとなるデータ構造こうぞうは「ノード」である。伝統でんとうてきなファイルシステムと同様どうように、F2FSも3種類しゅるいのノード、すなわち、iノード(inode)、直接ちょくせつノード、間接かんせつノードをつ。iノードブロックひとつのサイズは4KBである。以下いかしめすように、iノードブロックは923のデータブロックインデックス、ふたつの直接ちょくせつノードポインタ、ふたつの間接かんせつノードポインタ、そしてひとつのじゅう間接かんせつノードポインタをつ。直接ちょくせつノードブロックは1018のデータブロックインデックスをち、間接かんせつノードブロックは1018のノードブロックインデックスをつ。よって、ひとつの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)"は、ひとつのハッシュバケットがふたつのデータブロックをつことを意味いみする。

定義ていぎ
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まで順次じゅんじ走査そうさしていく。このとき、かくレベルの走査そうさ対象たいしょうとなるハッシュテーブルは、以下いかしきによってまるテーブルひとつですむ。このしき複雑ふくざつさはO(log(ファイルすう))である。

 レベル#nにおいて走査そうさするバケット番号ばんごう = (ハッシュ) % (レベル#nのバケットのかず)

ファイル作成さくせいには、F2FSはファイルめい格納かくのうできる連続れんぞくするそらエントリをさがす。このそらエントリの探索たんさくは、ファイルめい走査そうさ同様どうように、ハッシュテーブルのぜんレベルについて、レベル1からNまで順次じゅんじおこなわれる。

デフォルトのブロック

[編集へんしゅう]

F2FSはメインエリアにむっつのアクティブログをつ。Hot/Warm/Coldノード、およびHot/Warm/Coldデータのむっつである.

ブロックてポリシー
Hotノード ディレクトリの直接ちょくせつノードブロック
Warmノード Hotノード以外いがい直接ちょくせつノードブロック
Coldノード 間接かんせつノードブロック
Hotデータ dentryブロック
Warmデータ Hotデータ、Coldデータ以外いがいのデータブロック
Coldデータ マルチメディアデータブロックと移行いこうデータブロック

F2FSのそら領域りょういき管理かんり方式ほうしきは「スレディッドログ方式ほうしき」と「コピーコンパクション方式ほうしき」のふたつである。コピーコンパクション方式ほうしきは「消去しょうきょ処理しょり (クリーニング)」ともばれ、そら領域りょういきつねあたらしいデータのみに使用しようするため、たか順次じゅんじ性能せいのうつデバイスにてきしている。一方いっぽう使用しようりつたかくなると消去しょうきょ処理しょりのオーバーヘッドがおおきくなるという欠点けってんがある。対照たいしょうてきに、スレディッドログ方式ほうしきはランダムみのオーバーヘッドがおおきいが、消去しょうきょ処理しょり不要ふようである。F2FSはこれらの方式ほうしきのハイブリッド方式ほうしき採用さいようしている。デフォルトのそら領域りょういき管理かんり方式ほうしきはコピーコンパクション方式ほうしきであるが、ファイルシステムの状態じょうたいおうじて、動的どうてきにスレディッドログ方式ほうしきえる。

F2FSとフラッシュストレージ境界きょうかい整合せいごうるため、F2FSのセグメントはセクションを単位たんいとして確保かくほされる。F2FSは、セクションのサイズが、FTLのガベージコレクションの単位たんいサイズとおなじであることを仮定かていしている。FTLのつマッピング精度せいど観点かんてんから、F2FSはアクティブログのかくセクションを、よりおおくのことなるゾーンから確保かくほしようとする。FTLはアクティブログのデータを、FTLのマッピング精度せいどおな単位たんいむことができる。

消去しょうきょ処理しょり

[編集へんしゅう]

F2FSは、オンデマンドとバックグラウンド、両方りょうほうのタイミングで消去しょうきょ処理しょり実行じっこうする。オンデマンド消去しょうきょ処理しょりは、VFSコールの実行じっこう必要ひつようきセグメントがりないときに実行じっこうされる。バックグラウンド消去しょうきょ処理しょりは、システムアイドルにカーネルスレッドにより実行じっこうされる。

F2FSはふたつの犠牲ぎせいしゃ選択せんたくポリシー(victim selection policy)をつ。貪欲どんよく(greedy)アルゴリズムと、費用ひよう便益べんえき(cost-benefit)アルゴリズムである。貪欲どんよくアルゴリズムでは、最小さいしょう有効ゆうこうブロックすうつセグメントが選択せんたくされる。費用ひよう便益べんえきアルゴリズムでは、セグメントの寿命じゅみょう有効ゆうこうブロックすうから対象たいしょうセグメントを選択せんたくすることで、貪欲どんよくアルゴリズムのスラッシング問題もんだいけている。F2FSは、オンデマンド消去しょうきょ処理しょり貪欲どんよくアルゴリズムをもちい、バックグラウンド消去しょうきょ処理しょりには費用ひよう便益べんえきアルゴリズムをもちいている。

犠牲ぎせいしゃセグメントにふくまれるデータが有効ゆうこうかどうかを確認かくにんするため、F2FSはビットマップを管理かんりしている。このビットマップはメインエリアにふくまれるブロック全体ぜんたいをカバーしており。かくビットはかくブロックひとつが有効ゆうこうかどうかをしめす。

製品せいひん適用てきよう

[編集へんしゅう]

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]

脚注きゃくちゅう

[編集へんしゅう]

注釈ちゅうしゃく

[編集へんしゅう]
  1. ^ SDカードSSDなど
  2. ^ 回数かいすう上限じょうげん存在そんざいなど

出典しゅってん

[編集へんしゅう]
  1. ^ a b c Jaegeuk Kim (2012ねん10がつ5にち). “f2fs: introduce flash-friendly file system”. 2018ねん4がつ28にち閲覧えつらん
  2. ^ Jaegeuk Kim (2016ねん12月3にち). “start [F2FS Wiki]”. 2018ねん4がつ29にち閲覧えつらん
  3. ^ a b Jaegeuk Kim (2017ねん7がつ12にち). “development [F2FS Wiki]”. 2018ねん4がつ29にち閲覧えつらん
  4. ^ Smith, Joshua Ho, Ryan. “The Google Nexus 9 Review”. www.anandtech.com. 2019ねん5がつ10日とおか閲覧えつらん
  5. ^ Frumusanu, Andrei (2018ねん11月2にち). “The Google Pixel 3 Review”. www.anandtech.com. 2019ねん5がつ11にち閲覧えつらん
  6. ^ Larabel, Michael (2018ねん12月28にち). “F2FS Gets More Fixes In Linux 4.21 With The File-System Now Supported By Google's Pixel”. www.phoronix.com. 2019ねん5がつ10日とおか閲覧えつらん
  7. ^ Humrick, Matt (2017ねん5がつ12にち). “Huawei P10 and P10 Plus”. www.anandtech.com. 2019ねん5がつ11にち閲覧えつらん
  8. ^ Chester, Brandon. “The OnePlus 3T Review”. www.anandtech.com. 2019ねん5がつ10日とおか閲覧えつらん
  9. ^ ZTE Axon 10 Pro Officially Uncovered: The First To Use F2FS” (英語えいご). Gizchina.com (2019ねん5がつ6にち). 2019ねん5がつ10日とおか閲覧えつらん

関連かんれん項目こうもく

[編集へんしゅう]

外部がいぶリンク

[編集へんしゅう]