最適なパフォーマンスを実現するフラッシュコントローラのハードウェアおよびソフトウェア設計

一般:

この記事では、高速データ転送をサポートするNAND FLASHコントローラのハードウェアとソフトウェアの最適化について説明します。



データ転送のモード

データ転送モードはアプリケーションによって異なり、多くの場合システム全体のスループットを左右する重要な要素です。

適切に設計された産業用フラッシュメモリーデバイスは、各モードで転送速度を最適化することによって全体的により高い性能を持つことになります。

読み出しと書き込みの両方の転送モードは、シーケンシャルまたはランダムのいずれかになります。 おそらく、書き込み速度、特にランダム書き込み速度が最も扱いにくいと推測することができます。これは、NAND FLASH自体の性質に起因します。



NAND FLASHの基本アーキテクチャ

NANDフラッシュは、以下のように配置されたセルとして構成されます。

セクタ→ページ→ブロック/プレーン

ブロックはフラッシュの中で最大の要素です。ブロックは複数のページで構成されます。ページは、複数のセクタとオーバーヘッドバイトで構成されます。オーバーヘッド領域のサイズは、フラッシュの種類によって異なります。エラー訂正データとチェックサムを保持するのに十分な領域が含まれています。セクタは、512バイト+オーバーヘッドバイトで構成されます。オーバヘッドサイズは、フラッシュで最大であり、小規模プロセスMLCやTLCなどでは多くの訂正が必要とされます。

ブロックは2つの面に分割されます。プレーン0の奇数ブロックはプレーン1の偶数ブロックである。 これには理由があります。 Flashは、各プレーンのブロックに対する同時操作をサポートしています。これは2プレーン操作と呼ばれ、この機能を使用するための一連の特別なコマンドがあります。 例えば、デバイスの各平面内のブロックは、同時に消去することができます。 ほぼすべてのコマンドと同じです。


基本NANDフラッシュ動作

NANDフラッシュはページ・レベルで書き込まれ、ブロック・レベルでしか消去できません。ページは、最低から最高の順に書かなければなりません。 SLCフラッシュ以外のすべてのページでは、ページは1回だけ書き込むことができます。



論理から物理的なフラッシュへのマッ​​ピングスキーム - Flash Translation Layer

フラッシュは、論理データを保存する必要がある物理メディアです。ストレージの基本単位は、セクタまたはLBA(論理ブロックアドレス)です。これは、フラッシュ内の物理セクタにマップする必要があります。これは、FTLのタスクの1つです。

では、どうやってこれを行うことができますか?マッピングには2つの基本的なスキームがあります。 1つはブロックベースマッピング(BBM)と呼ばれ、もう1つはページベースマッピング(PBM)と呼ばれます。 2つの方式のうち、ブロックベースのマッピングが実装が最も簡単です。



BBM(ブロックベースマッピング)

これはランダムデータ書き込みのパフォーマンスが低く、最も一般的です。

これは、ページを新しいデータで上書きする必要がある場合、古いデータを新しいデータとマージし、その結果を新たに消去したブロックに書き込む必要があるからです。現在のブロックは消去され、サービスに戻されます。記憶装置がうまく使用されるように転送速度がどのように低下​​するかを想像することができます。ランダムな書き込み速度はBBMの重要なポイントではありません。シーケンシャル書き込み速度は一般的に良好です。逐次読み取り速度も良好です。 BBMの良い点は、バックグラウンドで実行されたとしても、定期的なオーバーヘッドを招く可能性のあるガベージコレクションが不要なことです。

BBMのマッピングテーブルはPBMのマッピングテーブルよりもずっと小さくなっています。これは、マッピングが基本的にブロック番号とページオフセットであるためです。

PBM(ページベースマッピング)

このマッピング手法では、ブロック消去がはるかに少なくなります。論理データはブロック内のページに順次書き込まれます。ページを上書きする必要がある場合、新しいデータはすでに空いているページに書き込まれます。古いデータページはテーブルにマップされます。最小限のデータ移動とブロック消去があるので、ランダム書き込みの方がはるかに少なくなります。ランダム書き込みパフォーマンスがはるかに優れています。欠点は、フラッシュブロックが断片化し、ある時点で新しい使用のために古いデータのスポットを回復するためにクリーンアップする必要があることです。 (ガベージコレクション)。これには時間がかかることがあり、パフォーマンスが低下する周期的なオーバーヘッドが存在します。読み取りパフォーマンスは、特にガベージコレクションの前に苦しむ可能性があります。これは、セクタ/ページ位置の断片化のためです。過去のある時点でシーケンシャルに書き込まれた可能性のあるセクタも検索するために、マッピングテーブルへのアクセスが増加します。

