NVM Express

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

## 概要

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

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

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

代表的なNVMeデバイスには次の種類がある：
* PCI Express標準サイズの拡張カード
* PCI Expresハーフハイトの拡張カード
* 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、プラットフォーム、アプリケーションの並列処理との組み合わせを最大限に生かすために一から設計しなおされた。結果として下表の通り様々なパフォーマンスが改善された  。

## 仕様
これまでの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

;ChromeOS
:2015年2月24日、NVMeからの起動に対応 。
; DragonFly BSD
: DragonFly 4.6でドライバを搭載。
;FreeBSD
: HEADとSTABLE/9の両ブランチにインテルがドライバを提供した。FreeBSD 10.2 以降、nvd(4) と nvme(4) のドライバがGENERICカーネルに含まれている。
;Haiku
: 将来的に対応予定。
;illumos
:2014年10月15日に対応を開始。
; iOS / iPadOS
:iPhone 6Sと6S PlusでAppleがスマートフォンでNVMe over PCIeを採用。その後同技術を使用するiPad ProとiPhone SE を発売。
; Linux
: Intelは2012年3月19日リリースのLinuxカーネル3.3でドライバーを公開。
: 主にFusion-ioが開発した高性能SSD用のブロックレイヤー「*blk-multiqueue*」（*blk-mq*）が2014年1月19日リリースのLinuxカーネル3.13に統合された。これによりより高いI/O送信率を実現している。Linuxカーネルのブロック層の新設計により内部キューは2つのレベル（CPUとハードウェアサブミッションキュー）に分割され、ボトルネックが取り除かれてI/Oの高並列化が可能になった  。
: 2015年4月12日にリリースされたLinuxカーネル4.0では以下のドライバがNVMeを使用するように変更された  ：
* VirtIOブロックドライバ
* SCSI層（SATAドライバ）
* ループデバイスドライバ
* アンソートブロックイメージ (UBI)ドライバ（フラッシュメモリの消去ブロック管理層）
* RBDドライバ（Ceph RADOSオブジェクトをブロックデバイスとしてエクスポート）
; NetBSD
: NetBSD-8.0でNVMeをサポート。実装はOpenBSD 6.0に由来。
; OpenBSD
: 過去にUSB 2.0とAHCIサポートを担当していた上級開発者によって2014年4月から作業開始。OpenBSD&nbsp;6.0でサポート。
; macOS
:OS&nbsp;X Yosemite10.10.3で導入。Retina MacBookはPCIe over NVMeをインターフェイスとして利用。
; Solaris
: Oracle Solaris 11.2でサポート。
; VMware
: IntelはvSphere 6.0以降へVMware用のドライバーを提供。vSphere 6 update 1では、VMwareのソフトウェア定義ストレージサブシステム「VSAN」もNVMeデバイスをサポート。
; Windows
: Windows 8.1およびWindows Server 2012 R2から対応 。Windows 7およびWindows Server 2008 R2もアップデートでドライバが提供された。
: OpenFabricsアライアンスは、Windows 7/8/8.1及びWindows Server 2008R2/2012/2012R2用のオープンソースのNVMe Windowsドライバーを保持している。これはNVMeワークグループの一部のプロモーター企業、特にIDT、Intel、LSIのベースラインコードから開発されている。現行バージョンは1.4（2014年12月にリリース）。

## ソフトウェアサポート
; QEMU
: 2013年8月15日にリリースされた v1.6以降のQEMUがNVMeに対応。
; UEFI
:SourceforgeからUEFI用オープンソース NVMeドライバーが利用可能。

## 脚注

## 関連項目
Advanced Host Controller Interface

## 外部リンク

* 
* LFCS: Preparing Linux for nonvolatile memory devices, LWN.net, April 19, 2013, by Jonathan Corbet
* Multipathing PCI&nbsp;Express Storage, Linux Foundation, March 12, 2015, by Keith Busch
* SNIA: Solid State Drive Form Factors
* Samsung: NGSFF SSD