NVM と関連する用語について

[データベース・システム系 Advent Calendar 2023](https://adventar.org/calendars/8832)の 18 日目の記事です。

## 概要

NVM (Non-volatile memory) の研究といえば少し前までは、PMEM (Persistent memory) の話だったのに、最近は NVMe 規格の Flash memory の話を見かけるようになったなぁと侘び寂びを感じました……などといいつつ論文紹介を書こうと思ったのですが、自分でも用語の使い方がテキトウだなと思ったので、調べつつ整理しました。


## NVM 関連用語とその整理

**NVM** はこの文脈では **Non-volatile memory** の略で、不揮発性メモリと訳されます。代表的なものは **SSD** (Solid-state drive) で使われる **Flash memory** です。

コンピュータの世界でデータを記録しておくものはたくさんありますが、だいたいふたつの軸で分類できると思います。(1) 揮発性か不揮発性か、(2) 記憶媒体の大まかな違い、です。(1) は給電がないときにデータが消えるもの、消えないものの違いなので分かりやすいです。(2) は Memory、Disk(Disc)、Tape がまず思いあたります。**Memory** は元々はもっと広い意味で使われていたと思いますし、「メモリ階層」のような言葉においては今でも広い意味を指しますが、典型的には **RAM** (Random access memory) のことを指すことが多く、半導体(と記憶素子)を大量に並べたランダムアクセス可能な記憶媒体を指すことが多いです。CPU キャッシュで使われる SRAM、メインメモリとして使われる DRAM、SSD などに使われる Flash memory などがそれにあたります。**Disk** は元々は HDD (Hard disk drive) の Disk からきていますが、円盤の形をした記憶媒体が由来だと思います[^1]。Disk は不揮発性(揮発性のものを私は知らないです)なので、わざわざ Non-volatile disk とは言わないです。Memory については Flash memory が普及する以前は揮発性のものが多く、Memory といったら Volatile memory のことを指すことが多かったと思いますが、SSD がこれだけ普及し、HDD の用途の多くを侵食した現在は、NVM という言葉で Non-volatile であることを強調する言葉の必要性が増したのだと思います。(2) の別視点での分類として、書き換え可能、一度だけ書き込み可能(Write Once)、読み込みのみ、という書き込み能力の違いがありますが、本記事では書き換え可能なもののみを扱います。

少し前までは **3D XPoint** (スリーディークロスポイント) という新しい技術を使った **Optane** と呼ばれる NVM が Intel から発売されるに至り、注目と期待を集めました。私も 3D XPoint デバイスが普及してそれを活かすソフトウェア技術が発展する/自分で活用することを楽しみにしていたのですが、残念ながら少なくとも目先は終わってしまうことが確定してしまいました[^2]。他にも NVM は MRAM や PCM など、ニッチな用途で使われたり研究開発中のものもたくさんありますが、典型的なコンピュータのメモリ階層に割り込んできて爆発的に普及するものはなかなか新しくは出てきません。

Intel Optane は NVMe 接続できるものの他に、**PMEM** (Persistent memory、PM) と呼ばれるものもありました。これは NVMe 接続ではなくマザーボードに直接指せるメモリモジュール(いわゆる **DIMM**)であり、CPU 命令 (x86_64 では `clwb`)でキャッシュライン単位で直接永続化を制御できるものです[^3]。**DRAM** (Dynamic RAM、揮発性、いわゆるメインメモリとして使用されるもの) と同様のオーバーヘッドでアクセスできるため、低レイテンシ、高スループットが期待されました。PMEM も NVM の一種といえます。

この記事を書いている途中まですっかり忘れていたのですが、Hewlett Packard Enterprise (HPE) が **Memristor** (メモリスタ) という新しい NVM を市場に出すぞ！と頑張っていた時期がありました。確か試作に成功したのが 2008 年で、その後、製品化を目指していたと思います。私が覚えているのは、FOEDUS というSIGMOD 2015 の論文[^4] です。この論文は Block 単位での NVM へのアクセスを前提にして、Dual pages という、ひとつの Page (Volatile-page) を DRAM に置いて、内容が少し古いが Snapshot を構成する Page (Snapshot-page) を NVM に置いてその対を単位として管理する構造を提案しています。FOEDUS 論文もそうですが、この頃は PMEM よりも NVRAM という言葉が多く使われていたと思います。残念ながら HPE からその後音沙汰はなく、Memristor を使った NVM は私の知る限り 2023 年現在まだ市場には出ていません[^5]。

NVM と区別して使うべき用語として、**NVMe** (NVM Express) があります。これは、主に NVM をコンピュータに接続して通信するための規格で、NVM そのものではありません。NVMe は主に PCIe (PCI Express) を前提とした接続なので、それに由来するオーバーヘッドやレイテンシはありますし、主に **Block** 単位の IO でのアクセスです[^6]。逆に、Block 単位じゃないよ、ということを表す枕詞としては **Byte-addressable** という言葉がよく使われました。DIMM タイプの Optane の実際の永続化単位は CPU のキャッシュライン単位(最近の x86_64 や aarch64 だと 64 bytes)だったりしますけれど。

関連する用語であと説明しておきたいのは **Drive** と **Storage** です。Drive は HDD や SSD の最後の D です。記憶媒体としての円盤 (Disk) は回転させるなど「駆動」する必要があるため、その装置も含めてDrive と呼んだのだと思います。Storage はまさに記憶装置と訳すのにふさわしい言葉で、Memory、Disk、Tape などをひっくるめて表す言葉として使われていると思います。ただ、Non-volatile にひっぱられることも多い気はします[^7]。


![20231219a.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/13007/1d13e50a-1100-2fda-ec3f-792997b4dcfb.png)



## NVM に関する論文での用語の使われ方

NVM 関連の論文で使われている用語について調べました。主に [ACM Digital Library](https://dl.acm.org) で検索しつつ、関連してそうなものは中身を眺めてどのような言葉が使われているかを見ています。

Intel Optane の発売は、SSD 版が 2018 年、DIMM 版が 2019 年でした。SSD 版は Flash memory と多少性能特性が違えど使い方(Block 単位でアクセスするインターフェース)は変わらないため、皆の期待は、DIMM 版の方を向いていたと思います。この頃から最近まで Computer sciense の文脈で NVM といったらまず評価に Intel Optane の DIMM 版を使う研究が多く行われていた(いる)と思います。DIMM 版に類する言葉としては、**Persistent memory** や、**Non-volatile main memory**、**Non-volatile DIMM**、**NVDIMM** などが使われているようです。一方で、SSD 版に類する言葉としては、NVMe 接続が当たり前になってきたことや、Optane に限らず Flash memory を使ったものも含むことから、**NVMe SSDs** や、**NVMe storage**、**NVMe drives** などが使われているようです。Optane が終わってしまうことが分かった後、NVMe SSD の私にとっての相対的な重要度が上がったのか、関連する論文が目につくようになりました……他の人達がどう思っているのか状況証拠としての数字正確な数を知りたいところです[^8]。

ACM Digital Library でキーワード検索してヒットした一番古い文献の年次を比べると、以下でした。

|キーワード  |初出年  |
|---|---|
| Non-volatile memory | 1952 |
| Persistent memory | 1978 |
| NVRAM | 1987 |
| Non-volatile DIMM | 2011 |
| NVDIMM | 2012 |
| NVMe SSD | 2014 |
| Optane | 2016 |

NVM や PMEM、NVRAM は古くから使われていることが分かります。Non-volatile DIMM は 2011 年ということです。私の記憶にあるのは、Flash memory が搭載されている大容量 DIMM ですが、この頃だったかも知れません(関連する記事は確かにありましたが自分の見たそれだったか覚えてないです[^9])。Flash memory の書き換え寿命がそこまで長くはなく DRAM のように使うのはかなり厳しいのでニッチ用途だと認識しています。NVMe SSD は比較的新しい言葉のようですね。NVMe 規格の最初の仕様(Version 1.0)が 2011 年に策定されたとのことなので、それよりも後なのは納得です。パソコンで M.2 スロットが搭載されるようになったのはもう少し後ですね(Intel Z97 チップセットあたりからなので 2014 年くらい)。Optane というキーワードは 2016 年が初出でした。気になったその論文[^10]を確認したのですが、Intel の 3D XPoint メモリが Optane と呼ばれているとハッキリ書いてありました。




## まとめ

用語を整理したり論文での使われ方を調べたりするだけで力尽きました……。言葉というものは使われていくうちに、少しずつ変化していくものです。コンピュータ科学の文脈では、新しい技術や規格、製品などの登場に伴って新しい名前がつけられています。時代が進めばこの記事の内容も古くさくなってしまうでしょうが、現時点での用語を少し注意深く扱うための整理ができたかなと思います。元々は DBMS における NVM の活用、というタイトルで論文を紹介しようかと思っていたのですが、それはまたの機会に。


[^1]: CD、DVD、Blu-ray Disc なども Disk に含まれるようです。(日本だと Disk と Disc を使い分けてる気もしますが、辞書によるとイギリス語かアメリカ語かの違いらしいです)。

[^2]: 詳細が知りたい方は[このあたりの記事](https://pc.watch.impress.co.jp/docs/column/semicon/1434846.html)を参考にしてください。Intel TSX といい、どうも新しいものが出てきては続かない、ということが続いている気がしていて、なかなか気軽に新しいものに飛びつけないなあと感じています。今に始まったことではないのだと思いますが。

[^3]: DRAM も刺せるなど互換性はあったと思いますが、マザーボードや CPU が対応していないと Intel Optane Persistent Memory は刺せないです。

[^4]: [FOEDUS: OLTP Engine for a Thousand Cores and NVRAM](https://dl.acm.org/doi/10.1145/2723372.2746480). Hideaki Kimura. SIGMOD 2015.

[^5]: TetraMem というベンチャー企業が Memristor を使った AI チップを開発しているようで、2023/12 時点では、TetraMem MX100 SoC という試作プロセッサが既に世の中に存在しているようですが……
[Products | TetraMem.com](https://www.tetramem.com/products)

[^6]: 最近 PMR: Persistent Memory Region なるものもあるようですが……

[^7]: メモリ階層における Primary storage としての SRAM/DRAM、Secondary storage としての SSD/HDD という上下の位置関係があり、前者を Memory、後者を Storage と呼びたくなるということです。このとき前者は Volatile で、後者は Non-volatile であるので、言葉がこのイメージにひっぱられるということです。

[^8]: Optane が終わると分かった後で、PMEM/NVDIMM の技術についての研究論文がどのくらい減ったかを知りたいです。ACM Digital Library を使って件数を絞り込んでひとつひとつの論文を確認していけば大まかな統計値が得られるかも知れないと思いつつ、労力が大きそうなので諦めています。

[^9]: [【福田昭のセミコン業界最前線】不揮発性メモリをDIMMスロットに装着する標準規格「NVDIMM」 - PC Watch](https://pc.watch.impress.co.jp/docs/column/semicon/721621.html) 2015/09/17.

[^10]: [Data-Centric Computing Frontiers: A Survey On Processing-In-Memory](https://dl.acm.org/doi/10.1145/2989081.2989087). Patrick Siegl, Rainer Buchty, Mladen Berekovic. MEMSYS 2016.