東京ナノファーム.png

NVMeの概要

はじめに

NVM Express (NVMe)は、PCI Express(PCIe)を通じて、不揮発性ストレージメディアを接続するための論理デバイス・ホスト・インタフェース規格です。


NVMe規格の歴史、ロードマップ

規格には、NVMe base specification、NVMe over Fabrics(NVMe-oF)、NVMe Management Interface(NVMe-MI)があり、各仕様書の最新版は下記のURLからダウンロードできます。

https://nvmexpress.org/

各バージョンのロードマップは下記の通りです。

規格として紹介されたのは、インテルデベロッパーフォーラム2007にて、NVMHCIとして紹介され、その後ワーキンググループとして、仕様化が進み、2013年1月にバージョン1.0e、2014年にリビジョン1.2、1.2.1、2017年にリビジョン1.3a/b/c/dがリリースされました。一方製品としては、当初は試作レベルで性能を十分引き出せていませんでしたが、2015年頃より、SSDドライブメーカよりPCIe バージョン3.0とともにNVMe SSDとして発売され始め、フラッシュメモリーの容量化により、NVMeの最大の特徴である、転送時におけるメッセージが1つで済み、コマンドキューが65536個により、データのレイテンシ短縮により、SATA・AHCIでの高速転送の頭打ちを解消することになりました。


NVMeの特徴

ハードディスクで使われるホストインタフェースであるAHCIと、半導体ストレージに特化したNVMeの比較は以下のようにパーフォマンスが十分に引き出せる仕様になっています。


規格には、多用途の目的に合わせてSSDのフォームファクターも以下のように定義され小型化、高集積化の面でもメリットを引き出すことができます。


NVMeには、下記の特徴が挙げられます。

  • コマンドの発行または完了パスにおいてキャッシュ不可な/MMIOレジストリの読込み不要

  • コマンド発行パスにおいて最大で一つのMMIOレジストリの書込みが必要

  • 最大で64KのI/Oキューのサポート、各I/Oキューが最大64Kコマンドをサポート

  • 適切に優先度が定義された仲裁メカニズムとともに各I/Oキューと紐づけ

  • 全ての4KB読み込みリクエストを完了するための情報が64Bコマンド自身に含まれ、効率的でスモールなランダムI/Oオペレーションを確保

  • 効率的で合理的なコマンドセット

  • MSI/MSI-X のサポートとインタラプトの集約

  • 複数の名前空間のサポート

  • SR-IOVのようなI/Oの仮想化アーキテクチャの効率的なサポート

  • 堅牢なエラー報告と管理の能力

  • 仕様は合理化されたレジスタのセットを定義:

  • コントローラ機能の表示

  • デバイス障害のステータス (コマンドステータスはCQを通じ直接処理される)

  • 管理者キュー設定(管理者コマンドを通じ処理されるI/Oキュー設定)

  • スケーラブルな数の送信と完了のキュー向けのドアベルレジストリ


2019年になると、さらにPCIe4.0による転送速度の要求が高まり、NVMeにとっては2年ぶりの変更となる1.4がリリースされました。次回ブログでは、リビジョン1.4の新機能や変更点などについて、概要をまとめたいと思います。


著者:片山 雅美