Hatena::ブログ(Diary)

Lansenの現実逃避日記 このページをアンテナに追加 RSSフィード

2010-05-02

[](2) 02:57 (2)を含むブックマーク (2)のブックマークコメント

ちょっと間が開いてしまいましたが、続きです。

NANDフラッシュにはどのくらいビットエラーが発生するか?

実際のNANDフラッシュビットエラーの発生率について、以下の文献が興味深いので紹介してみたいと思います。

この文献は、2008年に開催された国際学会の予稿で、著者はIntelとMicronの社員です。文献そのものはIEEEの会員資格を取得するか、あるいはIEEE提携している大学回線を使わないと参照できませんが、図表のうちのいくつかはPC Watchによる日本語での紹介記事から参照することができます。

要約は上記日本語記事を見てもらうのが早いのですが、以下では少し補足を入れておきます。

まず、図表中の4つの記号のうち、△はIMFTのNAND,□はスペックが"書き換え回数10,000回"となっている製品、○と◇は"書き換え回数5,000回"の製品スペックに書き換え回数制限が記されていない製品です(どっちがどっちかは明記されていません)。テスト内容は1万回の書き込みの後、約1年〜1年半の放置または1万回の読み込み、となっていますが、□のデバイスのみは時間切れのためか放置実験は行われていません。

"Raw Read Error Rate"(RBER)は"ECC使用前のビットエラー発生数÷読み込みビット数"を意味します。指数で表記されるとわかりにくいのですが、例えばRBER=1.0E-7*1なら1.25MBの読み込みあたり1ビット、RBER=1.0E-10なら1.25GBの読み込みあたり1ビットエラーが発生した、ということを表します。なお、RBERの分母は"読み込みビット数"であり、"NANDの総ビット数"ではないことに注意してください。

書き換え回数が増えるごとにRBERが上昇するのはまあ当然の結果として、むしろここで注目すべきはデータ保持エラーの方です。PC Watchの記事写真3(予稿のFigure8)を見てください。特に○のNANDは、なんと最終的に桁が3つも上昇しています。これは、約1年半の放置でエラービットが発生する頻度が1,000倍に上がったことを意味します。

一方、リードディスターブについては、1万回程度の読み込みではほとんど問題にならないようです。リードディスターブの効果は一回書き換えが行われればキャンセルされるので、実際の使用で問題になる可能性は限りなく低そうです。

残念ながら上記の日本語記事では省略されていますが、予稿の中にはエラー訂正の効果についての推定結果も掲載されています。そこで用いられていた指標は、"訂正不可能エラーが発生したセクタの割合"(Cumulative Fraction Sectors Failing=CFSF*2, 訂正不可能エラー数÷総セクタ数)と"エラー訂正を行った後のビットエラーレート"(Uncorrectable Read Error Rate=UBER,訂正不可能エラー数÷読み込みビット数)の2点です。

予稿のFigure.20は、縦軸に4ビットECCを用いた場合のCFSF、横軸に1セクタ当たりの読み込みビット数を示したものですが、かなり印象深い図になっています。その結果を箇条書きすると以下のような感じになります。

  • 1万回の書き込み終了時点で、◇のCFSFは1.0E-08(約50GBあたり1つ)程度、他3つは1.0E-14程度。
  • 放置後実験後は、○のCFSFは1.0E-04(約5MBあたり1つ)以上、◇は1.0E-05前後まで増えるのに対し、△(IFMT製)は1.0E-13程度にしか増えない。
  • HDDのUBERは1.0E-13〜1.0E-16程度。NANDフラッシュのUBERが1.0E-13を上回ったのは、○と◇の放置実験後のみ。一方△のUBERは、実験全期間を通して1.0E-16を遥かに下回る。

この結果から、NANDフラッシュの型番によってはデータ保持エラーが意外と大きな影響を及ぼすことが分かります。しかも、これらのNANDのプロセルルールは63nm〜72nmであり、現行の3xnm〜5xnm世代の製品に比べるとエラーレートはかなり低いはずです。すなわち、現行の製品データ保持エラーは上述の結果よりさらに悪化している可能性が高いのです。現行世代のNANDフラッシュエラーレートについても調べてみたのですが、今のところそれらのデータが載っている論文などは見つけられていません。もし該当するデータが載っている文書をご存じの方は、教えていただければ幸いです。

