要点

  • NVM Express, Inc. は、NVMe ファミリーを管理する非営利の業界団体です。SSD、コントローラ、スイッチ、ストレージシステムを製造しているわけではありません。

  • NVMe は、機械式ディスクから受け継がれた単一の狭いキューの前提を、メモリ内の複数のサブミッションキューとコンプリーションキューに置き換え、並列フラッシュとマルチコアプロセッサに適合させました。

  • 同じコントローラ・サブシステム・ネームスペースのモデルは、PCIe 上でローカルに動作することも、TCP や RDMA を使う NVMe over Fabrics 経由でリモートに動作することもできます。

  • NVMe 2.x シリーズはモジュール化された標準になりました。2026年8月4日に公開された 2.4 パッケージには、Base、PCIe/RDMA/TCP トランスポート、NVMe-MI、Boot、および複数の専門コマンドセットが含まれます。

  • このプロトコルは容量を構成可能にしますが、ファイルシステム、耐久性、RAID、イレイジャーコーディング、ネットワーク設計、運用セキュリティ、アプリケーションの整合性を定めるものではありません。

ストレージコマンドは、基本となる言語を変えずにサーバーの外へ出られる

読み取りは、PCIe に接続されたローカルのネームスペースに向かうことも、ファブリック越しのリモートのサブシステムに向かうこともあります。媒体とコントローラと経路は変わりますが、コマンドモデルとキューは共通のままです。

この連続性により、ストレージの分離が可能になります。各デバイスをそれを消費するサーバー内に置く代わりに、容量をプールして必要なときにホストへ割り当てることができます。

ただし分離によって、ディスカバリ、ネットワーク、マルチパス、認証、再接続、そして新たな障害ドメインが加わります。NVMe はストレージをプログラム可能なサービスに変えますが、トポロジをなくすわけではありません。

フラッシュには並列性を前提としたプロトコルが必要だった

初期のインターフェースは、機械式ディスクと限られたキューの時代を反映していました。フラッシュは多くの操作を同時に処理でき、現代のサーバーは多数のコアを備えています。

NVMe は、メモリ内のサブミッションキューとコンプリーションキューのペアを使用します。ホストはコマンドを書き込み、ドアベルを鳴らし、割り込みまたはポーリングで完了を受け取ります。複数のキューは共有ロックを減らし、特定のコアに割り当てることができます。

結果は、ファームウェア、PCIe トポロジ、NUMA、キューの深さ、割り込み、ワークロードに依存します。名称だけで誰にとっても同じ性能が保証されるわけではありません。

業界団体はプロトコルのガバナンスと商業競争を分離している

作業は2000年代後半に始まり、NVMe 1.0 は2011年に発行され、NVM Express, Inc. は2014年に設立されました。この団体には、プロセッサ、メディア、コントローラ、ネットワーク、クラウド、システムの各企業が参加しています。

本稿執筆時点では、Google の Amber Huffman が会長、AMD の Curtis Ballard が会計役、Microchip の David Allen が幹事を務め、総会には13人のプロモータ代表が名を連ねていました。

団体は仕様とコンプライアンスプログラムを定めます。会員各社はシリコン、ファームウェア、製品、サポート、性能で競争します。会員資格があるからといって、すべての機能が実装されているとは限りません。

NVMe 2.0 は肥大化した文書をモジュール式のファミリーへ変えた

トランスポートやデータモデルが追加されるにつれ、すべてを1つの文書にまとめることが難しくなりました。2021年の 2.0 再構成により、Base、コマンドセット、トランスポートが分離されました。

これにより、すべてのコマンドを書き直すことなく TCP を発展させ、従来のすべてのコントローラを変更することなく ZNS を発展させることができます。代償として、バージョンの組み合わせの行列は大きくなります。

2026年8月4日に公開された 2.4 パッケージには、Base 2.4、PCIe 1.4、RDMA 1.3、TCP 1.3、NVMe-MI 2.2、Boot 1.4、NVM、Key Value、Zoned Namespace、Computational Programs、Simple Log Memory が含まれます。「NVMe 2.4」は単一のファイルではありません。

サブミッションキューとコンプリーションキューは処理を CPU コアに近づける

ホストはサブミッションキューにコマンドを書き込み、コントローラはコンプリーションキューに結果を置きます。異なるプロセスやコアが独立したペアを使うことで、競合を減らせます。

ドアベルは新しい作業を通知します。ポーリングは遅延を減らすことがありますが CPU を消費します。割り込みコアレッシングはコストを減らす一方、待ち時間を増やします。キューの深さは利用率とテールレイテンシに影響します。

キューが深ければ常に良いわけではありません。飽和を隠し、待ち時間を増やすことがあります。設定はワークロードに合わせる必要があります。

コントローラ・サブシステム・ネームスペースは論理と媒体を分離する

コントローラはキューとコマンドを提供します。サブシステムは複数のコントローラを持つことができます。ネームスペースは、複数の経路からアクセスできる論理容量を表します。

