"MimicXLS"でRealSSD C300の性能向上&RealSSD C300のSMART解析

RealSSD C300における小サイズランダムライト性能

前回の記事で述べたように、RealSSD C300はパーティションアラインメントが調整されていない場合に大きくランダムライト性能が下がります。また、こだわりのMONOさんの記事にあるように、AS SSD Benchmarkを実行すると、Writeの"Acc.Time"が低スコアになります。この項目は512バイトのランダムライトにかかる時間の平均値であり、0.8msということは1250IOPS(0.625MB/s)でしかありません。同じテストにおいて4KBのランダムライトは29.62MB/sなので、これは不自然に低い値です。

これらの現象は、RealSSD C300が4KiB未満の書き込みを不得意としているために発生するのではないかと推測されます。そこで、Iometerを用い、512B, 1KiB, 2KiB, 4KiBのランダムライトのテストを行ってみました。さらに、下図のように、Iometerには書き込みアドレスをアラインするための項目があるので、"Sector Boundaries"(デフォルト)の場合と、4KiB境界にアラインした場合の両方のベンチマークを取りました。

比較対象としてOCZ Vertexシリーズの30GB版、さらにおまけで前回取り上げたWD20EARSの結果を乗せています。各テスト時間は10秒、テスト領域は1000MBとしています。また、結果の単位はIOPSです。

Test RealSSD C300 Vertex 30GB WD20EARS
512B(not aligned) 1272.3 (0.62MB/s) 2464.7 (1.20MB/s) 70.1 (0.03MB/s)
1KiB(not aligned) 1452.5 (1.42MB/s) 2395.2 (2.34MB/s) 68.3 (0.07MB/s)
2KiB(not aligned) 1642.0 (3.21MB/s) 2191.4 (4.28MB/s) 60.4 (0.12MB/s)
4KiB(not aligned) 1801.7 (7.04MB/s) 1950.6 (7.62MB/s) 63.9 (0.25MB/s)
512B(4KiB aligned) 1283.3 (0.63MB/s) 2396.4 (1.17MB/s) 64.4 (0.03MB/s)
1KiB(4KiB aligned) 1304.4 (1.27MB/s) 2374.0 (2.32MB/s) 61.9 (0.06MB/s)
2KiB(4KiB aligned) 1275.5 (2.49MB/s) 2339.9 (4.57MB/s) 61.1 (0.12MB/s)
4KiB(4KiB aligned) 16299.0 (63.67MB/s) 2284.8 (8.93MB/s) 278.3 (1.12MB/s)

驚くべきことに、RealSSD C300がパフォーマンスを発揮できるのは4KiB単位の書き込みが4KiB境界にアラインされている時のみです。それ以外は、全ての項目でVertex 30GB(Barefootファミリーの中でほぼ最低速度)に劣る性能しか出ていません。また、WD20EARSもC300と全く同じ傾向を示しています。

MimicXLSを用いた小サイズファイルの書き込み速度向上

RealSSD C300とWD20EARSのベンチマーク傾向は、体感速度に影響を及ぼす可能性があります。パーティションのアラインメントが取れていれば、どうせクラスタサイズは4KiBなんだから関係ないんじゃないの?という声も聞こえてきそうですが、実際には関係あります。クラスタサイズは最小のファイルサイズを指定しますが、OSはセクタ(512バイト)単位での読み書きを行います。また、NTFSのファイル情報は"管理レコード"に記録されますが、その大きさはクラスタサイズに関わらず1KBです。こだわりのMONOさんの記事では、C300の体感速度はX-25MやVertex LEに劣るとされていますが、その原因はこの小サイズの書き込みの遅さである可能性があります。

さて、この問題について、http://hpcgi1.nifty.com/yosh/さんのhttp://hpcgi1.nifty.com/yosh/sp/aft/という記事に非常に詳細で参考になる記述があります。また、同ページにおいて、問題を回避することができる"MimicXLS"というソフトが公開されています。このソフトは、ドライブの論理セクタサイズを大きなサイズ(デフォルトでは4096バイト)にエミュレートさせるというものです。

というわけで、"MimicXLS"によるパフォーマンスの向上をベンチマークしてみました。なお、Iometerは論理セクタサイズ未満のサイズの書き込みテストは行えないので*1、フォルダのコピー速度を計測する非常に簡単なソフトを作って実行してみました。中身はSHFileOperation関数にかかった時間を高分解能パフォーマンスカウンタで計測しただけです。

コピーするフォルダは前述のページと同様にGCC 4.5.0のソースを用いました。OSはWindows 7 64bit(KB981208適用済み)、チップセットはP55、AHCIモードです。コピー元はK5-64(Barefoot搭載SSD, SLC, 64GB)です。テストは3分の間隔を置いて3回繰り返しました。表中の数値の単位は秒です。