その他NANDフラッシュエラーレートに関する文書

SLC,MLC両タイプのNANDの書き換え回数とエラーレートの相関グラフが出ています。2種類のECCの効果などが出ています。残念ながら、使用したNANDの型番やプロセスルールに関する記述はありませんでした。

SLC,MLC両タイプのNANDの書き換え回数とエラーが発生したセクタ数の相関グラフと、各種ECCの効果が出ています。やはりNANDの型番やプロセスルールに関する記述はなく、また、実験に使用されたNANDがSLCで64セクタ、MLCで128セクタと少量です。



しつこいですがまだ続きます。

*1:これはプログラミングでよく使われる指数の書き方であり、1.0¥times10^{-7}と同じです

*2原稿の中ではCFSFという略称は出ていませんが、以下面倒なのでこれを使います。

asukaasuka 2010/05/04 00:57 最初の文献に出てくるdevice makerはSEC,TSB,IMFT,HYの4社かな?
個人的には世代が変わってどれだけエラーレートが上がるかに興味あります
4xで結構上がったのではないかとたいした根拠もなく思ったり
現在の3xは(4xと比較して)悪く無いのではないかと思っています
そして、2xはまだ先になるのではないかとも…
3xは6xのDPで4xはDP未使用というのが前提条件ですけど
2xは4xのDPになるので、大変そうだなと勝手に思っています

しかし、最近はdatasheetの公開しないのですね
TSBはMLC NANDに関して、controller内蔵の奴しか、表だって発表しないし…
生チップだとエラーレート高くて見栄えが悪いからcontroller内蔵で繕っているのかと勘ぐってみたりします

LansenLansen 2010/05/04 03:00 まあNANDを実際に作ってる会社はそれしかないですね…
どれがどれかが気になるところですね。
>しかし、最近は datasheetの公開しないのですね
ソースは2ちゃんですが、最近は実際にNANDを買わないとデータシートも貰えないっぽいです。
そこには寿命に関する情報も出ているらしいですが、勝手に公開しちゃだめでしょうね…

asukaasuka 2010/05/06 17:46 最近はNDA結ばないと何も出してくれないらしいですね
そんなわけで、まともにdatasheetを見るのはかなり難しい状況に…
昔はルネサスあたりも作っていた気がするのですが、いつのまにか会社自体が…
つてを辿れば、論文もIEEEあたりはなんとかなりそうですけど、興味本位だけで入手するにはちと閾が高いです
さすがにNANDを使うオモチャを作る技術は無いというか、
がんばってもSDあたりをSPIで叩くのが限界かなと思うのでdatasheetを引っ張るのも無理が…
半導体のロット買いは、その昔LEDでやった事が有るのですが、
個人のお遊びだと使い切れないというか金額的に厳しいものがありました
NANDの購入最小ロット数は結構大きくなりそうな事を考えると個人では手が出なさそうな雰囲気です

Partition offsetを考慮してのrecoveryに関しては、windows7のsetup discを使用して
offsetを調整したpartitionを作成した後に、TrueImage2010でrecoveryをして、
さらにDiskTestでMBRを修正する事でboot可能な状態になりました
DiskTestが良く分かっていないのが怖いのですが、ほぼ希望の操作が行える気がしています
次は、error cellのあぶり出しにUSB bootでいぢり倒せる環境が欲しい所なんですが何が良いのやら?
linuxのlive CDあたりで頑張るのが早いのでしょうかねぇ?

LansenLansen 2010/05/09 02:19 返信遅くてすみません。
>error cellのあぶり出しにUSB bootでいぢり倒せる環境が欲しい所なんですが何が良いのやら?
僕もあまり詳しくないのですが、やっぱりknoppixでブートして、何かいいソフトを走らせるのがいいのではないでしょうか。
そういえばHD TuneのError Scanって具体的にどんな操作してるんでしょうね?読み込んでるだけ?

