NVMe SSDメーカーの個性は自己診断機能にあり!? (1/2)

# はじめに
　NVMe仕様<sup>[1]</sup>には、ドライブの健康状態を調べる**Device Self-test**というコマンドがあります。直訳すると「**自己診断**」ですね。

　NVMe仕様に例示されているDevice Self-testのテスト内容には、S.M.A.R.T.情報の寿命に関する値(Percentage Used)を最新に更新する項目も含まれています。

　ただこのDevice Self-testコマンドはオプション機能でありドライブによりサポート有無が異なるだけでなく、実行するテスト内容は製品依存です。

　つまりDevice Self-testをサポートしていても製品によりテスト内容が異なるのですが、その結果**Device Self-testにメーカーの個性が表れています**。

　そこで今回と次回で、NVMeのDevice Self-testについてまとめます。

　今回はDevice Self-testの内容や実行方法などではなく、**Device Self-testに表れるメーカーの差**を紹介します。

# まとめ
* NVMe仕様には自己診断機能(Device Self-test)があるが、サポート有無は製品依存
* Device Self-testをサポートしている場合、Extended DSTというテストの所要時間（公称値）がわかる
* この所要時間はメーカーにより大きく異なり、メーカーの個性が表れている

# どこにメーカーの個性が表れるのか
　冒頭に説明したように、Device Self-testのサポート有無、そしてDevice Self-testで実行する内容は製品依存です。

　このため、Device Self-testのサポート有無は調べられるものの、たとえサポートしていても実行される内容はユーザにはわかりません。

　ではDevice Self-testのどこにメーカーの個性が表れるのかというと、それは**ユーザに表明するDevice Self-test所要時間**です。

　NVMe仕様は、NVMeドライブがDevice Self-test（コマンド）をサポートする場合、Extended Device Self-test（以降Extended DSTと記載）というテストにかかる公称(nominal)時間のユーザへの開示を求めています（図1）。

![NVMe仕様におけるExtended Device Self-test Time (EDSTT)の規定](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/439683/126a4859-c182-56cc-718f-34c1cf261834.png "NVMe仕様におけるExtended Device Self-test Time (EDSTT)の規定")
図1：NVMe仕様におけるExtended Device Self-test Time (EDSTT)の規定（[1]より引用）

　図1の通り、このフィールドの値は「最も消費電力が高い状態(Power State 0)でExtended DSTにかかる時間の公称値（分単位）」です。

　「公称値」と定義されたこのEDSTT、NVMe仕様では「Extended DSTはEDSTT以下の時間で完了することを推奨する」としていて（図2）、「正確に（厳格に）この値以下の時間で完了しなければならない」わけではありません（NVMe仕様における"should"は"it is recommended"に相当するため）。

![NVMe仕様におけるExtend DSTとEDSTTの関係](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/439683/10c3ca96-cb40-9b55-1823-17bb6ac16821.png "NVMe仕様におけるExtend DSTとEDSTTの関係")
図2：NVMe仕様におけるExtend DSTとEDSTTの関係（[1]より引用）

　この図2の文言は、テストの所要時間がSSDの内部状態やホストからのアクセス状況に依存することを踏まえていると推測されます。

# 実際のNVMe SSDのEDSTTの値
　ではNVMe SSDのEDSTTがどんな値なのか……実際にいくつかのメーカー・シリーズ・容量のNVMe SSDのEDSTTを調べた結果が表1です。

表1：NVMe SSDのEDSTTの値（単位：分）

![様々なNVMe SSDのEDSTTの値比較](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/439683/384d3c31-893b-f85d-6bda-7309908a0c99.png "様々なNVMe SSDのEDSTTの値比較")

　この表1を見ると、メーカーの差が如実に表れていることがわかります。ここでは複数台のデータを採取したメーカーA～Eを見ていきます。

　メーカーAは値が細かいです。同じ容量帯でも異なる値が、しかも1分単位で設定されています。ある決められた内容のテストにかかる時間（実測した時間）が設定されているように見えます。

　メーカーBはこの表を見る限り容量によらず同じ値です。この設定値（35分）で終わるように各製品でテスト内容（範囲など）を調整しているのかもしれません。

　メーカーCとDは同じ傾向に見えます。ベースの時間（テスト内容・範囲）が5分で、容量によりその時間を整数倍した感じです。容量により異なる（時間がかかる）部分を反映している可能性があります。

　メーカーEは……NANDフラッシュメモリを2 TB搭載していても5分で終わらせられるように普段からこのテストに準ずる健康状態チェックをしているのかもしれません。

　繰り返しになりますが、このEDSTTの値はあくまで公称値でありこの時間で必ずテストが完了することを保証する値ではありませんのでご注意ください。

　またこの値で製品の優劣を決めることはできません。上記の通り、各メーカーが独自の基準でExtended Device Self-testの内容を決めて、その基準に基づいてEDSTTに値を設定していると考えられるからです。

　あくまで、このフィールドの値がメーカーや製品により大きく異なるものである（異なるのが当たり前である）ことをご理解いただければと思います。

# EDSTTを調べる方法
　NVMeドライブがDevice Self-testをサポートしているかどうか、そしてサポートしている場合のEDSTTの値は、Identifyコマンドで取得できる情報でわかります。

　以下は、あるNVMeドライブのIdentifyデータを取得した結果です（★から始まるコメントは説明用につけたものです）。

```
% sudo nvme id-ctrl /dev/nvme1 -H
NVME Identify Controller:
（中略）
oacs    : 0x17
  [8:8] : 0	Doorbell Buffer Config Not Supported
  [7:7] : 0	Virtualization Management Not Supported
  [6:6] : 0	NVMe-MI Send and Receive Not Supported
  [5:5] : 0	Directives Not Supported
  [4:4] : 0x1	Device Self-test Supported ★ Device Self-test対応！
  [3:3] : 0	NS Management and Attachment Not Supported
  [2:2] : 0x1	FW Commit and Download Supported
  [1:1] : 0x1	Format NVM Supported
  [0:0] : 0x1	Security Send and Receive Supported

（中略）

edstt   : 15 ★ EDSTTは15（15分）

（以下略）
```

　このNVMeドライブは、Device Self-test（コマンド）をサポートしていて、Extended DSTの所要時間（公称値）は15分であることがわかります。

# まとめ
　今回は、NVMe仕様のオプション機能"Device Self-test"について紹介し、Device Self-testのうちExtended Device Self-test (Extended DST)と呼ばれるテストの所要時間（公称値）を示すEDSTTの値が製品により大きく異なることを、実製品の値を用いて説明しました。

　NVMeドライブのDevice Self-test機能はあまり馴染みのない機能かと思いますが、このような機能にメーカー（製品）の特色が表れていることは面白いです。

　次回はDevice Self-testの実行方法などについて説明する予定です。

# References
[1] NVM Express, _"NVM Express Base Specification,"_ Revision 1.4b, September 21, 2020

# ライセンス表記
<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>の下に提供されています。