次に、冒頭で示した三つの不具合のうち、「MLCSSDのパラドックス」について紹介する。これは、SSDの書き換え回数(製品寿命)ばかりを気にして、データ保持性能を意識することなく大容量品を選択すると、データ・ファイルの破損を誘発する事態を指す。データ容量が大きいSSDは、「ウエア・レべリング」と呼ばれる機能を始動するタイミングが遅れて、データ・ファイルの破損前にリフレッシュ処理を実行できなくなる。
ウエア・レベリングと呼ばれる機能は、メモリ・セル間の書き換え回数を平準化して特定のメモリ領域への書き込みの集中を防止し、NANDメモリ全体の寿命を使い切るために装備されている。実行される修理は、前述のリフレッシュ処理そのものであり、データ保持性能の低下を防止できる。
ウエア・レベリングでは、NANDフラッシュ・メモリ内の各ブロックの書き換え回数を監視し、最も書き換え回数が少ないブロックにデータを書き込む。ウエア・レベリングの方法には、「Dynamic Wear Leveling(ダイナミック・ウエア・レベリング)」と「Static Wear Leveling(スタティック・ウエア・レベリング)」の2種類がある。ダイナミック・ウエア・レベリングが先に開発され、その後、スタティック・ウエア・レベリングが開発された。
ウエア・レべリングを説明する上で欠かせないのが、「ダイナミック・データ(動的データ)」と「スタティック・データ(静的データ)」という概念である。SSDに記憶させるデータはこの2種類に大別できる。動的データはその名の通り、頻繁に書き変わるデータで、ユーザー・ファイルなどのデータである。静的データは、書き換えが頻繁に起きない、OSやアプリケーション・ソフトウエアなどのシステム・データを指す。
ダイナミック・ウエア・レベリングでは、動的データを記憶するブロックを平準化の対象にして、静的データを対象から外す。このため、動的データを記憶するブロックに書き換えが集中するものの、静的データを記憶するブロックの書き換え回数が少なくなる。
スタティック・ウエア・レベリングでは、静的データを記憶するブロックを含むすべてのブロックを対象にして、平準化を実行する(図1)。ダイナミック・ウエア・レベリングに比べて、データの書き換え回数を効果的に平準化できるので、現在は、スタティック・ウエア・レベリングが主流である。SSDの製品仕様に「スタティック・ウエア・レベリング対応」と記載されている場合、ほぼ間違いなく、ダイナミック・ウエア・レベリングにも対応している。
こうしたウエア・レベリング処理が実行されるタイミングは、SSDごとに異なるので留意すべきである。一般に、搭載するNANDメモリの「Average Erase Count(平均消去処理回数)」と「Maximum Erase Count(最も書き換え処理を実行した記憶素子の最大消去回数)」の差を比べて、その差があるしきい値に到達すると、ウエア・レベリングを実行する。このしきい値がSSDごとに異なる。
しきい値が小さいほどウエア・レベリングを行う回数が増え、データ保持性能は向上するものの、製品寿命は短くなる。反対に、しきい値が大きいほどウエア・レベリングの回数が減り、製品寿命は短くなりにくいが、データ保持性能が犠牲になる。
そこで、例えば起動専用といった、読み出し処理が主体の用途では、しきい値が小さいSSDを使用する。つまり、ウエア・レベリングによるリフレッシュ処理が頻繁に発生するSSDの方が向く。これに対して、常に書き換え処理が発生する用途では、しきい値が大きいSSDを選択する注1)。