(1) JMF602とBarefootのスタティックウェアレベリングの性能比較
TranscendからIndilinxコントローラ搭載のSSDが発売されるようなのですが、そのデータシートがアップされており、そこにSMARTの仕様も記述されていました。Vertexシリーズの最新Firmware(v1.3)で追加されたD2,D3エントリの情報はないものの、それ以外の全ての仕様が明らかになっています。
01(001) Raw Read Error Rate 09(009) Power on Hours 0C(012) Device Power Cycle Count B8(184) Initial Bad Block Count C3(195) Program Failure Block Count C4(196) Erase Failure Block Count C5(197) Read Failure Block Count C6(198) Total Count of Read Sectors C7(199) Total Count of Write Sectors C8(200) Total Count of Read Commands C9(201) Total Count of Write Commands CA(202) Total Count of Error bits from flash CB(203) Total Count of Read Sectors with Correctable Bit Errors CC(204) Bad Block Full Flag CD(205) Maximum PE Count Specification CE(206) Minimum Erase Count CF(207) Maximum Erase Count D0(208) Average Erase Count
なお、これらの値の数値表現は伝統的なSMARTの仕様には従っていないため、一般的なSMARTモニタリングソフトでは正しい値は表示されません。正しい値の計算方法は以下の通りです。
- CrystalDiskInfo 2,7.4, Speedfan など
- [現在値(Current)]+[最悪値(Worst)]x256+[生の値(raw)の1byte目]x256x256+[生の値(raw)の2byte目]x256x256x256+....
- HD Tune Pro 3.5
- [Current]+[Worst]x256+[Data]x256x256
CrystalDiskInfo 2.7,4やSpeedfanは、生データを16進数で表示しているので、一度10進数に直して計算する必要があります。また、CrystalDiskInfo 3.0 Alpha 3では、Indilinxコントローラ搭載のSSDを自動識別し、データを全て生の値(16進数)として表示してくれます。
さて、仕様が分かったのは良いことなのですが、これらのSSDはウェアレベリングのアルゴリズムに問題があるのではないかという気がしています。
CrystalDiskinfo 3.0 Alphaの開発版のサポートスレッドには、Indilinxコントローラ搭載SSD(Vertex, S592など)の情報がいくつか寄せられていますが、Average Erase CountとMaximum, Minimumとの差が非常に大きい方が何人もいらっしゃいます。すでにMaximum Erase CountがMLCの書き換え寿命と言われる1万回を越えてしまっている方もいるようです。
そこで、手持ちのVertex(30GB)を用いて、ウェアレベリングの実効性を調べるテストをしてみました。
テスト内容は簡単で、Iometerを用いて非常に小さいファイル(今回は何となく2MB)にシーケンシャルライトを一定時間繰り返すものです。このテストでは、LBAの狭い範囲内のみ書き換えが発生するため、スタティックウェアレベリングが正しく動作しない場合、AverageとMaximumの値が離れてしまうことが予想されます。
結果は以下の通りです。
Average | Maximum | Minimum | |||||
実験前 | 365 | 1241 | 14 | ||||
10分後 | 366 | 1718 | 14 | ||||
20分後 | 368 | 2941 | 14 |
Maximumの値は容赦なく増えていっています。スタティックウェアレベリングが動作しているとは考えられません。AverageとMaximumの差がより大きくなればスタティックウェアレベリングが働き始めるのかも知れませんが、前述の通り、すでにMaximumの値が10.000を越えている方もおり、その実効性には疑問符をつけざるを得ません。
また、比較実験として、JMF602を採用しているBuffaloのSHD-NSUM30で同様の実験を行ってみました。
Average | Maximum | ||||
実験前 | 174 | 412 | |||
10分後 | 175 | 431 | |||
20分後 | 177 | 436 |
AverageとMaximumの差は若干しか開いていません。これなら、スタティックウェアレベリングが正しく動作していると言えるでしょう。JMF602は、AverageとMaximumの差が一定値*1より離れないようにスタティックウェアレベリングを行っているようです。この結果を見る限り、Indilinxコントローラのウェアレベリングアルゴリズムの性能は明らかにJMF602に劣っています。
この現象は、もしかすると寿命の定義が間違っていることを起因にしているかもしれません。
以前の記事に、ID=D1の値が残り寿命をパーセンテージで表した数値だと書きましたが、この値はID=CDの"Maximum PE Count Specification"という値とAverage Erase Countを用いて以下のように計算しているようです。
-
- D1 = (1-[Average Erase Count]/[Maximum PE Count Specification])x100*2
すなわち、Maximum PE Count Specificationが10,000の場合、Average Erase Countが100増えるごとにD1が1減り、100,000の場合はAverage Erase Countが1000増えるごとにD1が1減ります。
そして、なぜか前述のスレッドによせられた報告では、全てのMLC製品のMaximum PE Count Specificationの値が100,000(Current=160,Worst=134,Raw 1Byte目=1)となっており、逆に、SLCを採用しているK5-64では、Maximum PE Count Specificationの値が10,000(Current=16, Worst=39, Raw 1Byte目=0) となっています。
もし、書き換え耐性が100,000回と言われるSLCを採用した製品であれば、10,000回を越える書き換えはあまり問題になりません。もしかすると、VertexをはじめとするMLCのシリーズでは、SLCを前提としたウェアレベリングアルゴリズムが動作してしまっているのかもしれません。この場合、SSD全体の寿命にほど遠い段階で一部のセルが壊れ始めてしまうことが予想されます。
というわけで、Vertex, UltraDrive ME, S592など、Indilinxコントローラを採用したSSDをお持ちの方は、CF(Maximum Erase Count)とD0(Average Erase Count)を調べてみてください。
…と言っても、この問題に関してユーザ側ができることはほとんどありません。正直に言って、本エントリの内容は何かの勘違いであって欲しいです。