コピー先ディスク・条件 一回目 二回目 三回目
RealSSD C300 256GB(通常) 97.41 97.45 100.71
RealSSD C300 256GB(MimicXLS) 87.79 88.68 89.44
WD20EARS (通常) 131.99 131.77 132.59
WD20EARS (MimicXLS) 100.79 101.58 101.54
Vertex 30GB (通常) 90.35 89.60 89.18

MimicXLSにより、コピー速度が高速化されているのが分かります。先ほどのIometerの結果ほどのインパクトはありませんが、この計測時間にはコピー元のファイルの情報収集にかかる時間(エクスプローラでのコピーの際に"コピーの準備中"と表示される時間)が含まれていることもあり、性能向上の余地が小さかったと考えられます。

以上のように、RealSSD C300には小サイズの書き込みの性能が悪いという不思議な特性があります。この問題はMimicXLSにより緩和できるので、該当のSSDをお持ちの方は試してみてはいかがでしょうか。当然のことですが、システムにダメージがあっても大丈夫なようにバックアップを取り、くれぐれも自己責任でトライしましょう。

RealSSD C300のAverage Erase Count

RealSSD C300のSMARTの仕様は公開されていないのですが、簡単に書き込みテストを行った結果、おそらく"AD"の項目がAverage Erase Countを示すことを突き止めました。ファームウェアのバージョンは0002です。

やったことは単純で、シーケンシャルライトとランダムライト(4KB)を行いながらSMARTの値を取得し、変化を記録しただけです。
まず、シーケンシャルライトについては、書き込み量とADの変化は以下のようになりました。SMARTの取得に結構時間がかかるので、取得タイミングは1GiBの書き込みごとに一回のみとしました。

ADの値 総書き込み量 差分
26 218[GiB] 218[GiB]
27 470[GiB] 252[GiB]
28 722[GiB] 252[GiB]
29 974[GiB] 252[GiB]

きれいに252GiBごとにADの値が1ずつ増えています。NANDの総容量は256GiBなので、先天的不良ブロックなどを除いた残りが約252GiBなのでしょう。
次に、シーケンシャルのテストの直後から始めたランダムライトの結果は以下の通りです。書き込みサイズは4KB、書き込みの範囲はディスク全体とし、SMARTの取得は1024回の書き込みごとに行いました。

ADの値 総書き込み量 差分
30 39.67[GiB] 39.67[GiB]
31 70.95[GiB] 31.28[GiB]
32 101.85[GiB] 30.90[GiB]
33 132.75[GiB] 30.90[GiB]

ディスク全域へのランダムライトなので、テストの途中からだんだんと書き込み速度が落ちてきます。SMART取得時間も含め、最初は32MB/sぐらいの書き込み速度だったのが、ADの値が31に変わる頃には10MB/s程度にまで下がり、最終的に9MB/s程度で落ち着きました。最初だけADが変化するのに必要な書き込み量が多いですが、これは物理アドレスの断片化が少ない状態のとき、書き込みの一部を最適化できるためだと思われます。完全に劣化した状態でADが変化するのに31GiB程度を要していることから、この状態でのWrite Amplificationは8となると思われます。

これ以外にも、RealSSD C300のSMARTには、なぜかだんだん減っていくAA, 上位2バイトと下位4バイトがそれぞれ別の値を表しているように見えるB5など、気になる項目が色々あります。東芝さんもそうですが、SMARTの仕様は公開してもらいたいものです。

追記(2010/8/8)

ちょっとお問い合わせを受けたので補足しておきます。
今回取り上げたRealSSD C300のパフォーマンスの低下についてですが、これを以て地雷認定をするほど酷いものではありません。と少なくとも僕は思います。
上述したコピーテストについて、GCCのソースは小さなファイルを大量に含んでおり、非常に条件の悪いものでしたが、それでもパフォーマンスの低下は10%程度でしかありません。そもそも小さいサイズの書き込みはOSのキャッシュが効くので、体感速度には大きく影響しないと考えられます。実際、大学で使用しているノートPCのメインストレージをX-25MからRealSSD C300に移行したのですが、特に目に見えて体感速度が下がったという感触はありません(まあ僕はあまり敏感な方ではないのですが…)。
というわけで、これからお買いになる人も現在お使いの人も、大きな心配する必要はないと思います。

*1:実際には、読み書きをするディスク・ファイルのバッファリングやキャッシングをしない設定(FILE_FLAG_NO_BUFFERING)にした場合の制限です。詳しくは、Windows previous versions documentation | Microsoft Docsなどを参照してください