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

Non-Volatile Memory Host Controller Interface Working Group
略称 NVMe
設立 2011年
ウェブサイト nvmexpress.org
テンプレートを表示
PCI Expressの拡張カード型(上)と、M.2コネクタのもの(下)

概要

編集
NVMeを使用したPCI Express 3.0×4接続のSSD

シリアル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
  • NGSFF (Next Generation Small Form Factor): NF1

経緯

編集

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

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

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

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

AHCIとの違い

編集

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

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

AHCI と NVMeの仕様の違い[20][21]
  AHCI NVMe
最大キュー深度 コマンドキュー: 1個

32 コマンド/キュー

コマンドキュー: 65536個

65536 コマンド / キュー[23]

Un-cacheable register accesses (2000 サイクル毎) 6 / 未キューコマンド

9 / キュー済コマンド

2 / コマンド
MSI-Xと割り込みステアリング 単一の割り込み

ステアリング 無し

2048 MSI-X 割り込み
並列処理、マルチスレッド 同期ロックが必要 ロック不要
4 KB コマンドの効率 コマンド・パラメータ はホスト側のDRAMから直列で2フェッチが必要 コマンド・パラメータ は単一のフェッチ(64 Byte)で済む

仕様

編集

これまでのNVMeの仕様は以下の通り[24]

  • 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

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

ソフトウェアサポート

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

脚注

