DRAMレスSSDと上手につきあう方法(1/2)

DRAMレスSSDと上手につきあう方法(1/2)

おことわり

 この記事は、2023年11月にQiitaに投稿した記事を加筆修正したものです。

 また、この記事のオリジナルは日本語で書かれています。記事が日本語以外の言語で表示されている場合、それは機械翻訳の結果です。当社は機械翻訳の精度に責任を負いません。

はじめに

 DRAMを搭載しないSSD、いわゆる「DRAMレスSSD」が増えました。私たち一般消費者が店頭で購入できる製品では、概ね、高い性能を追求する製品はDRAMを搭載し、コストパフォーマンスを追求する製品はDRAMを搭載しない、のようなすみわけがなされています。

 そのDRAMレスSSDでは、NVM Express (NVMe)が規定するHost Memory Buffer (HMB)という機能[1]を利用しホストシステムのDRAMの一部をSSD用に割り当ててもらうことで、DRAM非搭載によるデメリットを緩和している製品もあります[2]

 SSDにおけるDRAM有無のメリットとデメリットを説明するWebページは既に多数存在しますので、ここでは4つの「DRAMレスSSDを上手く使う方法」を、2つずつ2回に分けてまとめます。結論からいうと、「典型的なパーソナルユースのコンピュータ向けのストレージ」の使いかたであれば、たいていの場合、DRAMレスSSDを上手く活用できます。

まとめ

 DRAMレスSSDをより良く使うには、以下のポイントを意識すると良い。

  • その1:大きいサイズもしくはシーケンシャルにアクセスする
  • その2:空き容量を多くする

その1:大きいサイズもしくはシーケンシャルにアクセスする

 SSDは、DRAMの有無にかかわらず小さいサイズのランダムアクセスよりも大きいサイズのシーケンシャルアクセスのほうが得意であり、DRAMレスSSDは特にこの傾向が強くなります。これはSSDの内部処理に由来します。

 一般的なシステムでは、ホストはSSDに対して「どのデータを読み書きしたいのか」ということを先頭アドレス(Logical Block Address: LBA)とその先頭アドレスからのデータサイズ(セクタ数)で指定します。

 するとSSDは、ホストからコマンドを受信した際に「SSD(主にNANDフラッシュメモリ)のどこにどのLBAのデータが記録されているか」というテーブル、いわゆる「住所録」を参照します。この住所録のことはよく「マッピングテーブル」と呼ばれます。

 このマッピングテーブルは少なくともSSDの電源が切れている時はNANDフラッシュメモリに記録されていますので、SSDの起動時などにこのマッピングテーブル全体を読み出さない限り、ホストからコマンドを受信する度にNANDフラッシュメモリから必要なマッピングテーブルを読み出す時間がかかります。

 図1は、NVMe SSDにおける、DRAM有無によるマッピングテーブル参照処理の違いを示したイメージ図です。この図1はNVMe SSDの場合ですが、SATA SSDの場合でも(2-C)のパターンが存在しないだけで他の部分は同じです。

図1:DRAM有無によるコマンド処理時のマッピングテーブル参照処理の違い(NVMe SSDでのイメージ)

 サイズの大きいアクセスもしくはシーケンシャルアクセスであれば、読み出したマッピングテーブルを効率良く使用できます。住所録の1ページを1回に読み出し可能なマッピングテーブルに例えると、サイズの大きいアクセスもしくはシーケンシャルアクセスであれば、住所録1ページでそのアクセスの大半をカバーできる可能性が高いからです。

 逆に、サイズが小さいもしくはランダムアクセスの場合、何度も住所録のページをめくる必要があります。マッピングテーブルを置くためのDRAMを備えその容量が十分であれば「住所録のページをめくる」処理はDRAMアクセスのみで済みますが、そうでない場合、NANDフラッシュメモリからマッピングテーブルを読み出す回数が増えます。その結果、アクセス性能が低下します。

 「どのLBAにどのデータを書き込むか」は、通常OS(ファイルシステム)が決定して管理するためユーザは決められません。このためユーザとしては読み書きするファイルのサイズをできるだけ大きくすることが望ましいことになります。

 これに対し、組み込み系システムなどでSSD内でのデータ記録位置をある程度自由に設計できる場合、SSDへのアクセスがシーケンシャルになるように設計すると、DRAMレスSSD使用時のアクセス性能の改善や安定につながります。

その2:空き容量を多くする

 これはGarbage Collection (GC)の発生頻度を抑え、またGCの処理時間を短縮するためです。

 GCは、「データを読み書きする」というストレージとして最低限の機能を維持するために必要不可欠な、NANDフラッシュメモリの使用効率を改善して空きブロックを作り出す処理です。

 しかし、GCは「NANDフラッシュメモリからデータを読み出してそのデータをNANDフラッシュメモリの別の場所に書き込む」という処理(コピー処理)です。この「コピーのために読み出したデータ」を一時的に置いておく場所が広ければ広いほどこのGCの処理効率は高くなります。

 高い性能を実現するにはこの置き場にRAM(SRAMやDRAM)を使うべきですが、DRAMレスSSDでは少ないRAMをやりくりしてコピーするデータの読み出しと書き込みをしなければなりません。

 この不利な状況をできるだけ作らないために「できるだけGCが発生しないようにする」こと、また影響を緩和するために「コピーするデータのサイズを少なくする」こと、の2つが有効であり、SSDの空き容量を多く保つことでこの2つを実現可能です。

おわりに

 今回の記事では、「DRAMレスSSDを上手く使う方法」を2点説明しました。

 SSDは使いかたに応じて性能や寿命が変わるデバイスですので、DRAMレスSSDの活用には「DRAMレスSSDが適した使いかた」を理解して自分の使いかたがこれに当てはまるかどうかで判断する必要があります。

 家庭やオフィスで使用する典型的なパソコン向けのストレージであれば、たいていの場合DRAMレスSSDを活用可能です。逆にそれとは異なる使いかた、例えば24時間365日稼働する機器や過酷な環境で動作する機器、さらには特殊な要件を持つ機器向けのストレージの場合は、DRAMレスSSDの特徴を良く理解して選定する必要があります。

 次回は残りの2点を説明します。

References

[1] キオクシア、「HMB(Host Memory Buffer)技術開発とDRAMレスSSDの実現」、2018年8月28日(2024年12月16日閲覧)
[2] Fixstars Tech Blog /proc/cpuinfo、「NVMe HMB機能を使ってみた」、2018年6月28日(2024年12月16日閲覧)

他社商標について

 記事中には登録商標マークを明記しておりませんが、記事に掲載されている会社名および製品名等は一般に各社の商標または登録商標です。

記事内容について

 この記事の内容は、発表当時の情報です。予告なく変更されることがありますので、あらかじめご了承ください。