HMBはNVMe SSD低価格化の切り札!?東芝メモリ「BG4」で実力検証

SSDの製造をコストダウンする方法はいくつかあるが、最も効果的な方法はDRAMを省くことだ。しかし、DRAMレス設計のSSDは広域なランダムアクセス性能の低下という代償も伴う。

この課題の解決策として注目されているのが、「HMB」(Host Memory Buffer)という機能である。本稿ではNVMe SSDの低価格化を推し進める“切り札”とも言えるHMBの技術的特徴や実際の効果を東芝メモリの開発したHMB対応NVMe SSD「BG4」の検証結果でレポートする。

SSDにおけるDRAMの役割とは?

多くのSSDに搭載されているDRAM(外部メモリー)だが、その最も大きな役割は、「アドレス変換テーブル」をキャッシュすることにある。

SSDでは、ホスト(OS)からはシーケンシャルに見える連続データであっても内部的にはあえてランダムな場所に記録することで、製品寿命の最大化や高速化を実現している。アドレス変換テーブルはその管理に利用するデータで、NANDなどの不揮発性メモリーのどこに目的のデータが記録されているかが記されている。

そして、アドレス変換テーブル自体も不揮発性メモリーに記録されているのだが、それをDRAMにキャッシュするとアクセス性能を高速化できる。アドレス変換テーブルへのアクセスが速くなれば、それだけ目的のデータへのアクセスにかかる時間が短くなるためだ。

DRAMは不揮発性メモリーよりもアクセスが高速で、特に現在主流のNANDメモリーと比べると遥かに短い時間でアクセスできる。つまり、DRAMにアドレス変換テーブル全体をキャッシュしておけば、SSDの全領域に対するアクセス性能を高めることができるというわけだ。

また、DRAMは他の用途にも利用できる。例えば、実際のデータのリード/ライトキャッシュとして利用したり、ガーベージコレクションの作業領域としても利用できる。DRAMの第一の用途はアドレス変換テーブルのキャッシュにあるが、余った領域はSSDの効率的な管理や高速化のために活用されている。

DRAMレスSSDで外部メモリーを利用可能にするHMB

では、SSDのコストダウンを図るためにDRAMを省くとどうなるのだろうか。

SSDのコントローラーには少容量のSRAMが内部に用意されている。DRAMを省くと、このSRAMのみでさまざまな作業のやりくりを行なうことになる。つまり、DRAMレスSSDでもSRAMにアドレス管理テーブルのキャッシュを行なえるのだが、容量が少ない。それゆえ、キャッシュできるアドレス変換テーブルのエリアが狭くなるのだ。

DRAMレスSSDにおいて、特に広域のランダムアクセス性能がDRAM搭載SSDと比べて劣る理由がここにある。DRAMレスSSDでは広範囲のアクセスが発生するとSRAMのミスヒットが頻発し、結果として遅い不揮発性メモリー上のアドレス変換テーブルへのアクセスが増える。それゆえ、実際のデータのアクセスが遅くなるのだ。

低速なSATA SSDならまだしも、高速アクセスできるポテンシャルを備えるNVMe SSDにおいては致命的となる。

HMBは、この課題を解消するために考案された機能だ。HMBに対応したPCなどのホスト機器に搭載しているメインメモリーの一部を間借りして、外部メモリー(バッファー)として活用できる。

もちろん、HMBで確保したメモリーはPCI Express経由でアクセスされるため、SSDのコントローラーに直結しているDRAMと比べるとアクセス時間はかかる。しかし、NANDメモリーにアクセスするよりは速い。つまり、HMBで確保したメインメモリーにアドレス変換テーブルをキャッシュすれば、ランダムアクセス性能の向上が見込めるというわけだ。

とはいえ制限が多いHMB、現状での用途は限られる

低コストなDRAMレスSSDでも高速化が見込めるということで期待されているHMB機能なのだが、実際の利用にはいくつかの制限がある。最も大きな制限は、SSDが希望する容量のメモリーが割り当てられる保証がないことである。

HMB対応のSSDには希望するメモリーの最小容量と推奨容量の2つの情報があらかじめ用意されている。ホスト(OS)はこの情報を参考に実際に割り当てるメモリー容量を決定するが、ホストのメモリーの空き容量が少ない場合、最悪のケースではまったく割り当てないということもある。

また、最小と推奨の間の任意の容量が割り当てられるケースもある。割り当てられるメモリー領域も連続した領域となっておらず、断片化した複数の領域によって構成されるなんてこともあるのだ。

