NANDフラッシュとSSDの内部 ─ FTL・ウェアレベリング・GC
なぜSSDは上書きできず、書けば書くほど内部で余計に書くのか。セル構造からFTL・GCまで原理を押さえ、寿命と性能の勘所を掴めます。
- 1.NANDはセル単位で書き込むが消去はブロック単位でしか行えず、書き込み前に必ず消去が要るため上書きできない。
- 2.FTLは論理アドレスを物理ページへ動的に対応づけて消去前書き込み制約を隠し、ウェアレベリングで消去回数を全ブロックへ均す。
- 3.GCが有効データを退避して空きブロックを作る過程で余分な書き込みが発生し、Write Amplificationが寿命と性能を直接左右する。
セルはどう1ビットを蓄えるか
NANDフラッシュのメモリセルは、MOSFETのゲート構造に電荷を閉じ込める層を追加したものです。従来型はゲート酸化膜の中に導体の島(フローティングゲート)を埋め込み、近年の3D NANDは絶縁体に電荷を捕獲する電荷トラップ方式が主流です。いずれも、この層に注入された電子の量がセルのしきい値電圧(Vth)をずらし、それを読み出してデータとします。
電荷は絶縁膜に囲まれているため電源を切っても保持され、不揮発性が成立します。蓄えるVthレベルを増やせば1セルあたりのビット数を増やせますが、レベル間の電圧マージンが狭くなり、信頼性と速度が犠牲になります。
| 方式 | bit/セル | Vthレベル数 | 相対的な書換寿命 | 用途の傾向 |
|---|---|---|---|---|
| SLC | 1 | 2 | 最も長い(数万回) | 産業用・キャッシュ |
| MLC | 2 | 4 | 中(数千回) | 高耐久向け |
| TLC | 3 | 8 | 短い(約1000回前後) | 現行の主流 |
| QLC | 4 | 16 | 最も短い(数百回) | 大容量・読み中心 |
ビット密度を上げるほど1セルに詰めるレベルが指数的に増え(QLCは16値)、わずかな電荷漏れも誤読につながります。これがエラー訂正(強力なLDPC)の負荷と寿命の短さの根本原因です。
消去前書き込み制約 ─ 上書きできない理由
NANDの最大の特徴は、読み書きと消去の単位が異なることです。
読み出し / 書き込み(プログラム): ページ単位(例 16KB)
消去(イレース) : ブロック単位(例 数百ページ=数MB)
物理的には、書き込みはセルへ電子を注入して「1→0」方向にしか変えられず、「0→1」へ戻すには消去(電子を一括で引き抜く)が必要です。そして消去はブロック単位でしか行えません。つまり既に書かれたページを上書きするには、所属ブロック全体を消さねばならない——これが消去前書き込み制約です。
1つのページを更新したいだけでも、ブロック内の他ページには有効データが同居しています。それらを巻き込んで消すわけにはいかないため、更新は「別の空きページへ新規に書き、旧ページを無効化する」という間接的な形を取らざるを得ません。この回避策こそがFTL・GCの存在理由です。
FTL ─ 論理と物理を切り離す変換層
この制約をホスト(OSのファイルシステム)から隠すのが FTL(Flash Translation Layer) です。FTLはSSDコントローラ上で動き、ホストが扱う論理ブロックアドレス(LBA)を、その時々の物理ページへ動的に対応づけるマッピングテーブルを管理します。発想は仮想記憶のアドレス変換と同じで、論理アドレスは固定でも物理位置は自由に移動できます。
ホスト: LBA 100 を更新
1. 空きページ P_new に新データをプログラム
2. マップを LBA100 -> P_new に書き換え
3. 旧ページ P_old を「無効(invalid)」と記録(消去はしない)
この**追記(out-of-place update)**により、消去を伴わず即座に更新が完了します。マッピングの粒度はページ単位(細かいが管理表が巨大)からブロック単位(省メモリだが非効率)まであり、実装はDRAM上に表を持つハイブリッド方式が一般的です。電源断に備え、マップは定期的にNANDへ退避されます。
FTLはアドレス変換に加え、エラー訂正(ECC)、不良ブロック管理、後述のウェアレベリングとGCを一手に引き受けます。SSDの性能・寿命の大半はこのファームウェアの賢さで決まると言ってよく、同じNANDでも製品差が大きいのはこのためです。
ウェアレベリング ─ 摩耗を均す
NANDの各ブロックは消去できる回数(P/Eサイクル)に上限があり、それを超えると電荷を保持できなくなります。もし特定ブロックばかり更新すると、そこだけ先に寿命を迎えてしまいます。
ウェアレベリングは、消去回数(イレースカウント)を全ブロックへ均等化する仕組みです。
- 動的ウェアレベリング: 書き込み時に、消去回数の少ない空きブロックを優先して割り当てる。頻繁に書き換わるホットデータに有効。
- 静的ウェアレベリング: ほとんど更新されないコールドデータ(OSやアーカイブ)を、あえて摩耗の少ないブロックから消耗の進んだブロックへ移動させ、空いた長寿命ブロックを書換えに回す。
動的だけでは更新されないデータが占めるブロックが摩耗を逃れ続け、稼働ブロックに負荷が偏ります。静的を併用して初めて、ドライブ全体を均一に使い切れます。
ガベージコレクションとWrite Amplification
追記方式では更新のたびに旧ページが無効として残り、やがて空きページが枯渇します。これを回収するのが ガベージコレクション(GC) です。
GCの基本動作
1. 無効ページの多いブロック(victim)を選ぶ
2. その中の有効ページを別の空きブロックへコピー
3. victimブロックをまるごと消去 -> 空きブロックとして再投入
ここで本質的な問題が生じます。ホストは更新を1回しか要求していないのに、GCの有効ページ退避によってNANDへの実書き込み量がホスト要求量を上回るのです。この比率が Write Amplification Factor(WAF) です。
WAF = NANDへの実書き込み量 / ホストからの書き込み量
理想は 1.0、実際は GCの退避コピーで 1 を超える
WAFが高いほど、同じホスト書き込みでもNANDのP/Eサイクルを余計に消費し、寿命(TBW)が短くなります。同時に、GCの退避コピーがホストI/Oと帯域を奪い合い、書き込みレイテンシのばらつきや性能低下を招きます。寿命と性能の双方がWAFに直結します。
WAFを下げる代表的な手段が オーバープロビジョニング(OP) と TRIM です。OPはユーザーに見せない予備領域を確保することで、GCがより多くの無効ページが溜まったブロックを選べるようにし、退避する有効ページを減らします。TRIMはOSが「このLBAはもう不要」とSSDへ通知する命令で、ファイル削除時にFTLがそのページを即座に無効化でき、GCで生きたデータとして無駄に運ぶのを防ぎます。
「読み書きはページ単位、消去はブロック単位」「上書き不可ゆえFTLが追記+アドレス変換で隠蔽」「GCの退避が招くWrite AmplificationがSSD寿命と性能を支配」「ウェアレベリングは消去回数の均一化」の4点が頻出です。TRIMはGC効率とWAF低減に効く点も押さえましょう。
まとめ
- NANDセルは電荷でVthをずらしデータを蓄え、SLC→QLCとビット密度を上げるほど寿命と速度を失う。
- 読み書きはページ、消去はブロックという単位の非対称から上書きができず、これが全ての設計を規定する。
- FTLは論理アドレスを物理ページへ動的に変換し、追記とウェアレベリングで制約と摩耗偏りを隠す。
- GCが空きブロックを再生する過程で生じるWrite Amplificationが、SSDの寿命(TBW)と書き込み性能を直接決める。
セルの土台にあるMOSFETの動作原理やCMOSインバータも併せて読むと、なぜ電荷保持と微細化が信頼性のせめぎ合いになるのかが見えてきます。
CPU/メモリ/ディスク Article
NANDフラッシュとSSDの内部 ─ FTL・ウェアレベリング・GCを実務で読む
TL;DRは入口です。実際に選ぶ・使う段階では、何を解決するか、何と比較するか、導入後にどこで詰まるかまで見る必要があります。
解決すること
NAND
比較で見る軸
難易度: advanced / カテゴリ: CPU/メモリ/ディスク / タグ数: 5
導入後に効く点
FTLは論理アドレスを物理ページへ動的に対応づけて消去前書き込み制約を隠し、ウェアレベリングで消去回数を全ブロックへ均す。
先に潰すリスク
用語だけ覚えても、設計・実装・運用でどこに効くかを確認しないと判断を誤る。
- 難易度
- advanced
- カテゴリ
- CPU/メモリ/ディスク
- タグ数
- 5
判断チェックリスト
- 自社の用途が「NAND / SSD」に近いか確認する。
- 強みである「NANDはセル単位で書き込むが消去はブロック単位でしか行えず、書き込み前に必ず消去が要るため上書きできない。」が本当に評価軸になるか確認する。
- 注意点の「用語だけ覚えても、設計・実装・運用でどこに効くかを確認しないと判断を誤る。」を運用で吸収できるか確認する。
- 公開値や仕様値は、対象プラン・対象機種・対象リージョンまで確認する。
- 既存システム、ID、ネットワーク、監視、バックアップとの接続方法を先に洗い出す。
- 小さく試してから、本番移行、権限設計、障害時手順、コスト監視を決める。