SSDのS.M.A.R.T.を調べてみた(1/3)：概要

# はじめに
　SSDの健康状態把握を目的とした情報の収集および取得機能としては、“Self-Monitoring, Analysis and Reporting Technology (S.M.A.R.T.)”が幅広く用いられています。

　SSDが準拠する仕様、例えばSATA SSDが準拠するATA Command Set (ACS)や、NVMeは、S.M.A.R.T.に関する仕様を含んでいます。

　そして、各SSDメーカーが自社SSDを対象に提供しているツールを含めて、SSDの情報を取得するツールのほとんどが、S.M.A.R.T.機能のひとつであるS.M.A.R.T.属性(S.M.A.R.T. Attributes)の取得・表示に対応しています。

　図1は、IntelのSSD Toolboxの例です。この例はIntel製SATA SSDの情報を表示したもので、図中の赤四角で囲った部分がS.M.A.R.T.属性です。

![Intel SSD ToolboxにおけるS.M.A.R.T.情報表示（SATA SSDの例、赤四角内がS.M.A.R.T.属性）](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/439683/8d94bade-9dbe-ded3-b77a-a59ec11dfd9b.png)
図1：Intel SSD ToolboxにおけるS.M.A.R.T.情報表示（SATA SSDの例、赤四角内がS.M.A.R.T.属性）

　しかし、**SATA SSDではこのS.M.A.R.T.属性の種類や内容は完全にメーカー・製品依存です**。このことは逆に、各メーカーのSATA SSDが開示しているS.M.A.R.T.属性を調べることで、「どのような情報を重視しているのか」といった各メーカーの傾向の一端を伺うことができる、とも考えられます。

　そこで、これから全3回予定でSSDにおけるS.M.A.R.T.に関してまとめたいと思います。各回の内容は以下の通りの予定です。

1. SSDにおけるS.M.A.R.T.の概要 ← 今回
2. SATA SSD (ATA Command Set; ACS)におけるS.M.A.R.T.
3. NVMe SSDにおけるS.M.A.R.T.

　第2回では、SSDメーカー複数社のSATA SSDのS.M.A.R.T.属性に関する公開情報から、各メーカーのSATA SSDのS.M.A.R.T.属性を調査した結果もまとめる予定です。

# 今回のサマリ
* S.M.A.R.T.が持つ機能は、**いわゆる「S.M.A.R.T.属性 (Attribute)」だけではない！**
* S.M.A.R.T.は、大まかに**4つの機能**から構成される
    * 自己診断機能、監視機能、ホストへの報告機能、そして属性、の4つ
* S.M.A.R.T.属性は、SATA SSDが準拠するATA Command Set (ACS)と、NVMe SSDとでかなり異なる

# そもそもS.M.A.R.T.とは
　一般に"S.M.A.R.T."という単語は、「ドライブ（HDDやSSD）の（健康）状態およびそれに類する統計情報」を指して使われることが多いと思います。SSDであれば、空き容量やRead / Program / Eraseエラーの発生回数（率）、NANDフラッシュメモリの平均Erase回数、そして総書き込み量などが相当します。

　上記のような情報は、実は「**S.M.A.R.T.属性 (S.M.A.R.T. Attributes)**」と呼ばれるもので、**S.M.A.R.T.を構成する機能のひとつでしかありません**。

　そこで今回の記事では、まず、SSDにおけるS.M.A.R.T.を構成する機能やS.M.A.R.T.でできることといった、S.M.A.R.T.の全体像を説明したいと思います。

# SSDにおけるS.M.A.R.T.の全体構成
　S.M.A.R.T.とは、"Self-Monitoring, Analysis and Reporting Technology"の略です。日本語に直訳すると「自己監視、診断および報告技術」といったところでしょうか。

　この名前の通り、S.M.A.R.T.は、ドライブの自己診断機能、属性、属性値に対する監視機能、そしてホストへの報告機能から構成されています（図2）。

