【初心者向け】ファイルシステムのチューニング【５分で読める】

# ファイルシステムのチューニング

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

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

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

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

**太郎**：「花子先輩、`ファイルシステムのチューニング` について勉強してるんですが、 `どの設定を調整すれば効果があるのか` が分かりません…。」

**花子**：「いい質問ね！ `ファイルシステムのチューニング` は、 `ワークロードに応じて最適化` するのが重要よ。今回は `3 つの主要なアプローチ` を紹介するわ。」

---

### **ファイルシステムのチューニング**
**花子**：「ファイルシステムの `チューニング` は、大きく `3 つの観点` で考えるのが効果的よ。」

1. **マウントオプションの最適化**
2. **ファイルシステムのパラメータ調整**
3. **キャッシュとバッファの管理**

---

### **1. マウントオプションの最適化**
**花子**：「`マウントオプション` を適切に設定することで、 `不要な I/O を削減` できるの。」

#### **(1) `noatime` の有効化**
- **ファイルアクセス時に `atime（最終アクセス時刻）` を更新しない設定。**
- **デフォルトでは `ファイルを読むだけでも atime が更新されるため、不要な I/O が発生` する。**
- **適用コマンド例：**
  ```sh
  mount -o remount,noatime /dev/sdX /
  ```

**太郎**：「なるほど！ `noatime を設定すれば、余計なディスク書き込みを減らせる` んですね！」

---

#### **(2) `barrier=0` の活用**
- **データ整合性よりも `パフォーマンスを優先する場合` に、バリアを無効化する。**
- **ただし、 `電源障害時のデータ損失リスクがある` ため、UPS（無停電電源装置）の利用を推奨。**
- **適用コマンド例：**
  ```sh
  mount -o remount,barrier=0 /dev/sdX /
  ```

**太郎**：「リスクはあるけど、 `信頼性よりも速度が重要な用途なら有効` ってことですね！」

---

#### **(3) `data=writeback` の適用**
- **データのジャーナリングを最小限にして、書き込み性能を向上させる。**
- **ext4 の場合、デフォルトでは `ordered`（メタデータのみジャーナリング）だが、 `writeback` を使うとさらに軽量化できる。**
- **適用コマンド例：**
  ```sh
  mount -o remount,data=writeback /dev/sdX /
  ```

**太郎**：「データベースみたいな `頻繁に書き込みが発生する環境` では、 `writeback モードが有効` かもしれませんね！」

---

### **2. ファイルシステムのパラメータ調整**
**花子**：「`ファイルシステムの設定` を変更することで、 `パフォーマンスのボトルネックを解消` できるの。」

#### **(1) `tune2fs` を使った設定調整**
- **`tune2fs` コマンドを使うと、 `ext4 の内部パラメータを最適化` できる。**
- **適用例：**
  ```sh
  tune2fs -o journal_data_writeback /dev/sdX
  ```
- **ジャーナリングのモードを変更し、書き込みパフォーマンスを向上。**

**太郎**：「なるほど、 `マウントオプションだけじゃなくて、tune2fs でも調整できる` んですね！」

---

#### **(2) `e2fsck` によるファイルシステムの最適化**
- **ディレクトリのインデックスを最適化し、 `ファイル検索を高速化` できる。**
- **適用コマンド例：**
  ```sh
  e2fsck -D -f /dev/sdX
  ```

**太郎**：「ディレクトリの最適化をすれば、 `大量のファイルを扱うサーバーで効果がありそう` ですね！」

---

### **3. キャッシュとバッファの管理**
**花子**：「`ファイルシステムのキャッシュ` を適切に調整することで、 `I/O の負荷を分散` できるの。」

#### **(1) `dirty_ratio` の調整**
- **キャッシュにデータを溜めて、まとめて書き込む割合を変更する。**
- **適用コマンド例：**
  ```sh
  echo 10 > /proc/sys/vm/dirty_ratio
  ```

**太郎**：「書き込みを `こまめにディスクへ反映` すれば、 `大きな負荷が発生するのを防げる` んですね！」

---

#### **(2) `drop_caches` を使ったキャッシュ管理**
- **キャッシュをクリアし、 `パフォーマンス測定時の影響を減らす`。**
- **適用コマンド例：**
  ```sh
  echo 3 > /proc/sys/vm/drop_caches
  ```

**太郎**：「テスト時に `キャッシュの影響をなくして、純粋なディスク I/O の性能を測定` するのに役立ちそうですね！」

---

**花子**：「これらの `ファイルシステムのチューニング手法` を `レストランの運営` に例えると、こんな感じね。」

1. **マウントオプションの最適化** → `オーダーの受け取り方法を効率化して、無駄な手間を省く。`
2. **ファイルシステムのパラメータ調整** → `メニューを最適化して、調理時間を短縮。`
3. **キャッシュとバッファの管理** → `キッチンの食材ストックを調整して、スムーズに提供できるようにする。`

**太郎**：「なるほど！ `システム全体の効率化を考えて調整すれば、無駄な I/O を削減しながらパフォーマンスを向上` できるんですね！」

---

### **まとめ**
**花子**：「ファイルシステムの `チューニング` は、 `使い方やワークロードに応じて適切な設定を行うこと` が重要よ。」

**太郎**：「ありがとうございます！ `noatime` を設定して、 `ファイルアクセスの無駄な I/O を減らすチューニング` を試してみます！」

# 参考リンク

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

- [【初心者向け】システムパフォーマンス関連まとめ【それぞれ５分で読める】](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/)