ホストが見る識別子が単一のディスクである必要はありません。システムは多くの媒体をまとめて、安定したネームスペースとして提供できます。

NVMe は、データの配置、複製、保護を定めません。RAID、イレイジャーコーディング、シンプロビジョニング、整合性は、周囲のシステムに残ります。

管理コマンドが I/O の環境を定義する

管理キューは、識別、キューの作成、機能、ログ、ファームウェア、ネームスペース、セキュリティを管理します。読み取りと書き込みが動作するコンテキストを準備します。

管理コマンドは、ネームスペースを削除したり、誤ったファームウェアを有効化したり、電力を変更したりすることがあります。そのため、権限管理、監査、変更管理が必要です。

管理と I/O の分離は設計上有益ですが、コントロールプレーンの重要性が下がるわけではありません。ファブリックでは両方が同じネットワークに依存することがあります。

PCIe はローカルの経路をメモリとハードウェアに近いまま保つ

PCIe 上の NVMe は、共有メモリ構造とローカルバス上のコントローラレジスタを使用します。これはサーバー内のディスクやカードへの直接的な経路です。

トポロジは依然として重要です。デバイスは PCIe スイッチの背後にあることも、別の NUMA ソケット上にあることも、レーンを共有することもあります。CPU、メモリ、デバイスの位置が性能に影響します。

ディスクの数を数えるだけでは不十分です。媒体に到達する前のホスト内部で遅延が発生することがあります。

NVMe over Fabrics はローカルの関係をネットワークサービスへ変える

NVMe-oF 1.0 と NVMe-MI 1.0 は2016年6月9日に発行されました。NVMe-oF はカプセルとデータをリモートのサブシステムへ運び、ファブリック越しにキューを確立します。

これにより、容量の集約と、コンピュートとストレージの分離が可能になります。データをその場に残したまま、ホストを交換できます。

ただし、データ経路には NIC、スイッチ、ルート、ディスカバリ、コントローラ、認証、マルチパスが加わります。ネットワークはデータ整合性の仕組みの一部になります。

ディスカバリコントローラは接続を簡素化し、重要な依存関係を生む

ホストはディスカバリコントローラに問い合わせて、サブシステム、アドレス、サービスを取得します。これにより、ターゲットごとの手動設定が減ります。

誤った情報や停止したサービスは、新しい接続を妨げたり、誤った場所へ誘導したりする可能性があります。冗長化、キャッシュ、検証、ID 保護が必要です。

ディスカバリの可用性はデータの可用性と同じではありません。既存のセッションは継続しても、新しいホストは失敗する可能性があります。

NVMe/TCP はストレージを通常の IP ネットワークへ持ち込む

2019年に標準化された NVMe/TCP は、コマンドとデータを TCP 接続で運びます。運用者は RDMA を構築することなく、ルーティングされたイーサネット、IP ツール、既知のファイアウォールを利用できます。

利便性にはオーバーヘッドが伴います。TCP スタック、コピー、割り込み、CPU はテールレイテンシに影響します。カーネル、オフロード、転送サイズ、チューニングが重要です。

このトランスポートはフレーミングとダイジェストを追加し、TLS を使用できます。TLS をサポートしていても、正しく有効化・管理されているとは限りません。

NVMe/RDMA は低遅延を目指し、ファブリックでの運用規律はより高くなる

RDMA は、キューペア、登録済みメモリ、NIC オフロードを使用して、CPU の介在を減らしてデータを転送します。HPC や AI に適しています。

RDMA は単一のネットワークではありません。RoCE、iWARP などは、輻輳、ロス、PFC、ECN、メモリの扱いが異なります。

高速なベンチマークが運用の容易さを証明するわけではありません。ネットワーク障害がストレージのタイムアウトとして現れることがあり、ネットワークとシステムの両方の専門知識が必要です。

マルチパスは冗長性をホスト側の判断に変える

ネームスペースには、複数のコントローラと経路からアクセスできます。負荷分散とフェイルオーバーはホストが決定します。Asymmetric Namespace Access は、最適化済み・非最適化・利用不可の経路を記述します。

2つのリンクが、スイッチ、コントローラ、電源、経路を共有していることがあります。独立性は実際の障害でテストする必要があります。

誤ったポリシーは、死んだ経路を使い続けたり、遅い経路へ I/O を送ったりする可能性があります。冗長性は計測される挙動であって、ポート数の問題ではありません。

リザベーションは共有アクセスを整理するが、合意形成の代わりにはならない

NVMe リザベーションは、ホストを登録し、ネームスペースを予約して、許可されていない書き込みを防ぎます。クラスタやフェイルオーバーで役立ちます。

これは合意形成やアプリケーションの整合性の代わりにはなりません。停止したホストが状態を残す可能性があり、フェンシングは古いノードの書き込みを防ぐ必要があります。

保護が不十分なリカバリは、停止や破損につながる可能性があります。

ストレージが PCIe の外に出ると、認証と TLS が必須になる

