NANDフラッシュ(SSDやSDカードなど)に使われている技術。

遂にMicroSDメモリーカードに国内でも1TBを越えた製品が登場し、爪の先ほどのカードにノートパソコンのハードディスクやSSD並の容量が保存できるようになった。この5年ほどでフラッシュメモリーの容量は一時期の停滞を超えて著し早さで大容量化を極めたが、その技術はあまり知られていない。

今回はそれについて書こうと思う。


<NANDフラッシュの容量は微細化のお陰とは限らない>

ちなみに、SSDやSDカードの容量増大は半導体プロセスノードの微細化が進んでいるからという考えを持つ人がいるが、実は近年の大容量化は、それによるものも多少はあるのだが、それよりも別の技術の方が大容量化に寄与している。何故、別の技術なのかというと、Cell(セル)と呼ばれるデータを記録する場所の小型化が限界を迎えたからだ。

そのため、微細化はCell以外の回路部分で行われており、Cell自体の小型化は思った程進んでいない。これは、フラッシュメモリーのデータ記録の方法に答えがある。フラッシュメモリのデータは電荷と呼ばれる電気の一種を記録ビットとしてセルに格納(捕獲)することで成立する。電荷の状態の差でデジタルデータ(二進数)の0や1を識別するわけだ。

しかし、電荷を捕獲した状態で維持するには、電荷が逃げ出さないように周りを囲う必要がある。
下の図を見て欲しい。微細化(小型化)が出来ない理由の簡単な図である。本当は注入する場所は浮遊ゲートと呼ばれるゲート(絶縁体の膜のようなもの)があり、そこから押し込むようなものだ。簡単に言えば入り口がゴムでピンと張ったゴムで真ん中に切れ込みがあるぐらいに思えば良い。
そこに電荷を後ろからせーので数人が押し込むと、切れ込みが開いて電荷は入っていく。1度入ると出口は閉じるので外から開かないと出られないと思えば良い。

図では黒の四角で囲っているのがセルとして、雷マークで電荷を注入していることにしている。

電荷が入るスペースは、絶縁体の膜で囲われている。だから、出られないのだが……セルまで微細化するとどうなるか?

画像



セルも小型化し微細化すると上図のようにセルの周りの絶縁壁も薄くなる。その上、部屋の広さも狭くなるのに、電荷の力は同じだ。すると、よほど丈夫な絶縁膜や絶縁壁がなければ、電荷の力だけで部屋が壊れてしまう。すると、捕獲していた電荷は逃げていく。

実はこの問題が、32-22nm以下で深刻になり、実は微細化による大容量化は一時期全く進まなくなった。2010年代の初頭から2015年頃迄の話だ。その少し前頃から大容量化に使われたのは、マルチレベルセルと呼ばれる電荷そのものの量(電荷素量/電気素量)を変えて、一つのセルに記録出来るビット数を増やす手法だった。

これは後ほど詳しく説明するが、これが一つの要素として容量増加を支えていたわけだ。ただ、それも伸び悩んでいた。

では、現在まで、凄まじい勢いで容量が増えてきたのはどういうことかというと、それは貫通ビアと呼ばれる製造方法が量産レベルで製品化されたためだ今では当たり前の3D(立体) NANDと呼ばれる技術。3D半導体である。
3D半導体とは、簡単に言えば同じまたは異なる半導体回路を積層する手法だ。もっともっと簡単に言うと、マンションのように重ねていくことを指す。

そんなの簡単だろうと思われがちだが、これはとても難しい。何故かというと、パズルと立体パズルの違いと言えば分かりやすいだろう。パズルなら、ただピースが合うように一面に並べるだけだ。実はこれならロボットでも出来るかもしれない。

しかし立体ならどうかというと、平面に並べるのとは違って、上下左右奥行きの4方向場合によっては立体斜め方向で繋げていかなければならない。それをウィルスの核の大きさぐらいのサイズで制御し、重ねていくと言えば、その難しさが分かるだろう。これには他にも問題があり、重ねる際に間の絶縁層の厚さを上手く調整しないと熱が籠もったり、下の層にある回路が上の層に電気的な干渉を起こすと言った問題があった。即ち、欠陥率下げ、歩留まりを上げるための技術を培うのに苦労したのだ。

