NVM Express

出典: フリー百科事典『ウィキペディア(Wikipedia)』

出典: フリー百科事典『ウィキペディア(Wikipedia)』
検索に移動
Non-Volatile Memory Host Controller Interface Working Group
NVM Express logo.svg
略称 NVMe
設立 2011年
ウェブサイト nvmexpress.org
テンプレートを表示
PCI Expressの拡張カード型(上)と、M.2コネクタのもの(下)

NVM Express (NVMe、エヌブイエムイー) もしくは NVMHCI (Non-Volatile Memory Host Controller Interface) は、PCI Express (PCIe) を通じて、不揮発性ストレージメディアを接続するための論理デバイスインターフェースの規格であり、AHCIに代わる次世代の接続プロトコル規格である。2019年9月現在の最新規格はRev.1.4[1]

NVMは、SSDの中に広く用いられているのがフラッシュメモリという不揮発性メモリ (Non-Volatile Memory) であることから、その頭文字を取ったものである。論理デバイスインターフェースとしてのNVM Expressは、近代的なCPU、プラットフォーム、アプリケーションの並列性を反映するように、フラッシュメモリーベースのストレージとして、その低いレイテンシ、内部並列性を最大限利用するよう設計された。

NVM Expressは、新しい世代のSSDが提供する高い並列処理性能を、ホストハードウェアやソフトウェアが十分に引き出せるよう設計されている。その結果、NVM Expressは、それ以前の論理デバイスインターフェースに比較して、I/Oオーバーヘッドを下げ、様々なパフォーマンスの改善をもたらしたほか、並列度の高い長いコマンドキューと、低レイテンシをもたらす。

NVM Expressデバイスには次のものがある。

  • 標準サイズのPCI Expressの拡張カード型
  • 2.5インチのカード型で、U.2コネクター(SFF-8639)を通じて4レーンのPCI Expressインターフェースを内部に持つ、2.5インチフォームファクタのもの
  • M.2コネクタのもの

SATA ExpressストレージデバイスとM.2規格は、コンピューター内で拡張カード上に搭載する場合、NVM Expressの論理デバイスインターフェースとしてもサポートされる。

概要[編集]

論理デバイスインターフェースとしてNVM Expressを使用したPCI Express 3.0×4接続のSSD

シリアルATA (SATA) は主に機械的ディスク、HDD (Hard Disk Drive) 用に設計されたものであったため、SATAの物理的な限界、転送速度である6 Gbpsを超えることは出来ず、SATAの最大スループットによってSSDの性能が制限されてしまうこととなった。

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

経緯[編集]

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

NVMeの技術的な策定は2009年後半に始まった[6]。NVMeの仕様は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]。2011年6月には7社を中心とした「Promoter group」が結成された。

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月、インテルの最初のNVM Express製品として、PCI Expressバスを介してホストとインターフェイスするintel SSD データセンターファミリーのDC P3700シリーズ、DC P3600シリーズ、DC P3500シリーズを発表した[18]。 2014年11時点でNVMeドライブは市販されている。

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

AHCIとの違い[編集]

Advanced Host Controller Interface (AHCI) には、その従来の実績から幅広いソフトウェアとの互換性があるという利点があるが、PCI Expressバスに接続したSSDでは性能を発揮しきれないという欠点もある。なぜかといえば、そのインターフェースとしての論理的な設計が、当時一般的であったハードディスクの諸特性にもとづいてCPUやメモリサブシステムとつなぐことが想定されたものだからである。結果として、SSDでは効率の低下を引き起こすことがある。SSDの特性が、ハードディスクと比べると半導体メモリ寄りだからである[20]

一方、NVMeはPCI Express SSDの低遅延で並列化された通信と、現代的なCPU、プラットフォーム、アプリケーションによる並列処理との組み合わせを最大限に生かすために、一から設計しなおされたものである。このNVMeのAHCIに対する優位性は、ホスト側ハードウェアとソフトウェアによる高度な並列処理に関連している。これらは下表のコマンドキュー深度の違い、割り込みの処理の効率、 uncacheable register accesses数などから明らかであり、このようにして様々なパフォーマンスの改善が実現されている[20][21]:17–18

下表はNVMe、AHCI両論理インターフェース規格の高レベルでの比較である。

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

32 コマンド/キュー

コマンドキュー: 65536個

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

Uncacheable register accesses (2000 サイクル毎) 6 / キュー済コマンド

9 / 未キューコマンド

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

ステアリング 無し

2048 MSI-X 割り込み
並列処理、マルチスレッド コマンドを発行するために、

同期ロックが必要

ロック不要
4 KB コマンドの効率 コマンド・パラメータ は

ホスト側のDRAMから直列で2フェッチが必要

コマンド・パラメータ は

単一のフェッチ(64 Byte)で済む

NVM ExpressをサポートするOS[編集]

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

ソフトウェアのサポート[編集]

QEMU
2013年8月15日にリリースされた v1.6以降のQEMUがNVMeに対応している[55]
UEFI
SourceforgeUEFIオープンソース NVMeドライバーが利用可能[56]
VirtualBox

