2008年03月07日

microSDカードの書き込み耐性(2)

microSD (や SD/miniSD)は、いったいどれぐらい書き換えられるものなのだろう? 実際に調べてみることにした。


誤解のないように説明しておくと、知りたいのは局所的に書き込み回数が多い場合どうなるのかということ。書き込み回数が多い場所はどうしてもできる。そこが 10万回〜数十万回でダメになるのかどうか? もっと書き込めるならいったいどこまで書き込みできるのか? このことについて調べている。

また、ダメになった後はどうなるのか?というのも知りたいのであわせて調べている。


前記事では、こういう動機で 準備として 不要になった 64MB miniSD でテストを行い、次に 最初のテストとして 上海問屋オリジナル 2GB microSD のテストをした。

結果だけ簡単にまとめておくと

  • 64MB miniSD

    10万回の書き換えに 1時間弱
    510万回の書き換え後 write エラー
    write エラー後は、どこを書き換えても すぐに write エラーが発生し使えなくなった。

  • 上海問屋オリジナル 2GB microSD

    10万回の書き換えに 30分ぐらい
    1820万回の書き換え後 write エラー
    write エラー後も書き換えることができたが、20万回で 2回目のwrite エラー
    他の場所を書き換えてみたが、25 万回で write エラー
    (※)最初の write エラー までに 2 回、
    書き込み内容が化ける現象が発生した。(原因不明)
    (その後のテスト)
    10万回の書き換えに 13分 (アダプタ SDMMC M121)
    性能 100MB 書き込みに 38.9 秒 (2.6 MB/sec) (注)壊した後
    性能 100MB 書き込みに 14.1 秒 (7.0 MB/sec) (注)未使用領域



書き込み内容が化ける件については書き込み耐性とは関係なさそう、でもイヤな問題なので別途考察することにしよう。

2つ目のターゲットは、キングストン 2GB miroSD。カードにJAPAN の文字がある。キングストンは東芝製のチップを使っているらしい。

  • キングストン 2GB microSD(現在テスト継続中)

    10万回の書き換えに 14分
    5620万回の書き換えOK。(テストが無意味だった可能性高)
    (※)最初の write エラー までに 3 回、
    書き込み内容が化ける現象が発生した。(原因不明)
    2420万回から、USB アダプタ変更(SDMMC M121)
    → 10万回の書き換えが 5分に短縮
    性能 100MB 書き込みに 14.2 秒 (7.0MB/sec)



そう、書き込み内容が化ける問題が、こいつでも起きてしまったのだ。

起きたのは 510 万回書き換えた後。化けたパターンは、

PAGE: 8 (2048)
00: 68 1f 63 63 63 63 63 63 63 63 63 63 63 63 63 63
01: 63 63 63 63 63 63 63 63 63 63 63 63 63 63 63 63

2回目は、1710万回書き換えた後。化けたパターンは、

PAGE: 4 (1024)
00: 1d 78 94 94 94 94 94 94 94 94 94 94 94 94 94 94
01: 94 94 94 94 94 94 94 94 94 94 94 94 94 94 94 94

3回目は、2420万回目。パターンも同じような感じ。

(1回目だと)全部 0x63 であるべきところが、0x68,0x1f になっている。
512 バイト単位で、先頭の 1〜2バイトが化けるというのがこれまで起きた4回の共通パターン

今回のテスト環境は、玄箱/HG にインストールした Linux(PPC)。
OS が Linux であるということと、USB のカードアダプタが同じというのが共通点。

前記事では、Linux や Vmware を疑ったが 、少なくとも Vmware は関係ない。Linux も PPC (Big-Endian)になったので大分違うとはいえる。Linux の ファイルシステム(vfat)のバグという可能性が残るが、随分使われているものだから、たぶん違うだろう。

今疑っているのは、カードアダプタ。microSD カードの中身がたまたま同じところの製品で特性が似ていたという可能性はあるが、microSD を疑うのは保留。このテストが終わったら複数のカードアダプタでテストしてみることにする。幸い 書き込み耐性の評価に使ったカードでも 完全に壊れたわけではないので、使わなかった領域を使ってテストできる。テスト用のプログラムも広い領域を使うようなものにすることにする。

