NVMe Revision 1.4: Overview and highlighted features

# はじめに
　7/23に、NVM Express（以降NVMeと表記します）の最新仕様であるリビジョン1.4<sup>[1]</sup>リリースに関するプレスリリースが行われました<sup>[2]</sup>。仕様自体は、実は6/10にリリースされていたのですが。

　リビジョン1.3が2017年5月1日にリリースされて以来、今年3月20日にリビジョン1.3dがリリースされるまでリビジョン1.3x系列で機能追加・変更や修正が行われてきたNVMe仕様ですが、このタイミングでマイナーバージョンが増えました。

　マイナーバージョンが増えるだけあって、新しいリビジョンである1.4には、前のリビジョンである1.3dと比較して、多くの追加・変更事項があります。

　この記事では、このNVMeリビジョン1.4の新機能や変更点などについて、概要をまとめたいと思います。

# サマリ
* コマンドが追加された！（`Get LBA Status`コマンドなど2つ）
* 新機能・新概念追加や仕様変更がたくさん！
* これら**新機能・新概念のほとんどは現時点ではデータセンター・エンタープライズ向け**

# リビジョン1.4のポイント
　NVMeリビジョン1.4のポイントは、「**新機能・新概念の大半は現時点ではデータセンター・エンタープライズ向けである**」ということです。
　ここで、NVM Expressによるプレスリリース<sup>[2]</sup>からNVMeリビジョン1.4の内容に関する記述を引用します。

> **NVMe 1.4 Specification: Enabling Fast, Simple & Scalable Storage**
> NVMe 1.4 further matures the NVMe technology infrastructure, while enabling the storage industry across market segments including cloud, enterprise and client. The specification provides important benefits such as improved quality of service (QoS), faster performance, improvements for high availability deployments, and scalability optimizations for data centers.
>

　後半の文章をあえて直訳っぽく訳すと以下のようになります。

> この仕様は、Quality of Service (QoS)の改善、より高速な性能、高可用運用に向けた改良、そしてデータセンター向けのスケーラビリティ最適化、といった重要な利点を提供します。

　この文章に登場する、QoS、高可用運用、スケーラビリティ最適化、という3つの利点（効果）はまさにデータセンター・エンタープライズ向けと考えることができます。

# リビジョン1.4のハイライト
　そのプレスリリースでは、いくつかの機能（特徴）が抜粋され紹介されています。

>**NVMe 1.4 Specification Features:**

>* Rebuild Assist simplifies data recovery and migration scenarios.
>* Persistent Event Log enables robust drive history for issue triage and debug at scale.
>* NVM Sets and IO Determinism allow for better performance, isolation, and QoS.
>* Multipathing enhancements or Asymmetric Namespace Access (ANA) enable optimal and redundant paths to namespaces for high availability and full multi-controller scalability.
>* Host Memory Buffer feature reduces latency and SSD design complexity, benefiting client SSDs.

　この部分で言及されている機能について、ひとつずつその概要を説明します。

## Rebuild Assist
　最初の「リビルドアシスト」は、新コマンド`Get LBA Status`に関する記述だと考えられます。

>* Rebuild Assist simplifies data recovery and migration scenarios.

　この「リビルド」は、RAID環境など複数ドライブから成る（冗長性を備えた）ストレージシステムにおいて、あるドライブから別のドライブにデータをコピー（移動）する処理のことを指すと思われます。

　新コマンドである`Get LBA Status`コマンドは、ざっくり言うと、ホストが指定したLBA領域について「**Readコマンドを発行した時にエラーになってデータを読めないセクタのLBAを取得する**」というコマンドです。

　したがって、ホストはリビルド処理前に`Get LBA Status`コマンドで「Readコマンドを発行しても正しいデータが読めないLBA」を予め取得することで、当該LBAのデータを別のドライブから読み出すなど、適切な対応ができるようになります。

![get-lba-status-command-use-case.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/439683/9ba8e01b-be07-5e05-74b3-dd041c9207bd.png "Get LBA Statusコマンドのユースケース")
図1：Get LBA Statusコマンドのユースケース（イメージ）

