「ウェアレベリング」があっても、いずれはメモリセルの劣化が始まり、ビット不良が発生する。これに対処するのが「誤り訂正符号(ECC:Error Correcting Code)」だ。SSDではデータを書き込むときに、ECCを付加する。データを読み出すときにはECCも読み出す。読み出したデータ列とECCの内容を比較することで、誤りの有無を検出する。誤りが検出された場合は、訂正を実行する。これらの一連の操作は、コントローラ半導体(およびファームウェア)が担う。
SSDからパソコン(PC)がデータを読み出す単位は普通はHDDと同じ、512バイトである。この512バイトのデータに対し、誤り訂正用のデータ(ECCビット)を付加してある。ECCビットの大きさは、NANDフラッシュメモリのタイプと製造技術(あるいは微細化の度合い)によって違う。例えばSLCタイプのNANDフラッシュメモリを内蔵するSSDは、1バイトの誤り訂正が可能なECCビットを付加している。その条件で10万回の書き換え回数を保証していることが多い。
これに対してMLCタイプのNANDフラッシュメモリはSLCタイプに比べると劣化が早い。このため、4バイトを超える誤り訂正が可能なECCビットを付加している。それでも保証される書き換え寿命は、SLCタイプよりも少ない。1万回の書き換え回数にとどまることが多い。
製造技術の微細化は、NANDフラッシュメモリの書き換え寿命を短くする。ECCを付加しない状態で、5Xnmの製造技術によるSLCタイプのNANDフラッシュメモリは10万回の書き換えが可能だった。ところが2Xnmに製造技術を微細化すると、書き換え回数はおよそ半分の5万回に減少するとされている。MLCタイプの書き換え寿命はさらに短く、ECCを使わない状態だと5Xnm世代で約1万回、2X世代では約3000回とされる。
SSDの読み出しがHDDと同じ512バイト単位であることは既に説明した。書き込みもSSDではHDDと同じ512バイト単位であり、ホストマシンからはHDDと同じように見える。ところがSSDの記憶媒体であるNANDフラッシュメモリは通常、512バイト単位の読み書きができない。読み出しの単位は4Kバイトまたは8Kバイトであり、書き込みの単位はさらに大きく、512Kバイトから2Mバイトに達する。
NANDフラッシュメモリでは書き込みの単位を「ブロック」、読み出しの単位を「ページ」と呼称する。データの書き換えを繰り返すと、劣化したメモリセルが特定のブロック内で集中して発生することがある。劣化したメモリセルが少ないときは誤り訂正符号によってデータを訂正する。劣化したメモリセルが多くなると誤り訂正符号でも訂正が不可能になってしまう。この状態に至ると、コントローラ半導体は該当するブロックを「不良ブロック」としてデータの読み書きを禁止する。
不良ブロックの存在は、SSDとして書き込めるデータ容量の低下を意味する。そこでSSDが内蔵するNANDフラッシュメモリの記憶容量は、仕様で公称している記憶可能なデータ容量よりも増えていることが多い。余分なブロックは「冗長ブロック」となり、通常は使用しない。「不良ブロック」が発生したときに、「冗長ブロック」を不良ブロックの代替として割り当てる。このようにして書き換え寿命を延ばす。
(次の記事を読む)
福田 昭(ふくだ あきら)
フリーランスのテクノロジージャーナリスト/アナリスト。
Copyright © ITmedia, Inc. All Rights Reserved.