日常業務用ノートPCのSSDにはどの程度データが書き込まれるのか調べてみた

# はじめに

　以前、SSD（NANDフラッシュメモリ）の寿命は「使いかた」によって変わる、と説明しました。

　JEDECは、SSDのTBW算出用などに、クライアントストレージとエンタープライズストレージの「典型的な使いかた」としてそれぞれのワークロードを公開しています<sup>[1]</sup>。とはいっても、実際の「SSDの使いかた（使われかた）」がどんなものなのか、普段使っているとどの程度SSDにアクセスする（される）のか、というのはなかなかわかりません。

　また、SSDにとって、特に寿命について重要なワークロードの構成要素は、多岐にわたります。ざっと挙げただけでも以下のものがあります。ポイントは、いわゆる「読み書きコマンド」**以外の**項目が含まれていることです。

* ホストからの読み出しや書き込みデータ量（総サイズ）
* コマンドの数や先頭アドレスとその連続性
* 1回のコマンドで読み書きするデータサイズ
* コマンドの発行時間間隔
* 電源オフ（電源オン）の回数
* 省電力モードへの移行頻度

　そこで今回は、ワークロードを構成する要素の中でも比較的実データを採取しやすい「書き込みデータ量」について、私が日常業務で使用しているノートPCが備えるSSDから取得したデータを紹介します。

# まとめ

* 採取データなどからは、「日常使いのクライアントPCでのSSDの使いかた（＝ワークロード）」における「1日の書き込みデータ量」は「最大でも10 GB以上20 GB未満、平均では6 GB未満程度」と考えられる
* SSDのカタログスペック上の寿命（例：TBW）と比較する場合、カタログスペック値算出の前提となるワークロードを確認すべき

# 環境
　この記事で紹介するデータの採取環境は表1の通りです。搭載しているSSDは、カタログスペック上では保証期間5年、TBWは300 (TB)となっています<sup>[2]</sup>。

表1：データ取得環境

| 項目 | 内容 |
|-----:|:-----|
| モデル | Lenovo ThinkPad X280|
| CPU | Intel Core i5-8250U |
| DRAM | 8 GB |
| SSD | Western Digital SN720 512GB |
| OS | Windows 10 Pro 64bit (version 2004) |

　データ採取開始時点でのSSDの使用状況は図1の通りです。有効データはドライブ容量の1/4強程度です。この有効データ量は、データ最終終了時点（2020年末）でも大きな変動はありませんでした。

![データ採取開始時点でのSSDの使用状況](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/439683/ac9cc0b2-9ce9-9ae0-34c3-37e6d2f02e82.png "データ採取開始時点でのSSDの使用状況")
図1：データ採取開始時点でのSSDの使用状況

　このPCは日々の業務で使用しているものです。メールの閲覧や作成、文書や資料の閲覧や作成、Webブラウザを使用しての情報収集はもちろん、ウィルス対策ソフトウェアによるウィルススキャンが実行されることもあります。

　特記事項としては、このPC上ではソースファイルからのソフトウェアビルドやSSDの開発ボードを使ったデバッグなどを行います。ソースファイルのビルドを行うと、細かいファイルの読み書きが大量に発生します。例えばLinuxカーネルをソースファイルからビルドすると、アーカイブの展開から含めるとかなりの読み書きが発生します。

　このPCは、2019年1月から使っており（使用期間ほぼ2年）、データの採取期間は昨年（2020年）6月から年末までの約半年ほどで、データ取得頻度は毎日です。

# 取得方法
　データを紹介する前に、データの採取方法をまとめます。といっても難しいことはしておらず、Crystal Disk Info<sup>[3]</sup>でSSDのS.M.A.R.T.属性の値を取得し、そのデータをまとめる方法です。

　図2は、Crystal Disk Infoで対象NVMe SSDのS.M.A.R.T.属性などを取得した結果です。

![Crystal Disk Infoで対象NVMe SSDのS.M.A.R.T.属性等を取得した結果](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/439683/cfafc0ea-bfd1-12af-7d5e-8307e7b80eba.png "Crystal Disk Infoで対象NVMe SSDのS.M.A.R.T.属性等を取得した結果")
図2：Crystal Disk Infoで対象NVMe SSDのS.M.A.R.T.属性等を取得した結果

　この属性群のうち、青四角で囲った「総読み込み量（ホスト）」と「総書き込み量（ホスト）」が、ホストとSSDとの間で読み書きされたデータ量（サイズ）の**概算値**になります。