cuttingedgecuttingedge 2010/05/09 13:36 >そういえばHD TuneのError Scanって具体的にどんな操作してるんでしょうね?読み込んでるだけ?

ディスクアクセスのログが取れるdiskmon.exe (v2.01)で、HD Tune のエラースキャンをみてみました。
残念ながらdiskmonには英語版以外のXPではread/writeを区別して捕捉できないバグがあるようなのですが、別のモニターツールと併用してみる限り、書き込みはやってない感じです。
スキャンを実行すると64KB (128セクタ)の読み出しが順次おこなわれるようです。クイックスキャンの場合は、表示される各ブロックの先頭の64KBのみが飛び飛びに読まれているようです。

diskmonはVista日本語版ではread/writeを正しくキャプチャできるという話ですので、Win7でもOKかも知れません。Win7用のSysinternals Suite 1.0 B 06.05.にパッケージされているdiskmon.exeのバージョンもv2.01でした。

以下、diskmon関連のリンク先です。
http://technet.microsoft.com/en-us/sysinternals/bb896646.aspx
http://forum.sysinternals.com/diskmon-for-winxp-dos-not-
working_topic5554_page1.html
http://www.windows7download.com/win7-sysinternals-suite/bcjtpmgx.html

LansenLansen 2010/05/10 00:06 どうもです。
確かにデータがあってもError Scanできてますし、読み込みだけみたいですね。
書き込みもしてくれるエラーチェックソフトってないもんでしょうか…
ちなみにdiskmonはWindows 7で正しく動作してるみたいです。これはなかなか興味深いですね。

asukaasuka 2010/05/10 16:25 HDtuneでerror scanをかけてみましたが、ECC failは見つかりませんでした
やはり、書き込みも行わないと見つけられない様です
通常のSATA接続が行えないSSDなのでUSB bootで動作するdiskdiag系のsoftを探すしかないかな…
diskmonはXP Pro英語版を使用しているせいなのか、問題なく動作していました
sysinternalsの出している奴は、結構便利な物多いですよね

cuttingedgecuttingedge 2010/05/11 21:08 Win7やXP Pro英語版ではちゃんと動作するみたいですね。XP Pro日本語版ではreadもすべてwriteとして捕捉されてしまいます。あとcsvで出力してくれると便利なんですが...

