# RAID
## 定義
RAID(Redundant Array of Independent Disks。元は Redundant Array of Inexpensive Disks [Patterson 88])は、複数のディスクデバイスを単一の巨大で高速・高信頼な仮想ディスクとして見せるディスクコントローラのアーキテクチャである。ディスクコントローラカードによって提供する場合をハードウェアRAID、OSソフトウェアによって実装する場合をソフトウェアRAID(例: ZFS)と呼ぶ。ハードウェアRAIDは計算コストの高いチェックサム・パリティ計算を専用ハードウェアにオフロードでき、BBU(Battery Backup Unit)による回復力を持つ点で従来好まれてきたが、CPU性能の向上によりオフロードの必要性が薄れ、複雑さとコストが低くOSからの可観測性が高いソフトウェアRAIDに戻る動きもある。ソフトウェアRAIDは大規模障害時の修復もハードウェアRAIDより容易である(RAIDカード自体が故障した場合を想定するとよい)。複数ドライブに書き込まれるブロックとしてまとめられたデータを「ストライプ」と呼ぶ。(Source: [[@2023__OReillyJapan__詳解 システム・パフォーマンス 第2版 - Chapter 9 ディスク]] §9.4.3.2)
主要なRAIDレベルとパフォーマンス特性は次の通り。RAID 0(連結)は同時書き込みが1台のみだがランダム読み出しが向上、RAID 0(ストライピング)は複数ドライブへの並列I/O分割で最高のランダム/シーケンシャルI/O性能を持つが冗長性がない。RAID 1(ミラー)は読み出しが優れる一方、書き込みはミラー内最遅ディスクの速度に制限されスループットのオーバーヘッドが倍になる(2台構成の場合)。RAID 10はRAID 1のグループ全体でRAID 0ストライピングを行い、容量・冗長性・帯域幅を両立する。RAID 5はパリティ情報を追加したストライピングで、リードモディファイライトサイクルとパリティ計算のため書き込み性能が低い。RAID 6はストライプごとに2台のパリティディスクを持ちRAID 5よりさらに書き込みが遅い(表9-3)。パフォーマンスが最高のRAID 0ストライピングは冗長性がないため、重要データを扱わずエラー時に自動交換できるフォールトトレラントなクラウド環境などの例外を除き本番環境ではほとんど使われない。(Source: [[@2023__OReillyJapan__詳解 システム・パフォーマンス 第2版 - Chapter 9 ディスク]] §9.4.3.2.1)
## 横断的知見
(このセクションは複数ソースの突き合わせで得られる知見を蓄積する。現時点では本概念に触れたソースが1件のため、蓄積を今後の ingest に委ねる。)
## 未解決の問い
- リードモディファイライトのオーバーヘッドは、ストライプサイズと書き込みI/Oサイズを一致させることで削減できるとされるが、ワークロードのI/Oサイズが可変な場合(例: ログ書き込みとバルクロードが混在)にどのストライプサイズを選ぶべきかという実務的な最適化基準は本章では示されていない。
- ハードウェアRAIDからソフトウェアRAID(ZFS等)への回帰トレンドは、クラウドネイティブなブロックストレージ(EBS等)やNVMeベースの構成でも同様に成立するか。他章・他ソースでの裏付けが必要。
- 可観測性の観点で、仮想ディスクの使用率が物理ディスクの実態から乖離する問題(→[[待ち行列理論]]、[[@2023__OReillyJapan__詳解 システム・パフォーマンス 第2版 - Chapter 9 ディスク]] §9.3.9.1)は、RAIDレベルごとにどの程度深刻さが異なるか。
## 関連
- [[@2023__OReillyJapan__詳解 システム・パフォーマンス 第2版 - Chapter 9 ディスク]] — RAIDアーキテクチャ・レベル別パフォーマンス特性の原典解説(§9.4.3.2)。
- [[詳解 システム・パフォーマンス 第2版]] — 書籍本体。
- [[Brendan Gregg]] — 著者。ZFSストレージ製品担当時代のRAID構成ミス事例を紹介している。
- [[IOスケジューラ]] — 同じくブロックI/O層のパフォーマンスに関わる概念。
- [[ハードディスク信頼性]] — RAIDが対処する物理ディスク障害の裏付けとなる信頼性データ。
## 出典
- [[@2023__OReillyJapan__詳解 システム・パフォーマンス 第2版 - Chapter 9 ディスク]] §9.4.3.2