## Persistent Event Log
　"Persistent Event Log"とは、リビジョン1.4で新規に追加されたログページです。ログページとは、`Get Log Page`コマンドで取得できる情報のことです。

>* Persistent Event Log enables robust drive history for issue triage and debug at scale.

　`Get Log Page`で取得可能なログページには、Error InformationやTelemetryといったいわゆる「ログ情報」が存在しますが、前者はエラー情報のみでかつ電源断を経ると消えてしまうこと、後者は情報の内容が任意（実装、ベンダ依存）であること、という特徴があります。

　Persistent Event Logは、それら2つのログ情報でカバーできていない特徴を備えたものです。Persistent Event Logは、電源断を経ても消えず、エラーだけでなくドライブ内部で発生する様々なイベントが記録対象で、かつイベントの内容なフォーマットが仕様で定義された、「ログ情報」です。

![persistent-event-log-comparison.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/439683/15b0e35a-368a-aa47-758c-3425432e0abd.png "Persistent Event Logと他のログ関連機能の比較")
図2：Persistent Event Logと他のログ関連機能の比較

　このPersistent Event Logにより、ドライブ内部で生起したイベントについて、ホストはより詳細に把握できるようになります。

## NVM Set
　この"NVM Set"と関連機能が、NVMeリビジョン1.4における最大の変更（追加）機能です。

>* NVM Sets and IO Determinism allow for better performance, isolation, and QoS.

　"NVM Set"とは、ドライブ内のメディア（不揮発性記憶媒体、要はNANDフラッシュメモリのこと）を論理的にもしくは物理的に分割したグループのようなものです。
　このNVM Setとその関連機能について正しく理解するには、導入背景をきちんと理解することが欠かせません。

　NVM Setおよびその関連機能を導入することで解決を目指している課題のひとつは、いわゆる「Noisy Neighbors問題<sup>[3]</sup>」です。

　一番わかりやすい例は、複数の仮想マシン(Virtual Machine; VM)を格納しているデータセンター等のサーバにおいて、VM間でストレージも共有している環境です。
　そのような環境で、ストレージを共有している複数のVMの中であるVMが共有ストレージに対して負荷の高いアクセスを集中させた場合、その負荷の高いアクセスのために、他のVMからのストレージアクセス性能が低下した状態になります。

![noisy-neighbours.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/439683/91bbb6ef-4f59-a938-3f72-9056fb9fd1a3.png "Noisy Neighbours問題")
図3：Noisy Neighbors問題（イメージ）

　この図3は、Aさん～Dさんがサーバ上でそれぞれ"VM A"～"VM D"を動作させていて、それらのVMが1台のSSDを共有している様子を示しています。そして、Dさんの"VM D"が共有SSDに高負荷アクセスを行っているため、他VMのSSDへのアクセス性能が低下していることを示しています。
　この図3の状況では、Aさん、Bさん、Cさんにとって、Dさん("VM D")が"Noisy Neighbor"になります。

　データセンターでは、データの読み書きレイテンシなど、いわゆるサービスレベル契約(Service Level Agreement)ベースの課金体系を採用していることが多いです。そのような契約形態の場合、このNoisy Neighbors問題は契約履行を脅かす問題となります。データセンター事業者にとって大きな問題です。

　このNoisy Neighbors問題を根本から解決するためには、各テナント(VM)に対して、他テナント(VM)から**性能的に隔離(isolate)された環境**を提供する必要があります。

　そして、NVM Setが実現を目指しているもののひとつは、まさにこの**隔離環境の提供**なのです。

　Noisy Neighbors問題を解決する方法としては、例えば短レイテンシや高性能のサービスレベル契約者に対してストレージドライブを丸ごと占有させるなど、ハードウェア的に隔離する方法があります。
　しかし、少ないハードウェアで多数のテナントを格納したほうが収益性が高くなるため、データセンター事業者は、ハードウェアによる隔離をできるだけ少なくしたいはずです。
　このNVM Setは、このようなデータセンター事業者の経営上の課題を解決する方法のひとつを提供することになります。

