SSDのレイテンシ深層 ─ チャネル並列・SLCキャッシュ・QoS
SSDの平均は速いのに、たまに遅い瞬間はなぜ起きるのか。チャネル並列・SLCキャッシュ・GC干渉まで原理を押さえ、テールレイテンシの正体と抑え方を掴めます。
- 1.SSDの帯域はチャネル/ダイ/プレーンの多重並列で稼ぐが、1ダイは同時に1要求しか処理できず、競合が個々のレイテンシを伸ばす。
- 2.SLCキャッシュは1セル1ビットの高速領域へ先に受けて低レイテンシを見せるが、満杯になるとTLC直書きへ落ちて急減速する。
- 3.テールレイテンシ(p99以降)の主因はGCやリフレッシュのダイ占有で、サスペンド/レジュームやストリーム分離といったQoS機構で緩和する。
なぜ平均は速いのに、たまに遅いのか
SSDの性能を語るとき、平均レイテンシだけを見るのは危険です。SSDは内部で大量の並列処理を行うため帯域は高い一方、個々のI/Oは内部資源の競合や保守処理に巻き込まれ、ときに平均の数十倍まで遅延します。このテールレイテンシ(p99、p99.9以降の遅い側の裾)こそが、データベースやストレージ基盤の応答品質を左右します。本稿では、その正体を並列構造・SLCキャッシュ・QoS制御の三層から原理で解きほぐします。前提となるFTL・GCの基礎はNANDフラッシュとSSDの内部で押さえてください。
チャネル・ダイ・プレーンの多重並列
SSDの帯域は、単一NANDの速度ではなく並列度で決まります。階層は次の3段です。
コントローラ
├ チャネル0 ── ダイA, ダイB, ... (バスを時分割共有)
├ チャネル1 ── ダイC, ダイD, ...
└ ...(8〜16チャネルが一般的)
1ダイ内 ── プレーン0 / プレーン1 ...(並列プログラム/リード可能な区画)
- チャネル並列: コントローラと複数チャネルを別々の物理バスでつなぎ、チャネル間は完全並列に転送する。
- ダイ並列(インターリーブ): 1チャネル上の複数ダイは同じバスを共有するが、コマンド発行とNAND内部動作(プログラム/イレース)は重ねられる。あるダイがプログラム中でも、別ダイにコマンドを送れる。
- プレーン並列: 1ダイ内の複数プレーンへ、同一アドレス制約のもとで一括コマンドを発行し、実効スループットを倍化する。
SSDの数GB/sという帯域は、数十ダイへの要求分散の総和です。しかし1つのダイは同時に1つの動作しか実行できません。あるダイがプログラム(数百マイクロ秒)やイレース(数ミリ秒)の最中だと、そのダイ宛ての次の要求は完了まで待たされます。帯域(スループット)と単発レイテンシは別物だ、というのがSSDを読む第一の鍵です。
ホストからの要求が特定ダイに偏ると並列度が活きず、逆に均一に散ればフル帯域が出ます。FTLのアドレス割り当ては、論理アドレスを全ダイへ分散させて並列度を最大化するよう設計されています。要求の到着と処理の関係はリトルの法則で整理でき、内部キュー長が滞留時間を決める構図はここでも成立します。
SLCキャッシュとTLC直書きフォールバック
主流のTLC(1セル3ビット)やQLC(4ビット)は、1セルに複数のしきい値レベルを書き分けるため、書き込みが多段階で遅くなります。これを隠すのがSLCキャッシュです。
TLC領域の一部のセルを、あえて1セル1ビット(SLCモード)として運用します。レベル間マージンが広く、1回のプログラムで確定するため、書き込みレイテンシが大幅に短くなります。ホストの書き込みはまずこのSLCキャッシュへ受け、低レイテンシを返します。アイドル時間に、SLCキャッシュの内容を本来のTLC領域へ静かに移し替えます。
通常時: ホスト書き込み -> SLCキャッシュ(高速) -> 後でTLCへ移動
枯渇時: ホスト書き込み -> TLCへ直書き(低速) = フォールバック
SLCキャッシュは容量に限りがあります。連続した大量書き込みでキャッシュが満杯になると、ホスト書き込みはTLC直書きへフォールバックし、書き込み速度が一気に数分の一へ落ちます。ベンチマークで「最初は速く、途中から急減速する」のはこの遷移です。さらにキャッシュからTLCへの移し替え(フォールディング)自体が内部書き込みを増やし、Write Amplificationを押し上げます。
SLCキャッシュには容量を固定する静的方式と、空き容量に応じて拡縮する動的方式があり、後者は空きが減るほどキャッシュも縮むため、ドライブの使用率が上がると性能が落ちやすくなります。
テールレイテンシの主因 ─ GCとリフレッシュの干渉
平均が良好でもp99.9が悪化する最大の原因は、保守処理によるダイ占有です。
- ガベージコレクション(GC): 無効ページの多いブロックから有効ページを退避し、消去して空きを作る。退避コピーと消去は対象ダイを長時間(イレースは数ミリ秒級)占有する。
- リード/データリフレッシュ: 読み出しの繰り返しで隣接セルの電荷がずれる現象(リードディスターブ)や、時間経過による電荷漏れに備え、ブロックを読み直して別領域へ書き戻す。これもダイを占有する。
ホストのリード要求 ── ダイX 宛て
└ ダイX はちょうどGCのイレース実行中(数ms)
=> リードはイレース完了まで待たされる(テール発生)
要求の大半(p50付近)はマイクロ秒級で返るのに、運悪く保守処理中のダイに当たった一部だけがミリ秒級まで伸びる——これがテールレイテンシの構造です。GCが集中すると複数ダイが同時に詰まり、並列度が一時的に落ちて全体スループットも沈みます。書き込み量が多くオーバープロビジョニングが乏しいほど、GCが頻発しテールは悪化します。I/Oが内部キューでどう滞留するかはストレージI/Oパスとキューで詳しく追えます。なお微小な電荷ずれの一部はECCで救済されますが、訂正不能に近づくとリフレッシュが発動する点でECCとエラー訂正とも連動します。
QoS制御 ─ テールを抑える仕組み
テールレイテンシを抑えるため、現代のSSDコントローラは複数のQoS機構を備えます。
| 機構 | 狙い | 効果 |
|---|---|---|
| イレースサスペンド/レジューム | 進行中のイレースを中断し、緊急のリードを先に通す | GC中のダイでもリードのテールを短縮 |
| プログラムサスペンド | プログラム動作を一時中断してリードを割り込ませる | 書き込み混在時のリード遅延を低減 |
| ストリーム分離(Multi-Stream) | 寿命の似たデータを同じブロックへまとめる | GC時の有効ページ退避を減らしWAFとテールを抑制 |
| I/O Determinism(NVMe) | セットごとに資源を隔離し保守を時間窓で制御 | 隣の負荷からレイテンシを守る |
最も効くのがサスペンド/レジュームです。NANDのイレースやプログラムは長時間動作ですが、コントローラがこれを安全に中断し、待たされていたリードを先に処理してから再開できます。これにより「GC中のダイに当たったリード」がイレース完了まで丸ごと待つ事態を避けられます。
GCのコストは、退避すべき有効ページの量に比例します。寿命の異なるデータ(更新の激しいログと、ほぼ不変のデータ)が同じブロックに混在すると、ブロック内で無効化のタイミングがばらつき、GC時に生きたデータを多く運ぶ羽目になります。ストリーム分離は、ホストが「このデータ群は寿命が近い」と示すヒントを使い、似た寿命のデータを同じブロックへ集約します。結果としてブロックが一括で無効になりやすくなり、退避コピーが減ってWAFとテールの両方が下がります。
NVMeのI/O Determinism(IOD) は、NVM Setという単位で物理資源(ダイ群)を区切り、保守処理を予測可能な時間窓へ閉じ込めます。あるテナントの書き込みが別テナントのレイテンシを乱すノイジーネイバーを、資源隔離で防ぐ狙いです。
「帯域は並列度、レイテンシは1ダイの占有で決まる」「SLCキャッシュ枯渇でTLC直書きへフォールバックし急減速」「テールの主因はGC/リフレッシュのダイ占有」「サスペンド/レジュームとストリーム分離がQoSの要」の4点が核心です。平均値ではなくp99.9で評価する姿勢が実務では問われます。
まとめ
- SSDの高帯域はチャネル/ダイ/プレーンの多重並列の総和だが、1ダイは同時に1動作しかできず、競合が単発レイテンシを決める。
- SLCキャッシュが書き込みを高速化するが、枯渇するとTLC直書きへフォールバックし、性能が崖を落ちる。
- テールレイテンシの正体はGCやリフレッシュによるダイ占有で、保守処理に当たった一部の要求だけが大きく遅れる。
- サスペンド/レジュームでリードを割り込ませ、ストリーム分離でGCの退避を減らすことが、QoSを支える二本柱である。
平均の裏に隠れたテールを意識することが、SSDを正しく評価し選ぶ出発点になります。
CPU/メモリ/ディスク Article
SSDのレイテンシ深層 ─ チャネル並列・SLCキャッシュ・QoSを実務で読む
TL;DRは入口です。実際に選ぶ・使う段階では、何を解決するか、何と比較するか、導入後にどこで詰まるかまで見る必要があります。
解決すること
SSD
比較で見る軸
難易度: advanced / カテゴリ: CPU/メモリ/ディスク / タグ数: 5
導入後に効く点
SLCキャッシュは1セル1ビットの高速領域へ先に受けて低レイテンシを見せるが、満杯になるとTLC直書きへ落ちて急減速する。
先に潰すリスク
用語だけ覚えても、設計・実装・運用でどこに効くかを確認しないと判断を誤る。
- 難易度
- advanced
- カテゴリ
- CPU/メモリ/ディスク
- タグ数
- 5
判断チェックリスト
- 自社の用途が「SSD / NAND」に近いか確認する。
- 強みである「SSDの帯域はチャネル/ダイ/プレーンの多重並列で稼ぐが、1ダイは同時に1要求しか処理できず、競合が個々のレイテンシを伸ばす。」が本当に評価軸になるか確認する。
- 注意点の「用語だけ覚えても、設計・実装・運用でどこに効くかを確認しないと判断を誤る。」を運用で吸収できるか確認する。
- 公開値や仕様値は、対象プラン・対象機種・対象リージョンまで確認する。
- 既存システム、ID、ネットワーク、監視、バックアップとの接続方法を先に洗い出す。
- 小さく試してから、本番移行、権限設計、障害時手順、コスト監視を決める。