![SSDにおけるS.M.A.R.T.の位置づけと構成機能（イメージ）](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/439683/94f55906-ce16-b3f8-552e-1c97e3f7737a.png "SSDにおけるS.M.A.R.T.の位置づけと構成機能（イメージ）")
図2：SSDにおけるS.M.A.R.T.の位置づけと構成機能（イメージ）

　ACSとNVMeどちらの仕様においても、ホストはドライブに対して、S.M.A.R.T.の機能をそれぞれの仕様で定められたコマンドで要求します。そのため、SSDには、ホストから受信したS.M.A.R.T.に関する要求内容（コマンドの内容）を解釈・検査する処理部が存在します。

　この処理部が、ホストからの要求に従って他の機能や情報を適切に取り扱い、また、逆にホストに対して情報を送信するなどによって、S.M.A.R.T.に関するホストとドライブとのやりとりが実現されています。

　それでは図2の各機能についてその概要を説明します。

## 自己診断機能
　自己診断機能は、"Device Self-test"と呼ばれます（記載されます）。そのまま「（デバイスもしくはドライブ）セルフテスト」と呼ばれることが多いです。S.M.A.R.T.を構成する機能のうち、自己診断機能に関連する機能は図3のようになります。

![S.M.A.R.T.の自己診断機能関係図](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/439683/db87ebe9-3496-4b73-186a-209cea5e244d.png "S.M.A.R.T.の自己診断機能関係図")
図3：S.M.A.R.T.の自己診断機能関係図

　SSDは、NANDフラッシュメモリの特徴である、長期放置による記録データのビットエラー増加（データリテンション）対策などのため、NANDフラッシュメモリに書き込まれたデータが正しく読み出せることを定期的に確認する機能を備えていることが多いです。S.M.A.R.T.における自己診断機能は、それらの機能を組み合わせることで実現できます。

　自己診断機能は、SSDを構成する部品全てが対象となり得るため、メーカーおよび製品によっては、NANDフラッシュメモリ以外の部品、例えばNANDフラッシュメモリ以外のメモリ（DRAMなど）や電源バックアップ用のキャパシタなどに対するテストも含まれることがあります。

　ACSとNVMeでは、S.M.A.R.T.における自己診断機能として、短時間で完了する診断と、長時間かけて行う診断の2つを定義しています。

　この2つの診断の差は、検査対象とするNANDフラッシュメモリの範囲（チップ数やブロック数など）の差となっていることが多いです。つまり、短時間で完了する診断では、SSDが搭載するNANDフラッシュメモリの一部のみが診断対象となり、長時間かける診断では、SSDが搭載するNANDフラッシュメモリの（可能な限り）より広い範囲が診断対象になります。

　自己診断結果はS.M.A.R.T.属性にも反映され、寿命等の計算に使用されます。このため、長時間かけて行う自己診断を実施したほうがS.M.A.R.T.属性の精度は高くなることがあり得ます。

　しかし、SSDの容量が増大するにしたがい、SSDが搭載するNANDフラッシュメモリに対して広範囲に自己診断を行うには長い時間がかかるようになっています。自己診断実施中は通常のアクセスの性能が多少なりとも低下するため、どちらのタイプの自己診断を行うかということは、自己診断にかけられる時間に依存する、と言えます。

## 監視機能
　温度やNANDフラッシュメモリの余裕率（代替用ブロックなどの数）、そして寿命など、S.M.A.R.T.の属性値の中には、値そのものだけでなく、値がある閾値を超えたもしくは閾値を下回ったことが重要な値が存在します。

　このため、S.M.A.R.T.属性には閾値が存在します。閾値が設定できる属性や閾値の設定方法などは、準拠する仕様によって異なります。

　特定のS.M.A.R.T.属性の値が設定された閾値を上回ったり下回ったりした場合、監視機能は、ホストへの報告機能に対してそのことを通知します。

　S.M.A.R.T.を構成する機能のうち、監視機能に関連する機能は図4のようになります。

