【初心者向け】ディスク I/O の分析の方法論（メソドロジ）【５分で読める】

# ディスク I/O の分析の方法論（メソドロジ）

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

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

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

**場面：会議室でのパフォーマンス分析ミーティング**
*太郎がノートを持って花子の前に座る*

**太郎**：「花子先輩、ディスク I/O のパフォーマンスの分析ってどう進めればいいのか、方法がよく分からなくて…。」

**花子**：「なるほどね。それなら `メソドロジ（方法論）` を知っておくといいわ。ディスク I/O のパフォーマンスを調査・改善するには、 `観察` と `実験` の両方のアプローチが必要なの。」

---

### **方法論（メソドロジ）の解説**
**花子**：「ディスク I/O の分析・改善には、次の 10 のメソッドがあるわよ。」

1. **ツールメソッド**
2. **USE メソッド**
3. **パフォーマンスモニタリング**
4. **ワークロードの特性の把握**
5. **レイテンシ分析**
6. **静的パフォーマンスチューニング**
7. **キャッシュチューニング**
8. **リソースコントロール**
9. **マイクロベンチマーキング**
10. **スケーリング**

---

#### **1. ツールメソッド**
**花子**：「まず `ツールメソッド` から。これは `観察` による分析を行う方法で、 `iostat`, `sar`, `pidstat`, `perf` みたいなツールを使って、システムの I/O 状況をチェックするの。」

**太郎**：「あ、 `iostat` なら使ったことあります！ `iostat -x` でディスクの使用率や IOPS を見たりしますよね？」

**花子**：「その通り！ `ツールメソッド` では、これらのツールを活用して `現在のシステム状態を把握` するのが目的よ。」

---

#### **2. USE メソッド**
**花子**：「次に `USE メソッド` だけど、これは `Utilization（使用率）`, `Saturation（飽和度）`, `Errors（エラー率）` の３つを軸にして `ボトルネック` を特定するための方法よ。」

- **使用率（Utilization）**: デバイスがどれくらい稼働しているか。
- **飽和度（Saturation）**: どれくらいのリクエストが処理待ちになっているか。
- **エラー率（Errors）**: I/O エラーが発生していないか。

「この 3 つの指標を確認すれば、 `どこで問題が発生しているか` が明確になるわ。」

**太郎**：「なるほど、 `ディスクの使用率が 100% だけど、飽和度が低い` なら問題ないし、 `飽和度が高い` ならキューが詰まっているってことですね！」

---

#### **3. パフォーマンスモニタリング**
**花子**：「 `パフォーマンスモニタリング` は `観察` と `キャパシティプランニング` を兼ねた手法で、 `定期的にシステムの状態を監視` して、将来的な負荷増加に備えるの。」

「例えば、 `Prometheus + Grafana` を使えば、 `ディスク I/O のトレンド` を可視化できるわ。」

**太郎**：「たしかに `長期間のデータ` を見れば、 `ピーク時の負荷` や `将来のスケール計画` に役立ちますね。」

---

#### **4. ワークロードの特性の把握**
**花子**：「これは `どんな I/O パターンのワークロード` が発生しているのかを知ることね。」

- ランダム I/O か？ シーケンシャル I/O か？
- 読み込みが多いのか？ 書き込みが多いのか？
- I/O サイズは小さいのか？ 大きいのか？

「例えば `MySQL` のデータベースサーバーなら、 `ランダムリードが多い` から、 `SSD にしたほうが良い` って判断ができるわ。」

---

#### **5. レイテンシ分析**
**花子**：「 `レイテンシ分析` では、 `I/O の応答時間` を計測して、どこに遅延があるかを特定するの。」

「 `biolatency` みたいなツールを使うと、 `どの I/O が時間がかかっているか` を分析できるわ。」

**太郎**：「たとえば `書き込みのレイテンシが高い` なら、 `ディスクキャッシュの設定` を見直すべき、って感じですね！」

---

#### **6. 静的パフォーマンスチューニング**
**花子**：「 `静的パフォーマンスチューニング` は、 `OS やディスクの設定を最適化` する方法ね。」

- `I/O スケジューラの選択`
- `ファイルシステムのチューニング`
- `バッファサイズの最適化`

「例えば `deadline` スケジューラを使えば `レイテンシを抑えられる` し、 `XFS` や `ext4` の設定を調整すれば `パフォーマンスが向上する` わ。」

---

#### **7. キャッシュチューニング**
**花子**：「 `キャッシュの最適化` も重要よ。」

- OS の `ページキャッシュ` を調整する。
- データベースの `バッファプール` を最適化する。
- `ライトバックキャッシュ` を有効にする。

「キャッシュヒット率が上がれば、 `ディスク I/O を減らせる` から、 `レイテンシが低くなる` わ。」

---

#### **8. リソースコントロール**
**花子**：「 `リソースコントロール` では、 `cgroups` や `ionice` を使って `I/O 制限` をかけるの。」

「例えば `バックグラウンドのバッチ処理` が `ディスクを占有しすぎないように` 制限をかけられるわ。」

---

#### **9. マイクロベンチマーキング**
**花子**：「 `マイクロベンチマーキング` は `fio` や `ioping` を使って、 `ディスクの性能テスト` をすることよ。」

「例えば `fio` で `ランダムリードの IOPS` を計測すれば、 `最適なストレージ選定` ができるわ。」

---

#### **10. スケーリング**
**花子**：「最後に `スケーリング` ね。」

- `ディスクの RAID 構成を変更`
- `分散ストレージを導入`
- `クラウドストレージを活用`

「例えば `NVMe SSD` に変えたり、 `データを分散する` ことでスケールできるの。」

---

### **まとめ**
**花子**：「パフォーマンス分析には `観察` と `実験` の両方が大事。これらの `メソドロジ` を組み合わせれば、 `どこがボトルネックか` を見つけられるわよ。」

**太郎**：「ありがとうございます！ `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/)