ローカルデバイスは暗黙のうちに物理的な境界に依存していました。ネットワークでは、イニシエータとターゲットが ID を証明し、チャネルを保護しなければなりません。

NVMe は認証を定めており、TCP は TLS を使用できます。結果は鍵、証明書、更新、アルゴリズム、ポリシーに依存します。機能があるからといって、安全に使われているとは限りません。

ディスカバリ、管理、データの各プレーンをまとめて分析する必要があります。ID は本物でも、権限が必要以上に広いことがあります。

NVMe-MI はアプリケーション I/O とは別の管理経路を提供する

NVMe Management Interface は、サブシステムのインベントリ、ヘルスの読み取り、一部のコマンドの実行を、主経路の外で可能にします。

これは保守と復旧に役立ちますが、別のインターフェースが増えます。中央のツールが機密情報を読み取ったり、多数のデバイスを変更したりする可能性があります。

NVMe-MI は Redfish と統合できます。それによって標準化団体とベンダーの責任が一つの主体に統合されるわけではありません。

ゾーンドネームスペースは媒体の制約をソフトウェアに公開する

ZNS は容量を順次書き込みのゾーンに分割します。ホストがレイアウトを認識することで、内部ガベージコレクションを減らし、耐久性や予測可能性を改善できます。

そのためには、ゾーンを認識するファイルシステム、データベース、またはストレージ層が必要です。従来のアプリケーションは自動的には恩恵を受けません。

ZNS はトレードオフを明らかにします。媒体の挙動を公開すると効率は上がりますが、ソフトウェアの移植性のコストが高まります。

Key Value、Simple Log Memory、Computational Programs はネームスペースの意味を広げる

専門のコマンドセットは、キー・バリュー、シンプルログ、ストレージ近傍でのプログラム実行などのアクセスを可能にし、変換とデータ移動を減らします。

採用は、コントローラ、ドライバ、ライブラリ、アプリケーションに依存します。仕様に関数があっても、広く使われるわけではありません。

選択肢が増えるほど、機能のディスカバリとフォールバックの重要性が高まります。モジュール化は柔軟性と新たな組み合わせの網(マトリクス)を生み出します。

コンプライアンスは根拠を示すが、エンドツーエンドの性能を認定するわけではない

プログラムと相互運用性ワークショップは、ホストとコントローラ間の特定の挙動をテストし、仕様書には現れない差異を明らかにします。

リストは、あらゆるトポロジでのレイテンシ、耐久性、リカバリ、セキュリティを測定するわけではありません。オプション機能やドライバ・ファームウェアの組み合わせは変わります。

購入者はコンプライアンスを最低限の基準として使い、自社のワークロード、障害、アップグレードをテストする必要があります。

分離型ストレージは容量をホストから分離し、責任を再配分する

ローカルストレージは、デバイス、サーバー、システムチームを結び付けていました。リモートのプールは複数の利用者にサービスを提供し、その割り当てはソフトウェアで変わります。

ネットワーク、ストレージ、プラットフォーム、セキュリティ、アプリケーションの各チームが障害を共有します。ファブリックの障害がデータベースの問題に見えたり、ファームウェアの問題がネットワークの喪失に見えたりすることがあります。

実現可能性は、テラバイト単価だけでなく、利用率と運用能力に依存します。

AI はストレージの遅延をコンピュートのコストに変える

トレーニングはデータセットを読み込み、チェックポイントを書き込み、大規模に状態を転送します。何千ものアクセラレータが待機するとき、ストレージのレイテンシは高くつく無駄になります。

TCP、RDMA、マルチパス、共有ネームスペースは異なる設計を提供します。選択には、輻輳、メタデータ、キュー、障害、リカバリを考慮する必要があります。

目標はピークスループットだけではなく、同時負荷の下で予測可能なキューレイテンシとリカバリです。

NVMe 2.4 はプロトコルの広がりとバージョン管理の負荷を示す

このパッケージは、Base、トランスポート、Boot、Management Interface、コマンドセットをまとめています。NVMe は単なる SSD インターフェースではなく、スタックになりました。

ホストが Base 2.4 をサポートしていても、すべてのコマンドセットをサポートしているとは限りません。TCP 対応のコントローラと RDMA 対応のコントローラは異なることがあります。対応状況の表明は正確でなければなりません。

ドライバ、OS、ファームウェア、トランスポート、管理ツールは、実質的にプロトコルの一部となる組み合わせの行列を構成します。

NVMe はストレージをシンプルではなく、構成可能にした

この仕様は、単一の移行コストを減らします。コマンドとネームスペースは、PCIe からファブリックへ、あるいはベンダー間で移行できます。データ移行、セキュリティ、ネットワーク、監視、サポートは残ります。

利点は、プロトコルと製品の分離です。リスクは、大きく異なる設計が NVMe という名前の下に隠れてしまうことです。

ストレージはプログラム可能で分散可能になりますが、障害時に理解しなければならない整合性の仕組みであり続けます。