![S.M.A.R.T.の監視機能関係図](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/439683/4e5750ef-0790-d2d1-e312-e2579819ed58.png "S.M.A.R.T.の監視機能関係図")
図4：S.M.A.R.T.の監視機能関係図

## ホストへの報告機能
　S.M.A.R.T.におけるホストへの報告機能には、大きく分けて以下の3つが存在します。

1. S.M.A.R.T.属性を含むドライブの健康状態をホストがまとめて取得する機能
2. ドライブで発生した事象に関する情報（ログ）をホストが取得する機能
3. 前述した監視機能によって特定のS.M.A.R.T.属性が予め設定された閾値を上回った（下回った）ことをドライブからホストに通知する機能

　1の機能が最も広く使われている機能です。各メーカーが配布しているツールやその他のソフトウェアがドライブのS.M.A.R.T.属性を取得して表示するために使用している機能が、この機能です。

　2のログ取得機能は、1の機能によってドライブの健康状態を取得した際になんらかのエラーが発生していたことが通知された場合などに、そのエラーに関する情報を取得するために使用する機能です。

　3の機能は、いわゆるアラート通知の機能です。仕様によって異なりますが、1の機能に相当するドライブの状態を取得する要求（コマンド）の返答でアラートを伝える場合もあれば、事象発生時に非同期にドライブからホストへアラートを通知する場合もあります。

　S.M.A.R.T.を構成する機能のうち、ホストへの報告機能に関連する機能は図5のようになります。

![S.M.A.R.T.のホストへの報告機能関係図](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/439683/09d80b5a-6bfd-faac-84a2-7410191106d7.png "S.M.A.R.T.のホストへの報告機能関係図")
図5：S.M.A.R.T.のホストへの報告機能関係図

## S.M.A.R.T.属性
　S.M.A.R.T.を構成する機能の中で最も有名なのが、このS.M.A.R.T.属性です。SSDのS.M.A.R.T.属性は、大まかに表1のように分類できます。

表1：SSDのS.M.A.R.T.属性の大まかな分類

| 種類 | 概要 |
|-----:|:------------------|
| エラー系 | SATAやPCIeといった通信の状態に関するエラーの発生状態・履歴や、ホストからのReadがアンコレクタブルやアンリカバブル（訂正不能）となった回数（率）など、HDD時代から存在するエラー系情報。 |
| 稼働時間・電源投入回数系 | 稼働時間(Power On Hours; POH)や、電源投入回数、仕様が定めた電源断手順を経なかった電源断（電断）回数など。 |
| 温度系 | ドライブの温度に関する情報。製品によっては複数の温度センサを搭載していることもある。 |
| 寿命系 | 直接寿命（残寿命、消費寿命）を示す値。余裕容量や代替セクタ数、NANDフラッシュメモリのブロックの平均消去回数などが含まれる。|
| 寿命計算用データ | 寿命計算（予測）に使用されると考えられる値。ホストからの書き込みデータ量やNANDフラッシュへの書き込みデータ量、アクセスパターン（ワークロード）に関する情報などが含まれる。|
| NANDエラー系 | NANDフラッシュメモリへのアクセスで発生したエラーのこと。具体的にはRead / Program / Eraseなど。製品によっては、能力の異なる複数の訂正機能を搭載することもあり、属性がより細かく設定されていることもある。 |
| その他統計情報 | 低消費電力状態への遷移回数や総コマンド数などの統計情報。 |
| レガシー、不明 | HDD特有のエラー情報など、SSDでは不要もしくは用途が不明なもの。 |

　冒頭でも説明した通り、SATA SSDが準拠するACSのSMART Feature Setでは、S.M.A.R.T.属性の種類や内容を定めていません。

　過去、属性のIDとして使える値（1から255までの255個）のうちのどの値を使うか、またS.M.A.R.T.属性数の最大値を定めようとしたこともありました<sup>[1]</sup>が、結局ACSでは規定されていません。したがって、SATA SSDでは、S.M.A.R.T.属性の数を何個にするか、そして属性の内容、などは全てメーカー依存となっています。

