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月に完了しインテルのウェブサイトで公開されたhttp://www.bswd.com/FMS09/FMS09-T2A-Huffman.pdf  http://www.flashmemorysummit.com/English/Collaterals/Proceedings/2008/20080813_T2A_Huffman.pdf。

NVMeの技術的な策定は2009年後半に始まりhttp://www.flashmemorysummit.com/English/Collaterals/Proceedings/2013/20130813_A12_Onufryk.pdf、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の仕様は以下の通りNVMe Specifications。
 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 6.0でサポート。
 macOS
OS 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月にリリース）https://svn.openfabrics.org/svnrepo/nvmewin/releases/。

 ソフトウェアサポート 
 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 Express Storage, Linux Foundation, March 12, 2015, by Keith Busch
 SNIA: Solid State Drive Form Factors
 Samsung: NGSFF SSD

Category:インタフェース規格
Category:補助記憶装置
Category:PCI Express