>書き込みもしてくれるエラーチェックソフト
まだ実際に試せてはいないのですが、HDDscan (http://hddscan.com/) のErase modeは使えないでしょうか。
サイトの記述によると、「In Erase mode the program prepares block of data field with special pattern and number of logical sector. The program sends the block of data to drive and drive writes the block (All data in the block on drive will be overwritten and gone forever!) The program measures operation time for each block. The program tests blocks one by one from minimum to maximum」とあります。

cuttingedgecuttingedge 2010/05/11 22:14 連続投稿すいません。
その辺にあったUSBメモリでHDDScan試してみました。
ちょっとバグらしきところはあるんですが、一応使えますね。結構、powerfulかも...

asukaasuka 2010/05/11 23:04 書き込みもしてくれるエラーチェックソフトの代用として、DBANを試してみている最中です
HDD消去ソフトですが、消去時の全てのpassの間にverifyを入れる事が出来る様なので代用になるかなと
最初は、HDAT2で試したのですが、なぜか書き込みを伴うTestを行うとerrorになるので諦めました

asukaasuka 2010/05/12 23:17 DVANでDoD shortを選択して、VerifyをAll Passにして実行してみたのですが、ECC errorは検出されなかったのでした
どうやら書き換え不良ではなく、データ保持不良によりECC errorが発生していた様です

話は変わり、JSMonitorの使用量表示が大きく感じる為、Process Monitorを使用して原因を調べてみました
その結果、Systemが定期的にレジストリの以下等にSetValueを行うのが原因の様で…
HKEY_LOCAL_MACHINE\HARDWARE\DEVICEMAP\Scsi\Scsi Port 0
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Class\{4D36E96A-E325-11CE-BFC1-08002BE10318}
これ動作を止めたいのですが、何が原因なのかさっぱり判らず…

asukaasuka 2010/05/13 09:14 連投ごめんなさい
使用量表示が大きく感じる件の原因ですが、Power Options PropertiesでTurn off hard disksを使用して、
HDDがspindownしている時にJSMonitorのpollingが行われると、最終的にregistryへの書き込みが行われている様な感じです。
どちらかを使用しなければ、registryへの書き込みは発生はしない様です。
そんな訳で、polling間隔を24時間にしようと86400を入れたら桁あふれを起こしたらしく悲しい事になりました。
どうやら最大値は65535の様ですね。
HDDを載せていないPCなら、urn off hard disksを使わないだけなのですが…
次期Versionではもうちっと大きな値を入れられるようにしてもらえたらと思います。

それとは別に、VMware Player 3.0は、VMware Workstation 6.5と比較して、
VMware関連のServiceを止めても、何かしらの書き込みをしている気がします。
Process Monitorに引っかからないので、気のせいかもしれないのですが…
Win7のサポートは嬉しいのですが、USB回りもちょっと怪しいのでupgradeするべきか悩みどころ。

元半導体設計屋元半導体設計屋 2010/05/15 04:02 本題からずれるかもしれません。ご容赦ください。

私が若かりし頃(20年くらい前)、論理ゲートは1or0の世界でしたが、設計はアナログ(過渡)的な特性を考慮しないと作れませんでした。
いまやその論理ゲートすら統計学の世界に突入です。
ましてやMLCなんて、その極みです。
メーカーが何も考えずデータシートを公表しても、それは統計学的な意味しか持ち得ないのです。それじゃ話にならないですよね。

そういう代物を如何に1or0の世界に引っ張り上げるか。
皆さんのような若い世代が活躍して画期的なアイデアを発想できればと期待しています。
どんどん論議して欲しいですね。
かく言う私は頭も硬くなり、設計の最前線から退いて客商売の案件ばかりですw

nitrogasnitrogas 2010/05/18 00:23 懲りずにUSBメモリのパーティション・オフセットの話
バッファローの 4chip同時アクセス SLCタイプ
http://buffalo.jp/products/catalog/flash/ruf2-rvs-sv/

こいつは、結構、大きめの offsetとってます。
  Partition Starting Offset  4,194,304 bytes( 8,192sector)でした。

FATフォーマットの BPBとか判りやすく表示してくれるアプリって
何かないでしょうか、、、?

LansenLansen 2010/05/24 03:01 現実の生活が大炎上状態で、Blogを長期間放置してしまいました。
皆様申し訳ございません。

>asukaさん
>どうやら最大値は65535の様ですね。
その通りです。そこまで大きな数値にする人はいないと思ってたもので…
アップデートは手動操作時のみ、みたいなオプションを作った方がいいかもですね。

>元半導体設計屋さん
コメントありがとうございます。
統計学的な考え方はNANDフラッシュの寿命を考える上では重要ですね。
ある一定回数の書き換え(1万回とか)を越えた瞬間に何かが起こる訳ではなく、エラーレートが徐々に増加していくだけです。あとはその"徐々に"が具体的にどれくらいかが問題なんですが、外部からそれを推定するのは非常に難しいですね…

>nitrogasさん
SLCで8MBも隠れているのは何かもったいないですね。合理的な理由があるんでしょうか…
>FATフォーマットの BPBとか判りやすく表示してくれるアプリって
うーん、msinfo32を実行して、コンポーネント->記憶域->ディスク->パーティション開始オフセット ぐらいしか知らないです…

asukaasuka 2010/05/25 11:35 BPBを何をもって判りやすいと言うのかちょっと定義が曖昧ですけど、
私の場合、SupportToolsに含まれる、dskprobeである程度の事はやってしまいますね
2003のSupportToolsに含まれるdskprobe2なら、FAT32やGPTにも対応しているっぽいのですが、変な癖が有るような気が…
ある程度の領域を参照しなければならない場合は、ddで該当領域のimageを作ってから、Stirlingで眺めます