NANDの誤り訂正とウェアレベリング(FTL)
壊れやすいNANDが数年使えるSSDになる仕組みを原理から理解できます。多値セルの読み誤りをLDPCで訂正し、寿命の偏りをFTLとウェアレベリングで均し、ガベージコレクションとライトアンプの関係まで一本で押さえられます。
- 1.MLC/TLC/QLCはVth分布のマージンが狭く生で読むと誤りが多いため、BCHからLDPC(軟判定)への移行と複数電圧での再読み出しで、規定のRBER(生ビット誤り率)を実用UBERまで訂正します。
- 2.NANDは上書き不可・消去はブロック単位なので、FTLが論理アドレスと物理ページの対応を動的に張り替え、ガベージコレクションで有効データを退避してブロックを再利用します。
- 3.GCで生じる余分な書き込み量がライトアンプリフィケーション(WA)で、ウェアレベリングはP/Eサイクルをブロック間で均し、これらとオーバープロビジョニングが寿命と性能を決めます。
なぜNAND生データは「壊れている前提」で扱うのか
NAND フラッシュのセルは、しきい値電圧 Vth の分布で情報を表します(セル構造は /semiconductor/nand-flash-cell/ を参照)。問題は、この分布が時間とともに必ず崩れることです。トンネル酸化膜のトラップに捕まった電荷の漏れ(リテンション劣化)、隣セルへの書き込みが自セルの Vth を押し上げるプログラムディスターブ、読み出し時の弱い電界が蓄積するリードディスターブ、そして P/E サイクルによる酸化膜の摩耗(劣化の物理は /semiconductor/reliability-physics/)。
結果として、隣り合う Vth 分布の裾が重なり、参照電圧で読み分けたときに一定割合のビットが反転します。これが **RBER(Raw Bit Error Rate、生ビット誤り率)**です。多値化が進むほど分布のマージンが狭く RBER は高くなり、TLC/QLC では生のままでは到底使えません。
SSDが満たすべきは訂正後の UBER(Uncorrectable Bit Error Rate)で、エンタープライズ用途では 10^-16 〜 10^-17 級が要求されます。一方 NAND の RBER は寿命末期で 10^-3 級まで悪化し得ます。つまり ECC は「10^-3 を 10^-16 へ」という十数桁の改善を担う部品で、ECC の強さがそのまま使える RBER の上限=寿命を決めます。
ECCの世代交代 ── BCHからLDPCへ
ページには本体データに加え**スペア領域(OOB)があり、ここに ECC のパリティを格納します。長く使われてきたのが BCH 符号で、訂正可能ビット数を符号設計時に決め打ちする硬判定(hard-decision)**の代数的符号です。実装が単純で遅延が小さい一方、訂正能力に固定の上限があり、高 RBER 化した TLC/QLC には力不足になりました。
そこで主流になったのが LDPC 符号(Low-Density Parity-Check)です。LDPC の強みは軟判定(soft-decision)復号にあります。各ビットを 0/1 の確定値ではなく「0 らしさ/1 らしさ」の確からしさ(LLR、対数尤度比)として扱い、パリティ検査の制約をメッセージパッシングで反復的に満たしていきます。シャノン限界に迫る訂正力が得られます。
| 観点 | BCH | LDPC |
|---|---|---|
| 判定方式 | 硬判定(0/1の確定値) | 硬判定+軟判定(確からしさ) |
| 訂正力 | 設計時に固定。高RBERで頭打ち | 軟判定で限界まで粘れる |
| 復号 | 代数的・一発・低遅延 | 反復・確率的・遅延と電力大 |
| 適性 | SLC/初期MLC、低遅延要件 | TLC/QLC、寿命末期の高RBER |
実際のコントローラは段階的に動きます。まず1組の参照電圧で読んだ硬判定データを LDPC に通す(低遅延・低電力)。失敗したら、参照電圧を少しずつずらして同じページを複数回読み直し、各ビットがどの電圧域に落ちたかから LLR を作って軟判定復号へ移行します。
読み出しリトライの流れ(概念):
1) 既定Vrefで1回読む → LDPC硬判定 → 成功なら即返す
2) 失敗 → Vrefを段階的にシフトし複数回読む
3) 各ビットの「どの電圧帯か」からLLR(確からしさ)を生成
4) LDPC軟判定で反復復号 → なお失敗なら上位の救済
(RAID的なパリティ、XOR復元、ボイドブロック化)
軟判定は強力ですが、再読み出しのぶん遅延と消費電力が増えます。だからまず硬判定で済ませ、ダメなときだけ軟判定へ落とす段階構成になっているわけです。
強い ECC ほどパリティが長くなり、OOB を圧迫します。また LDPC の反復復号は専用ハードでも遅延と電力を食います。RBER が上がる寿命末期ほどリトライ回数が増え、読み出しレイテンシのばらつき(テールレイテンシ)が悪化します。SSD の末期に体感速度が落ちるのは、この訂正コストの増大が一因です。
上書きできないNAND ── FTLという必然
NAND には他のメモリ(/semiconductor/memory-types-taxonomy/)と決定的に違う制約があります。書き込みはページ単位、消去はブロック単位、そして上書き不可です。すでに書かれたページを書き換えるには、いったんブロック全体を消去するしかありません。DRAM(/semiconductor/dram-cell/)のように任意アドレスを即上書きできないのです。
この制約を OS から隠すのが FTL(Flash Translation Layer、論物変換層)です。FTL はホストが見る論理アドレス(LBA)と、実際にデータが置かれた物理ページの対応表(マッピングテーブル)を保持します。論理ブロックへの上書き要求が来たら、元の場所を消すのではなく、空きページへ新しく書いてマッピングを張り替え、旧ページを「無効(stale)」と印付けします。
LBA 100 を書き換える例:
旧: LBA100 → 物理ページ P_a(有効)
書き換え要求 → 空きページ P_b へ新データを書く
マッピング更新: LBA100 → P_b
P_a は「無効」に(まだ消去はされない=ゴミとして残る)
これを **out-of-place update(追記書き)**と呼びます。上書きの代わりに追記し続けるので、ブロック内には有効ページと無効ページが混在していきます。
ガベージコレクションとライトアンプリフィケーション
追記を続ければいずれ空きブロックが尽きます。そこで **ガベージコレクション(GC)**が、無効ページの多いブロックを選び、まだ有効なページだけを別ブロックへコピーしてから、元ブロックを消去して再利用可能にします。
ここで避けられないのが ライトアンプリフィケーション(WA、Write Amplification)です。GC が有効ページを退避させるたび、ホストが要求していない追加の書き込みが NAND 上で発生します。
WA = NANDへの実書き込み量 / ホストからの書き込み量
例: ホストが 1ページ書くために GC が有効2ページを退避
→ NAND には 3ページ書かれる → WA = 3
WA が大きいほど、ホストの 1 回の書き込みが NAND の寿命(P/E サイクル)を余分に消費し、性能も落ちます。WA を下げる主な手段は次のとおりです。
| 手法 | 効果 | 仕組み |
|---|---|---|
| オーバープロビジョニング(OP) | WA低減・GC効率化 | ホストに見せない予備容量を確保し、常に空きブロックの余裕を作る |
| TRIM/UNMAP | 無効ページを増やす | OSが削除を通知し、FTLが該当LBAを無効化。GC時のコピー量が減る |
| ホットコールド分離 | 有効コピー削減 | 更新頻度の高低でデータを書き分け、無効化が偏ってGCが軽くなる |
OP は本質的です。ホストから見える容量より物理容量を多めに持ち、その差分を GC の作業領域に充てます。OP を厚くするほど 1 ブロックあたりの無効ページ割合を高く保て、GC でコピーする有効ページが減り WA が下がる——エンタープライズ SSD が同じチップでも容量表示を絞って耐久を稼ぐのはこのためです。
ウェアレベリング ── 摩耗をブロック間で均す
P/E サイクルには上限があり、しかも書き込みは特定の論理アドレスに偏ります(更新頻度の高いメタデータ等)。FTL が何も考えずに同じ物理ブロックを使い回すと、そこだけ先に摩耗してブロックが死に、全体の容量と寿命が局所的に決まってしまう。これを防ぐのがウェアレベリングです。
- 動的ウェアレベリング:書き込みのたび、消去回数(P/E カウント)の少ない空きブロックを選んで割り当てる。頻繁に書き換わるデータの摩耗を均す。
- 静的ウェアレベリング:めったに書き換わらないコールドデータが居座る低摩耗ブロックを、あえて他所へ移して空け、摩耗の進んだブロックに休息を与える。動的だけでは均せない偏りを補正する。
動的ウェアレベリングは「いま書き換わるデータ」しか均せません。ほとんど更新されないコールドデータがP/Eの少ない優良ブロックを占有し続けると、書き込みは残りのブロックに集中し、そこだけ先に摩耗します。静的ウェアレベリングがコールドデータを強制的に移動させ、全ブロックの摩耗を平準化することで、はじめてアレイ全体を均等に使い切れます。
これらは互いに引っ張り合います。静的ウェアレベリングはコールドデータの移動という**余分な書き込み(WA 増)**を生むため、寿命平準化と WA 抑制はトレードオフです。コントローラはブロックごとの P/E カウントとデータの温度(更新頻度)を追跡し、両者の釣り合う点で動かします。
「SSDの寿命は何で決まるか」と問われたら、P/Eサイクル上限 × 物理容量 / WA が書き込み可能総量(TBW)の骨格、と答えるのが核心です。WA を下げる OP・TRIM・ホットコールド分離、摩耗を均すウェアレベリング、RBER を訂正して使える P/E 範囲を広げる LDPC——この三層が噛み合って実効寿命が決まります。どれか一つではなく、ECC とFTLとウェアレベリングの協調で寿命が出ることを押さえましょう。
まとめ
- 多値セルの Vth 分布は劣化・ディスターブで重なり、RBER として誤りが出る。SSD は訂正後の UBER を満たすため、十数桁の改善を ECC に負わせる。
- ECC は **BCH(硬判定)から LDPC(軟判定)**へ移行。まず硬判定で読み、失敗したら参照電圧をずらして複数回読み、LLR を作って軟判定復号する段階構成。
- NAND は上書き不可・ブロック消去なので、FTL が追記書きとマッピング張り替えでこれを隠蔽。たまった無効ページは GC が有効データ退避+消去で回収する。
- GC の退避が **ライトアンプリフィケーション(WA)**を生む。OP・TRIM・ホットコールド分離で WA を下げ、**ウェアレベリング(動的+静的)**で P/E を均すことで実効寿命が決まる。
- セルの物理は /semiconductor/nand-flash-cell/、劣化の素過程は /semiconductor/reliability-physics/ も参照。
半導体 Article
NANDの誤り訂正とウェアレベリング(FTL)を実務で読む
TL;DRは入口です。実際に選ぶ・使う段階では、何を解決するか、何と比較するか、導入後にどこで詰まるかまで見る必要があります。
解決すること
NANDフラッシュ
比較で見る軸
難易度: advanced / カテゴリ: 半導体 / タグ数: 6
導入後に効く点
NANDは上書き不可・消去はブロック単位なので、FTLが論理アドレスと物理ページの対応を動的に張り替え、ガベージコレクションで有効データを退避してブロックを再利用します。
先に潰すリスク
用語だけ覚えても、設計・実装・運用でどこに効くかを確認しないと判断を誤る。
- 難易度
- advanced
- カテゴリ
- 半導体
- タグ数
- 6
判断チェックリスト
- 自社の用途が「NANDフラッシュ / SSD」に近いか確認する。
- 強みである「MLC/TLC/QLCはVth分布のマージンが狭く生で読むと誤りが多いため、BCHからLDPC(軟判定)への移行と複数電圧での再読み出しで、規定のRBER(生ビット誤り率)を実用UBERまで訂正します。」が本当に評価軸になるか確認する。
- 注意点の「用語だけ覚えても、設計・実装・運用でどこに効くかを確認しないと判断を誤る。」を運用で吸収できるか確認する。
- 公開値や仕様値は、対象プラン・対象機種・対象リージョンまで確認する。
- 既存システム、ID、ネットワーク、監視、バックアップとの接続方法を先に洗い出す。
- 小さく試してから、本番移行、権限設計、障害時手順、コスト監視を決める。