編集
  1. ^ NVMeBMaster. “Specifications” (英語). NVM Express. 2021年7月7日閲覧。
  2. ^ Speeding up Flash... in a flash”. The Inquirer (2007年10月13日). 2014年1月11日閲覧。
  3. ^ http://www.bswd.com/FMS09/FMS09-T2A-Huffman.pdf
  4. ^ Flash new standard tips up”. The Inquirer (2008年4月16日). 2014年1月11日閲覧。
  5. ^ http://www.flashmemorysummit.com/English/Collaterals/Proceedings/2008/20080813_T2A_Huffman.pdf
  6. ^ a b http://www.flashmemorysummit.com/English/Collaterals/Proceedings/2013/20130813_A12_Onufryk.pdf
  7. ^ “New Promoter Group Formed to Advance NVM Express”. Press release. (June 1, 2011). http://www.nvmexpress.org/wp-content/uploads/2013/04/NVMe_Press_Release_New-Promoter-Group_20110601.pdf September 18, 2013閲覧。 
  8. ^ Amber Huffman editor (October 11, 2012). “NVM Express Revision 1.1”. Specification. September 18, 2013閲覧。
  9. ^ David A. Deming (2013年6月8日). “PCIe-based Storage” (PDF). snia.org. 2014年1月12日閲覧。
  10. ^ Amber Huffman editor (January 23, 2013). “NVM Express Revision 1.0e”. Specification. September 18, 2013閲覧。
  11. ^ IDT releases two NVMe PCI-Express SSD controllers”. The Inquirer (2012年8月21日). 2014年1月11日閲覧。
  12. ^ IDT Shows Off The First NVMe PCIe SSD Processor and Reference Design - FMS 2012 Update”. The SSD Review (2012年8月24日). 2014年1月11日閲覧。
  13. ^ Samsung Announces Industry’s First 2.5-inch NVMe SSD | StorageReview.com - Storage Reviews”. StorageReview.com (2013年7月18日). 2014年1月11日閲覧。
  14. ^ LSI SF3700 SandForce Flash Controller Line Unveiled | StorageReview.com - Storage Reviews”. StorageReview.com (2013年11月18日). 2014年1月11日閲覧。
  15. ^ LSI Introduces Blazing Fast SF3700 Series SSD Controller, Supports Both PCIe and SATA 6Gbps”. hothardware.com. 21 March 2015閲覧。
  16. ^ Jane McEntegart. “Kingston Unveils First PCIe SSD: 1800 MB/s Read Speeds”. Tom's Hardware. 21 March 2015閲覧。
  17. ^ Kingston HyperX Predator PCI Express SSD Unveiled With LSI SandForce SF3700 PCIe Flash Controller”. hothardware.com. 21 March 2015閲覧。
  18. ^ Intel® Solid-State Drive Data Center Family for PCIe*”. Intel. 21 March 2015閲覧。
  19. ^ NVM Express  » NVM Express Organization History”. www.nvmexpress.org. 23 December 2015閲覧。
  20. ^ a b c Dave Landsman (2013年8月9日). “AHCI and NVMe as Interfaces for SATA Express Devices – Overview” (PDF). SATA-IO. 2013年10月2日閲覧。
  21. ^ a b c Dave Landsman and Don Walker (2013年11月15日). “NVMe and AHCI as SATA Express Interface Options final” (PDF). SATA-IO. 2023年11月7日閲覧。
  22. ^ a b Andy Herron (2013年). “Advancements in Storage and File Systems in Windows 8.1” (PDF). snia.org. 2014年1月10日時点のオリジナルよりアーカイブ。2014年1月11日閲覧。
  23. ^ NVM Express specification revision 1.2. section 1.4 Theory of Operation. http://nvmexpress.org/wp-content/uploads/NVM_Express_1_2_Gold_20141209.pdf. 
  24. ^ NVMe Specifications
  25. ^ Linux Storage Stack Diagram”. Thomas-Krenn.AG (2015年6月1日). 2015年6月8日閲覧。
  26. ^ NVM Express  » ChromeOS adds boot support for NVM Express”. nvmexpress.org. 21 March 2015閲覧。
  27. ^ 4f503189f7339c667b045ab80a949964ecbaf93e - chromiumos/platform/depthcharge - Git at Google”. googlesource.com. 21 March 2015閲覧。
  28. ^ DragonFly BSD 4.6”. www.dragonflybsd.org. 2016年9月8日閲覧。
  29. ^ Log of /head/sys/dev/nvme”. FreeBSD source tree. The FreeBSD Project. 16 October 2012閲覧。
  30. ^ Log of /stable/9/sys/dev/nvme”. FreeBSD source tree. The FreeBSD Project. 3 July 2013閲覧。
  31. ^ FreeBSD 10.2-RELEASE Release Notes”. The FreeBSD Project. 5 August 2015閲覧。
  32. ^ #9910 NVMe devices support”. dev.haiku-os.org. 2016年7月28日閲覧。
  33. ^ 4053 Add NVME Driver Support to Illumos”. github.com. 2016年5月23日閲覧。
  34. ^ Ho, Joshua. “iPhone 6s and iPhone 6s Plus Preliminary Results”. www.anandtech.com. 2016年6月1日閲覧。
  35. ^ Matthew Wilcox (2011年3月3日). “NVM Express driver”. LWN.net. 2013年11月5日閲覧。
  36. ^ Keith Busch (2013年8月12日). “Linux NVMe Driver” (PDF). flashmemorysummit.com. 2013年11月5日閲覧。
  37. ^ IDF13 Hands-on Lab: Compiling the NVM Express Linux Open Source Driver and SSD Linux Benchmarks and Optimizations” (PDF). activeevents.com (2013年). 2014年1月11日閲覧。
  38. ^ Merge git://git.infradead.org/users/willy/linux-nvme”. kernel.org (2012年1月18日). 2013年11月5日閲覧。
  39. ^ Linux kernel 3.13, Section 1.1 A scalable block layer for high-performance SSD storage”. kernelnewbies.org (2014年1月19日). 2014年1月25日閲覧。
  40. ^ Jonathan Corbet (2013年6月5日). “The multiqueue block layer”. LWN.net. 2014年1月25日閲覧。
  41. ^ Linux Block IO: Introducing Multi-queue SSD Access on Multi-core Systems” (PDF). kernel.dk. ACM (2013年). 2014年1月25日閲覧。
  42. ^ Linux kernel 3.18, Section 1.8. Optional multiqueue SCSI support”. kernelnewbies.org (2014年12月7日). 2014年12月18日閲覧。
  43. ^ Linux kernel 4.0, Section 3. Block”. kernelnewbies.org (2015年5月1日). 2015年5月2日閲覧。
  44. ^ Linux Multi-Queue Block IO Queueing Mechanism (blk-mq) - Device Drivers”. thomas-krenn.com (2015年6月8日). 2015年6月8日閲覧。
  45. ^ nvme -- Non-Volatile Memory Host Controller Interface”. NetBSD manual pages (2016年1月1日). 2016年9月2日閲覧。
  46. ^ David Gwynne (2014年4月16日). “non volatile memory express controller (/sys/dev/ic/nvme.c)”. BSD Cross Reference. 2014年4月27日閲覧。
  47. ^ David Gwynne (2016年4月14日). “man 4 nvme”. OpenBSD man page. 2016年8月7日閲覧。
  48. ^ Faster 'NVM Express' SSD Interface Arrives on Retina MacBook and OS X 10.10.3”. macrumors.com. 11 April 2015閲覧。
  49. ^ nvme(7D)”. Oracle. 2014年12月2日閲覧。
  50. ^ Intel Solid-State for NVMe Drivers”. intel.com (2015年9月25日). 2016年3月17日閲覧。
  51. ^ VMware Compatibility Guide for NVMe devices”. vmware.com. 2016年3月17日閲覧。
  52. ^ VSAN Now Supporting NVMe Devices”. vmware.com (2015年11月11日). 2016年3月17日閲覧。
  53. ^ Windows 8.1 to support hybrid disks and adds native NVMe driver”. Myce.com (2013年9月6日). 2014年1月11日閲覧。
  54. ^ Update to support NVM Express by using native drivers in Windows 7 or Windows Server 2008 R2”. Microsoft (2014年11月13日). 2014年11月17日閲覧。
  55. ^ Windows NVM Express”. Project web site. September 18, 2013閲覧。
  56. ^ https://svn.openfabrics.org/svnrepo/nvmewin/releases/
  57. ^ ChangeLog/1.6”. qemu.org. 21 March 2015閲覧。
  58. ^ Download EDK II from”. SourceForge.net. 2014年1月11日閲覧。

関連項目

編集

Advanced Host Controller Interface

外部リンク

編集