NVM Express (NVMe、エヌブイエムイー) もしくは NVMHCI (Non-Volatile Memory Host Controller Interface) はPCI Express (PCIe) で不揮発の補助記憶装置を接続するためのインターフェース規格であり、AHCIに代わる次世代規格である。2021年7月現在の最新規格はRev.2.0。NVMは不揮発性メモリ (Non-Volatile Memory) の頭文字である。

## 概要

シリアルATA (SATA) は主にHDD用に設計されたものであり、その限界転送速度である6 Gbpsを超えることは出来ず、SSDの性能を制限していた。

NVMeは近代的なCPU、プラットフォーム、アプリケーションの並列性とフラッシュメモリーの低いレイテンシや内部並列性を最大限利用するよう設計された。その結果、以前のインターフェースに比較してI/Oオーバーヘッドを下げ様々なパフォーマンスを改善し、並列度の高いコマンドキューと低レイテンシが可能になった。

NVMe規格制定以前よりハイエンドSSD製品の中には、PCI Expressを使用した非標準のインターフェースで接続するものもあったが、各SSDメーカーのドライバが必要であった。この規格で各メーカーが特定のインターフェースのためにドライバを設計する必要はなくなった。

代表的なNVMeデバイスには次の種類がある:

- PCI Express標準サイズの拡張カード
- 2.5インチのカード型。U.2コネクター(SFF-8639)の4レーンのPCI Express
  - U.3
- M.2コネクタ
- EDSFF (Enterprise and Data Center SSD Form Factor): SFF-TA-1002
  - E1.S: SFF-TA-1006
  - ES: SFF-TA-1008, SFF-TA-1023
    - E3.L
    - E3.S
- NGSFF (Next Generation Small Form Factor): NF1

### 経緯

不揮発性メモリにアクセスする新しい標準規格はインテル・デベロッパー・フォーラムで2007年に最初に公開され、コントローラーとフラッシュメモリー間のI/Fとして「Open NAND Flash Interface Working Group」のONFIが、ホストとコントローラのI/FとしてNVMHCIが示された。同年にインテルが主導するNVMHCIワーキンググループが結成された。NVMHCI 1.0の仕様の策定は2008年4月に完了しインテルのウェブサイトで公開された。

NVMeの技術的な策定は2009年後半に始まり、90社以上の企業で構成される「NVM Express Workgroup」で開発された。インテルのアンバー・ハフマンが同グループの議長を務めた。仕様書のバージョン1.0は2011年3月1日に、バージョン1.1は2012年10月11日に発表された。バージョン1.1で追加された主な特色はマルチパス I/O(名前空間の共有あり)と任意長のスキャッタ/ギャザーI/Oである。今後は名前空間管理の大幅な強化が期待されている。NVMe 1.1は機能に重点を置いているためエンタープライズNVMHCIとも呼ばれた。2013年1月、NVMe仕様のアップデートバージョン「1.0 e-」が公開された。

2012年8月には最初のNVMeチップセットがIntegrated Device Technology社から発売された(89HF16P04AG3および89HF32P08AG3)。最初のNVMeドライブは、2013年7月に発表されたサムスンのXS1715エンタープライズドライブであり、3 GB/s の読み取り速度をサポートし、同社の過去のエンタープライズ製品よりも6倍高速であるとしている。2013年11月に発売されたLSI SandForce SF3700 コントローラーもNVMeをサポートし、同コントローラーのPCI Express 2.0 ×4を搭載したサンプルでは、1,800 MB/秒の読み取り/書き込みシーケンシャル速度と、150K/80KのランダムIOPSが確認された。また、同コントローラーを使用したKingston HyperXのプロシューマー製品がコンシューマー・エレクトロニクス・ショー2014で展示され、同様の性能が示された。2014年6月、インテル初のNVMe製品として、PCI Expressバスのintel SSD データセンターファミリー DC P3700シリーズ、DC P3600シリーズ、DC P3500シリーズが発表された。

2014年3月にグループは法人化して「NVM Express, Inc.」となり、2014年11月時点で同社は65社以上の企業で構成されている。NVMeの仕様は同社が所有、保守しており、業界標準としての認知度向上も促進している。同社はPromoter Groupから選ばれた13名(シスコ、デル、EMC、HGST、インテル、マイクロン、マイクロソフト、NetApp、Oracle、PMC、サムスン、サンディスク、シーゲイト)の取締役会によって運営されている。

## AHCIとの違い

Advanced Host Controller Interface (AHCI) は幅広いソフトウェアとの互換性が利点であるが、PCI Expressに接続したSSDの性能を発揮しきれないという欠点もある。AHCIは当時一般的であったハードディスクとCPUやメモリの接続を念頭に設計されたためである。SSDはハードディスクと比べると半導体メモリ寄りの特性を持つ。

NVMeはPCIe SSDの低遅延、並列性と現代的なCPU、プラットフォーム、アプリケーションの並列処理との組み合わせを最大限に生かすために一から設計しなおされた。結果として下表の通り様々なパフォーマンスが改善された。

AHCI と NVMeの仕様の違い

|  | AHCI | NVMe |
| --- | --- | --- |
| 最大キュー深度 | コマンドキュー: 1個 32 コマンド/キュー | コマンドキュー: 65536個 65536 コマンド / キュー |
| Un-cacheable register accesses (2000 サイクル毎) | 6 / 未キューコマンド 9 / キュー済コマンド | 2 / コマンド |
| MSI-Xと割り込みステアリング | 単一の割り込み ステアリング 無し | 2048 MSI-X 割り込み |
| 並列処理、マルチスレッド | 同期ロックが必要 | ロック不要 |
| 4 KB コマンドの効率 | コマンド・パラメータ はホスト側のDRAMから直列で2フェッチが必要 | コマンド・パラメータ は単一のフェッチ(64 Byte)で済む |

## 仕様

これまでのNVMeの仕様は以下の通り。

- 1.0e (2013年1月)
- 1.1b (2014年7月)
- 1.2 (2014年11月)
  - 1.2a (2015年10月)
  - 1.2b (2016年6月)
  - 1.2.1 (2016年6月)
- 1.3 (2017年5月)
  - 1.3a (2017年10月)
  - 1.3b (2018年5月)
  - 1.3c (2018年5月)
  - 1.3d (2019年3月)
- 1.4 (2019年6月)
  - 1.4a (2020年3月)
  - 1.4b (2020年9月)

- 2.0 (2021年5月)
  - 2.0a (2021年7月)
  - 2.0b (2022年1月)

## 対応OS

- VirtIOブロックドライバ
- SCSI層(SATAドライバ)
- ループデバイスドライバ
- アンソートブロックイメージ (UBI)ドライバ(フラッシュメモリの消去ブロック管理層)
- RBDドライバ(Ceph RADOSオブジェクトをブロックデバイスとしてエクスポート)