この記事で紹介している製品
おことわり
この記事は、2020年8月にQiitaに投稿した記事を加筆修正したものです。
また、この記事のオリジナルは日本語で書かれています。記事が日本語以外の言語で表示されている場合、それは機械翻訳の結果です。当社は機械翻訳の精度に責任を負いません。
はじめに
SSDの健康状態把握を目的とした情報の収集には、以前より“Self-Monitoring, Analysis and Reporting Technology (S.M.A.R.T.)”が幅広く用いられています。
前回の記事ではS.M.A.R.T.の概要とSATA SSDにおけるS.M.A.R.T.をご説明しましたので、今回はNVMeにおけるS.M.A.R.T.をご説明します。
図1は当社製LiveMonitorPlusで取得した当社製NVMe SSDの情報です。図中の赤四角で囲った部分がS.M.A.R.T.属性です。
なお、本記事ではNVMe基本仕様リビジョン2.0b[1]を参照します。
まとめ
- NVMeのS.M.A.R.T.も、自己診断機能、監視機能、ホストへの報告機能、そして属性、を備える
- NVMeのS.M.A.R.T.属性は、基本的な項目が仕様で定義されているが「NANDフラッシュメモリのProgram / Erase回数」のような属性はない
- NVMeのS.M.A.R.T.は、一部属性の状態変化発生時にドライブから通知を発するように設定可能
NVMe SSDにおけるS.M.A.R.T.機能
NVMeが備えるS.M.A.R.T.機能も、機能の全体像はSATA SSDのS.M.A.R.T.をご説明した際に示したものと同じです(図2)。
つまり、NVMeのS.M.A.R.T.機能も、ドライブの自己診断機能、属性、属性値に対する監視機能、そしてホストへの報告機能から構成されています。
主要コマンド
NVMeでは、S.M.A.R.T.に関して表1に示したコマンドが定義されています。
コマンド名 | 対応するS.M.A.R.T.機能 | 内容 |
---|---|---|
Get Log Page | ホストへの報告機能 | S.M.A.R.T.属性およびエラー等のイベントログをドライブから取得する |
Asynchronous Event Request | ホストへの報告機能 | S.M.A.R.T.属性の値が予め設定した閾値を超えたときにホストに通知するよう、ドライブに要求する |
Device Self-test | 自己診断機能 | ドライブの自己診断機能の実行や停止を指示する |
Set Features | 監視機能 | S.M.A.R.T.属性に関するホストへの通知の有効無効や通知する閾値をドライブに設定する |
この表1に示した通り、各コマンドはそれぞれ図2に示したいずれかの機能に対応します。
自己診断機能
NVMeにおける自己診断機能は、Device Self-testコマンドで実行します。
SATA SSDが準拠するACS同様、NVMeのDevice Self-testコマンドにおいても時間の長短が異なる2つの自己診断機能のうちどちらかを指定して実行します。
図3中のshort device self-testが短時間の、extended device self-testが長時間の自己診断機能に相当します。
監視機能
NVMeのS.M.A.R.T.機能でも、S.M.A.R.T.属性に対する監視が可能です。監視対象の属性は予め規定されていて、監視時の閾値は一部の属性に限りホストから設定可能です。
図4は、S.M.A.R.T.属性を取得するためのGet Log Pageコマンドで取得可能な、監視対象属性の状態を示すデータの仕様です。
図4の通り、このリビジョンのNVMe仕様では6つのS.M.A.R.T.属性が監視対象です。ドライブの信頼性低下につながる状態を検出すると、いずれかもしくは複数のビットが1になります。いずれのビットが1でも早急な対応が必要です。
- ビット0:予備領域の容量
- ビット1:温度(合成温度)
- ビット2:その他要因のドライブ信頼性への影響
- ビット3:ドライブへの書き込み可否
- ビット4:揮発性メモリのバックアップ装置の状態
- ビット5:不揮発メモリ領域の状態
以下、それぞれについて簡単に説明します。
まず予備領域の容量は、図5のように、Get Log Pageコマンドで取得できるS.M.A.R.T.属性の情報として設定されている閾値(Available Spare Threshold)とともに取得可能です。
”Available Spare”が現在の予備領域の容量(百分率)であり、この値が”Available Spare Threshold”の値以上かどうかを監視しています。
この予備領域容量の閾値つまり”Available Spare Threshold”の値をホストが直接変更する方法は定められていません。つまりメーカーが決めた閾値になります。
予備領域容量がこの閾値未満でもドライブの動作にすぐに影響がでるわけではありませんが、残り予備領域が存在する間に交換などの対応に着手することが求められます。
次に、温度の閾値はSet Featuresコマンドで設定可能です。
具体的には、図6のデータ構造を用いて設定したい情報を作成し、Set Featuresコマンドでドライブに設定します。
例えば、合成温度(Composite Temperature)が摂氏90度を超えているかどうかをドライブに監視させる場合は、THSELに0を、TMPSELに0を設定し、TMPTHには363(絶対温度で指定するため273+90=363)を設定して、Set Featuresコマンドを発行します。
同様に、合成温度が摂氏マイナス5度未満かどうかをドライブに監視させる場合は、THSELに1を、TMPSELに0を設定し、TMPTHには268(絶対温度で指定するため273-5=268)を設定して、Set Featuresコマンドを発行します。
NANDフラッシュメモリはその特性のため、高温状態ではメモリセルのデータリテンション特性が悪化して想定より早く記録データ内のエラーが増えます。このような状態を検出してリフレッシュなどの対応を行うドライブもありますが、可能であればそのような高温状態を避けられるよう環境を改善するべきです。
残りの4つ、予備領域容量と温度以外の要因によるドライブ信頼性悪化、ドライブへの書き込み可否、揮発性メモリのバックアップ装置の状態、および不揮発メモリ領域の状態については、状態変化の閾値はホストから設定できません。つまり、ドライブ独自の判断基準で判断され、状態変化が発生したらホストに通知されます。
ホストへの報告機能
NVMeでは、S.M.A.R.T.属性の値と一部の属性について閾値超過や不足が発生しているかどうか、およびその他ドライブの健康状態に関する情報をホストが取得するための方法として、Get Log Pageコマンドが用意されています。
図1で示したようなツールにおけるS.M.A.R.T.属性表示は、Get Log Pageコマンドを使用して取得した情報を表示しています。
加えてGet Log Pageコマンドでは、ドライブが観測したエラーのログも取得できます。
これは”Error Information”と呼ばれるログで、ホストから発行されたコマンドの処理時に発生したエラーであればエラーが発生した際のLBAも取得可能です。
表2に、Get Log Pageコマンドで取得可能な情報の一部を示します。
ログ識別番号 (Log Identifier) | ログ名(Log Page Name) | 内容 |
---|---|---|
1 | Error Information | ドライブ内で発生したエラーの詳細情報 |
2 | SMART / Health Information | S.M.A.R.T.属性 |
6 | Device Self-test | 自己診断の進捗や過去実行した診断の結果 |
NVMeではまた、Get Log Pageコマンドとは別に、予めAsynchronous Event Requestコマンドを使用することで一部の属性の閾値超過や不足および状態変化発生時にドライブからホストに通知させるよう設定可能です。この機能はACSにはない機能です。
Asynchronous Event Requestコマンドを使用してホストから通知を受ける場合のホストとドライブの処理の様子は、図7のシーケンス図のようになります。
一部S.M.A.R.T.属性の閾値超過・不足や状態変化について、その事象発生時にドライブから通知を受けたい場合、ホストは予めAsynchronous Event Requestコマンドをドライブに発行します(図7 (1))。
このAsynchronous Event Requestコマンドは、すぐにはレスポンスが返りません(図7 (2))。
その後時間が経過し、一部S.M.A.R.T.属性の閾値超過・不足や状態変化が発生した場合(図7 (3))、デバイスは、予めホストから送られていたAsynchronous Event Requestコマンドに対するレスポンスという形式でホストに通知します(図7 (4))。
ホストは、受信したAsynchronous Event Requestコマンドのレスポンスを解析し、どのS.M.A.R.T.属性が閾値超過・不足を起こしたのか、もしくは状態に変化が起きたのかを判断します(図7 (5))。
具体的には、まずAsynchronous Event RequestコマンドのレスポンスのAsynchronous Event Typeフィールドを見て、S.M.A.R.T.情報を示す値(図8の赤四角)かどうかをチェックします。そしてS.M.A.R.T.属性を示す値だった場合は、さらにAsynchronous Event Informationフィールドを見て、発生した事象を突きとめます(図8の青四角)。
その後ホストは、必要に応じてGet Log Pageコマンドを発行してS.M.A.R.T.属性を取得します。
S.M.A.R.T.属性
NVMeリビジョン2.0bに定義されているS.M.A.R.T.属性は表3の通りです。各属性の種類は、前回ACSのS.M.A.R.T.属性を分類した際に使用した分類を使用しています。なお、NVMeが定義したS.M.A.R.T.属性にはACSのS.M.A.R.T.属性のようなIDは振られていません。
ドライブ信頼性に直結するという意味で重要な属性は、エラー系と寿命系、そして高性能と引き換えにより重要度が増した温度系、と考えられます。
「ホストがリード(ライト)した累積データ量」については、アクセスパターン(ワークロード)に関する情報が欠落しているため寿命計算には使用できないと判断し「その他」に分類しています。
NVMeのS.M.A.R.T.属性の特徴は、NANDフラッシュメモリに関連する属性、特にNANDフラッシュメモリのエラーを直接示す属性がないことが特徴です。SATA SSDのS.M.A.R.T.属性に良く見られる「(NANDフラッシュメモリの)Program / Erase回数」などの属性は存在しません。
唯一寿命を直接示すPercentage Usedという属性について、NVMe仕様では「メーカー独自の見積もり」であり「寿命を計測する方法はJESD218Aを参照すること」と記載しています。そのJESD218Aの改訂版であるJESD218B.02[2]では、SSDの寿命の見積もりについて以下のように記載しています。
Using the appropriate workload (see JESD-219), the SSD manufacturer may determine the relationship between host writes and NAND cycles, the latter being the number of program/erase cycles applied to any NAND block, and use this relationship to estimate the SSD endurance rating.
If the SSD employs more than one type of NAND component with different cycling capabilities, then a separate relationship should be obtained for each type of NAND. If operating the SSD to the desired TBW is impractical because time required would be excessive, then the relationship between NAND cycles and host writes should be extrapolated. In performing the extrapolation, any nonlinearities in SSD operation, such as those resulting from a reduced cycling pool at extended cycles, should be accounted for.
“Annex E (informative): Estimation of SSD Endurance Rating”より引用
ひとつ目の段落では、「メーカーは適切なワークロードを用いてホストからの書き込み量とNANDのProgram / Erase回数の関係を定め、その関係をSSDの寿命の見積もりに使用する」と記載しています。
一方でふたつ目の段落では、単純な外挿ではSSDの寿命見積もりが行えないことを示しています。これは、NANDフラッシュメモリの多値化や、いわゆるSLCキャッシュのようにTLCのNANDフラッシュメモリをSLCで使用する技術など、SSDでのNANDフラッシュメモリ制御の高度化による寿命計算の複雑化を踏まえた記述だと考えられます。
以上のことから、寿命やNANDフラッシュメモリに関する事象(Eraseエラーなど)そしてアクセスパターン(ワークロード)を含めた寿命計算用と考えられる属性がNVMeのS.M.A.R.T.属性に存在しないのは、上記JESD218B.02の記述も踏まえてユーザの混乱を招かずにより直感的で精度の高い寿命を提示できるようにした、と考えることもできます。
そして温度に関する属性が多いことも特徴です。これは、NVMe SSDが発熱に関して多大な関心を持つことのあらわれと考えられます。
サーマルスロットリングの発動時間に関する属性については、属性そのものに対する閾値はホストから設定できません。その代わり、ドライブがHost Controlled Thermal Management (HCTM)に対応している場合はサーマルスロットリングの発動に関する温度をホストからSet Featuresコマンドで設定可能です。
NVMeのHCTMによるサーマルスロットリングは、例えば図9のようなイメージで制御されます。
NVMeのHCTMによるサーマルスロットリングでは、TMT1およびTMT2と呼ばれる温度を制御に用います。ドライブがHCTMに対応していれば、このTMT1とTMT2をホストからSet Featuresコマンドで設定可能です。
まとめ
この記事では、SSDの健康状態把握を目的とした情報の収集および取得機能として幅広く用いられている”Self-Monitoring, Analysis and Reporting Technology (S.M.A.R.T.)”について、NVMeで定義内容を説明しました。
SATAが準拠するATA Command SetのSMART Feature SetとNVMeは、共にS.M.A.R.T.機能を備えているものの、細かい機能、特にS.M.A.R.T.属性の内容や傾向には大きな違いがあります。
これまでSATA SSDを使用し、S.M.A.R.T.によってSSDの健康状態をモニタリングしていた場合、NVMeのS.M.A.R.T.属性には戸惑われるかもしれません。
とはいえS.M.A.R.T.の本質は変化していませんので、SATAとNVMe間のS.M.A.R.T.機能の違いをうまく捉えて活用していただければと思います。
References
[1] NVM Express, “NVM Express Base Specification”, Revision 2.0b, January 2022
[2] JEDEC, “Solid-State Drive (SSD) Requirements and Endurance Test Method”, JESD218B.02, June 2022
他社商標について
記事中には登録商標マークを明記しておりませんが、記事に掲載されている会社名および製品名等は一般に各社の商標または登録商標です。
記事内容について
この記事の内容は、発表当時の情報です。予告なく変更されることがありますので、あらかじめご了承ください。