要約

  • NVM Express, Inc.は NVMe 仕様群を管理する非営利の業界コンソーシアムであり、SSD、controller、switch、storage system を製造する会社ではない。
  • NVMe は HDD 時代の狭く直列的な queue の前提を、多数の submission queue と completion queue へ置き換え、並列 flash と multicore CPU に合わせた。
  • 同じ controller、subsystem、namespace の意味を、ローカル PCIe でも、NVMe over Fabrics を通じた TCP や RDMA でも利用できる。
  • NVMe 2.x はモジュール構造である。2026年8月4日に公開された2.4 set は、Base、PCIe/RDMA/TCP transport、NVMe-MI、Boot、複数の専用 command set をまとめる。
  • NVMe は容量を composable にするが、filesystem、耐久性、RAID、erasure coding、network design、運用セキュリティ、application consistency は定義しない。

ストレージ命令は基本言語を変えずにサーバーの外へ出られる

一つの read command は、PCIe で接続されたローカル namespace へ向かうことも、fabric 上の遠隔 subsystem へ向かうこともできる。media、controller、path は変わるが、command と queue の基本モデルは保たれる。

この連続性が disaggregation を可能にする。容量を共有 pool へ集め、利用する host へ必要に応じて割り当てられるため、すべての device を同じ chassis に置く必要はない。

しかし、外部化によって discovery、network、multipath、authentication、reconnect、新しい failure domain が加わる。NVMe は storage をプログラム可能なサービスにするが、topology を消すわけではない。

Flash には機械的遅延ではなく並列性を前提にした protocol が必要だった

従来の storage interface は、回転ディスクの遅延と限られた並列処理を背景にしていた。Flash は多数の操作を並列に処理でき、現代の server は多くの CPU core を持つ。

NVMe は memory 上に submission queue と completion queue の組を置く。Host は command を書き、doorbell で controller へ通知し、interrupt または polling で completion を受け取る。複数 queue を core や process へ分ければ、共有 lock と contention を減らせる。

実性能は controller firmware、PCIe topology、NUMA、queue depth、interrupt 設定、workload に依存する。NVMe という名称だけで特定の latency や throughput は保証されない。

コンソーシアムは protocol governance と製品競争を分離する

NVMe の作業は2000年代末に始まり、1.0は2011年に公開され、NVM Express, Inc.は2014年に設立された。CPU、media、controller、network、cloud、system の企業が参加する。

調査時点では、Google の Amber Huffman が President、AMD の Curtis Ballard が Treasurer、Microchip の David Allen が Secretary を務め、公開 Board には13人の promoter 代表がいた。

コンソーシアムは共通契約と compliance を整える。会員は silicon、firmware、system、support、performance で競争を続ける。会員であることは、すべての feature の実装を意味しない。

NVMe 2.0は肥大化した一冊をモジュール仕様群へ変えた

複数 transport と新しい data model が加わるにつれ、一つの文書ですべてを保守することが難しくなった。2021年の2.0再構成は、Base、command set、transport を分離した。

この構造なら TCP を進化させても全 command を書き直す必要がなく、Zoned Namespace も標準 block controller を変えずに拡張できる。代わりに version matrix は複雑になる。

2026年8月4日に公開された2.4 set には、Base 2.4、PCIe Transport 1.4、RDMA Transport 1.3、TCP Transport 1.3、NVMe-MI 2.2、Boot 1.4、NVM、Key Value、Zoned Namespace、Computational Programs、Simple Log Memory の各 command set が含まれた。「NVMe 2.4」は一つのファイルではない。

Submission と completion queue は storage work を CPU core へ近づける

Host は submission queue へ command を書き、controller は completion queue へ status を返す。Core や application ごとに別の queue pair を使い、競合を減らせる。

Doorbell は新しい work を通知する。Polling は latency を下げる場合があるが CPU を消費する。Interrupt coalescing は CPU 負荷を下げる一方で待ち時間を増やし得る。Queue depth は利用率と tail latency の両方に影響する。

深い queue が常に良いわけではない。飽和を隠し、待ち時間を延ばすこともある。設定は workload と SLA に合わせる必要がある。

Controller、subsystem、namespace は論理 endpoint と物理 media を分ける