貫通ビアという技術は、半導体回路(電極)そのものを、裏と表または層と層の間で通す技術である。一般に存在したスルーホール(多層の層の上から一番下まで穴を貫通させること)と違って、一層毎に異なる場所で穴を通し、それを他の電極回路と同じ電流、電圧をほぼ維持してつなぎ合わせることが出来る技術である。半導体において、画期的な技術革新となった。そして、NANDでは積層数が90層を超える程にまでなり、それが1TBのマイクロSDカードを生み出す原動力の一つとなった。


<Multi Level Cellとおかしな矛盾>

但し上記はあくまで、原動力の一つに過ぎない。上記にチラッと述べているがもう一つ容量を増やした要素がある。
それが、マルチレベルセル技術だった。端的に言えば、1bitしか入らないはずのCell(セル)に2bit入れて容量2倍にするというものだ。これが、3bitにするとTLC(Triple/3倍)、4bitにするとQLC(Quad/4倍)になる。

ちなみに、そういうものと思っている人は気が付かないが、実はこのMLCの命名だけおかしい。

マルチ(Multi)というのは他方面とか複数を意味するものである。これだけ、2倍を意味するDualやDoubleを使わなかったのだ。NANDフラッシュではこの後にTLCなどが登場する見込みを想定していなかった、という実に初歩的なミスである。
元々Single Levelに対してこれしか無かったからMLCになったのである。

では、何故マルチを選んだのか?説明出来るだろうか?
2bitの記録レベルはL0とL1という2値から、L0、L1、L2、L3と4つに分かれていたというのが理由である。レベルが0から3までマルチにあるので、マルチレベルセルだった訳だ。

あらっTLCはとか思った人は、通だろう。そう、これは考えた人がそう思っているかは分からないが、説明する側には痛いところだ。

そもそも、MLCが開発された当初、TLCは技術的に実用性に乏しく困難で(品質が低く)当初開発される見込みがないと見られていた。即ち、MLCが最初で最後のマルチ化にするつもりだったわけだ。

しかし、簡単に容量が増やせるという欲望に負けて、製品化しちゃったわけだ。だから、苦肉の策として、Triple Level Cellと名称を付けた。現実は、Muliti Levelの中でTriple bit Cellをわざわざ呼び名を変化させるのも何だしぐらいのものだと思われる。どうせ消費者はここまで気が付かないしTriple Levelになっちゃったのかもしれない。
こういうちっちゃい部分の統一感がないと気持ち悪い私としては、あり得ない話だが……(お陰で記事が書けているので満足だ。)

とにかく、Triple Levelになった。尚、おかしい理由はMulti Level Cellの段階で、0意外に3つのレベルがあるので、それはT……(分かり難くなるので皆まで言わない)になるわけだで、その例で考えるとTLCはMLCと同じ土俵で考えると、Tripleという名称では無く、hepta(7)になる。

MLCをDLC(DualまたはDouble)に後から変更するか、MLCの中のDbCやTbCやQbCの方が本当は分かり易かったのかも知れない。まあ、通なら知っておくと良いかも知れない。

尚ここでは、カナで書いたマルチレベルセルについてはMLC/TLC/QLC全てを指すこととする。
その代わり、いわゆる記録2ビットのMLCはMLC(2bitまたはDual bit)、TLCはTLC(3またはTriple bit)などと明記する。基本的に、MLC製品群の構成要素は同じものなので、このようにしている。


<記録される電荷の種類>

上記で、容量が増えてきた流れは分かっただろう。
特に、広義のマルチレベルセルという技術は1つのセルで2倍、3倍、4倍まで増やせるので、大容量化にとってはとても魅力的で効果的だ。じゃんじゃん使いたいところである。

しかし、そうも行かない。これには弊害があるからだ。しかも、かなりデータを保存する側から見ると深刻な弊害である。ただ、それを説明する前にNANDがデータを記録し識別しているかを説明しよう。


<データ記録技術>

