NOR vs NAND: So You Think You Know the Music?

組込みストレージ テクノロジーに関する洞察を求めてわずかでも時間を費やしたことがある人なら、このことを知っているでしょう:この特定のトピックに関するインターネットのサブスペースは、NOR および NAND フラッシュ テクノロジーの比較で溢れています。 中には、非常によく書かれた、純粋に啓発的な記事もあります。 しかし、あまりにも多くの場合、当たり障りのない、乾いた、脈絡のないコンテンツの膨大な蓄積は、あなたをもっと欲しくさせます。 もしかしたら、これ以上何もないということなのでしょうか。 もしや、これ以上知るべきことはないのでしょうか?

フラッシュ ストレージに関する紹介シリーズ (パート 1 とパート 2 を参照) の 3 回目の記事は、「NOR 対 NAND」という古典的な問題の私たちなりのバージョンです。 このバージョンでは、これらの広く普及しているストレージ技術に対する理解を深め、より適切な設計上の決定を下すのに役立つことを期待しています。 とはいえ、この記事は教訓的な、自己完結型の入門書ではありません。 むしろ、通常の入門書を補完するものであり、NORおよびNANDフラッシュ技術の無視されがちな側面をカバーするものであると私たちは考えています。 NORやNANDフラッシュ技術について全く知らない方は、まずWikipediaの同じトピックに関する記事など、より中立的な資料に目を通すとよいでしょう。 一方、これらのテクノロジーについてすでに幅広い知識をお持ちの方は、この記事で有用な (おそらく驚くべき) 情報を見つけられるかもしれません。

Beyond Numbers

Table 1 は、さまざまなパフォーマンス指標に基づく NOR および NAND フラッシュ テクノロジーを並べて比較したものです。 これらの数値は実際のデバイスによって大きく異なる可能性がありますが、妥当なものであり、貴重な参考資料として役立ちます。

1バイト

NOR NAND
Write Throughput 1 MB/s 10 MB/s
Read Throughput 40 MB/s 30 MB/s
Erase Throughput 0.1 MB/s 300 MB/s
イレーズ書き込みスループット 100 KB/s 10 MB/s
読み取り粒度 バイト ページ(4KiB典型)
ライト粒度 バイト(標準) ページ(4KiB標準)
消去粒度 ブロック(64 1545>Block (256 KiB typical)
Write Energy Consumption 1uJ/byte 10nJ/byte
読み出し消費電力 1nJ/バイト
消去消費電力 600nJ/バイト 0.5nJ/バイト 1nJ/バイト 1nJ/ バイト 1バイト 1nJ/ バイト 0.2nJ/バイト

表1. もっともらしい NOR および NAND フラッシュの特性

しかし、それらが有用であるのと同様に、適切な解釈のない数値は、まったく誤解を招くとまではいかないまでも、無意味なものです。 生のパフォーマンス数値は、(少なくとも表面的には)簡単に述べて理解できるので、良いマーケティングになりますが、アプリケーション設計の観点からはあまり適切な情報を持ちません。 表 1 は、NAND の書き込みが NOR よりもはるかに高速であることを示唆しています。 実際、このような主張はよく見受けられます。 確かに、その通りなのですが。 しかし、まったくもって還元的であり、誤った設計判断への道を開くものでもあるのです。 もう少し詳しく見てみましょう。

NOR フラッシュでは、バイト単位の書き込みアクセスが可能です。 一方、NAND は、書き込み粒度がかなり粗いです。 NAND フラッシュでは、データはページ単位でしか書き込めません。NAND SLC では通常一度に 4 KiB (NAND MLC では 8 KiB 以上) を書き込めます。 小さな書き込みアクセス(例えば512バイト)の場合、ページ全体をRAMにロードして変更し、書き戻す必要があります。 その結果、実際に書き換えたデータよりも多くのデータが書き込まれることになる。 この現象は、一般に書き込み増幅と呼ばれている。 この例では、書き込み増幅率は8(4KiBページ/512バイトのアクセス)です。 このような小さなアクセスに支配されたワークロードを考えると、実効的な書き込みスループットは8倍も低下することになる。 これはかなり大きい。 しかし、まだあります。

データを書き込む前に、ファイル システム (またはデータベース) はまずそのデータを見つけなければなりません。 ルックアップ プロセスは、他の要因の中でも、ファイル システムと利用可能なキャッシュの量に依存して、効率的であったりそうでなかったりします。 それでも、各書き込みアクセスには、通常、対応する読み取りアクセスのシェアが伴います。 NOR フラッシュでは、読み出しアクセスは非常に高速です。 ほぼゼロのレイテンシと非常に高いスループットが特徴です。 最も重要なことは、読み出しアクセスがバイト・レベルで実行されることです。 ファイル システムの内部構造は小さく散在したデータで構成される傾向があるため、これはデータ検索プロセスにとって特に有益です。 また、書き込みアクセスと同様に、ページ レベルで実行されます。 小さなアクセスでは、どのみちページ全体を読み込む必要があるため、ある程度の無駄が生じます。 表 1 を見てもすぐにはわからないことですが、すべてをまとめると、NOR および NAND テクノロジーのそれぞれのネット書き込み性能 (つまり、読み取り/書き込みの増幅およびルックアップ オーバーヘッドを考慮) は、生の性能数値が最初に示すほど大きく異なるわけではないことがわかります。 最も重要なことは、データ セット全体にわたるアクセス サイズや分布など、アプリケーションのアクセス パターンを考慮に入れなければ、徹底したパフォーマンス評価を行うことができないことを明確にしたことです。 たしかに、NANDフラッシュよりもNORフラッシュのほうが、コードストレージとしてよく使われています。 その理由は大きく2つあります。 1つ目は、バイト単位のアクセス粒度によってインプレースでのコード実行が可能になることで、小規模な組み込みシステムにはまぎれもない武器となることです。 2 つ目は、小~中規模のファームウェア サイズ (たとえば 64MBits 未満) では、利用可能な最小の NAND デバイスが著しく高価なため、NOR の方が経済的に合理的であるということです。 それには十分な理由があります。 読み取りを多用するアプリケーションの場合、NOR は NAND よりもかなり高いスループットを提供します。 書き込みの多いアプリケーションでも、NOR は合理的な選択肢となりえます。 バイトレベルのアクセスと高い読み取りスループットにより、NORは特に小さなランダム書き込みアクセスが多い作業負荷に適しています。 正味の書き込み性能は、NANDフラッシュで得られる性能に近づく(時にはそれを超える)ところまで来ています。 これは、特に小規模なデータ セットに関連しており、経済的な議論を重ねると、間違いなく NOR フラッシュに有利なバランスに傾きます。 しかし、アプリケーション設計の観点から NOR および NAND フラッシュ テクノロジーがどのように異なるか、また、より良い設計上の決定を行うために生のパフォーマンス数値をどのように解釈できるかを示すことができたと思います。

コメントを残す

メールアドレスが公開されることはありません。