arrow-up icon

【特別寄稿】フラッシュストレージの性能を左右するコントローラとソフトウェア - 第3回

複雑化するSSDがコントローラの負担を増やす

執筆: 福田 昭 公開: 2024年7月31日
この記事の執筆者
福田 昭

半導体に特化した専門ジャーナリストとして、半導体技術の進化や市場のトレンドなど焦点を当てた深い洞察を業界内外の読者に提供しています。次世代メモリ技術、次世代CMOS技術、企業・市場分析など、最新の業界トピックスに関する独自の分析は、専門家や興味を持つ読者にとって重要な情報源として高く評価されています。

様々なフラッシュストレージ製品

HDDとSSDの共通点

本連載の第1回では「フラッシュストレージ」が、フラッシュメモリを記憶媒体とするストレージ(データを保存しておくモジュールや装置など)を意味することと、代表的なフラッシュストレージ製品の事例をご説明しました。

本連載の第2回では、フラッシュメモリにはNANDタイプとNORタイプがあり、ストレージに使われるのはNANDタイプのフラッシュメモリ(「NANDフラッシュメモリ」あるいは「NANDフラッシュ」とも呼ばれる)であること、代表的なフラッシュストレージであるSSD(Solid State Drive)の内部ブロックとSSDコントローラの役割について概略を述べました。

SSD(Solid State Drive)の基本構成とSSDコントローラの主な役割
SSD(Solid State Drive)の基本構成とSSDコントローラの主な役割

本連載の第3回となる今回は始めに、もう1つの代表的なストレージであるハードディスク装置(HDD:Hard Disk Drive)とSSDの共通点と相違点を簡単に説明します。それからSSDに特有の複雑さを構成する、いくつかの要素を解説していきます。

HDDとSSDの共通点は「どちらもストレージであること」、「ホストとのインタフェースが同じであること」です。「どちらもストレージである」とは、ホストマシンはHDDとSSDを区別せず、いずれも「ストレージ」として扱う、という意味です。

例えばクライアントPCのストレージには「内蔵ストレージ」と「外付けストレージ」があり、通常は「内蔵ストレージ」が電源投入後にOSを起動したり、アプリケーションを格納したりするストレージ(起動ディスク)となります。「外付けストレージ」は普通、データを保存しておくストレージや、起動ディスクの内容を保存しておくストレージ(バックアップディスク)となります。これらのディスク、あるいはドライブはHDDでもSSDでも構いません。

ストレージのインタフェースにはSATA(Serial Advanced Technology Attachment)やSAS(Serial Attached Small Computer System Interface)、PCIe(Peripheral Component Interconnect Express)、NVMe(Non-Volatile Memory Express)、USB(Universal Serial Bus)などがあります。HDDとSSDで共通なインタフェースは、SATAとUSBです。ほかのインタフェースも原理的には実現可能なのですが、SASはHDDのみ、PCIeとNVMeはSSDのみと市場では分かれています。ここでは各インタフェースの説明は割愛します。

HDDとSSDの相違点

次はHDDとSSDの相違点です。最も大きな違いは、「読み出しと書き込みの内部動作」と「書き換え回数およびデータを維持する期間」にあります。

HDDは内部動作の原理がかなり単純なストレージです((注)実際にはかなり複雑なのですが、ここではSSDとの比較という意味で「単純」と表現しています)。記憶媒体である磁気ディスクのデータを読み出す、あるいは磁気ディスクにデータを書き込む。基本的な動作はこの2つだけです。そしてデータの書き換え回数は無制限、データを維持する期間は半永久と使い続けたときの心配事がありません。SSDに比べると機械的な衝撃に弱い、読み書きが遅いといった弱点はあるものの、ごく普通の使い方では問題は起きないでしょう。

SSDは逆に、内部動作がかなり複雑なストレージであり、しかも誕生から現在まで、複雑さの度合いが急速に上昇してきたストレージです。複雑さの要因は、記憶媒体であるNANDフラッシュメモリの読み書き動作と長期信頼性の両方にあります。外部からは「書き込み可能な容量(TBW)」の制限を除くとHDDとあまり変わらないように見せていますが、内部はHDDとかなり違います。

HDDとSSDの比較
HDDとSSDの比較

フラッシュメモリが抱える弱点