　その反省からか、NVMeにおいてはS.M.A.R.T.属性が仕様として定義されています。しかし、メーカー間で値の比較が容易でないことには変わりはありません。

　S.M.A.R.T.を構成する機能のうち、S.M.A.R.T.属性に関連する機能は図6のようになります。

![S.M.A.R.T.属性の関係図](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/439683/c0915f06-c6b4-f34d-dcd2-50c854111197.png "S.M.A.R.T.属性の関係図")
図6：S.M.A.R.T.属性の関係図

　S.M.A.R.T.属性は、様々な情報から構成されます。属性の値は、ReadやWriteのコマンド数や転送データ量などはコマンド処理部によって、NANDフラッシュメモリに関する情報はメディア管理制御機能によって更新されます。

# ACSとNVMeの比較
　以上、説明してきたS.M.A.R.T.機能について、ACSとNVMeを比較したものが表2となります。

表2：S.M.A.R.T.機能に関するACSとNVMeの比較
![S.M.A.R.T.機能に関するACSとNVMeの比較](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/439683/28b5c929-1eef-473d-d181-4911de78e65e.png "S.M.A.R.T.機能に関するACSとNVMeの比較")

　表2の通り、S.M.A.R.T.の基本的な4つの機能はACSとNVMe共に規定されています。しかし、細かい仕様を見ると、ACSにはなくてNVMeには存在する機能や特徴があります。

　それらの特徴の中で最も大きいのが、S.M.A.R.T.属性の数や内容に関する規定の有無です。

　ACSにはS.M.A.R.T.属性の数や内容に関する規定がないのに対し、NVMeにはS.M.A.R.T.属性の数や内容に関する規定が存在します。つまり、SATA SSDのS.M.A.R.T.属性は、数（種類）も内容もメーカー依存であり、メーカー間での比較が容易ではないことを意味します。

　さらに、S.M.A.R.T.属性が持つ閾値に関して、ACSではホストによる閾値設定（変更）方法を規定していません。つまり、メーカーとの交渉によるカスタマイズやファームウェア(FW)更新以外でS.M.A.R.T.属性の閾値を変更するには、SSDがベンダコマンド等でS.M.A.R.T.属性の閾値変更機能を持ち、かつその機能が開示される必要があります。

　一方NVMeは、S.M.A.R.T.属性の種類や内容、および一部属性の閾値変更方法を、仕様として明確に規定しています。ただし、NVMeが規定するS.M.A.R.T.属性には、SATA SSDにみられるようなNANDフラッシュメモリのエラー（Program、Eraseエラーなど）を直接報告する属性が存在しません。

　このように、S.M.A.R.T.属性一つとってもACSとNVMeとで大きな違いがあります。

　これとは別にACSとNVMeとで異なるのは、NVMeは、一部のS.M.A.R.T.属性について、閾値超過・不足を起こしたらそのことをすぐに（非同期に）ホストへ報告する機能を持つことです（事前にホストからの要求が必要）。

　この機能を使うことで、ホストは、定期的にS.M.A.R.T.情報を取得してS.M.A.R.T.属性の閾値超過等が起きていないかチェックする必要がなくなり、SSDに対して、興味を持つS.M.A.R.T.属性が閾値超過等を起こしたときに通知するよう要求すれば良いことになります。

　これらの細かい特徴については、ACS、NVMeそれぞれの回で説明予定です。

# まとめ
　この記事では、SSDの健康状態把握を目的とした情報の収集および取得機能として幅広く用いられている"Self-Monitoring, Analysis and Reporting Technology (S.M.A.R.T.)"について、まず機能の概要を説明しました。S.M.A.R.T.はS.M.A.R.T.属性だけではないことをご理解いただければと思います。

　次回からは具体的にSATA SSDのS.M.A.R.T.そしてNVMeのS.M.A.R.T.について詳しく見ていく予定です。

# References
[1] Jim Hatfield, "_List of Public SMART Attributes_", e05173r0, Proposal document for T13 Technical Committee, October, 2005

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