まあ、そういう怖い話になる前に、データはどう判別しているのかというと、基本的には長短の差だと思えば良い。
一定より長いシグナルを持つと、1、短いと0といった具合だ。今後も考えて、もう少し分かり易くこれは、入居者だと考えるのが良いだろうか例えば、身長が155cmを越える人は1、それ以下は0というルールを決めて部屋に入居させる。その入居する場所がセルであり、入る人がデータである。

画像


いわゆるSingle Level Cellというのはこの部屋に1人が入ることを意味すると考えると良い。厳密には人数ではないのだが、その方が分かり易い。
そして、MLC(Double bit)の場合は、男女2人になると思えば良い。それで身長を比べる。
TLC(Triple bit)になると、そこに子供か両親のどちらかが増える。
QLC(Quad bit)になると、また誰かが増えて4人世帯になる。

画像



これの違いを表で表すと以下のようになる。
画像



これを見て言えるのは、人数(bit)が増えるほど容量は多くなり単価は安くなる(ビット/バイト単価のこと)ようだが、速度は落ちているし、書き換え回数は下がっているという現実だ。


このために人で説明したということでもある。

例えば、単身用の狭いアパートで、1人生活するのと2人で生活するのでは、どちらがストレスが溜まり、どちらが住宅の破損が早くなるか考えて欲しい。これが3人、4人と増えて言ったら?これが、いわゆるマルチレベルセルでビット数が増えることが、書き換え回数を減らしてしまう原因である。

容量が増えると、それだけセルの壁やゲートに掛かる負荷は上がっていく、その一方で読み出す際の違い順番などの確認にも複雑性が上がるため、その複雑な住人関係を0と1のデータに戻すのは容易ではない。だから、マルチレベルセルではビット数が増えるにつれ速度も劇的に低下する。


<Read DisturbとECCと大家族>

ちなみに、もう一つマルチレベルセルにはより難しい問題がある。

Single Levelであればセルに1人しか住人はいない。その人の身長が例えば長く居る間に変化して、150cmからいつのまにか160cmになっていることも実は、生活していればある。それに似たことがフラッシュメモリーでも起きる。

これを、Read Disturb(読取りの乱れ)という。これは、そこそこの頻度で起きるので、前後のお隣さんと本人に0だったよ、1だったよと覚えて貰うという簡単なエラー訂正が入っている。これを、HC(humming code)という。


しかし、マルチレベルで人数が増えてくると、お隣さんも全員は覚えていないかも知れない。いやもっと言えば、みんなが成長して、または年老いて変わる家もあるかもしれない。

覚えていることが間違っていても事だ。そこで、例えばマンションの1階の住人全体の名前や風貌にこの世帯の人は入居時にこういう情報をもって入りましたという印象データを別の符号(分かり易い数字の10を覚えておいてぐらいの感覚)にして覚えて貰う。場合によってはそれを書いた紙を1世帯で1枚持つような形にする。そうすることでもしも、一部のデータが化けていても、ある程度広い範囲でデータを確認するとエラーがある場所を把握することができ修正できる。これが、MLC(2bit)ではBose-Chaudhuri-Hocquenghemというリードソロモン方式へと格上げされ、さらに人数が増えていくと、より広い範囲のデータで修正が可能になる技術を追加していく。

これは、ビット数が増えるほど化ける量も増えるため、広い範囲でカバーしないと化けたものが戻せないからだ。
要は、1bitの部屋では、両隣ぐらいが生きていれば、1bitは回復出来大丈夫だ。

しかし、2ヒbitの部屋でどちらの1bitが化ける確率は1bitの頃に比べると大きく増える。倍じゃないのだ。
何故かというと、1bitなら化けるか正常かの1/2だが、2bitなら片方が化ける確率が1/4、両方が化ける確率が1/4、全く化けない確率が1/4あるからだ。即ち、我が家でデータが狂うとお隣さんも狂っている可能性が出はじめる。

そのため、お隣のお隣さんなどより広い範囲でカバーした方が安全性が増すという前提でよりエラー訂正は強化されている。TLC(3bit)やQLC(4bit)だと、Low Density Parity Checkなどが加わっていく。


<増える容量と減る書き換え回数の秘密>