　もうお気づきかと思いますが、Noisy Neighbors問題の完全な解決には、ストレージ内のメディアだけでなく、ストレージ内の各種リソース、そしてストレージ外のプロセッサやメモリ、GPU、ネットワークなど、あらゆる計算機リソースの適切な配分・隔離が必要になります。

　NVM Setとその関連機能の導入は、あくまでもストレージに関してより実効性があり制御可能な方法が用意された、ということであることに注意が必要です。

　なお、QoSについては、NVM SetそのものではなくNVM Setを利用した別の機能の話になります。これについてはまた別の機会に説明できればと思います。

## Asymmetric Namespace Access (ANA)
　大規模なストレージシステムなどでは、システム内部にNVMe仕様で定義する「コントローラ」が複数存在し、かつそれら複数のコントローラの間でNamespaceを共有する（複数のコントローラから同一のNamespaceにアクセスする）ような構成も考えられます。
　その場合、それら複数のコントローラの間では、共有しているNamespaceに対するアクセス性能が異なる可能性があります。

　このように、あるNamespaceへのアクセスについて、性能が異なる複数のパスが存在する状態のことを、「性能が非対称である」ことから"Asymmetric Namespace Access"と呼びます。

>* Multipathing enhancements or Asymmetric Namespace Access (ANA) enable optimal and redundant paths to namespaces for high availability and full multi-controller scalability.

　ストレージの場合、このように複数のパスを設けることは、アクセス経路に関する冗長性を付与するために行われることがほとんどです。「性能が異なる」という点では共有・分散メモリ型アーキテクチャにおける"Non-Uniform Memory Access (NUMA)"と、「アクセス経路の冗長性」という点では各種ネットワークプロトコルにおけるルーティング方法と、似ている部分があります。

　具体的な例で説明します。
　以下の図4は、NVMe仕様書に記載されている説明図を引用したものです。

![ana.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/439683/9a41ab5e-b488-2356-dcfd-75534ee7500d.png "Asymmetric Namespace Access（イメージ）")
図4：Asymmetric Namespace Access（イメージ、NVMe仕様書から引用）

　この図4では、例えばNamespace C (NS C)から構成されたANA Groupは、Controller 2とController 3の両方からアクセスすることができます。ただ、このANA Groupへのアクセスは、Controller 2ではなくController 3を経由してアクセスしたほうが性能が良さそうです。

　今回リビジョン1.4で追加された機能は、このような「あるANA Groupへのアクセスはどのコントローラから行うのが良いか？」を判断するための情報を、コントローラからホストに返すための機能です。
　具体的には、コントローラからホストに対して、「自コントローラからANA Group Xへのアクセスは最適化された状態である」とか「自コントローラからANA Group Xへのアクセスは失われた状態である」などと、報告する機能になります。

　ホストは、アクセスしたいNamespaceへの最適経路を決めたり、経路に障害が起きた場合に別の経路を探索するために、コントローラから受け取った上記のような情報を使うことが想定されています。

## Host Memory Buffer (HMB)
　Host Memory Buffer (HMB)とは、ドライブ外のメモリ（主にホストのメモリを想定）を、ドライブが自由に利用するための機能です<sup>[4]</sup>。

>* Host Memory Buffer feature reduces latency and SSD design complexity, benefiting client SSDs.

　HMB自体はNVMeリビジョン1.2から存在する機能ですし、この仕様の基になったUniversal Flash Storage (UFS)のUnified Memory Extension (UME)<sup>[5]</sup>も2016年には規格化されていましたから、そこまで新しい技術でもありません。

　しかも、仕様の内容的にもリビジョン1.3dから大きく変更されていないような......NVM Expressとして「クライアント環境向け」としてプッシュしたい内容なのかもしれません。確かにHMBをサポートするコントローラは増えていますし<sup>[4][6][7]</sup>、Windowsもサポートしています<sup>[4]</sup>ので。ただ、SSDの中から見ると「ホスト側のメモリ」って使いづらいんですよね......いつアクセスできなくなるかわかったもんじゃなくて怖すぎです。

　個人的には、Controller Memory Buffer (CMB)の変更のほうが大規模でかつ重要だと思います。主に仮想化環境でのCMBの使い勝手が改善されています。一方で、CMBをサポートするコントローラはあまり聞いたことがありません。