とりあえずプログラム作成→flashtest2.c
ちょっと変更して、データを書く位置を ずらしていくようにした。
ずらすサイズ (個数)を 1000 にすれば、10万回しか書けなくても 全部で1億回の転送ができる。
それは良いのだが、vfat だと ディレクトリエントリが何度も書き換えられるので都合が悪い。ext3 で使ってみることにする。

sar -d で確認。

 DEV tps rd_sec/s wr_sec/s
20時50分01秒 dev8-0 412.34 1647.75 1652.56
21時00分01秒 dev8-0 414.59 1656.76 1661.53
21時10分01秒 dev8-0 415.52 1660.48 1665.27

秒間 103 回の write + read が出来ている計算で、100000回なら 970 秒 15 分ぐらいで済むはずだ。で実際も 15分弱で終わっていて、プログラムでの read / write しか出ていないことを確認。

これで、3000万回ぐらいやってみて、無問題なら結構安心。
最初に使ったアダプタが悪いか、疲労してきた microSD の特性か
と思うことができる。
→ 3000万回の転送は無問題だった。

一応、 最初に使ったアダプタで同じことをやるつもり。それで無問題だったら、疲労してきた microSD の特性だと思うことにする。
→ あまりに遅いので、300 万回でキブアップ。


USB アダプタによってこんなに性能が違うとは思ってみなかった。信頼性もかなり違うかもしれない。

どういう違いがあるのか。/proc/bus/usb/device の情報を書いておく。

最初に使っていた USB アダプタ (microSD 専用)
T: Bus=02 Lev=01 Prnt=01 Port=00 Cnt=01 Dev#= 2 Spd=12 MxCh= 0
D: Ver= 2.00 Cls=00(>ifc ) Sub=00 Prot=00 MxPS=64 #Cfgs= 1
P: Vendor=058f ProdID=6335 Rev= 1.02
S: Manufacturer=Generic
S: Product=Mass Storage Device
S: SerialNumber=058F011111B1
C:* #Ifs= 1 Cfg#= 1 Atr=80 MxPwr=250mA
I: If#= 0 Alt= 0 #EPs= 2 Cls=08(stor.) Sub=06 Prot=50 Driver=usb-storage
E: Ad=01(O) Atr=02(Bulk) MxPS= 64 Ivl=0ms
E: Ad=82(I) Atr=02(Bulk) MxPS= 64 Ivl=0ms

