NVDIMM
RAM
pmem.io
SFC-RGDay 14

「NVDIMM」のすゝめ

この記事はSFC-RG Advent Calendar 2017の14日目です。

突然ですが、メインメモリは電源を落とすと中のデータは消えます。
これはDRAMの特徴であり、如何ともしがたい部分ですね。
そして、2017年12月現在メモリの値段は爆発的に上昇しています。
どれくらい値上がりしているかというと、新しくサーバーを買うときに一番コストがかかる部品がメモリになるくらい値上がりしています。
もちろんメモリベンダも生産量を増やそうとはしていますが、しばらくはDRAMの値段は高いままという予測が主流です。

NVDIMM #とは

そんな中で、「NVDIMM」というワードが最近ハードウェアベンダーの中で静かなブームとなっています。
NVDIMMは「Non-Volatile Dual In-line Memory Module」の略称で,日本語に無理やり直せば「不揮発性DIMM」となるでしょうか。
NVDIMMの定義としては、「メモリスロットに装着でき」、「RAMとして扱え」、そして「電源を落としてもデータを保持できる」ものです。
特徴としては
・容量単価がDRAMより安いNANDフラッシュや新興メモリ技術を用いることで容量単価が比較的安くなる
・CPUに直結されているDRAMバスに乗るため、通常のSSDと比較すると圧倒的に高速
・電源を落としてもデータが失われないSSDのような特性を持つ
というものが挙げられます。

JEDEC公認のNVDIMMの3つの実装

NVDIMMと一口によっても、用いるメモリ技術と使用方法で大きく3つに分けることが出来ます。

NVDIMM-N

image.png
DRAMと不揮発性メモリ(基本的にはNANDフラッシュ)を同じ容量搭載したモジュールです。
CPUからはDRAMにのみアクセスができ、適宜不揮発性メモリにバックアップがとられます。
もし電源が遮断された場合は、自分のモジュールに搭載されているor接続されているコンデンサやバッテリーによって電源が供給され、DRAMの内容を全てNANDフラッシュに書き出します。

利点

・CPUからはDRAMにしか書き込まないので、DRAMと等速・等レイテンシ(=パフォーマンスの減少はない)
・DRAMに書き込むので、キャッシュラインサイズ(=CPUがアクセスできる最小単位)でアクセスが可能
・DRAMに書き込むので、OSの対応が不要

欠点

・DRAMとNANDの容量が同じなので、通常のメモリモジュールより容量当たり価格は高くなる
・同様にNANDもDRAMも同容量積載するので、通常のメモリモジュールより1枚当たり容量が低下するor信頼性が低下する(予備DRAMチップが積めない)

採用商品

HPE Persistent Memory(HPE)
AGIGARAM(AGIGA Tech)
NVDIMM(SMART Modular Tech.)
現在「不揮発性メインメモリ」として発売されているのはこのタイプが主流です。

NVDIMM-F

image.png
DIMMモジュールに、(コントローラ用キャッシュを除き)フラッシュメモリのみ搭載したモジュールです。
イメージとしてはメモリバスに直接ぶら下がるSSDという認識で正しいです。

利点

・SSDと同じくフラッシュメモリのみを搭載するため、容量当たり単価が廉価
・1枚のモジュールで大容量化が可能
・PCI-E接続のSSDと比較すると高速

欠点

・基本的にはSSD同様4KBのブロックアクセスが主流になるため単独でシステムメモリとして利用するのはかなり難しい(コントローラによってはキャッシュラインアクセスにも対応)
・レイテンシはNANDのものが直接見えるためDRAMと比べるとレイテンシは大きい
・DRAMと比較するともちろん低速
・コントローラに依存するものの、基本的にはOS・BIOS・CPUの対応が必要

採用商品

ULLtraDIMM(Sandisk)
なかなか商品として市場には出ていません。

NVDIMM-P

image.png
JEDECにて唯一詳細がいまだ策定中のものです。ReRAMという新興不揮発性メモリをストレージに利用し、DRAMをキャッシュとして搭載します。
バスはDDR5になるようなので、登場は2020年以降となるでしょう。

なぜ、今NVDIMMなのか

もちろんこれには理由があります。
なぜなら、来年発売が噂されている次世代のIntelのサーバ用プロセッサ、「Cascade Lake」にて不揮発性メモリのサポートが予定されているからです。
搭載されるのはIntelとMicronが共同開発した3D XPointメモリで、詳しいことはまだ分かりませんが、メモリのキャッシュとしても、ストレージのようにも使えるモジュールのようです。
上記のNVDIMMとはまた違った実装が予定されていますが、ソフトウェア的には後述のpmem.ioが提供しているライブラリに対応し、ソフトウェア的にはNVDIMMと互換性を持つようです。
詳細はこの記事を。

【後藤弘茂のWeekly海外ニュース】Intelの新メモリ「3D XPoint」がDIMMで投入される背景
https://pc.watch.impress.co.jp/docs/column/kaigai/717746.html

そして、Intelがサポートするということは来年以降にリリースされる多くのサーバーでIntelのNVDIMMが利用できるようになります。
当然、サーバーサイドのコードを書く際も「不揮発性DIMMを利用して」という条件が増えるのは想像に難くありません。
そんな時、「NVDIMMって何だよ(哲学)」となる前に、最先端でナウでイケてるエンジニアは名前だけでも押さえておくべき技術でしょう。

どうやって使うのか

http://pmem.io/nvml/
こんなライブラリーが既に公開されています。
これを使えば(簡単とは言いませんが)それなりの手間で不揮発性メモリに対応させることができます。
今すぐテストできる環境は無いのでアレですが、目を通してみるといいかもしれません。
今までのメモリとはだいぶ変わりますので面白いですよ。

最後に

「君のパソコン、メモリ何GB?」
「え?1TBだけど?」
「それってストレージ容量でしょwwww」
「いや、メインメモリで」
という時代もそう遠くないのかもしれませんね。

参考文献

https://pc.watch.impress.co.jp/docs/column/semicon/721621.html
各メーカーHP