HDDの磁気ディスクや、DRAMやSRAMなどの半導体メモリは、データを読む動作(リード動作)とデータを書き込む動作(ライト動作)の2つでデータを外部(通常はホストマシン)とやり取りしています。ライト動作では、古いデータが残っている領域にもデータを書き込みます。これを「オーバーライト(上書き)」と呼びます。

ところがフラッシュメモリにはもう1つ、「データを消す動作(消去動作あるいはイレーズ動作)」が存在します。NANDフラッシュとNORフラッシュの両方とも、消去動作を有しています。

なぜこのような動作モードがあるかというと、フラッシュメモリは「データを消去した領域」と「出荷前にデータを初期化した領域」のいずれかにしか、データを書き込めないからです。いったんデータを書き込むと、書き込んだ領域は消去しない限り、書き換えできません。この「オーバーライト(上書き)ができない」という独特の仕様が、複雑さの根本にあります。

さらに事態を複雑にしているのが、データを扱う最小単位の違いです。読み出し(リード)動作と書き込み(プログラムあるいはライト)動作はいずれもページ(4Kバイトあるいは8Kバイト)単位で実施します。これに対して消去(イレーズ)動作は、ページよりもはるかに大きな、ブロック(128ページあるいは256ページ)単位で実行します。仮に1ページが8Kバイト、1ブロックが128ページだとすると、1ブロックの大きさは「8Kバイト✕128=1024Kバイト(約1Mバイト)」となります。

半導体メモリと磁気メモリでは常識が異なる

フラッシュメモリに限らず半導体の不揮発性メモリには、「データの書き換え回数(「エンデュランス」あるいは、「P/Eサイクル(Pは「プログラム」、Eは「イレーズ」の略号)」とも呼ぶ)」と「データを維持しておく期間(「データ保持期間」、「データリテンション」とも呼ぶ)」に制限があります。ですから半導体メモリの世界では、フラッシュメモリが同様の制限を抱えていることは常識です。原理的には無制限の書き換え回数と半永久的なデータ保持が常識となっている磁気メモリの世界(磁気ディスクや磁気テープなどの世界)とは、基本的な違いがあります。

NANDフラッシュメモリが厄介なのは先に述べたように、書き込み(プログラムあるいはライト)動作の「前に」消去(イレーズ)動作を必要とすることと、書き込みと消去の最小データ量が大きく異なることです。イメージとしては消去済みブロック(128ページ)の一部(数ページ~十数ページ)にデータをプログラム(ライト)することになります。なお半導体メモリの世界では電気的にデータを書き込み可能な不揮発性メモリを「プログラマブルメモリ(PROM、EPROM、EEPROMなど)」と呼称しており、データを書き込む動作を「ライト」ではなく、「プログラム」と表現することが一般的です。

NANDフラッシュの寿命を縮める「ライトアンプリフィケーション(WA)」

上記のようなNANDフラッシュメモリに特有の操作があるため、SSDを始めとするフラッシュストレージでは「ライトアンプリフィケーション(WA:Write Amplification)」という現象が発生します。ライトアンプリフィケーションの度合いは「WA値」や「WAF」などで表示し、その定義は「(NANDフラッシュメモリに書き込むデータ量)/(ホストがSSDに書き込むデータ量)」です。

WA値(WAF)は通常、「1」以上の値となります。仮にWA値が「2」となる書き込みを続けた場合、NANDフラッシュメモリの書き換え可能な回数は、WA値が「1」の書き込みを続けた場合と比べ、原理的には半分に減ってしまいます。

WA値はSSDへの書き込みの仕方やSSDの内部動作によって大きく変化します。例えば論理アドレスが連続する書き込み(シーケンシャル書き込み)では、WA値は理論的には「1」となります(実際には管理データの書き込みがあるので1をわずかに超える)。一方、論理アドレスが飛び飛びになる書き込み(ランダム書き込み)では、WA値は非常に大きな値(アドレスによって異なる)となり、NANDフラッシュメモリの書き換え可能な回数(残りの回数)を減らしてしまいます。