脚注[編集]

  1. ^ NVMeBMaster. “Specifications” (英語). NVM Express. 2019年9月18日閲覧。
  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. (2011年6月1日). http://www.nvmexpress.org/wp-content/uploads/2013/04/NVMe_Press_Release_New-Promoter-Group_20110601.pdf 2013年9月18日閲覧。 
  8. ^ Amber Huffman editor (2012年10月11日). “NVM Express Revision 1.1”. Specification. 2013年9月18日閲覧。
  9. ^ David A. Deming (2013年6月8日). “PCIe-based Storage (PDF)”. snia.org. 2014年1月12日閲覧。
  10. ^ Amber Huffman editor (2013年1月23日). “NVM Express Revision 1.0e”. Specification. 2013年9月18日閲覧。
  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. 2015年3月21日閲覧。
  16. ^ Jane McEntegart. “Kingston Unveils First PCIe SSD: 1800 MB/s Read Speeds”. Tom's Hardware. 2015年3月21日閲覧。
  17. ^ Kingston HyperX Predator PCI Express SSD Unveiled With LSI SandForce SF3700 PCIe Flash Controller”. hothardware.com. 2015年3月21日閲覧。
  18. ^ Intel® Solid-State Drive Data Center Family for PCIe*”. Intel. 2015年3月21日閲覧。
  19. ^ NVM Express » NVM Express Organization History”. www.nvmexpress.org. 2015年12月23日閲覧。
  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 Andy Herron (2013年). “Advancements in Storage and File Systems in Windows 8.1 (PDF)”. snia.org. 2014年1月10日時点のオリジナルよりアーカイブ。2014年1月11日閲覧。
  22. ^ 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. 
  23. ^ Linux Storage Stack Diagram”. Thomas-Krenn.AG (2015年6月1日). 2015年6月8日閲覧。
  24. ^ NVM Express » ChromeOS adds boot support for NVM Express”. nvmexpress.org. 2015年3月21日閲覧。
  25. ^ 4f503189f7339c667b045ab80a949964ecbaf93e - chromiumos/platform/depthcharge - Git at Google”. googlesource.com. 2015年3月21日閲覧。
  26. ^ DragonFly BSD 4.6”. www.dragonflybsd.org. 2016年9月8日閲覧。
  27. ^ Log of /head/sys/dev/nvme”. FreeBSD source tree. The FreeBSD Project. 2012年10月16日閲覧。
  28. ^ Log of /stable/9/sys/dev/nvme”. FreeBSD source tree. The FreeBSD Project. 2013年7月3日閲覧。
  29. ^ FreeBSD 10.2-RELEASE Release Notes”. The FreeBSD Project. 2015年8月5日閲覧。
  30. ^ #9910 NVMe devices support”. dev.haiku-os.org. 2016年7月28日閲覧。
  31. ^ 4053 Add NVME Driver Support to Illumos”. github.com. 2016年5月23日閲覧。
  32. ^ Ho, Joshua. “iPhone 6s and iPhone 6s Plus Preliminary Results”. www.anandtech.com. 2016年6月1日閲覧。
  33. ^ Matthew Wilcox (2011年3月3日). “NVM Express driver”. LWN.net. 2013年11月5日閲覧。
  34. ^ Keith Busch (2013年8月12日). “Linux NVMe Driver (PDF)”. flashmemorysummit.com. 2013年11月5日閲覧。
  35. ^ 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日閲覧。
  36. ^ Merge git://git.infradead.org/users/willy/linux-nvme”. kernel.org (2012年1月18日). 2013年11月5日閲覧。
  37. ^ Linux kernel 3.13, Section 1.1 A scalable block layer for high-performance SSD storage”. kernelnewbies.org (2014年1月19日). 2014年1月25日閲覧。
  38. ^ Jonathan Corbet (2013年6月5日). “The multiqueue block layer”. LWN.net. 2014年1月25日閲覧。
  39. ^ Linux Block IO: Introducing Multi-queue SSD Access on Multi-core Systems (PDF)”. kernel.dk. ACM (2013年). 2014年1月25日閲覧。
  40. ^ Linux kernel 3.18, Section 1.8. Optional multiqueue SCSI support”. kernelnewbies.org (2014年12月7日). 2014年12月18日閲覧。
  41. ^ Linux kernel 4.0, Section 3. Block”. kernelnewbies.org (2015年5月1日). 2015年5月2日閲覧。
  42. ^ Linux Multi-Queue Block IO Queueing Mechanism (blk-mq) - Device Drivers”. thomas-krenn.com (2015年6月8日). 2015年6月8日閲覧。
  43. ^ nvme -- Non-Volatile Memory Host Controller Interface”. NetBSD manual pages (2016年1月1日). 2016年9月2日閲覧。
  44. ^ David Gwynne (2014年4月16日). “non volatile memory express controller (/sys/dev/ic/nvme.c)”. BSD Cross Reference. 2014年4月27日閲覧。
  45. ^ David Gwynne (2016年4月14日). “man 4 nvme”. OpenBSD man page. 2016年8月7日閲覧。
  46. ^ Faster 'NVM Express' SSD Interface Arrives on Retina MacBook and OS X 10.10.3”. macrumors.com. 2015年4月11日閲覧。
  47. ^ nvme(7D)”. Oracle. 2014年12月2日閲覧。
  48. ^ Intel Solid-State for NVMe Drivers”. intel.com (2015年9月25日). 2016年3月17日閲覧。
  49. ^ VMware Compatibility Guide for NVMe devices”. vmware.com. 2016年3月17日閲覧。
  50. ^ VSAN Now Supporting NVMe Devices”. vmware.com (2015年11月11日). 2016年3月17日閲覧。
  51. ^ Windows 8.1 to support hybrid disks and adds native NVMe driver”. Myce.com (2013年9月6日). 2014年1月11日閲覧。
  52. ^ Update to support NVM Express by using native drivers in Windows 7 or Windows Server 2008 R2”. Microsoft (2014年11月13日). 2014年11月17日閲覧。
  53. ^ Windows NVM Express”. Project web site. 2013年9月18日閲覧。
  54. ^ https://svn.openfabrics.org/svnrepo/nvmewin/releases/
  55. ^ ChangeLog/1.6”. qemu.org. 2015年3月21日閲覧。
  56. ^ Download EDK II from”. SourceForge.net. 2014年1月11日閲覧。