NVM Express

NVM Express  もしくは NVMHCI (Non-Volatile Memory Host Controller Interface}

1. 概要
-----

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

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

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

NVMeデバイスには次の種類がある：

PCI Express標準サイズの拡張カード
2.5インチのカード型。U.2コネクターの4レーンのPCI Express
U.3
M.2コネクタ
EDSFF : SFF-TA-1002
E1.S: SFF-TA-1006
ES: SFF-TA-1008, SFF-TA-1023
E3.L
E3.S
NGSFF : NF1

1.1. 経緯
-------

不揮発性メモリにアクセスする新しい標準規格はインテル・デベロッパー・フォーラムで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社から発売された。最初の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名の取締役会によって運営されている。

2. AHCIとの違い
-----------

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

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



3. 仕様
-----

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

1.0e 
1.1b 
1.2 
1.2a 
1.2b 
1.2.1 
1.3 
1.3a 
1.3b 
1.3c 
1.3d 
1.4 
1.4a 
1.4b 
2.0 
2.0a 
2.0b 

4. 対応OS
-------

ChromeOS2015年2月24日、NVMeからの起動に対応。 DragonFly BSD DragonFly 4.6でドライバを搭載。FreeBSD HEADとSTABLE/9の両ブランチにインテルがドライバを提供した。FreeBSD 10.2 以降、nvd と nvme のドライバがGENERICカーネルに含まれている。Haiku 将来的に対応予定。illumos2014年10月15日に対応を開始。 iOSiPhone 6Sと6S PlusでAppleがスマートフォンでNVMe over PCIeを採用。その後同技術を使用するiPad ProとiPhone SE を発売。 BLKMQ}}Linux Intelは2012年3月19日リリースのLinuxカーネル3.3でドライバーを公開。 主にFusion-ioが開発した高性能SSD用のブロックレイヤー「//blk-multiqueue//」が2014年1月19日リリースのLinuxカーネル3.13に統合された。これによりより高いI/O送信率を実現している。Linuxカーネルのブロック層の新設計により内部キューは2つのレベルに分割され、ボトルネックが取り除かれてI/Oの高並列化が可能になった。 2015年4月12日にリリースされたLinuxカーネル4.0では以下のドライバがNVMeを使用するように変更された：
VirtIOブロックドライバ
SCSI層
ループデバイスドライバ
アンソートブロックイメージ ドライバ
RBDドライバ NetBSD 開発版でNVMeをサポート。実装はOpenBSD 6.0に由来。 OpenBSD 過去にUSB 2.0とAHCIサポートを担当していた上級開発者によって2014年4月から作業開始。OpenBSD   6.0でサポート。 OS   XOS&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デバイスをサポート。WindowsWindows 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。

5. ソフトウェアサポート
-------------

QEMU 2013年8月15日にリリースされた v1.6以降のQEMUがNVMeに対応。 UEFISourceforgeからUEFI用オープンソース NVMeドライバーが利用可能。

6. 脚注
-----

7. 関連項目
-------

Advanced Host Controller Interface

8. 外部リンク
--------

[1], LWN.net, April 19, 2013, by Jonathan Corbet
[2], Linux Foundation, March 12, 2015, by Keith Busch
[3]
[4]