Write Amplification Factor(WAF)の現象は、両方のマッピング方式で作用します。 BBMは、はるかに高いWAFを持つ2のうち、はるかに最悪です。 WAFは、フラッシュとホストの書き込みの比として定義されます。 1.0に近づくWAFが目標です。

マッピング・スキームとFTLは、ファームウェアの一部です。したがって、スキームの選択は柔軟性があり、最終的なパフォーマンスを決定する上で重要です。



高性能設計のためのフラッシュコントローラのHWおよびFWの考慮事項

私たちは、最終的なパフォーマンスへのマッピングスキームの重要な選択がどれほど重要かを見てきました。しかし、彼はパフォーマンスを決める一面にすぎません。

コントローラ、ファームウェアは組み込みシステムなので、それぞれを真空で設計することはできません。統合とトレードオフがあります。コストとパフォーマンスの関係もあります。

何年もの設計経験から学んだシンプルなルールがあります。 HWで実行できることは、FWで実行されるよりも優れたパフォーマンスになります。一例として、エラー検出および訂正(ECC)のコアは、最小限のFWサポートでHWに実装する必要があります。

実際、一部の機能ではHWの実装が必要です。そのような機能の1つがデータ暗号化である。今日のコントローラでは必要であり、FWのみの実装にはあまりにも多くのオーバーヘッドが必要です。



フラッシュバスに関する考慮事項

これは、設計時に非常に重要なHWの考慮事項です。フラッシュデバイスとのすべての通信は、このバス上で行われます。考慮する項目に影響を与える重要なパフォーマンスがあります。一度HWにコミットすると、変更するのに非常にコストがかかります。だから、これを正しくするには時間を費やすことが重要です。これは、HW / FW統合のトレードオフが行われる1つの領域です。

シングルまたはマルチチャネルFLASHバス

1つ以上のフラッシュバスを使用するとパフォーマンスが向上することは直感的です。これは、コストと消費電力を犠牲にしています。複数のFLASHデバイスをサポートする複数のフラッシュバスを持つことで、HWインターリーブが可能になります。これにより、各チャンネルのFlashページの同時処理が可能になります。チャンネルが多いほど速くなります。これにより、CPUの負担も軽減され、パフォーマンスがさらに向上します。



インターリーブ

各チャネル内では、パフォーマンスがさらに向上します。これには、各チャネル内の複数のフラッシュデバイスでのページアクセスとブロック消去が含まれます。電力および他の制限のために、通常、チャネル内のフラッシュデバイスはペアでアクセスされる。これは主にFWの実装です。

各フラッシュデバイス内で、プレーン間のインタリーブは、2プレーンコマンドセットを使用して可能です。これはFW関数であり、常に使用する必要があります。



その他のパフォーマンスの向上

コントローラHWを設計するときは、これらの項目を慎重に検討することが重要です。

セクタバッファ - フラッシュにコミットするまで、各フラッシュバスチャネルの受信データを保持します。これらの揮発性RAMバッファーの大きさには、ここではトレードオフがあります。電力が失われている間、大きすぎるとデータ損失の可能性が過大になります。小さすぎるとパフォーマンスが低下します。

ダイレクトフラッシュアクセス - セクタバッファからフラッシュデバイスへのダイレクトパスを提供し、CPUの負荷を軽減します。慎重に使用すると、パフォーマンスを向上させる強力なツールになります。

ホストインターフェイス - 適切に設計され、通常はHWステートマシンとして実装されるこのインターフェイスは、着信コマンドを評価し、ダイレクトメモリアクセスを使用して着信データをセクタバッファとの間で転送します。割込みは、一般に、処理が必要なときにCPUに信号を送るために使用されます。インタフェースは、いくつかの機能的変更が可能なようにレジスタを介して構成可能でなければならない。



結論

コントローラHWとFWは、高性能を確保するために注意深く協調設計する必要があります。実用的なほど多くのハードウェアベースの機能を使用することが望まれる。これは、FWのトレードオフと一緒になります。複数フラッシュバスインターリーブ、イントラチャネルインターリーブ、およびイントラデバイスインターリーブ(2プレーンコマンドを使用)の使用はすべて、コントローラおよび記憶装置の最終性能を向上させる。