ちなみに、マルチレベルセルのbit容量が増えると書き換え回数は大幅に減る。殆ど1/10のペースで減って行く。QLCに至っては本当に大丈夫なのかと心配してもおかしくないレベルだが、実用化されている。

では、どうしてこれでも実用化出来るか?そして、書き換え回数が減ってきているのに何故すぐに壊れないのかを説明しよう。


-ウェアレベリング-

今の大容量NANDフラッシュメモリーには、

Dynamic Wear Leveling(動的摩耗平衡化/均衡化)という技術と、
Static Wear Leveling(静的摩耗平衡化/均衡化)という技術が採用されている。


通称ウェアレベリングと呼ばれる。これは、

ECT(Erarse Count Table/消去回数表)というものを元に、データの書き込み場所を調整する機能である。

前者Dynamic Wear Leveling(以下DWL)は、フラッシュメモリーの書き込みが指示された際に、空き容量の中で使用回数が少ない場所を常に探して記録する機能である。空き容量が減ってくるとこれは機能しなくなるという極めて厳しい問題があるが、SSDやSDカードの寿命において空き容量が少ないと早く壊れると言われる所以がここにある。

Static Wear Leveling(SWL)というのは、ETCに記録されている保存時間を元に、Refreshが必要と判断されたデータを別の利用頻度が高いエリアに移す作業や、空き容量が減ってきて既にDWLが可能な場所に、十分な信頼性のあるデータが無くなってきているときに、既に記録済みのエリアのデータを上手く再配分して、平衡化を進めるという機能である。これは、二次的要素であり、DWLほどの効果はない。また、ディスクの空き容量が本格的に不足すると、機能しないという特徴がある。


これが何を意味するのかというと、ホテルで言えば、201号室に宿泊しているAさんがその部屋に来てから2年が経ちました。Aさん一家はずっとその部屋に住んでいて買い物以外殆ど出て来ない(引きこもった)という状態だとする(この買い物をする状態をRefreshという)。2日に1回の買い物で2年に365回しか出入りしていない。

このホテルの扉が摩耗するには、3万回出入り口の扉を開け閉めしたときだと仮定したとき、よく出入りする202号室のBさんが仮に既に2万回を突破しているとしたら……1年後にはBさんの部屋の扉は壊れてしまうわけだ。Bさんというよく使うデータが使えなくなることを意味する。

これを防ぐためには2つの方法がある。

1つは、他の開いた部屋にBさんが毎日(毎回)移るようにすることだ。
Bさんが、空いている7階の701~710号室の10室を順番に回るようにすると、10回の出入りで全ての居室はまだ1度しか出入りしていないことになり、部屋の扉が壊れるまでの時間は10倍に伸びる。
これが、いわゆるDWLである。この効果は絶大で、空き容量が多いほど効果は大きく発揮される。


もう一つは、出入りしないAさんの部屋とBさんの部屋を交代して貰うというものだ。こうすると、Bさんは201号室で後3年近く出入り出来。Aさんはそのまま出入りがあまりないなら、今後も殆ど問題ない。
これがSWLであるが、この技術はDWLほどの効果を持っていない。また、空き容量が全体的に不足してくると、例えば3部屋で1家族のようなケースも出てくるような場合に、一部が信頼性の低い場所に跨がる可能性もある。

何より問題なのは、SWLという技術はデッドロック(読み込んだ状態で変更指示を受け付けないモード状態)がかかっているデータの配置転換が出来ないという点である。だから、二次的要素と呼ばれるのだ。


-Dynamic bit/Cell Configuration-

もう一つ主要な技術がある。これは、まだ新しい技術で今後広がっていく技術だ。
Dynamic bit/Cell Configuration(動的ビット/セル設定)という技術である。
これは、QLCのストレージで採用され始めた技術である。

そもそも、QLCという技術はデータ保存においてはかなり危険な技術だ。上記で軽くRefreshというのを書いたが、それが出来ないと下手をすれば数ヶ月~3年以内にセル内の電荷が抜けたり、エラー訂正で修復できないレベルに変位する恐れがあるほど。

ただし、たいていの人はこの問題にぶつかることがないようにしたのがこのDb/CCである。
具体的に何をするのかというと、セルに入れる人数を、全体の記録済み容量によって変えると言うことだ。

