K75thunderbirdのブログ

どちらかというと自分の頭の整理用です。ネタとしてはモバイル、自動車、ロードバイク、電気関係やPC関係の突っ込んだ話題、ややデバイスやコンポーネント寄りの偏った内容になると思われます。

SSDでコントローラーが重要である理由

前回は、チップレベルの話について。
今回は、それを制御するコントローラーの話に移る。

 

最初に認識したいことは、NANDメモリは使いにくいメモリだ、ということだ。
何故か。
まず、NANDメモリには書き換え回数に制限がある。
これだけでも面倒だ。
そして、書き換えるときはブロック単位で書き換えなければならない。
更に面倒だ。

そう、HDDのようにセクター単位で書き換えることができないのだ。
そのため、あるファイルに1bitの修正を加えただけで、そのファイルが書き込まれたブロックを読み出し、ブロック内を消去し、修正後の情報を書き込むという動作をしなければならない。
限りある書き換え回数が必要以上に減ってしまう仕様、それがNANDメモリだ。

では、そのブロックはどれくらいの単位なのか。
手持ちのSSDで、予備ブロックと無効化された容量から計算したところ、512GBの製品で2MB、960GBの製品で4MBのようだ。
おそらく、製品の容量に応じてブロックの粒度は異なると思われる。
参考までに、上の2製品はCrucialで、コントローラーはMarvellで、NANDはMLCである。

NANDメモリの仕様は上に書いた通りなので、下手な使い方をすると頻繁に同じ場所を使用することで早期に寿命を迎えることは想像に難くない。
そこで、コントローラーには「ウェアレベリング」という機能が搭載されている。
名前のとおり、摩耗の平均化だ。
ここで改めて説明しておくと、ブロックの書き換えには 読み出し⇒消去⇒書き込み の3ステップが必要である。
書き込む先として使用頻度の少ないブロックを優先的に使用し、書き換えが特定のブロックに集中しないようにするのが、この機能の目的だ。

しかし、空き容量が少なくなってくると、ウェアレベリングに使用できる領域が減ってくる。
極端な話、空き容量が数%といった状態で使用していると、書き換え対象のブロックを分散させることが難しくなり、どうしても特定のブロックを酷使することになる。
NANDメモリは読み出しこそ高速なものの消去には時間がかかるため、空き容量が減少すると消去待ちの時間が表面化する。
これの顕著な例が「プチフリ」である。

このような時、消去に要する時間を隠蔽し、パフォーマンス低下を抑制するための手法が「オーバープロビジョニング領域」である。
あらかじめ一定量の消去済みブロックを用意しておく、というもので、別名は余剰領域である。
漢字の方が分かりやすいだろう、読んで字のとおりだ。
ユーザーが使用できない領域を事前に確保しておけば、パフォーマンス低下を防ぐことができ、ウェアレベリングも行いやすい。

なお、容量が256や512や1024といった数値ではなく、240や480や960といった数値になっているSSDは、出荷時にオーバープロビジョニング領域として何GBか確保されていることになる。
また余談であるが、SSDパーティションを作成する際に敢えて未使用領域を確保しておくという使い方も、同じ効果をもたらすようだ。


しかし、ここで疑問には思うかもしれない。
パーティションで区切ってしまえば、その領域は一生使われないままなのではないか?と。
しかし、これに関しては全く問題とはならない。
何故か。
確かに、HDDのような媒体であれば論理アドレス物理アドレスは一致しているため、一度パーティションを区切ってしまえば当該領域は物理的に未使用となる。
これに対してSSDの場合は論理アドレス物理アドレスが一致しない(参照テーブルはコントローラーだけが持つ)ため、PCから見て同じ場所であるとしても、物理的に同じ場所であり続けることはない。
つまり、当該領域はウェアレベリングにより移動し続けることになるため、未使用領域が固定されることはない。


さて、NANDのチップレベルでの耐久性低下については前回書いたとおりだが、コントローラーも手をこまねいているわけではない。
NANDの多値化に伴ってECCを強化し、仮にある程度までセルが劣化してエラーレートが増えたとしても問題なく使用できるようにしている。
これにより、同じNANDを使用していてもSSDとしての耐久性を上げることができる・・・とされている。

 

まだ書き足りない点もあるが、脳内メモとしては以上としたい。
Trimの話や、NVMeタイプの発熱の話、仮想SLCキャッシュの話、TLCの書き込み速度の話などについては、別途書くことにしたい。
KryoM.2に関連した話も、少しだけあるかもしれない。

 

 

それでは皆さん、ごきげんよう