ブログ:
フラッシュストレージに関する必須知識

2017年3月1日水曜日
Flash Storage

Flash Storageフラッシュストレージは、サポートチャネルでよく取り上げられるトピックの1つです。Toradexは、ストレージの信頼性を可能な限り高めるために多くのリソースを投じています。しかしながら、ストレージデバイスの基礎をある程度理解しておくのは重要なことです。知っておくべき事項として最も重要なのは、ストレージが摩耗している場合、内蔵ストレージデバイスに大量の書き込みを行うとストレージデバイスが破損する可能性がある、ということです。本投稿では、フラッシュストレージの潜在的な問題の基礎について概要を説明します。まずは手短に技術の概要を見ていきましょう。

フラッシュの種類:RawフラッシュとManagedフラッシュ

現在、ToradexのコンピューターモジュールにはNOR、NANDとeMMCフラッシュが搭載されています。

NORとNANDは、rawストレージデバイスです。NANDとNORの主な違いは、NORではランダムアクセスが可能で、誤り訂正の必要がなく、ビット当たりのコストが高いことです。一方のNANDは、ページ単位でしか読み取ることができず、ページ内には誤ったビットがある可能性があり、これらを誤り訂正のメカニズムで訂正する必要があります。

eMMCフラッシュは、NANDフラッシュ利用時に必要な処理の大部分を実行する内蔵コントローラーとNANDメモリーを組み合わせたものです。eMMCは、マネージドNANDとも呼ばれます。一方、NANDフラッシュとNORフラッシュでは、OSとデバイスドライバーがこれらの問題に対処しなければなりません。本ブログ投稿では、後ほどさまざまな種類の課題について取り上げます。

Toradexのコンピューターモジュールで利用されるフラッシュの種類について、以下に簡単にまとめました。

ストレージの種類
Toradexコンピューターモジュール
NOR Colibri PXA270
NAND Colibri PXA310, PXA320, VF50, VF61, iMX7, T20
EMMC Colibri iMX6およびT30、Apalis iMX6、T30およびTK1
NANDフラッシュの進化:SLCからMLCへ

NANDフラッシュのビット密度は時間の経過とともに進化してきました。初のNANDデバイスはシングルレベルセル(Single Level Cell、SLC)フラッシュでした。これは、フラッシュセル1つに1ビットが格納されるということです。マルチレベルセル(Multi Level Cell、MLC)では、セル当たり2つ以上のビットを格納でき、そのためビット密度が上がります。すばらしいことのように聞こえますが、MLCには欠点があります。MLC NANDは、ビットエラーの確率が高く、耐久性が低いのです。すべてのeMMCはMLC NANDを使用します。eMMCデバイスの中には、ストレージの一部またはすべてを疑似SLC(PSLC)モードに切り替えることができるものもあります。この場合、ストレージ容量は減りますが、デバイスの耐久性は高まります。

以下は、SLCとMLCの簡単な比較表です。

SLC MLC
セル当たりのビット数 1 2またはそれ以上(TLC)
消去/プログラムサイクル数 10万 3千から1万5千
最低ECC、512バイト当たり
訂正可能ビット数、チップに依存
8ビット 12ビット
バイト当たりのコスト
耐久性消去サイクル数の限界

先述のとおり、Toradexデバイスに搭載されているフラッシュ技術に関して最も重要な知識の1つに、フラッシュへの読み書き回数には限界がある、ということがあります。フラッシュデバイスに大量のデータを書き込むのはあまりよいことではありません。上の表からもわかるように、データが損壊または損失する可能性が出てくるまでの消去サイクルの回数は、フラッシュの種類によって1万から10万ほどです。「消去サイクル」という用語は少しもどかしいものです。フラッシュストレージの欠点として、一度消去せずに書き換えることができない、ということがあります。さらにこの操作は、ビット単位では実行できず、消去ブロックというより大きな単位で行われます。最悪の場合、たった1つのバイトを書きたいだけの場合でも、全ブロックを消してから書き込まなければならないことになります。消去ブロックのサイズは最大512KBです。実際に行いたい量よりも大量の消去と書き込みが行われるこの作用のことは書き込みの増幅と呼ばれます。そのほか、フラッシュのファイルシステムによって必要とされる書き込み操作もあるかもしれません。組み込みデバイスのフラッシュデバイスの寿命を推定する際には、これも考慮する必要があります。

フラッシュの寿命を延ばす

次のセクションではNANDまたはeMMCフラッシュの寿命を向上させる方法について説明します。心配は無用です。これらはすべて、Toradex製品で実装されている内容ですので、お客様が実施しなければならないことはありません。

摩耗の防止:ウェアレベリング

フラッシュに対する消去と書き込みの回数が限られていて、定期的に少量のデータを更新するだけの場合を仮定してみましょう。このデータを常に同じフラッシュセルに書き込んでいては、MLCフラッシュには最大1万5千回しか書き込むことができません。ほかのフラッシュセルには手をつけていないのに、書き込みを続けていたセルが摩耗したためにデータが失われ、フラッシュが破損する可能性があります。そこで、賢いフラッシュドライバーは、ウェアレベリングを活用します。この技術により、すべてのフラッシュセルの摩耗が同程度になり、同じセルばかりが利用されるのを防ぎます。