また、HMBによってホストのメインメモリーが割り当てられるのは、OSにデバイスドライバーが読み込まれたときである。つまり、それまでは普通のDRAMレスSSDとして振る舞うことになる。前述の「最悪割り当てなし」というケースやHMB非対応の環境で利用するケースも考慮すると、HMB対応SSDはDRAMレスSSDとして問題ない動作が行なえる必要があるほか、HMBが有効になった場合にそれを活用する動作の2種類の動作が求められる。これは開発難易度が上がることを意味する。

HMBで確保されたメモリー領域は暗号化されてないという課題もあり、ユーザーの生のデータを置いてしまうと、そのデータを読み出されて情報漏えいにつながる危険性もある。これを回避するにはSSDのコントローラー側でHMBで確保されたメモリー領域のデータをはじめから暗号化しておくといった工夫も求められる。

というわけで、HMB対応SSDはこれらの制限から現状の利用用途がかなり限定されている。具体的には、アドレス変換テーブルのキャッシュだ。コントローラー直結のDRAMで活用されているその他の機能も、工夫を凝らせばHMBで実装できる可能性はある。しかし、工夫を盛り込むには時間が必要だ。しばらくの間は、HMBの利用用途がアドレス変換テーブルのキャッシュに限定される可能性が高いだろう。

さらに、HMBで実際に確保されるメモリーの容量は、アドレス変換テーブル全体をキャッシュできるほどの容量には達していないという現実もある。アドレス変換テーブル全体をキャッシュするには、おおまかに言ってSSD容量の1000分の1の容量が必要になる。例えば、1TBのSSDの場合、アドレス変換テーブル全体のキャッシュに必要な容量は1GB程度になる。

タブレットPCや低価格ノートPCなどでは、メインメモリー搭載量が4GBぐらいの製品が多い。組み込み向けの製品ではもっと少ないこともあるので、アドレス変換テーブル全体をキャッシュさせてしまうと、OSを含むホストの動きを妨げかねないので現実的ではない。ゆえに、HMB機能でキャッシュさせるアドレス変換テーブルのエリアは「ユーザーが日常的に使っているぶん」ぐらいに落ち着くだろう。

東芝メモリのHMB対応NVMe SSD「BG4」で検証

前置きが長くなってしまったが、ここからはHMBの実際の効能を見ていこう。検証に使用したのは、東芝メモリのHMB対応NVMe SSD「BG4」である。まずは、BG4の特長を紹介する。

BG4は、東芝メモリの開発した第2世代HMB対応SSDである。前世代の「BG3」では、NANDメモリーに64層の「BiCS3」を採用していたが、BG4では最新の96層の「BiCS4」を採用。容量は128GB、256GB、512GB、1TBの4種類をラインアップする。

また、BG4ではインターフェースの高速化が図られている。前作BG3ではPCI Express 3.0×2接続だったが、BG4ではPCI Express 3.0×4接続を採用。これによって、大幅なリード性能の高速化を実現している。

BGシリーズ最大の特長は、シングルパッケージのワンチップSSDとして設計されていることだ。BGシリーズはNANDメモリーとコントローラーをひとつのパッケージに収めており、フォームファクターは面実装用の「M.2 1620」で、M.2 BGA SSDとも呼ばれているタイプだ。

シングルパッケージのSSDには「eMMC」や「UFS」といった規格もあるが、BGシリーズはNVMe SSDとして設計されており、既存のシングルパッケージのSSDのなかでは最速クラスの製品となる。今回の検証では、BG4をM.2 2230のモジュール基板に実装したタイプの製品を利用している。

HMBの設定はレジストリで変更可能

次に検証の設定について説明しておく。HMBはWindows 10 Ver1607(Anniversary Update)からサポートが始まっている。そのため、最新のWindows 10を利用していれば、特に問題なく使用できる。なお、HMBの設定はデフォルトでオンに設定されており、対応SSDを接続するだけで特に設定を行なわなくても自動的にHMBが使用される。

確保されたメモリーの容量はイベントビューアーで確認できる。また、レジストリを変更することで、HMBのオン/オフの設定を行なえるほか、確保するメモリーの容量を任意に設定することも可能だ。HMBのオン/オフを切り替えたいときは、レジストリエディターで下記を開く。

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet
\Control\StorPort