2番目に使った USB アダプタ (microSD/SDHC 専用)
T: Bus=01 Lev=01 Prnt=01 Port=00 Cnt=01 Dev#= 3 Spd=480 MxCh= 0
D: Ver= 2.00 Cls=00(>ifc ) Sub=00 Prot=00 MxPS=64 #Cfgs= 1
P: Vendor=14cd ProdID=6700 Rev= 2.01
S: Manufacturer=SDMMC M121
S: Product=USB 2.0 SD/MMC READER
S: SerialNumber=845340272046
C:* #Ifs= 1 Cfg#= 1 Atr=80 MxPwr=100mA
I: If#= 0 Alt= 0 #EPs= 2 Cls=08(stor.) Sub=06 Prot=50 Driver=usb-storage
E: Ad=81(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
E: Ad=02(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms



2番目に使った USB アダプタは、
おそらく、このページにある fujitek のもの(380円)と同じ(ブランドは違う)。ちなみに、480円のへんな形状のUSB/SD変換アダプタを買ってみたのだが、同じチップを使っていた。

最初に使ったものは、MxPS(パケットサイズ)= 64 だったりして、性能的にあまりよくないものだということはわかった。
普通の USB A タイプコネクタで、本体が 結構厚い。コネクタメーカの microSDコネクタを使っていて、物理的な信頼性は高いかんじで、お気に入りだったが、性能や信頼性に問題があるとなると使いたくなくなってしまった。

2番目に使ったものがお勧めかというと、わからない。あまりに小さいので、少々使いづらい。また、あまりに薄いと接触不良がおきやすかったりするかも知れない。ついでに書いておくと、対応は、8GB までらしい。

さて、キングストン 2GB microSDは、なかなか壊れない。もうやめたいが、壊れた後どうなるのか興味があるので、もう少しがんばってみようかと思う。ひょっとして実際Flashへの書き込みはもっと少なくて壊れないとか想定外の理由があるかも知れないが、高速だし、なかなか良い製品だと思う。

それとは別に実はもう1つ microSD のテストを始めている。ターゲットは、A-DATA 。A-DATA の は、不良ブロックの代替だけではなく、損耗平均化アルゴリズム (wear leveling algorithms) に対応していることが書かれている。それだけでなく、FW を更新できるなんて一般ユーザには関係なさそうなことまで書かれている。ひょっとして特性も違うのかも知れないなんて思ってしまったものだから調べないわけにはいかなくなった。ちなみに、壊すことを前提に購入したので、安い1GB にした。


  • A-DATA 1GB microSD(テストが無意味だった可能性高)

    10万回の書き換えに 10分 (アダプタ SDMMC M121)
    1480 万回 OK 。
    性能 100MB 書き込みに 20.5 秒 (4.9MB/sec)



キングストン 2GB microSDが、なかなか壊れないので、microSD 自体でキャッシングされているのではないか?という疑念がわいた。

プログラムを若干変更。→ flashtest3.c

その上で、ファイルに対して 8KB x 1 の書き換えを行っていたのを 8KB x 5 に変更。8KB を10万回書く時間は 5分から 30分になった。

その後何回か試したところ、30分は 1回のみ。疑念は気のせいということに。


次に別の疑念がわいた。SDMMC M121は、まだ1回も write error を出していない。内部でリトライしているかも知れない。ダメになった上海問屋オリジナルを使ってどうなるか見てみることにした。

→ 280万回書き換えてエラーなし。その後 第三のアダプタに変更したが、計 400万回書き換えてエラーなし。
最初のアダプタで write error が出だしたのがうそのようだ。

100MB のファイルを書く時間を見てみるとかなり遅くなっているようだし、疲労しているとは思うのだが...

どうもいままでのテストの方法が甘かったようだ。

書き込むサイズを大きくしていって、時間がどれぐらいかかるか
調べてみた。以下は、1000回 write+read する時間(単位 秒)。

上海 2G キングストン 2G A-DATA 1G
8KB 7 7 7
16KB 12 100 11
32KB 19 100 21
48KB 91 100 30
64KB 138 100 41
96KB -- 100 60
128KB -- 200 95

上海 2Gは、48KB になると急に遅くなる。ルートディレクトリエントリの 8KB と ファイルへの write の 2 ヵ所しか書き換えていないため、2 個のバッファが WB(Write Back) キャッシュとして作用するのではないか? 消去ブロックサイズは 32KB ですなおな設計になっているような感じだ。すくなくとも今までのテスト write 回数 = Flash 書き換えになっていない。

キングストン 2G は、16KB から遅くなる。その後サイズを大きくしていっても時間は同じ。8KB以下のサイズでは WB キャッシュを持っていたりしそう。サイズを変えても 96 KB まで時間が同じということは、消去ブロックサイズがこのあたりなのだろう。

A-DATA 1G は、リニアに時間がかかるだけ。これまたよくわからない。128KB より多い量の WB キャッシュを持っていると考えるべきなのかも知れない。

とにかく、いままでのテストはダメだったようだ。上海 2G と キングストン 2Gは、48KB で write するようにすれば 内部の Flash が書き換わりそうだから、サイズを変えてテスト継続することはできる。ただ、テスト方法をもっと練ってやりなおしたほうが良さそうだ。

この記事の更新はここで終わりにしようと思う。次はリベンジということで、新たに記事を起こす予定。


おわりに

最後に、なぜ microSD に対して書き込み耐性のテストに踏み切ったのは何故かについて書いておこうと思う。

もちろん、常々興味があった。そして十分安くなったから。というのは背景にある。ここで書くのはそれ以外の理由。

なぜ microSDなのか

これから、大容量のものは別にして、2GB までのものは、microSD に収束していくだろう。今調べるなら、他のメディアを調べる意味はなく、microSD を調べるべきである。

もちろんこういう要素が大きいのだが、私の中では、もっと重要な理由がある。

それは、”CF や USB メモリ、SD/miniSD と比べて、製造の難易度が高く 実装のバリエーションが少ないだろう” ということ。少数の一流メーカしか製造できないなら、特性も似たりよったりになってくるのではないか?→ すなわち、結構特性を一般化できるはず→調査したデータが意味を持ってくる。

補足: microSD のサイズは、11mm x 15 mm x 1.0 mm 。東芝 が 2007年 03月28日に発表した 56nmプロセス 16G bit NAND型フラッシュメモリTC58NVG4D1DTG00は、12mm x 20 mm × 1.2 mm -- LSI より小さく薄いのだ。今は 8GB のものまであるが、いったいどこに入っていて、ちゃんと強度を保てているのか?不思議なぐらい。

ISSCC 2008レポートを見ると 16G bits(2G bytes)でチップ面積が 120平方 mm とか書いてある。microSD のサイズ (端子込みで 165 平方 mm) とさして変わらない。2GB ですら どういう風にチップが入っているのかあまり想像できない? まして 8GB は? -- もちろん 積層されている以外にないのだが ... 1mm の薄さにそれが入っていて、一般の人が扱えるだけの強度があるというのがとても不思議。

実装のバリエーションが少ないというのは、ほんとうらしい。
microSDの性能についてを参照

このようなことを考えたから microSD をターゲットに調査をしている。値段の関係で microSD しか調べられないが、一般的に microSDHC も調べた特性より高耐性になるだろうという予想はできる。

これから一般化してくるであろう SSD も 調べた特性より高耐性なものに収束していくだろうと思う。ただ過渡期において変なもの・雑な設計のものが出てくる可能性はある。

USB メモリはどうなるか、さっぱりわからない。それは実装があまりに多様だからだ。書き込み耐性の面でダメダメな実装も多いかもしれない。Flash のチップ内部で 不良ブロック制御を行っているものがあるが、そういうものが一般化されないと、書き込み耐性について一般化してコメントできるような気がしない。

なぜ興味を持ったのか

普通に Windosやデジカメで使った場合、安心できるか?書き込み回数が多い場所が 10万回〜数十万回でダメになるなら、あまり安心できない。もうすこし多くないと困る。

たとえば、1日に100枚の写真を撮るとすると、100日で最悪 10万回の書き換えが起きるところ(たぶんディレクトリエントリ)が出てくるかも知れない。そう考えると 10万回というのは多いとは言えない。

また、書き込み耐性を超えたらどうなってしまうのか? これも問題だ。データが壊れるとすれば、撮った写真がダメになってしまうのか?

こういうことが一般的に知りたい理由だろう。私もそういう観点で知りたいが、もっと別の理由がある。

ひとつは、電子工作的な観点。大容量のメモリ(RAM)を AVR とかにつなぐのは 配線の数が多くなるので、物理的に無理だったり、面倒だったりする。シリアルベースの Flash メモリをつなぐのは簡単だが、繰り返し書き換えられるのかどうか?

たとえば、ログを全体にわたってサイクリックに書き込むとする。10万回書き換えられて、1GB あるならば、通算で 100TB ものデータを書くことはできる。1MB/sec で書き込み続けても 3年以上持つ。

それは良いのだが、どこまで書いたかという情報をどこか固定の場所に書くとすると、そこだけ異常に書き換え回数が増えることになる。1000万回のオーダで書き換えられることを知っていれば、結構安心してこういう設計ができることになるわけだ。

実はもっと別の理由もある。それは、SSD に対する理想のファイルシステムはどういうものかを考えるということ。

簡単に言えば上のような制御をやってくれるファイルシステムということになる。ファイルシステムでは、zfs のように copy-on-write という概念がある。書き換えたデータを同じところには保存せず常に新しい領域を確保してそこに書く。ハードディスクだとランダムアクセスが遅いから、連続した領域に書くというのは性能を上げるために重要な技術なのだが、SSD の場合それは関係ない。しかし、領域全体を使い書き込み回数を平均化してくれるわけで、 copy-on-write という技術は SSD に対して別の理由で有利なわけだ。

それは良いのだが、最新のデータを示すポインタが必要で普通 SUPERBLOCK といわれるところに格納する。そこだけ極端に書き込み回数が増える。

書き込み耐性がいったいどれぐらいあるのかということが、ポイントになってくるのだ。あまりに低いと ハードディスク用の設計では不十分で SSD 専用の仕組みが必要になる。結論としてはこれぐらいあればまぁ、普通に使えそう。

相当に専門的な興味だと思われるかも知れない。でもそうではない。もう SSD というのはかなり身近になってきている。Flash に変わる不揮発性メモリも話題になっているが、当面は Flash だろう。Flash ベースの SSD をどうやって使えばよいのかということを考えるのは、普通に使う立場でも有用なはずだ。


microSDの性能についてで示したように、microSD (一般の MLC Flashも)は、4KB とか小さいサイズの Write が相当遅い。OS をインストールするような場合、書き込み耐性よりこっちの方がネックになりそうだ。そういう意味でも、連続した領域に書く copy-on-write ファイルシステムが望まれる。
posted by すz at 17:35| Comment(8) | TrackBack(1) | microSD関係
この記事へのコメント
テストお疲れ様でした。
この記事を読んだ感想ですが、
最近のメモリカード、2GB miniSDが1000円切ったり、16GB SDカードが6千円と、値崩れして容量の陳腐化が激しいわけですが、
技術は格段に進化してて、信頼性をあげるためにメーカーがいろいろ工夫をしているんだなぁ。ということです。
Posted by P at 2008年03月21日 08:21
お疲れ様です。
DVD-Rも容量単価が劇的に下がったメディアの一つですが、近年は品質の低下が目立ちます。
こういった点も懸念されます。
Posted by とおり at 2008年03月22日 23:43
貴重な実験、お疲れ様です。

思ったのですが、ファイルシステムがFATなら、書き換えの集中する先頭部分だけはフラッシュメモリでなく不揮発性SRAM等を用いてやれば実環境下に置ける平均寿命は大幅に向上するのでは?
FATに限らずともどのファイルシステムにも実デート比較すると非常に小さな領域しか占めないインデックス部が有り、大抵読み書きはそこに集中するのでそこだけもっと書き換え耐性の強いものに置き換えてやればいいのでは?
既に誰かが思いついてそうなものですが、なぜそういったものが出ていないのでしょうね。やっぱり不揮発性SRAMが高いからなのか。
Posted by MASA.H at 2008年03月23日 03:16
今の Flash メモリにはデバイス(chip)内部に、物理的な書き込みブロックが集中しないような仕組みが入っていますので、外から論理的に書き込みブロックが集中するように指定しても、実際にはそうはならないはずです。
Posted by at 2008年03月25日 17:16
貴重な実験を公開していただいてどうもありがとうございました。

フラッシュに対する疑念は、非専門的で漠然としたものですが、私も持っておりました。

まぁ日本のメーカーが使えると言ってるのだからそれなりなんだろうぐらいに思っておりましたが、今回の実験は参考になりました。

何より読んでて興味深く楽しかったです。

本当にありがとうございました。

ちなみにこちらのインプレスの記事から来ました。参考まで。
http://internet.watch.impress.co.jp/static/yajiuma/2008/03/25/
Posted by とおりすがり at 2008年03月25日 17:27
ウェアレベリングでググってみましょう。

基本的には空き容量が多いほど書き換え可能回数は増えますので、空き容量を極力減らした状態で同じテストをしてみたらどうでしょう。

空き容量が多いほど信頼性が上がるので、大容量のカードを余裕を持って使うのがお勧めです。
Posted by ほげ at 2008年03月25日 19:43
flashのコントローラ内に、物理的な書き込み先を分散する機能が搭載されています。
大きなサイズのflashで、小さいデータを書き換えた場合見かけの寿命は長く見えることになります。
Posted by at 2008年03月25日 20:42
上記のコメントにも散々出ていますが8KBx5の書き換えでは2GBを2000MBと仮定しても
約6200回実行しないと1回目相当の書き込みにはなりません。

何故か?と言うのはMicrosoftが面白い資料を出してるので目を通しておくと良いでしょう。
http://download.microsoft.com/download/a/f/d/afdfd50d-6eb9-425e-84e1-b4085a80e34e/WNS-T432_WH07.pptx
Posted by 774 at 2008年03月26日 00:52
コメントを書く
お名前:

メールアドレス:

ホームページアドレス:

コメント: [必須入力]

認証コード: [必須入力]


※画像の中の文字を半角で入力してください。
この記事へのトラックバックURL
http://blog.sakura.ne.jp/tb/30760449
※ブログオーナーが承認したトラックバックのみ表示されます。

この記事へのトラックバック

USBメモリは壊れる
Excerpt: USBメモリの書き換え限界寿命が来ると何が起きるのか、実際に寿命が来たケースをレポート - GIGAZINE 非常に興味深い。 この記事の場合USBメモリが壊れたのは事実でもそれが書き換え限界によるも..
Weblog: Kyan's BLOG III
Tracked: 2008-03-27 15:30