【初心者向け】ディスク I/O のアーキテクチャ【５分で読める】

# ディスク I/O のアーキテクチャ

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

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

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

**場面：オフィスの昼休み**
*太郎が花子とランチを食べながら質問する*

**太郎**：「花子先輩、`ディスク I/O のアーキテクチャ` についての資料を読んだのですが、まだイメージがつかめなくて…。」

**花子**：「なるほど、じゃあ今回は `ディスク I/O のアーキテクチャ` を整理してみようか。大きく分けると、以下の４つのポイントがあるわね。」

1. **ディスクのタイプ**
2. **インターフェイス**
3. **ストレージの種類**
4. **OS のディスク I/O スタック**

---

#### **1. ディスクのタイプ**
**花子**：「まず `ディスクのタイプ` について説明するわね。現在、よく使われているディスクには大きく２種類あるの。」

1. **回転磁気ディスク（HDD）**  
   - プラッター（円盤）が回転し、磁気ヘッドがデータを読み書きする。
   - ランダムアクセスは遅いが、大容量で安価。
   - 主に `バックアップ` や `コールドストレージ` に適している。

2. **フラッシュメモリ（SSD）**  
   - 機械的な可動部分がなく、電子的にデータを保存する。
   - 高速なランダムアクセスが可能で、 `OS` や `データベース` に適している。
   - ただし、書き込み回数に制限がある（寿命問題）。

**太郎**：「SSD は速いけど、コストと寿命を考えると、HDD もまだまだ使いどころがあるんですね。」

---

#### **2. インターフェイス**
**花子**：「次に `インターフェイス` の話ね。ディスクとコンピュータの接続にはいろんな規格があるの。」

1. **SATA（シリアル ATA）**
   - 主に HDD や安価な SSD に使われる。
   - 転送速度は `6Gbps` くらいで、接続は簡単。

2. **SAS（シリアルアタッチド SCSI）**
   - エンタープライズ向けの HDD や SSD に使われる。
   - `SATA より信頼性が高く、高速`。

3. **NVMe（Non-Volatile Memory Express）**
   - フラッシュメモリ用に最適化された `PCIe ベースのインターフェイス`。
   - `超高速` で `低遅延`。
   - 例：最新のゲーミングPC や 高速データ処理システム。

**太郎**：「じゃあ、普段の業務でデータベースのパフォーマンスを改善したいなら、 `NVMe` の SSD を選ぶのが良さそうですね！」

---

#### **3. ストレージの種類**
**花子**：「ディスクの `物理的な種類` だけじゃなく、 `ストレージの運用方法` も重要よ。」

1. **ローカルストレージ**
   - PC やサーバーに `直接` 取り付けられたディスク。
   - 高速だが、 `スケールしにくい`。

2. **SAN（Storage Area Network）**
   - `ネットワークを介して接続されたストレージ`。
   - `大規模システム向け`（データセンターなど）。
   - `Fibre Channel` や `iSCSI` が使われる。

3. **NAS（Network Attached Storage）**
   - `ファイルベースのストレージ` を提供するデバイス。
   - `小規模なオフィス` や `家庭用` によく使われる。

**太郎**：「なるほど、 `SAN` は `大規模なサーバー環境` で、 `NAS` は `小規模な共有ストレージ` って感じですね。」

---

#### **4. OS のディスク I/O スタック**
**花子**：「最後に `OS のディスク I/O スタック` について説明するわね。これを理解すると、 `どこでボトルネックが発生しているのか` を特定しやすくなるわ。」

- **アプリケーション層**
  - `データベース` や `ファイルシステム` などが I/O を要求。

- **ファイルシステム層**
  - `ext4, XFS, ZFS` などの `ファイルシステム` がデータを管理。

- **ブロックデバイス層**
  - `RAID コントローラ` や `バッファキャッシュ` でパフォーマンスを最適化。

- **デバイスドライバ層**
  - `HDD や SSD` へ `実際にデータを転送`。

**太郎**：「ファイルシステムの最適化や RAID の設定も、ディスク I/O のパフォーマンスに影響するんですね！」

---

**花子**：「ここまでの話を現実の `物流システム` に例えてみると、こんな感じよ。」

1. **ディスクのタイプ → 倉庫の種類**
   - **HDD** は `巨大な倉庫`（広いが、物を探すのに時間がかかる）。
   - **SSD** は `コンビニの在庫棚`（小さいが、すぐ取り出せる）。

2. **インターフェイス → 輸送手段**
   - **SATA** は `普通のトラック輸送`（遅いが、安定）。
   - **SAS** は `高速バス輸送`（エンタープライズ向け）。
   - **NVMe** は `新幹線輸送`（超高速 & 低遅延）。

3. **ストレージの種類 → 物流の仕組み**
   - **ローカルストレージ** は `社内倉庫`（高速だけど、拡張性がない）。
   - **SAN** は `大規模物流センター`（複数拠点で利用）。
   - **NAS** は `町の宅配ボックス`（手軽に共有）。

4. **OS のディスク I/O スタック → 物流プロセス**
   - **アプリケーション層**：お客様が商品を注文。
   - **ファイルシステム層**：在庫管理システムがデータを整理。
   - **ブロックデバイス層**：トラックが倉庫から商品を運ぶ。
   - **デバイスドライバ層**：倉庫の作業員が商品をピックアップ。

**太郎**：「なるほど！ディスク I/O の構造が、 `物流の流れ` に例えられるとわかりやすいですね！」

---

### **まとめ**
**花子**：「ディスク 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/)