【初心者向け】ディスク I/O の可観測性ツール【５分で読める】

# ディスク I/O の可観測性ツール

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

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

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

**場面：オフィスのデバッグルーム**
*太郎が `iostat` コマンドを試しながら、花子に質問する。*

**太郎**：「花子先輩、今 `iostat` を試してみたんですけど、 `可観測性ツール` っていろいろ種類があるんですね。どれをどう使えばいいのか、正直混乱しています。」

**花子**：「そうね。可観測性ツールには、それぞれ `目的` があるの。大きく分けると `全体を監視するツール` と `詳細な分析をするツール` の２種類に分類できるわ。」

---

### **ディスク I/O 可観測性ツールの解説**
**花子**：「可観測性ツールは、 `ディスク I/O のパフォーマンスやボトルネックを特定` するためのツール群よ。主なものを紹介するわね。」

---

#### **1. iostat - ディスク I/O の全体状況を見る**
**花子**：「`iostat` は `ディスクごとの I/O 統計` を表示するツールよ。」

- `iostat` コマンドを実行すると、CPU 使用率とディスク I/O の統計が表示される。
- `iostat -x` を使うと、より詳細なデータ（使用率、I/O キューの長さなど）が見られる。

**太郎**：「つまり、`iostat` は `ディスク全体のパフォーマンス傾向` を確認するのに使うんですね。」

---

#### **2. sar - 経時的な I/O 統計を取得**
**花子**：「`sar` は `時間ごとの I/O の傾向` を確認するのに便利よ。」

- 例えば `sar -d 1 10` と実行すると、1秒ごとのディスク I/O の統計が10回記録される。
- `過去のログ` も取得できるので、 `負荷が高かった時間帯` を特定できる。

**太郎**：「じゃあ、`昨日の夜に何が起こっていたのか？` みたいな調査に使えそうですね！」

---

#### **3. PSI（Pressure Stall Information） - 負荷のスタール**
**花子**：「`PSI` は `ディスクの負荷がシステム全体に与える影響` を見るツールよ。」

- `cat /proc/pressure/io` を実行すると、I/O による負荷の影響が分かる。
- `高い値が出ている場合` は、`I/O によるボトルネック` が発生している可能性が高い。

**太郎**：「`負荷がシステム全体に及ぼす影響` を知りたいときに使うんですね。」

---

#### **4. pidstat - プロセスごとの I/O 使用状況**
**花子**：「`pidstat -d 1` を実行すると、`どのプロセスがどれだけディスク I/O を使っているか` が分かるわ。」

- `ディスク負荷の原因となっているプロセス` を特定できる。
- `pidstat -d -p 1234` のように使えば、`特定のプロセス` の I/O を監視できる。

**太郎**：「負荷の原因を `プロセス単位` で調べるのに便利そうですね。」

---

#### **5. perf - 詳細な I/O 分析**
**花子**：「`perf` は `カーネルレベルの I/O トレース` を記録するツールよ。」

- `perf record -e block:block_rq_issue` のように使うと、`どのプロセスが I/O を発行しているか` を分析できる。
- `perf report` を実行すると、記録されたデータを解析できる。

**太郎**：「カーネルレベルの `深い分析` をしたいときに使うんですね！」

---

#### **6. biolatency - I/O レイテンシ分析**
**花子**：「`biolatency` は `I/O の応答時間（レイテンシ）` を `ヒストグラム` で表示できるツールよ。」

- `sudo biolatency` を実行すると、`I/O の処理時間の分布` が見られる。
- 例えば `一部の I/O が異常に遅い` ことを発見できる。

**太郎**：「`レイテンシの外れ値` を探すのに便利そうですね！」

---

#### **7. biosnoop - 個々の I/O のトレース**
**花子**：「`biosnoop` を使うと、`I/O の詳細なトレース` ができるの。」

- `sudo biosnoop` を実行すると、`I/O の開始時間、終了時間、プロセスID` などが記録される。
- `遅い I/O を特定する` のに便利。

**太郎**：「`遅延のある I/O がどこで発生しているか` を調べられるんですね！」

---

#### **8. iotop, biotop - プロセス別のディスク I/O 使用量**
**花子**：「`iotop` や `biotop` は `top コマンドのディスク I/O 版` よ。」

- `sudo iotop` を実行すると、`どのプロセスがディスク I/O を多く使っているか` がリアルタイムで見られる。
- `iotop -o` を使えば `ディスク I/O が発生しているプロセス` のみを表示できる。

**太郎**：「リアルタイムで `どのプロセスが I/O を大量に使っているのか` が分かるんですね！」

---

#### **9. blktrace - ディスク I/O の詳細なイベントトレース**
**花子**：「`blktrace` は `ディスク I/O のイベント` を `超詳細` に記録するツールよ。」

- `sudo blktrace -d /dev/sda` を実行すると、`ディスク上で発生した I/O イベント` を記録できる。
- `ディスク I/O の詳細なフロー` を分析するのに役立つ。

**太郎**：「かなり `専門的な調査` に向いているツールですね。」

---

**花子**：「可観測性ツールを `健康診断` に例えると、こんな感じかしら。」

1. **iostat, sar** → `血圧や体温の測定`（全体の健康状態のチェック）
2. **PSI** → `ストレス測定`（システムが I/O 負荷で苦しんでいるか）
3. **pidstat, iotop** → `特定の臓器の検査`（どのプロセスが負荷をかけているか）
4. **biolatency, biosnoop** → `MRI 検査`（詳細な応答時間を解析）
5. **perf, blktrace** → `DNA 検査`（I/O の根本的な原因を分析）

**太郎**：「なるほど！ `大まかな診断` から `詳細な分析` まで、ツールを適切に使い分けることが大事なんですね！」

---

### **まとめ**
**花子**：「そうね。`全体の監視` から `細かい分析` まで、状況に応じて `適切なツール` を使うのが大事よ。」

**太郎**：「ありがとうございます！早速、`iotop` や `biolatency` を試してみます！」

# 参考リンク

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

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