開いた後に「HmbAllocationPolicy」という名称のキーを「DWORD」で新規作成。値に「0」を設定すると、次回パソコン起動時にHMBがオフに設定される。「1」を設定するとドライブが最小容量として規定している容量の割り当てを試みる。「2」を設定すると、ドライブの推奨値の割り当てを試みる。

HMBで任意の容量を割り当てたいときの設定は少々面倒だ。まず設定に必要となるSSDのフォーマットの文字列を確認する。この確認はデバイスマネージャーで行なうのだが、設定したいSSDのプロパティを開き、[詳細]タブをクリックしてプロパティに「親」を選択する。

すると、値に「PCI\VEN_nnnn&DEV_nnnn&...(中略)...&REV_nn」(nは英数字)という文字列が表示される。この中で設定に必要となるのは、先頭部分の「VEN_nnnn&DEV_nnnn」という文字列とその後に出てくる「&REV_nn」の文字列だ。この文字列をメモなどに控えておく。

次に「HmbAllocationPolicy」のレジストリを削除するか、値に「2」を設定し、レジストリエディターで下記を開く。

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet
\Services\StorNVMe\Parameters\Device

開いたら「HostMemoryBufferBytes」という名称のキーを「複数行文字列値」で新規作成する。HostMemoryBufferBytesのキーを作成したら、値にデバイスマネージャーで確認しておいた文字列を「VEN_nnnn&DEV_nnnn&REV_nn <設定したい容量(バイト)>」の形式で入力する。

このとき、容量を2進法のバイト数で入力する必要がある点に注意してほしい。例えば、「64MB」と設定する場合は「64000000」ではなく、「67108864」と設定する必要がある。また、HMB対応SSDで確保可能な最大容量以上の設定を行なうと、HMBの設定は「オフ」になるので注意が必要だ。

なお、レジストリで設定可能なメモリーの最大容量については、使用しているドライブによって異なるようだ。BG4の場合、デフォルトで確保されるのは「61MB」だが、レジストリを変更することで最大「64MB」の容量を設定でき、今回のテスト環境では問題なく指定した64MBのメモリーを確保していた。

HMBで確保されたメモリーの容量はイベントビューアーで確認できるが、そのためにはカスタムビューの作成も必要になる。イベントビューアーでイベントソースに「StorPort」を選択したカスタムビューを作成すると、このログでHMBで確保したメモリー容量の確認を行なえる。レジストリでHMBの設定を変更する場合は、必ずイベントビューアーで動作の確認することをオススメする。

キャッシュエリア内のリード性能は大幅アップ

さて、ここからはベンチマーク結果からHMBの効能について見ていく。今回の検証では、HMBオンでデフォルトの容量(BG4では61MB)の場合、HMBオンで確保可能な最大容量(BG4では64MB)を設定した場合、HMBオフの場合の3パターンで検証を行なっている。

まずは検証は定番ベンチマークソフト「CrystalDiskMark」で最大速度の確認を行なった。比較用として前世代の「BG3」とDRAMを搭載するSAMSUNG製SSD「970 EVO Plus」(500GB、M.2 NVMe)の速度も計測している。

HMBオンの速度はHMBオフの場合と比べてやはり高速だ。特にリード性能の向上が大きい。さすがに最新NVMe SSDである970 EVO Plusには叶わないが、BG4は初期に登場したNVMe SSDと同等程度と言っていいレベルだ。

また、BG3と比較した場合もリード性能が向上している点が目立つ。これは、主にBG4のインターフェースがBG3のPCI Express 3.0×2からPCI Express 3.0×4に高速化されていることの恩恵だろう。シーケンシャルライトについてもBG4はBG3から高速化されており、HBMオフの状態で比べても約161MB/sも速い。

なお、HMBがオンの状態はシーケンシャルリードもHMBオフの状態と比べて高速化している点も興味深い。後述するTxBENCHのランダムライトでも2GBのエリアまでは速いことを考えると、HMBで確保したメモリーにアドレス変換テーブルの一部がキャッシュされることで、コントローラー内部のSRAMの使い方がHMBオフの状態とは異なるのかもしれない。

ランダムリードでも効果は絶大だがライトは厳しめ

次に、同じくベンチマークソフト「TxBENCH」を利用して1GB~64GBのアクセス範囲における4KBランダムリード/ライト QD32の速度を測っている。ランダムリードは30秒間の平均速度。ライトはSLCキャッシュの容量を超えないように、4GBぶんのデータのライトを行なったときの平均速度を計測した。