一つの部屋に1人入れることもあれば、4人入れることもあるというとても単純明快な方法だ。
どのようにそれを決めるかはファームウェア次第だが、ある一定の閾値を設定し、使用容量がその閾値を超えると、RefreshやSWLのタイミングで全体のデータをマルチレベルに切り替えていくというもののようだ。

そのため、利用するディスクの容量がそう多くなければ、場合によってはTLC(3bit)やMLC(2bit)よりも高い寿命を達成できるかも知れない。しかし、ディスクの容量が上限に接近すると、これまで以上にデータ消失のリスクが上がっていくので、QLCで容量が増えたからより大容量に記録出来ると思わない方が良いという罠も持っている。


<快適な運用>

NANDフラッシュ特にSSDでは、その昔プチフリーズという問題があった。
その名の通り、プチプチとフリーズする現象なのだが、これの原因はHDD(ハードディスク/磁気ディスク)とは違ってNANDフラッシュが、OverWrite(書き換え)機能を持たず、データの記録単位がHDDと異なり、消去単位が書き込み単位と違うという仕様の違いによるものだった。

具体的にどういう事かというと、磁気ディスクやテープでは、NかSかの極性を変化させるだけでデータの記録は終わる。だから書き換えも、記録されている場所に直接、違う極性を与えても、記録が出来た。もちろん消去ヘッドを用いた方が確実だが、その場合でも先に消去ヘッドを置いて消しながら後ろで書き込むことが出来た。

しかし、NANDフラッシュメモリーではそれが出来なかった。

データのオーバーライトという機能はNANDにはなく、データを再記録するには充填した電荷を取り出した後、再び新しいデータを入れないといけなかったからだ。既に電荷がある中で新しい電荷を入れると、セルが飽和し壊れてしまうから当然である。

ただ、それだけなら実はまだプチフリーズにはならなかったと考えられる。問題はここからだ。

NANDではビット単位でデータを記録するため、セクター/バイト単位のハードディスクとは論理/物理アドレステーブルの仕様が異なるという問題が一つあったこと。(だからLogical to physical address translationという機能がNANDフラッシュメモリーには搭載されている。)

そして、記録単位のセクターと消去単位のブロック(大抵はセクターより大きなまとまりである)という読み書き、消去の最小単位の仕様が違ったことで、待ちが発生してしまったことが原因である。


書き込みはセクター(NANDではビット単位だが、システム側ではセクター)単位で行われる。それは良い。
問題は、消去ブロックの問題だ。昔のSSDやメモリーカードではブロックがセクターより大きな枠であるため、書き換え要求が起きると、ブロックのデータの中に必要なデータがあるかを確認し、あるならそれをコピーしてから消去し、それから再記録をするという手間が発生したのだ。


さらに、コンピュータOSの多くは、オーバーライトが出来ると言う前提で、データの消去をデータの見出しだけを消すだけで消去していたことにしていた。そのため、消去したはずのデータが、まだセルに残っていることもしばしばあった。その結果、長く同じSSDやフラッシュメモリーを使っているとプチフリーズが頻発するようになったのだ。


これを減らすために搭載されたのが、Garbage Collection(ガベージコレクション)である。これは、使用が終わった領域等の廃棄(解放)処理を行う機能である。尚、Trimという言葉があるが、このTRIM(data set management)というのは、Garbage Collection(以下GC)を外から強制発行するためのものである。

尚、最近のストレージであれば、GCはファームウェアによって閾設定されているBBM※、ECTの経過時間や管理状態によりDWL/SWLと整合を取りつつ実行される。また、OS側からGCを強制キックされることもあるので、意識しなくともプチフリーズが起きることはないほどになっている。


※Bad block Management(BBM)は、不良ブロック管理のことである。不良ブロックを検出管理する機能であり、Replace/Skip/Reserve{ブロック置き換え/破棄・停止/予備管理}の主に3つに対して、管理情報のテーブルを保管し、制御している。尚、不良が起きるとReserveという予備領域を、Replaceに使い、不良があるエリアをSkipする措置を措置が執られる。そしてReserveが枯渇すると、Skipと空き容量の消費のみ(事実上のOver Provisioning(超過供給)相当)で対応することになる。