すでに存在しているデータを書き換える場合、アドレス(論理アドレス)とデータを受け取ったSSDは、論理アドレスを物理アドレスに変換し、物理アドレスのブロックに存在する有効なデータをすべて読み出し、一部だけを書き換えデータと入れ換えます。次に、消去済みのブロック(読み出しとは別のブロック)に有効なデータ(書き換えデータを含む)を書き込みます。それから古いデータが存在していたブロックのデータをすべて消去し、物理アドレスと論理アドレスの変換テーブルを更新します。1回の書き換えが完了するまでにNANDフラッシュメモリのブロックに対する読み出し動作が1回、書き込み動作が1回、消去動作が1回は発生することが分かります。

WA値(WAF)を下げる「ガベージコレクション」

SSDは目的の異なる、いくつかの要素技術を搭載しています。WA値(WAF)を低減する技術、書き込みを高速化する技術、特定のメモリセルにアクセスが集中しないようにする技術、不良の発生率(不良率)を下げる技術などがあります。

WA値(WAF)を低減する技術の代表は「ガベージコレクション(GC:Garbage Collection)」です。GCでは、消去済みブロック(「ブロックZ」と仮称)のページにデータを順次書き込んでいきます。書き換えが生じた場合は同じブロックの空きページにデータを書き込み、古いデータのページを無効化します。書き込めるページがなくなった(ブロックがデータで埋まった)ときに、有効なデータだけを別の消去済みブロック(「ブロックY」と仮称)に書き込み、書き込みが完了したら「ブロックZ」の全データを消去します(この操作を「ガベージコレクション」と呼ぶ)。

GCを採用すると、データの書き換えによる消去動作と書き込み動作を減らすことができます。ただしGCの実行中はSSDへの読み書きが制限されるため、ホスト(あるいはユーザー)から見るとSSDの性能が極端に低下します。そこでSSDが待機状態のときにGCを実行する(バックグラウンド・ガベージコレクション)ことで、SSDの実効的な性能を維持する機能をSSDコントローラは備えています。またハイエンドのSSDコントローラには、GCの実行中に並行してデータを書き込める機能を備えたものがあります。

GCの効率を高める「TRIM」コマンド

ガベージコレクション(GC)の効率を高めることでWA値を下げる技術に「TRIM」コマンドがあります。通常、ホストのOS(オペレーティングシステム)がファイルを削除しても、SSDはそのことを認識できません。GCを実行するとOSが削除したファイルを含むページも移動します。

TRIMコマンドでは、OSが削除されたファイルを含むページのアドレスをSSDコントローラに伝えます。このことで、OSが削除したファイルを含むページは無効なページに変わります。OSが削除したファイルに対応するページはGCを実行しても移動せず、消去済ブロックの一部(書き込み可能なページ)として残ります。この結果、WA値が低下し、空き容量が増加します。

最近のWindows、MacOS、LinuxなどはTRIMコマンドに対応しています。SSDコントローラのファームウェアがTRIMコマンドをサポートしていれば、TRIMコマンドによってGCの効率を高めることができます。

ガベージコレクション(GC)におけるTRIMコマンドの有無。上はTRIMコマンドを利用しない場合。下はTRIMコマンドを利用した場合。利用にはOSとSSDの両方がTRIMコマンドをサポートしている必要がある
ガベージコレクション(GC)におけるTRIMコマンドの有無。上はTRIMコマンドを利用しない場合。下はTRIMコマンドを利用した場合。利用にはOSとSSDの両方がTRIMコマンドをサポートしている必要がある

冗長ブロックで性能を高める「オーバープロビジョニング」

SSDの速度向上や書き換え回数増加、不良率の低減、WA値の減少などが見込める技術に「オーバープロビジョニング(OP:Over Provisioning)」があります。OPではSSDのユーザーが使える記憶容量(「ユーザー容量」とも呼ぶ)よりも大きな記憶容量(「物理容量」とも呼ぶ)のNANDフラッシュメモリを搭載することで、ユーザーが利用できない記憶領域(リザーブ領域)を設けます。リザーブ領域は冗長ブロック(あるブロックが壊れたときの代替ブロック)であり、SSDコントローラがいくつかの操作で必要とする一時的な作業ブロックとしても使われます。

OP(オーバープロビジョニング)の大きさ(比率)は、「(物理容量-ユーザー容量)/(ユーザー容量)」で定義します。例えば128Gバイトの記憶容量(物理容量)を備えたSSDを「120Gバイト(ユーザー容量)のSSD」として販売した場合、OPの大きさ(比率)は6.67%となります。そこでSSD製品によっては、物理容量が同じ128GバイトのSSDを「128Gバイト品」、「120Gバイト品」、「100Gバイト品」と分けて販売することがあります。OPの大きさはそれぞれ「0%」、「7%」、「28%」となります。この違いはSSDコントローラのファームウェアで管理しています。