　ここで「概算値」と書いたのは理由があります。それはこの「総読み込み量（ホスト）」と「総書き込み量（ホスト）」の値が**正確なデータ量（バイト単位）ではない**からです。

　NVMe仕様<sup>[4]</sup>には以下のように記載されています。

表2：NVMe仕様<sup>[4]</sup>のS.M.A.R.T.属性仕様（一部。仕様書Figure 94から抜粋）
![NVMe仕様のS.M.A.R.T.属性仕様（一部。仕様書Figure 94から抜粋）](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/439683/09ef3923-04d1-99f7-609e-ff40445a1708.png "NVMe仕様<sup>[4]</sup>のS.M.A.R.T.属性仕様（一部。仕様書Figure 94から抜粋）")

　表2の青下線を引いた文章の通り、「**この値が1なら、512バイト単位に換算して1回以上1000回以下の読み書きが行われたことを示す**」となります。この値が2なら「1001回以上2000回以下」となります。

　このように、NVMe SSDの「読み書きデータ量」というS.M.A.R.T.属性値には誤差があるため、製品の保証期間を通じて蓄積される可能性のある誤差量を確認した上でデータ取得方法を考えます。

　例えば、この属性値が「1」だった場合は「1000回」、「2」だった場合は「2000回」と近似することを考えます。つまり、この属性値がある日に「1」で次の日に「2」だった場合、その1日間で1000回の読み書きが行われた、とみなします。上記で説明したNVMe仕様とは一部異なります。

　この近似をした場合、上記の例で最も誤差が大きくなるのは、実際の読み書き回数がそれぞれ「1回」と「2000回」だった場合です。「1回」と「2000回」だった場合にその値を取得した期間に行われた読み書きの回数は1999回ですから、999回の誤差が生じています。

　そこで、保証期間の5年間ずっと毎日この最大誤差が累積したと仮定すると、累積する誤差は512バイト x 999回 x 365日 x 5年＝933,465,600バイト≒933 GBとなります。このSSDのカタログスペック上でのTBWは300 TBですから、この程度であれば許容可能な誤差だと判断できます。

　誤差に関するこの確認結果から、今回の調査では上記例の近似により「1日の書き込みデータ量」を記録しました。改めてこの近似方法をまとめると以下のようになります。

>　SSDのS.M.A.R.T.属性値「総書き込み量（ホスト）」を毎日初めてPCを起動した直後に採取し、その値に512バイト x 1000単位を掛け算した値を「今日までの累積書き込みデータ量」として記録する。そして「今日までの累積書き込みデータ量」と「前日までの累積書き込みデータ量」の差を「前日1日の書き込みデータ量」とする

# 調査結果
　それでは取得したデータについて説明します。

## 概要
　記録したデータをまとめてグラフ化したものが図3です。なお、グラフが見づらくなるため、書き込みデータ量に関するデータのみ表示しました。

![ノートPCのSSDへの書き込みデータ量（約半年間；週間、累積）](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/439683/72f94b84-6fbf-b30e-448e-30b6f715583e.png "ノートPCのSSDへの書き込みデータ量（約半年間；週間、累積）")
図3：ノートPCのSSDへの書き込みデータ量（約半年間；週間、累積）

　折れ線グラフが、各週におけるホストからSSDへの書き込みデータ量（最大、最小、平均）です。左側の縦軸です。書き込み量の多い日があった週となかった週で差が大きいです。

　また棒グラフは、毎日の書き込みデータ量の積算値です。右側の縦軸です。SSD使用開始時からの累積値ではなく、このデータ採取期間内の累積値です。データを採取した期間は28週ですが、この期間での書き込み量はおよそ20 TBです。

## 1日の書き込みデータ量

　まず、1日の書き込みデータ量（図3の折れ線グラフ）について見てみます。

　グラフの各週の書き込みデータ量からは、1日の書き込みデータ量が極端に大きかった週がいくつかありますが、多くの週は最大でも数十GB、平均では30 GB未満であることがわかります。

　記憶をたどると、書き込みデータ量が多かった週は様々なソースファイルのビルド作業をひっきりなしに行っていた気がします。また数GB単位のデータ（ISOイメージなど）を数多く扱っていた気もします。

　それにしても数値が大きいですが、ユーザには見えないところでデータが書き込まれることもあるため、様々な要因が重なってこのような値になったと考えます。