<データに活力を与えるリフレッシュ、定期的やらないと……>

さてNANDの技術では最後にして最大の要素となるが、実はNANDフラッシュメモリーにもDRAMと同じような定期的な電荷再注入(Refresh)の機能が搭載されたものがある。まあ、上記にもポツポツ出てきており、ただ同じ場所で再注入するのではなく、場所をずらすときに行われるのだが、このリフレッシュというのはあまり知られていない。

これは、特にTLCやQLCの保存期間が短くなりがちなマルチレベルセル媒体では大事な機能だ。
この機能は、製品によって搭載の有無が異なるが、最後に読み書きした時間を元に定期的にデータ状態を確認して巡回し、その状態が悪いか、または時間的にそろそろ不味いと判断された場合、SWLと並列してデータを取り出し別のエリアに移すことで、長期保存による電荷抜けを抑えるというものだ。

逆に言えば、ストレージの電源を長期間切ったままにしていると、よりビット数の大きなマルチレベルセルほど、短期間でセルからビットが抜けていくという意味でもある。
まあ狭い部屋に押し込まれていれば、小さな隙間からでも手を出したくなるものだ。そして、その際に通路から背が伸びる何かが手渡されるかも知れないし、背が縮むクスリが渡されるかも知れない。

それを防ぐために、定期的に部屋を変えてやったり、部屋で生活するのに必要なものを差し入れる訳だ。人数が多いほどそれをやっておかないと、気が付いたら奥さんと旦那さんが仲良くして子供が1人から2人になっているかも知れないのだから……。

他にも技術は沢山使われているが、消費者から見ると、これらの技術が重要になってくる。
そして、ここから注意しなければいけない点も見えてくる。


<空き容量は確保しろ、QLCは特に空き容量に注意>

NANDフラッシュを長持ちさせたいなら、空き容量は多い方が良い。例えSWLがあっても、それはDWLほどの有効性を持っていないからだ。

そして、長期運用や長期保存を考えるなら、SLCよりもMLC、MLCよりもTLCほど空きが多くないといけない。QLCに至っては容量が多いから大容量保存に最適とは思わないことだ。データ保存だけで考えるなら、HDDの方が今でもアドバンテージがあり良いだろう。

尚、上記に書いた各種エラー制御やウェアレベリングを例えばある方法でコントロールするホストを停止させて殺すと、以下のようにチェックディスクが必要になるエラーが頻発することになるかも知れない。(特に2年3年経ったSSDだと起き易い。)エラーでス消失が置き、チェックディスクが必要になり、found.000や001が出来てくるようになる。
画像


これが起きないように、SSDのファームウェアやホストは細かな制御をしている訳だ。
これは、時間が経過するにつれて、より表に出てきやすくなる。SSDは突然死すると思っている人もいるが、寿命が近づくと、上記のような症状が出たり、一部のデータが化ける(画像ファイルなどが破損して再生出来なくなる)こともある。それを起こしやすくなるのは、空き容量が少ない場合と、電源オフで何年も放置していた場合である。


特にQLCなどの多ビット製品は、値段が安いからこそなるべくこれまでのストレージより大容量を買って、なるべく空き容量を多く確保し続ける努力と、頻繁に電源を入れるデバイスに使うのがベストだろう。


尚、これを見てNANDフラッシュメモリーは危ないと怖れるものでもない。NANDフラッシュは衝撃にも強く、ウェアレベリングが十分に機能すれば、HDDより長持ちする。さらに、ランダムアクセスが早く読み書きが高速だから、快適というHDDにはない強みがある。

だから、使い方(容量の扱い)に注意する必要は多少があるが、積極的に導入を検討していった方が、きっといろいろな面で快適さの恩恵を受けられるだろう。














ブログ気持玉

クリックして気持ちを伝えよう!

ログインしてクリックすれば、自分のブログへのリンクが付きます。

→ログインへ

なるほど(納得、参考になった、ヘー)
驚いた
面白い
ナイス
ガッツ(がんばれ!)
かわいい

気持玉数 : 0

この記事へのコメント

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