# まとめ
　この記事では、2019年6月10日に発行されたNVMeの最新仕様であるリビジョン1.4について、NVM Expressのプレスリリースを引用しながら、その概要とポイントそして一部機能について説明しました。

　記事内でも触れたように、リビジョン1.4での追加・変更機能の多くは、現時点ではエンタープライズやデータセンター環境での活用を前提にしたものであって、クライアント環境からは縁遠いものだと思います。
　しかし、一部のクライアント環境において、それらエンタープライズやデータセンター環境と同等の機能を求められるようになる可能性は大いにあります。その時に、これらの機能が役に立つかもしれません。

　記事執筆時点で、NVMeリビジョン1.4への準拠を謳ったSSDコントローラおよびSSDはいくつか発表されています<sup>[8][9][10]</sup>。ただ、NVMeリビジョン1.4で追加された機能はすべてオプション機能であり、リビジョン1.4で追加された機能をサポートしているのかどうかは不明です。今後データセンター向け、そしてエンタープライズ向けSSDにおいて、NVMeリビジョン1.4準拠を謳ったSSDコントローラおよびSSDは増えると予想されます。

　今後数回かけて、NVMeリビジョン1.4の新規機能・変更点について、全部は無理なので一部になりますが、ご紹介して行きたいと考えています。

# リファレンス
[1] NVM Express, _"NVM Express<sup>TM</sup> Base Specification"_, Revision 1.4, June 10, 2019
[2] NVM Express, _"[New NVM Express<sup>TM</sup>, Inc. Specifications Bolster Cloud and Enterprise Advancements](https://nvmexpress.org/new-nvm-express-inc-specifications-bolster-cloud-and-enterprise-advancements/)"_, July 23, 2019（最終閲覧日2019年8月7日）
[3] 羽鳥、[_仮想環境における「うるさい隣人」問題_](https://www.itmedia.co.jp/enterprise/articles/1611/10/news010.html)、2016年11月22日（最終閲覧日2019年8月6日）
[4] 北川、[_HMBはNVMe SSD低価格化の切り札!?東芝メモリ「BG4」で実力検証_](https://weekly.ascii.jp/elem/000/000/426/426703/)_、2019年03月19日（最終閲覧日2019年8月7日）
[5] JEDEC, _"UNIVERSAL FLASH STORAGE (UFS) UNIFIED MEMORY EXTENSION"_, Version 1.1, JESD220-1A, March 2016
[6] Marvell, "[_PCIe(R) Gen4 NVMe<sup>TM</sup> SSD Controllers_](https://www.marvell.com/storage/ssd/88ss1321-1323/)", 最終閲覧日2019年8月7日
[7] Phison Electronics, "[_PS5019-E19T_](https://www.phison.com/ja/technologies/pcie-gen4-awareness/1154-ps5019-e19t_ja)"、最終閲覧日2019年8月8日
[8] StorageReview.com, ["_InnoGrit Comes Out Of Stealth With New SSD Controllers_](https://www.storagereview.com/innogrit_comes_out_of_stealth_with_new_ssd_controllers)", August 1, 2019（最終閲覧日2019年8月7日）
[9] 東芝メモリ、[_業界最速クラスのPCIe(R) 4.0対応エンタープライズ向けSSDの開発について_](https://business.toshiba-memory.com/ja-jp/company/news/news-topics/2019/08/corporate-20190807-2.html)、August 7, 2019（最終閲覧日2019年8月7日）
[10] Phison Electronics, "[_PS5018-E18_](https://www.phison.com/ja/technologies/pcie-gen4-awareness/1155-ps5018-e18_ja)"、最終閲覧日2019年8月8日

# ライセンス
<a rel="license" href="http://creativecommons.org/licenses/by-sa/4.0/"><img alt="クリエイティブ・コモンズ・ライセンス" style="border-width:0" src="https://i.creativecommons.org/l/by-sa/4.0/88x31.png" /></a><br />この記事は<a rel="license" href="http://creativecommons.org/licenses/by-sa/4.0/">クリエイティブ・コモンズ 表示 - 継承 4.0 国際 ライセンス</a>の下に提供されています。