Controller は queue と command を公開する。Subsystem は複数 controller を含み得る。Namespace は host から見える論理容量で、複数 path から提供できる。

Host が見る identity は、一枚の SSD と一致する必要がない。Array は多数の media を束ねて安定した namespace を提示できる。

NVMe は data placement、replication、protection を決めない。RAID、erasure coding、thin provisioning、snapshot、consistency は周辺 system の責任である。

Administrative command は通常 I/O と同じくらい重要である

Admin queue は identification、I/O queue 作成、feature、log、firmware、namespace、security を管理する。通常の read/write が成立する環境を制御する層である。

誤った admin command は namespace 削除、誤 firmware activation、power state 変更を引き起こす。Permission、audit、change control が必要だ。

Admin と I/O を分離しても control plane の重要性は下がらない。Fabric では両方が同じ network と identity に依存する場合がある。

PCIe はローカル経路を memory と hardware へ近づける

NVMe over PCIe はローカル bus 上の共有 memory structure と controller register を使う。Server 内 SSD や card へ最も直接的に接続する形である。

物理的に近いことは topology が単純という意味ではない。Device は PCIe switch の先、別 NUMA socket、共有 lane 上にあるかもしれない。CPU、memory、device の配置が performance を左右する。

Drive 数だけでは不十分である。Media へ到達する前に、host 内部の PCIe path で latency が生じ得る。

NVMe over Fabrics はローカル controller 関係を network service へ変える

NVMe-oF 1.0と NVMe-MI 1.0は2016年6月9日に公開された。NVMe-oF は command capsule と data を遠隔 subsystem へ運び、host が fabric 上に queue を作る。

容量 pool を複数 host で共有し、compute と storage を分離できる。Host を交換しても data を動かさずに済む。

一方で NIC、switch、route、discovery、controller、authentication、multipath が data path へ入る。Network は単なる接続ではなく、data integrity system の一部になる。

Discovery controller は動的接続を容易にし、重要依存も作る

Host は discovery controller へ問い合わせ、利用可能な subsystem、address、service を知る。Target ごとの手動設定が減り、resource を動的に追加できる。

誤情報や service outage は新しい connection を妨げ、誤 target へ誘導する。Redundancy、cache、validation、identity protection が必要だ。

Discovery availability と data path availability は同一ではない。既存 session が動く一方、新しい host だけ接続できないことがある。

NVMe/TCP は一般的な IP network へ storage fabric を広げた

2019年に標準化された NVMe/TCP は command と data を TCP connection へ mapping する。Operator は routed Ethernet、IP tool、firewall、既存運用を使え、RDMA fabric を必須としない。

容易さには overhead がある。TCP stack、copy、interrupt、CPU は tail latency へ影響する。Kernel implementation、offload、transfer size、tuning が重要になる。

Transport は storage 向け framing と digest を持ち、TLS も利用できる。TLS 対応は、TLS が有効で正しく管理されていることを意味しない。

NVMe/RDMA は低 latency を狙い、厳密な fabric 設計を要求する

RDMA は queue pair、registered memory、NIC offload を使い、CPU 介入を減らして data を動かす。HPC と AI で microsecond と CPU cycle が重要な場合に有効である。

RDMA は一つの network ではない。RoCE、iWARP などの binding は、congestion、loss、PFC、ECN、memory registration で異なる要求を持つ。

高速 benchmark は簡単な operation を保証しない。Fabric 障害は storage timeout として見え、network と system の両方の知識が必要になる。

Multipath は冗長性を host の policy へ変える

一つの namespace は複数 controller と path から見える。Host は load balance と failover を選ぶ。Asymmetric Namespace Access は optimized、non-optimized、unavailable path を示す。

二本の link が同じ switch、controller、power、route を共有することもある。独立性は実際の failure test で確かめる必要がある。

誤った policy は遅い path へ I/O を流し、壊れた path を長く保持する。冗長性は port 数ではなく動作で評価する。

Reservation は共有アクセスを調整するが consensus を代替しない

NVMe reservation は host を登録し、namespace を reserve して未承認 writer を防ぐ。Cluster と failover で役立つ。

