(1)

「NANDフラッシュを利用した製品には寿命がある」という記述はあちこちで見かけますが、具体的に"寿命"とは何なのかという点についての詳しい説明は少ないのが現状です。…というより、今まで不勉強で僕がよく分かってなかったので、最近調べた内容について記しておきます。

SSDはどうなったら使えなくなる?

SSDの寿命が尽きた状態とは、SSD内の予備領域が払底した状態を指します。
SSDをはじめとしたNANDフラッシュを利用するストレージには、必ず「予備領域」が設けられています。後述するように、SSDUSBメモリなどのコントローラは、ビットエラーが多数発生したセクタを含むブロックを"不良ブロック"とみなし"無効化"します。このとき、OSから認識されるストレージの容量が減ってしまうと困ったことになります。そこで、コントローラは、予備領域からブロックを補填することで、額面の容量が減らないようにしています。次々にブロックが無効化されていき、予備領域が空になってしまうと、ストレージは"寿命"を迎えることになります。東芝SSDの場合、この状態になるとSSDがリードオンリーモードになるようです。他社製コントローラでは特に明言されていませんが、予備領域が無くなるとNANDフラッシュの仕組み上データの書き換えができなくなるので、おそらく同様にリードオンリーモードになると思われます。
一般的なコンシュマー用SSDの予備領域は、"Binary Gigabytes"(GiB,1024x1024x1024Bytes)と、"Decimal Gigabytes"(GB,1000x1000x1000Bytes)との間の約7%の"ギャップ"を用いて捻出されています。例えば128GBのSSDの場合、NANDフラッシュは128GiB(=128x1.024x1.024x1.024≒137.4GB)搭載されています。その差分の約9.4GB分が予備領域になります。
予備領域の払底=寿命となるので、NANDフラッシュの総量が同じであれば、予備領域の割合が多い製品ほど寿命が長くなります。そのため、長寿命を目指した製品は予備領域の割合を多く取っています。例えば、X25-Eの64GB版は80GibのNANDを搭載しているので、全体の約25.5%が予備領域です。STEC社の産業用グレードのSSDに至っては、実に全体の約46.9%が予備領域になっています。

ビットエラーとECCとブロックの無効化

どのような状態になったときにブロックを無効化するかは、SSDのコントローラによって異なります。
NANDフラッシュには、ビットエラー(データ化け)が発生する可能性があります。特にMLCタイプのNANDの場合は、かなり高い確率でビットエラーが発生します。そのため、SSDのコントローラは、ECC(Error-correcting code)という冗長データを書き込み時に付加し、読み込み時にそれを用いてエラーのあるビットを修正しています。
書き込み・消去時のエラーは、書き換え回数が多いほど起こりやすくなります。それが、「NANDフラッシュには書き換え回数の制限がある」と言われる所以です。一般的に、NANDフラッシュのベンダは、MLCでは5,000から10,000回、SLCでは100,000回が書き換え回数の上限であるとしています。
実は、ここに一点重要なポイントがあります。この書き換え回数の上限は、NANDフラッシュのベンダが指定した強度のECCを用いた時のものです。多くの場合、ベンダはMLCの場合は512バイト中4ビット, SLCの場合は512バイト中1ビットを訂正可能なECCを想定しています(訂正 4ビットで済んでいたのは5xnm世代までで、最近の3xnm世代のNANDでは8ビットECCが想定されているようです。参考:【福田昭のセミコン業界最前線】NANDフラッシュメモリの信頼性を保つ技術 - PC Watch)。そのため、SSDのコントローラがベンダの想定より高い強度のECCを利用していれば、より多い回数を書き換えることが可能になります。
例えば、DailyTechの記事の記事によると、IndilinxのBarefootコントローラは512バイト中12ビット以上のエラー訂正が可能であり、また、BCHリードソロモンの2種類のECCがハードウェア実装されているようです。一方、SandForceのSF-1500コントローラの場合は何と512バイト中24バイト(192ビット)を訂正可能なECCを搭載しています。これだけ強力なECCがあれば、相当な回数の書き換えを行っても正しくエラー訂正が可能になるでしょう。
もうお分かりかと思いますが、ブロックの無効化判定がコントローラごとに異なる理由は、コントローラごとに異なる強度・アルゴリズムECCを用いているためです。例えば、4ビットECCを用いるコントローラは、1セクタ内に5ビットめのエラー(=訂正不能)が出る前にそのセクタを含むブロックを無効化する必要があります。しかし、ECCの強度がより高ければ5ビットめのエラーも訂正可能なので、そのブロックを無効化する必要はなくなり、結果として寿命が長くなります。

NANDフラッシュのビットエラーの種類について

ビットエラーは、データの読み込み時にECCをチェックすることにより、検出・修正されます。ビットエラーの種類を細かく分類すると、以下のようになります。

  • 書き込みエラー (書き込んだ時点で既にビットエラーがある)
  • データ保持エラー (長期間放置しておくとビットエラーが発生する)
  • リードディスターブ (消去を行わずに多数回の読み込みを行うとビットエラーが発生する)

いずれも、書き換え回数が多いほど発生しやすくなります。余談ですが、寿命が迫ったSSDをバックアップメディアとして用いるのは危険です。なぜなら、寿命が迫ったSSDではデータ保持エラーが発生する可能性が高く、しばらく机の中にSSDを放り込んでいたらデータが壊れていた、といった悲劇が発生しうるためです。そういう用途には、おとなしくHDDを使いましょう。
これらは書き込み・読み込み時に発生するエラーですが、さらに消去時のエラーというのも存在します。これは、消去動作を行っても全てのビットが1にならない現象です。この現象が発生したときは、SSDコントローラはそのブロックを無効化することが多いようです。



長くなって来たので、続きは次回にします。