SSDの寿命

http://pc.watch.impress.co.jp/docs/column/hot/20090420_127747.html
いよいよ本格的に普及してきた感のあるSSD。そのデバイスであるフラッシュROMの仕組みをPC WATCHで分かりやすく説明しているので、ここでも要点をまとめておきます。また、私の実験で寿命がくるまでSSDを酷使した時、一体どうなってしまうのか?を行ったので、簡単ではありますが、記載しておきます。

1.フラッシュROMの構造
フラッシュROMの構造というか、いわゆるEEPROMの構造についても元麻布さんの記事にありましたので、ご紹介。


図1はNANDフラッシュチップの構造だが、左の「POLY1 FLOATING GATE」と呼ばれる部分に電子を注入したり、抜いたりすることでデータを保持する。FLOATING GATEに電子がない状態が1、電子を注入した状態が0だ。注入した電子は、Tunnel Oxideと呼ばれる酸化膜(絶縁膜)により、電源を落としても保持される。ところが、FLOATING GATEに電子の注入と抜き取りを繰り返すと、このTunnel Oxideが劣化していく。そして、ついには注入した電子を保持できなくなる。これが書き換え可能回数に上限が生じる理由だ。


要するにFETのゲート電極に絶縁体で挟まれた電極を用意し、書き込む時そこに電荷を注入することで(その時電子が絶縁体を通過する程度の電圧を加える。通常の読み出し時では通過できないので一度注入された電子は保持される)”1”を書き込むことができる。電子を同じ容量で抜き取れば”0”となる。この絶縁体に電子が何度か通過するたびに絶縁性が劣化することで寿命がやってくる。

よく寿命は何回とか言っているが、実は書き込み時にここの部分を何回書き込んだことかで決まるわけだが、フラッシュROM全体として見た場合、そう簡単ではないらしい。


2.書き込みとイレース方法

この書き換え可能回数の問題をさらにややこしくするのは、ERASEとPROGRAMでその単位が異なることだ。NANDフラッシュでは基本的に ERASEはブロック単位、PROGRAMはページ単位となる。実際のページサイズやブロックサイズはNANDフラッシュチップの容量、種類等によって異なるが、一番シンプルな例として2GbitのSLC NANDフラッシュチップを例にとると、ページサイズは2KB(2,048bytesのデータエリアと64bytesのスペアエリアで計 2,112bytes)、ブロックサイズは64ページ(2,112bytes×64)、1チップが2,048ブロックで構成されており 2Gb(64×2,048=131,072ページ)ということになる(図2)。

データをPROGRAMする場合は1ページ2KBが最小単位、ERASEする場合は64ページが最小単になるわけだ。一般にSLCチップの書き換え可能回数は10万回、MLCチップの書き換え可能回数は1万回と言われる。ブロックを消去して書き込むというサイクルを行なうごとに、1回づつ書き換え可能回数が減っていくと考えられる。


この話誤解しそうなので、もうちょっとスマートにしますと、つまりプログラムからライトしようとする単位は2KBなんだけど、実際にフラッシュROMにデータを書き込む時は必ずイレースする必要があるので、一度書き込もうとすれば上記例だと64ページ分、約128kbyteを一度に書き込むことになります。


たとえば1度データを書き込んだことのあるブロックのページ1とページ2を書き換える場合、必要な2ページ分だけを更新するだけでは済まない。書き換えが行なわれない残りの62ページ分のデータを1度コントローラ上のバッファ等に読み込み(図3)



更新する2ページ分のデータを組み合わせて、新しい1ブロック分のデータを作成、その後当該のブロックをERASEして、バッファ上のデータをERASE済みのブロックにPROGRAMするという手順を踏まねばならない(図4)。この例の場合、2ページを書き込むのに32倍の64ページを書き込む必要があったことになる。

要はプログラム上では小さなファイルを書いているつもりでも、フラッシュROMの上ではごっそりと書き換わっていて、確実に寿命が減っていくというような仕組みとなっているのである。このイレースするのに必要なページが小さければ小さい程寿命が伸びると言える。

この32という数字をWrite Amplificationと呼ぶ。1ページの書き込みに32ページの書き込みが必要になる(つまり32倍の速度で書き込み可能回数が減っていく)というわけだ。一般には書き込む単位が小さければ小さいほど、Write Amplificationの数字は大きくなり、それだけNANDフラッシュの書き換え可能回数が減っていく。

また、チップセットのメーカーによってちらし具合を工夫しているものもある。

Intelは自社のMainstream SSDをモバイル用途に用いた場合のWrite Amplificationを1.1、ウェアレベリングアルゴリズムの効率を1.04とする(図5)。従来の他社製SSDのWrite Amplificationを10、ウェアレベリングアルゴリズムの効率を5としており、MLCであってもIntelのMainstream SSDの寿命は、従来型のSLCタイプSSDの4.3倍に達するとしている。

さて、元麻布さんがSSDを長持ちさせるにはどうしたらいいかといった記事も書いているので、ここに貼っておきます。

http://pc.watch.impress.co.jp/docs/column/hot/20090423_152989.html

フラッシュROMにおいてイレースとは全てに”1”を書き込むこと。らしいのですが、では寿命がきてしまったブロックはどうなるのでしょうか?先程電荷をためた状態を”1”といいましたが、どうも寿命を迎えると”その値から書き換わらないROMになる”みたいです。つまり、一度イレースして寿命がくると、そのブロックには”1”が書かれたROMとなるというわけです。つまりDATAファイルで寿命が来て、これを読み出すと、”FF”とか”99”とかようは最大値の値になっている可能性が高い。というわけです。もちろんビットマップや動画データで全て”1”などは自然界ではないので、ベタな白とか壊れた画像とかになっているんではないかと思います。
また、こうなってしまっても、Windowsから見ればちゃんとエラーなく読み出せます。まあつまりエラーとして検出できないというわけです。何を書いたか、読み出したデータが等しいか、それを検証しないと寿命が来たことはOSには認識できません。OSの構成ファイルで書き換えを行わないようなシステムファイルは壊れないままですから、OSが起動できなくなるといった不具合も殆ど発生しないようです。ただし、レジストリを常に更新するような使い方だと壊れてしまう可能性があります。
このあたりが問題をやっかいにしているのかもしれません。