【初心者向け】ファイルシステムの基本概念（コンセプト）【５分で読める】

# ファイルシステムの基本概念（コンセプト）

理解のために小咄形式でまとめました。

:::note info
システムパフォーマンス関連記事の目次
- [【初心者向け】システムパフォーマンス関連まとめ【それぞれ５分で読める】](https://qiita.com/nouernet/items/d3efe67e0f52a92e061d)
:::

**登場人物**
- **太郎（後輩）**：入社1年目の若手エンジニア。
- **花子（先輩）**：システムエンジニア歴3年の先輩。

**登場人物**
- **花子（先輩）**：システムエンジニア歴10年の経験豊富な技術者。
- **太郎（後輩）**：入社2年目の若手エンジニア。システムパフォーマンスについて学び中。

**場面：オフィスの開発ルーム**
*太郎が `ファイルシステムのコンセプト` に関する資料を見ながら、花子に質問する。*

**太郎**：「花子先輩、`ファイルシステムの基本概念` について学んでるんですが、 `レイテンシやキャッシング` などの仕組みがいまいち分かりません…。」

**花子**：「ファイルシステムのパフォーマンスを理解するには、 `基本概念` を押さえておくことが重要よ。 `ファイルシステムの動作に影響する 7 つの要素` を説明するわね。」

---

### **ファイルシステムの基本概念（コンセプト）**
**花子**：「ファイルシステムの `基本概念` には、大きく 7 つのポイントがあるの。」

1. **ファイルシステムレイテンシ**
2. **キャッシング**
3. **ランダム I/O と シーケンシャル I/O**
4. **プリフェッチ**
5. **先読み**
6. **ライトバックキャッシング**
7. **同期書き込み**

---

### **1. ファイルシステムレイテンシ**
**花子**：「`ファイルシステムレイテンシ` とは、 `アプリケーションが I/O をリクエストしてから処理が完了するまでの時間` のことよ。」

- **レイテンシ（遅延）が高いと、アプリケーションのパフォーマンスに直接影響する。**
- **OS はレイテンシの影響を抑えるためにキャッシュや非同期 I/O を活用する。**
- **レイテンシの原因には `ディスク I/O の遅延` や `ファイルメタデータの処理時間` などがある。**

「これを `宅配便の配達時間` に例えると、 `注文（I/O リクエスト）してから届くまでの時間` みたいなものね。」

**太郎**：「なるほど！ `レイテンシを短くする` ために `キャッシュや高速ストレージを使う` ってことですね！」

---

### **2. キャッシング**
**花子**：「`キャッシング` は `頻繁に使うデータをメモリ上に保存して、高速アクセスを実現する仕組み` のことよ。」

- **リードキャッシュ（Read Cache）**: よくアクセスするデータをキャッシュし、ディスク I/O を減らす。
- **ライトキャッシュ（Write Cache）**: 書き込みデータをキャッシュし、ディスクへの書き込み頻度を減らす。

「これを `冷蔵庫のドリンク` に例えると、 `よく飲むジュースを手元に置いておくことで、わざわざスーパーに買いに行く手間を減らせる` のと同じね。」

**太郎**：「確かに！ `キャッシュをうまく活用` すれば `無駄な I/O を減らせる` んですね！」

---

### **3. ランダム I/O と シーケンシャル I/O**
**花子**：「`ランダム I/O` と `シーケンシャル I/O` では、ディスクアクセスの特性が違うの。」

- **ランダム I/O** → `データがディスク上のバラバラの場所にある` ため、遅い。
- **シーケンシャル I/O** → `データが連続して並んでいる` ため、高速。

「例えば、 `図書館で本を探す` のと `本棚にある本を順番に読む` の違いに似てるわ。」

**太郎**：「つまり、 `シーケンシャル I/O の方が効率がいい` んですね！」

---

### **4. プリフェッチ**
**花子**：「`プリフェッチ` とは、 `今後使われそうなデータをあらかじめ読み込んでおく技術` のことよ。」

- **予測してデータを先にメモリに読み込むことで、I/O 待ち時間を減らす。**
- **動画ストリーミングの `バッファリング` も、プリフェッチの一種。**

「例えば `電車の時刻表を事前に確認する` のと同じで、 `次に必要なデータを予測して準備する` のがポイントね。」

**太郎**：「確かに `無駄な待ち時間を減らせる` 仕組みですね！」

---

### **5. 先読み**
**花子**：「`先読み` とは、 `シーケンシャル I/O の場合に、次のデータを事前に読み込む技術` ね。」

- **HDD では、ディスクの回転に合わせて次のブロックを事前に取得することで、待ち時間を削減できる。**
- **SSD でも、リードキャッシュを活用して先読みを最適化することが多い。**

「例えば `映画の字幕を事前にダウンロードする` のと同じで、 `スムーズにデータを取得できる` ようになるわ。」

---

### **6. ライトバックキャッシング**
**花子**：「`ライトバックキャッシング` は `書き込みデータを一時的にキャッシュし、後でまとめて書き込む手法` ね。」

- **書き込みのたびにディスクにアクセスすると遅くなるため、一時的にキャッシュしてまとめて書き込む。**
- **データの一貫性を保つため、 `一定の条件でキャッシュをフラッシュ`（ディスクに書き出し）する。**

「例えば `メールの下書きをまとめて送信する` のと同じで、 `無駄な作業を減らして効率化する` のが目的よ。」

---

### **7. 同期書き込み**
**花子**：「`同期書き込み` は `データを書き込んだことを OS が確認するまで処理を待つ方式` よ。」

- **データの一貫性を重視する場合に重要（例: データベース）。**
- **`fsync()` を使うと、書き込みがディスクに反映されるまで待つ。**

「例えば `銀行の ATM` みたいなもので、 `処理が完了するまで確実にデータを記録する` のと同じね。」

**太郎**：「ってことは `データの整合性を重視する場合` に `同期書き込みを使う` のが重要なんですね！」

---

### **まとめ**
**花子**：「ファイルシステムの `基本概念` を理解すると、 `パフォーマンスの最適化` や `システムのボトルネック解決` に役立つわ。」

**太郎**：「ありがとうございます！ `ランダム I/O と シーケンシャル I/O の速度差` を `fio` でテストしてみます！」 

# 参考リンク

システムパフォーマンス関連記事の目次

- [【初心者向け】システムパフォーマンス関連まとめ【それぞれ５分で読める】](https://qiita.com/nouernet/items/d3efe67e0f52a92e061d)

システムパフォーマンス関連記事は、以下の書籍を参考に記述しています。

- [［改訂新版］プロのためのLinuxシステム構築・運用技術](https://www.amazon.co.jp/dp/B01LZURAPK)
- [改訂2版 ネットワークエンジニアの教科書](https://www.amazon.co.jp/dp/B07NXQ4TDV)
- [絵で見てわかるシステムパフォーマンスの仕組み](https://www.amazon.co.jp/dp/B00LHFOTF4)
- [詳解 システム・パフォーマンス 第2版](https://www.oreilly.co.jp/books/9784814400072/)
- [入門 モダンLinux](https://www.oreilly.co.jp/books/9784814400218/)
- [Linuxシステム管理](https://www.oreilly.co.jp/books/9784873113463/)