誤りの検出と訂正: 誤り訂正符号

NANDフラッシュデバイスでは、1つのビットの切り替わりが始まって、データが破損する可能性があります。切り替わってしまうのは、摩耗が原因の場合もあれば、ほかの要因による場合もあります。このため、データは誤り訂正符号(ECC)で守られています。これにより、まず破損したデータを検出し、その後データを訂正できるようになります。フラッシュコントローラーとNAND / eMMCフラッシュ自体によって、大概の誤りは検出されて訂正されます。

不良ブロックの処理

ECCで誤りのあるブロックを発見できたら、それ以降その不良ブロックを使用しないようにすることも可能です。ECCと訂正可能なビット数によって、超過した場合に追加措置を講じることになる、エラーの最大許容数としてのしきい値が設定されます。いったんこのしきい値に達すると、訂正されたデータはデバイスの正常なブロックに移動されます。それ以前の位置は、不良ブロックとしてマークされます。不良ブロックは破損している可能性があるため、それ以降使用されなくなります。

電源断への耐性

フラッシュへの書き込み中に突然電源が絶たれた場合、デバイスはどうなるのでしょうか?組み込みデバイスで期待されるのは、デバイスは正常に起動し、データの破損が発生しないことです。この期待に応えるには、すべてのソフトウェアレイヤーと関連するハードウェアパーツがそうした状況に適切に対応する必要があります。次のセクションでは、この目標を達成するために取られている措置について説明します。

Toradex SoMにおける実装の詳細

上で見てきたように、ストレージの種類によって適切な設計を行うことが重要です。Toradex BSPにおける現行の設計について詳しく見ていきましょう。

NANDベースのデバイス

次の図は、NANDベースのデバイスにおけるWinCEとLinux BSPの設計概要を示しています。

NAND-based devices

ストレージデバイス:NAND採用のToradexデバイスは、すべてSLC NANDを使用しています。

ハードウェアドライバー:ハードウェアドライバーは、NANDデバイスと上のレイヤーとの間の全般的なインターフェースを提供します。また、このレイヤーは、誤りの検出と訂正も行います。Linuxでは、すべての最新イメージでMTDが採用されています。WinCEでは、Microsoft Flash PDDレイヤーを使用しています。例外もいくつかあり、例えばColibri T20では、WinCEでデバイスに特化されたPDDレイヤーが採用されています。

ウェアレベリングと不良ブロック管理:タイトルのとおり、このレイヤーはウェアレベリングと不良ブロック管理を行います。この操作は、LinuxではUBIサブシステムが、WinCEではMicrosoft MDDレイヤーが実行しています。繰り返しになりますが、Colibri T20では、Microsoft Flash MDDの代わりにデバイスに特化されたレイヤーが採用されています。

ファイルシステム:ファイルシステムは、パーティションやパーティションに格納されたファイルを管理する部分です。ユーザーはファイルAPIを使用してファイルシステムを利用します(LinuxではVFSレイヤーを経由)。現在、LinuxではUBI FSを、WinCEではTransaction Savee exFAT(TexFAT)を使用しています。双方とも電源断に対する耐性があります。その下のレイヤーも、不可分操作に対応しており電源断への耐性があります。

eMMCベースのデバイス

次の表は、eMMCフラッシュデバイス搭載のToradexモジュールの設計を示しています。

eMMC-based devices

ストレージデバイス:Raw NANDと比較して、必要な処理の大部分はeMMC自体が実行します。高位のレイヤーは、ウェアレベリング、誤り訂正や不良ブロック管理を行う必要がありません。/p>

ハードウェアドライバー:これはMMCコントローラーとファイルシステム間のインターフェースです。

ファイルシステム:WinCE稼働のNANDベースのデバイスでは、TextFATを使用しています。Linuxイメージではext3ファイルシステムを利用しています。先述のとおり、双方とも電源断に対する耐性があります。

結論と推奨事項

Toradexは、安定性と耐久性が高いフラッシュストレージを提供するため最大限の対策を行っています。しかしながら、アプリケーション開発の際にはフラッシュの利用について常に注意を払う必要があります。

  • フラッシュデバイスへの書き込みアクセスを削減
  • 最終製品における書き込み動作を理解
  • その書き込み動作において、要求される製品寿命が実現可能なことを確認
  • ストレステストと長期テストを実施
  • 全容量を利用しなければ、ウェアレベリングのアルゴリズムの効率が大幅に向上する

さらに詳しい情報が必要な場合、またはToradexのデフォルト設計を向上できるとお考えの場合は、Toradexのエンジニアにお問い合わせください。

リファレンス

また、組み込みLinuxシステムにおけるフラッシュメモリー:

記者: Samuel Bissig, Senior Development Engineer, Toradex AG

コメントを投稿

Please login to leave a comment!
Have a Question?