　いずれにしても、一日に300 GBものデータを書き込むような使いかたは、平常時の（日常での）使いかたではないと考えます。

　また、この書き込み量は、同じ職場の方々と比べておおよそ5倍から10倍程度の量でした。やはりソフトウェアのビルドやデバッグといった開発活動に伴う書き込み量が多そうです。加えて、すごい数のタブを開きながらWebブラウザを使っているので、メモリスワップによる書き込みが多い可能性もあります。

　取得したデータと上記比較結果から、SSDにとってより厳しい値つまり書き込み量の多いほうとして、採取したデータの1/5を採用し、「日常使いのクライアントPCの日々の使いかた」の構成要素のうち「1日の書き込みデータ量」として「最大でも10 GB以上20 GB未満、平均では6 GB未満」という値を仮定します。

## 累積書き込みデータ量

　次に、累積書き込みデータ量（図3の棒グラフ）について考えます。

　概要説明時に触れたように、28週間でおよそ20 TBの書き込みが行われたことがわかります。

　今回のデータ記録期間内には前節で触れたように極端に書き込みデータ量が多い日があったこと、そしてこのような書き込みデータ量は特異であって、「日常使いのクライアントPCの日々の使いかた」の構成要素のうち「1日の書き込みデータ量」を「最大でも10 GB以上20 GB未満、平均では6 GB未満」と仮定したことを考慮すると、「日常使いのクライアントPCの日々の使いかた」を同一期間続けた場合の累積書き込みデータ量は、この20 TBよりもかなり小さく、1/5の高々4 TB程度と仮定できます。

## TBWとの比較と落とし穴
　ここまでの考察を踏まえて、「じゃあこの（仮定した）使いかたではSSDの寿命はもつのか？」ということを考えます。
 
　データ取得期間である28週間を「およそ半年」と考えて、今回仮定したデータのような書き込み（ワークロード）が続くとすると、このSSDに対して1年で高々8 TB書き込むことになります。

　したがって、このSSDのTBWである300 TBを消費するには37.5年かかる計算となり、SSDの保証期間である5年間であればSSDの寿命をまったく心配せず使い続けられる、と概算できます。

　つまり、非常に偏った使いかたや特殊な使いかたをしない限り、SSDの寿命を保証期間内で使い切るのは至難の業ということになります。

　しかし、**この見積もりには大きな落とし穴があります**。

　それは、**SSDのTBWの算出に使われたワークロードと、この「1日の書き込みデータ量は最大でも10 GB以上20 GB未満、平均では6 GB未満」という「日常使いのクライアントPCの日々の使いかた（＝ワークロード）」（の構成要素）が一致していなければ、この比較（見積もり）は成り立たない**ということです。

　データ取得対象NVMe SSDのデータシートには、

> TBW (terabytes written) values calculated using JEDEC client workload (JESD219)

　と書かれていますので、JEDECのクライアントワークロードの内容を確認する必要があります。

　ということで、次の記事では「JEDECのクライアントワークロードの具体的内容」についてまとめます。

# まとめ

　この記事では、私が日常業務で使用しているノートPCが備えるSSDを用いて約半年間取得した、SSDへの書き込みデータ量に関する記録と、そこからわかる「リアル」な「日常使いのクライアントPCの日々の使いかた（＝ワークロード）」の構成要素のひとつを紹介しました。

　このデータなどからは、「日常使いのクライアントPCの日々の使いかた」における「1日の書き込みデータ量」は、「1日の書き込みデータ量は最大でも10 GB以上20 GB未満、平均では6 GB未満」と考えられます。

　記事を書いていて気付いたのですが、NVMe SSDのS.M.A.R.T.属性には「使用率(Percentage Used)」という属性があるので、この属性値も記録しておいてその推移をモニタすれば良かったです。ということで今年（2021年）に入ってからは記録しています。

　「使用率」の推移は、データが溜まったころに紹介できれば、と考えています。

# 参考文献
[1] JEDEC, _"SOLID-STATE DRIVE (SSD) ENDURANCE WORKLOADS"_, JESD219A, July 2012
[2] Western Digital, _"[SN720 NVMe SSD](https://www.westerndigital.com/products/commercial-internal-drives/pc-sn720-ssd)"_, 2021年1月8日閲覧
[3] _[Crystal Disk Info](https://crystalmark.info/ja/software/crystaldiskinfo/)_, 2021年1月12日閲覧
[4] NVM Express, _"NVM Express Base Specification"_, Revision 1.3d, March 20, 2019

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