まず、リードの結果だが、HMBで確保したメモリーでキャッシュ可能なエリアにおける効果は絶大だった。その効果の大きさは、970 EVO Plusと比較してもわずかに遅い程度の速度を実現していることからもわかる。

一方で、HMBのオンの場合にBG4がデフォルトで確保するメモリー容量は61MBだが、この容量におけるキャッシュの有効エリアは32GBに届いていない。HMBで確保する容量を64MBまで拡大すると、キャッシュの有効エリアが48GBまで広がる。しかし、キャッシュの有効エリアから外れだすと速度が低下し、最終的にはHMBオフの状態と同じ速度(300MB/s強)にまで落ちる。

ただし、BG4はキャッシュの有効エリアから外れた状態でもBG3より100MB/s以上速い。この結果はBG4がBG3と比べて、さらなる高速化が図られていることを示すものだ。また、注目したいのがHMBオフ時の速度だ。HMBオフ時のキャッシュ有効エリアは1GBほどで、2GB以降は速度が低下している。DRAMレスSSDの場合、キャッシュ有効エリアは1GBほどであることがこの結果から推測できる。

ランダムライトの結果は、HMBによるメリットが現状では大きくないことを示している。DRAMを搭載する970 EVO Plusの速度はまったく低下していないのに対し、BG4はHMBをオンにした場合でも2GBのエリアまでは速度を維持するものの、その後は急激に速度が低下。48GBのエリアではHMBをオフにしたときと同じ速度になった。

2GBまでは速度を維持しているため、HMBの効果がまったくないとは言えない。しかし、現状ではリードほど大きな効果が得ることはできないと考えるべきだろう。また、4GB~32GBのエリアにおいて、BG4はBG3よりも遅くなっている。この原因はメーカーによると、データセンターの性能指標として利用されている100ms以上のレイテンシーの発生を抑えることを重視した設計に変更したためだという。

まとめ:将来性の高いHMB、NVMe SSDでもDRAMレスが増える!?

これらの結果からもわかるように、現状のHMBはリードに関しての効果は非常に大きいものの、ライトに関しての恩恵はほとんどない。加えて、確保されるメモリーの容量も少ないため、リードに関する有効エリアにも限りがある。

とはいえ、SSDの容量全域をカバーできるだけのメモリーを確保でき、メーカーの工夫によってDRAMと同等に近い使い方ができるようになれば、HMB対応SSDでもDRAM搭載SSDと遜色ない性能を実現できるだけのポテンシャルはある。

ちなみに、HMBはNVMe SSDだけではなく、PCI Expressをインターフェースに採用したSDカードのSD Expressでも採用されている。DRAMレスのNVMe SSDやSDカードの性能を手軽に向上できるHMBの将来性は高く、今後大きく普及してくだけの素性の良さを備えていると言えるだろう。

また、現在のBG4の最大有効キャッシュエリアは48GBだが、果たしてこの有効エリアは少ないのだろうか。もちろん、より広範囲なエリアをカバーできることがSSDとしては理想だ。しかしながら、実際のユーザーの使い方では利用するアプリがほぼ決まっており、広範囲にわたるアクセスが頻繁に発生するとも思えない。

そう考えると、このぐらいのエリアがあれば十分ではないかとも思える。いずれにしても、パソコンに搭載されているメインメモリーの容量が今よりも増えれば、HMBで確保できるメモリーの容量を増やすことも可能になる。多くの容量が確保できるようになればなるだけ、ユーザーメリットが大きくなることは間違いない。

そして、BG4の性能は現在のNVMe SSDのなかではかなり控え目。これは、BG4という製品がほどほどの性能を低価格で実現することをターゲットとしているからだ。NVMe SSDは性能を上げるとそれだけ消費電力も増え、発熱も増える。発熱と性能はトレードオフの関係にあり、BG4の速度は最高性能を狙うのではなく、実用的な性能を低価格で実現することを狙った結果だ。

現在のSATA SSDでもそうだが、「激安SSD」などと言われるいわゆる安価なSSDは、ほぼすべてがDRAMレスとなっている。このことからも推測できるように、NVMe SSDにおいても同じような経緯をたどる可能性が高いだろう。その場合、ある程度の性能を維持したまま、低価格化を実現できるHMBという機能は切り札となるはずだ。HMB対応SSDの将来的な進化に注目していきたい。