しかし cluster consensus や application consistency を置き換えない。故障 host が state を残すことがあり、fencing で古い node の write を防がなければならない。

Recovery を誤ると、保護策が outage や corruption の原因になる。

Storage が PCIe を離れると authentication と TLS が不可欠になる

ローカル device は一定の物理境界を前提にできた。Network 上では initiator と target が identity を証明し、必要な channel を保護する必要がある。

NVMe は authentication を定義し、NVMe/TCP は TLS を利用できる。実効性は key、certificate、rotation、algorithm、access policy、implementation に依存する。Support だけでは安全運用にならない。

Discovery、admin、data plane を一緒に評価する必要がある。本物の identity でも権限が広すぎれば危険だ。

NVMe-MI は application I/O と別の management path を提供する

NVMe Management Interface は subsystem の発見、health の読取、device inventory、管理 action を可能にし、主 I/O path が使われない時にも役立つ。

Maintenance と recovery に有用だが、別の高権限 interface も増える。集中 tool は機密情報を読み、大量 device を変え得る。

NVMe-MI は Redfish などと統合できる。統合は各標準と vendor の責任を一つにするものではない。

Zoned Namespace は media の制約を host software へ見せる

ZNS は capacity を順次書込の zone へ分ける。Host が media layout を知れば、controller 内部の garbage collection を減らし、endurance や predictability を改善できる。

効果を得るには zone-aware filesystem、database、storage layer が必要である。従来の block device 向け application が自動で恩恵を受けるわけではない。

ZNS は NVMe の取引を示す。Media behavior を公開すれば効率は上がるが、software portability の要求も増える。

Key Value、Simple Log Memory、Computational Programs は namespace の意味を広げる

専用 command set は key/value、簡単な log memory、storage 近傍での program execution を可能にし、変換や data movement を減らそうとする。

採用には controller、driver、library、application が必要である。仕様に存在しても、すべての SSD や array が提供するわけではない。

Option が増えるほど capability discovery と fallback が重要になる。Modularity は柔軟性と同時に新しい商用 matrix を生む。

Compliance は有用な証拠だが end-to-end performance を認証しない

Compliance program と interoperability workshop は、host-controller 間の具体動作を試し、文書だけでは分からない不一致を見つける。

List への掲載は、すべての topology で latency、endurance、recovery、security を保証しない。Optional feature と driver-firmware matrix は変化する。

購入者は compliance を最低線とし、自身の workload、failure、upgrade を試験すべきである。

Disaggregation は capacity を host から分離し、責任も再配分する

Local storage では device、server、system team が結び付きやすかった。Remote pool は複数 consumer を支え、allocation を software で変えられる。

Network、storage、platform、security、application team が同じ incident を共有する。Fabric degradation が database 障害に見え、controller firmware 障害が network loss に見えることもある。

経済性は単価だけでなく、capacity utilization と運用能力に依存する。

AI は storage latency を compute cost へ変える

Training は dataset を読み、checkpoint を書き、大規模な state を動かす。数千 accelerator が待てば、storage tail latency は高価な compute を浪費する。

TCP、RDMA、multipath、shared namespace は異なる architecture を提供する。Congestion、metadata、queue behavior、failure、recovery を含めて選ぶ必要がある。

目標は peak throughput だけでなく、同期負荷で予測可能な queue latency と recovery である。

NVMe 2.4は広い範囲と version pressure を示す

2.4 set は Base、transport、Boot、Management Interface、専用 command set をまとめる。NVMe は SSD connector ではなく、storage protocol stack になった。

Host が Base 2.4を支えても全 command set を持つとは限らず、TCP controller と RDMA 製品の feature も異なる。Support statement は具体的でなければならない。

Driver、OS、firmware、transport、management tool の組み合わせが、実際には protocol の一部になる。

NVMe は storage を composable にしたが、単純にはしなかった

共通契約は一つの switching cost を下げる。Command と namespace は PCIe から fabric へ、または vendor 間で移り得る。Data migration、security、network、observability、support は残る。

利点は protocol と product の分離である。リスクは、NVMe という同じ名称が非常に異なる architecture を隠すことだ。

Storage は programmable で distributed になるが、failure 時に全経路を理解すべき data integrity system であり続ける。