OPの比率が大きくなると、SSDコントローラが利用可能な作業ブロックが増えます。このことで作業時間が減少し、SSDのデータ読み出しとデータ書き込みの性能が向上します。また冗長ブロックが拡大するので、不良ブロックが増加してもSSDの書き換え可能な回数を維持するともにユーザー容量を減らさずに済みます。

OPの弱点は、OPの比率が大きくなると記憶容量当たり(ユーザー容量当たり)のコストが増加することです。理論的には記憶容量当たりのSSD価格が上昇します。

書き込み回数を均一化する「ウェアレベリング」の功罪

NANDフラッシュメモリは書き込み(プログラム)や消去、読み出しなどを繰り返すことで少しずつ劣化していきます。これらのアクセスが特定のページ/ブロックに集中すると、ほかのページ/ブロックよりも劣化が先に進み、不良ブロックとなる恐れが少なくありません。

そこでアクセスするページ/ブロックを特定のアドレスに集中しないよう均一化することで、SSDの不良ブロック発生を防ぐ仕組みが「ウェアレベリング(Wear Levelling)」です。ウェアレベリングではページ/ブロックの書き換え回数をSSDコントローラが管理し、ページ/ブロックの書き換えアドレスが集中しないように制御します。言い換えると、ページ/ブロックの書き換え回数(履歴)をなるべく均一化します。この制御もコントローラのファームウェアが担います。

ウェアレベリングは不良ブロックの発生を抑える仕組みなのですが、実際にはライトアンプリフィケーション(WA)の悪化を招くことがあります。WA値が増加するのは、均一化のアルゴリズムがページ/ブロック間のデータ移動を伴うからです。

例えば一度書き込んだ後で書き換えがまったくなかったブロックは、劣化がほとんどないと見なせます。一方で書き換えが頻繁に発生したブロックでは、劣化がある程度進んでいると見なせます。そこでコントローラは書き換えがまったくなかったブロックのデータを、書き換えが頻繁に発生したブロックに移動します。このブロックは今後も書き換えが発生しないと見込まれるので、劣化が進まないはずです。ただしデータの移動が起こるので、WA値は増加します。

このため、ウェアレベリングはWA値がいたずらに増加しないよう、アルゴリズムを工夫することが求められます。

ここまで述べてきた「ガベージコレクション(GC)」、「TRIM」、「オーバープロビジョニング(OP)」、「ウェアレベリング(WL)」はいずれも、HDDには存在しない機能です。これらSSDに特有の機能はすべて、SSDコントローラのハードウェアとファームウェアが担っており、SSDの性能と信頼性を左右します。HDDのコントローラもかなり複雑な機能を備えています。SSDのコントローラはHDDに比べ、さらに高度で難しい機能を実行していることが分かります。

SSDコントローラが担う複雑な操作はこれだけではありません。NANDフラッシュメモリに特有の記憶密度を高める仕組み「多値記憶」の存在が、さらに複雑かつ高度な制御をコントローラに要求します。「多値記憶」に関連した制御の詳細は、次回に説明します。

フィックスターズのFPGAシステム開発

フィックスターズでは、単にFPGAの性能に注目するだけでなく、システム全体の効率性を考慮したFPGAシステム開発サービスを提供しています。

私たちの経験豊かなエンジニアが、お客様のアイデアに基づいてヒアリングを行い、FPGAに限らずシステム全体に最適な解決策を提案します。詳細についてのご興味があれば、お気軽にお問い合わせください。

お問い合わせはこちらから

執筆者について

福田 昭

半導体に特化した専門ジャーナリストとして、半導体技術の進化や市場のトレンドなど焦点を当てた深い洞察を業界内外の読者に提供しています。次世代メモリ技術、次世代CMOS技術、企業・市場分析など、最新の業界トピックスに関する独自の分析は、専門家や興味を持つ読者にとって重要な情報源として高く評価されています。

【特別寄稿】フラッシュストレージの性能を左右するコントローラとソフトウェア 記事一覧

フィックスターズのフラッシュメモリ向けファームウェア開発

詳しくはこちら