SSDの選び方(2/5)：じゃあTBWって何なんだ？

# はじめに
　[前回の記事](https://qiita.com/ken-yossy/items/27d2cdba22c58e9aa6f2 "SSDの選び方(1/6)：TBWは値だけ見ても意味がない！")で、SSDの製品仕様に記載されているTBWについて、その定義と、記載内容の意味を説明しました。

　それを踏まえて、この記事では、「**じゃあTBWって何なんだ？**」「**TBWは万能な数値なのか？**」「**TBWは何に使うべきものなんだ？**」という問いに対する、私なりの答えを書きます。

**※注1：**記事中で単に"TBW"と記載した場合は、「あるワークロードを用いて算出されたTBW」というワークロードを特定しない形での言及です。「TBWがワークロードに依存しない」という意味ではありません。

# サマリ

* TBWとは、「**SSDが搭載するNANDフラッシュメモリに書き込み可能なデータサイズ（＝寿命）のうち、あるワークロードにおいて、Garbage Collectionやウェアレベリングなどの処理による書き込みを除く、ホストからWriteコマンドで転送されたデータの一次書き込みで消費できる寿命（サイズ）**」のこと
* TBWは、**万能ではない**
    * 算出（測定）に用いたワークロードを揃えないと比較できない
* 「製品仕様に記載されたTBW」は、**SSDが備えるNANDフラッシュメモリおよびNANDフラッシュメモリ管理技術をざっくり評価するための指標**と考えるべきである
    * 特に、**算出時に用いられたワークロードと実使用時のワークロードが異なる場合は、製品仕様記載のTBW値をSSDの選定の参考にすべきではない**
    * **細かい数値の差には大きな意味はない上に、製品の得手不得手を反映していない可能性が高い**

# 準備：推定寿命
　説明のために、まず、SSDが搭載するNANDフラッシュメモリの容量と、NANDフラッシュメモリのブロックの書き換え回数だけで簡易的に計算できる、SSDの寿命を定義します。

　この寿命のことを「推定寿命」と呼ぶことにします。

```math
推定寿命 (Byte)= CAP_{PHY}×GuaranteedN_{PE}
```

　ここで、$CAP_{PHY}$はSSDが搭載する物理NANDフラッシュメモリ容量(Byte)、${GuaranteedN}_{PE}$はブロックの保証書き換え回数、を示します。

　本当は、$CAP_{PHY}$の代わりに「SSDが搭載するNANDフラッシュメモリのブロックの総数×NANDフラッシュメモリのブロックサイズ」を使った方が、寿命推定の精度がより高く（より寿命が長く）なります。

　しかし、ブロックサイズはまだしも、ブロックの総数はNANDフラッシュメモリの生産歩留まりに直結する値であるため、容易にはわかりません。

　その上、もう一方の「ブロックの保証書き換え回数」も、「ブロックの書き換え回数の実力」からは少ない値になりますので、片方だけ（＝$CAP_{PHY}$だけ）精度を上げても意味が薄いです。

　また、最近のほとんどのSSDは、TLCやQLCのNANDフラッシュメモリチップを採用した製品でも、搭載しているNANDフラッシュメモリの一部を、例えばブロック単位で、SLCとして使用する技術を採用しています（"Turbo Write"や「SLCキャッシュ」などと呼ばれている機能がその例です）。

　そのような技術が適用された場合、消費する寿命はもちろん、残寿命の考え方がとても難しくなります。

　これらの要素を製品仕様のみから推測・判断するのはまず不可能ですので、「SSDが搭載する物理NANDフラッシュメモリ容量」で代用します。

　「推定寿命」の計算式の説明に戻ります。

　「ブロックの保証書き換え回数」は、TLCやQLCなどのデータ記録方式によって、またNANDフラッシュメモリメーカーやSSDメーカーによって異なります。

　この「推定寿命」は、「SSDの使い方」にかかわらず、同一世代のNANDフラッシュメモリを使用した、容量などが同じ製品であれば、どの個体でもほぼ同じと考えることができます。

　なぜなら、「推定寿命」の計算式の中に、「SSDの使い方」に係わる項が存在しないからです。

　それでは、推定寿命を具体的に計算してみます。

　ここでは、例として、「ブロックの保証書き換え回数」として[1]に掲載されている典型的な値（表1）を使用し、同じく[1]に記載されているIntel製SSD 2つの推定寿命を具体的に計算してみます。

表1：各データ記録方式におけるブロックの保証書き換え可能回数（典型値、[1]より抜粋）
![各データ記録方式におけるブロックの保証書き換え可能回数（典型値、[1]より抜粋）](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/439683/48b59103-f353-9e56-125d-11147efde51c.png "各データ記録方式におけるブロックの保証書き換え可能回数（典型値、[1]より抜粋）")

　TLC NANDフラッシュメモリを採用したIntel 600pシリーズの1 TBモデル<sup>[2]</sup>の場合、SSDが搭載するNANDフラッシュメモリの総容量は1 TiB（TiBは$1024^4=2^{40}$Byteのこと）と考えられます。

　そこで、表1のTLCの保証書き換え可能回数5,000回を使用すると、推定寿命は以下のように計算できます。

```math
1\ TiB ×5000=5000\ TiB= \frac{5000×1024^4}{1000^4}\ TB \fallingdotseq  5497\ TB
```

　同様に、QLC NANDフラッシュメモリを採用したIntel 660pシリーズの1 TBモデル<sup>[3]</sup>の場合も、SSDが搭載するNANDフラッシュメモリの総容量は1 TiBと考えられます。

　そこで、表1のQLCの保証書き換え可能回数1,000回を使用すると、推定寿命は以下のように計算できます。

```math
1\ TiB×1000=1000\ TiB= \frac{1000×1024^4}{1000^4}\ TB≒1099\ TB
```

# 推定寿命とTBWの違い
　計算した推定寿命と、両製品の製品仕様に記載されたJESD219のクライアントワークロードを用いて算出されたTBWを比較すると、図2のように大きな開きがあることがわかります。

![推定寿命とTBWの差の例](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/439683/8f1f369e-348d-0c04-532e-7554cf772903.png "計算した推定寿命と製品仕様に記載されたTBWの差の例")
図2：計算した推定寿命と製品仕様に記載されたTBWの差の例

　この推定寿命とTBWの差（違い）は何なのでしょうか？

　それは、「推定寿命」は「SSDが備えるNANDフラッシュメモリに書き込むことができるサイズ」であり、TBWが「ホストからSSDに書き込むことができるサイズ」であること、が理由です（図3）。

![推定寿命とTBWの大小関係](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/439683/7bbf455f-f712-1ec5-3c86-a8f5ec9c1c56.png "推定寿命とTBWの大小関係")
図3：推定寿命とTBWの大小関係

　SSDでは、ホストから書き込まれるデータ以外にも各種管理情報をNANDフラッシュメモリに書き込む必要があります。

　例えば、SMARTに代表されるSSDの統計情報も、SSDが備えるNANDフラッシュメモリに書き込まれます。

　また、Garbage CollectionやSSDに記録されているデータの信頼性を確保するための処理のため、NANDフラッシュメモリにデータを書き込む必要もあります。

　つまり、SSDの推定寿命のうち、ある程度の寿命はホストから受領したデータの一次書き込み以外の目的で消費しているのです。

　加えて言えば、NANDフラッシュメモリには先天性もしくは後天性の故障や不良によって、データの記録に使用できないブロック（領域）が存在することがあります。

　そのようなブロックがあった場合、そのブロックの分の寿命（＝ブロックサイズ×保証書き換え可能回数の残り）は故障がわかった時点で失われることになります。

# TBWの意味
　やっと、「**じゃあTBWって何なんだ？**」という問いに対する答えを説明する準備ができました。

　SSDの推定寿命を消費する要素には、ホストから受領したユーザデータの一次書き込み以外にも存在することを説明しました。

　このイメージを、SSDの出荷直後と使用中の「推定寿命の消費状況」の比較を用いて図示すると、図4のようになります。

![出荷直後と使用中の寿命消費状況（イメージ）](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/439683/a8bbfa65-9f2d-69a6-1971-884623e9359f.png "出荷直後と使用中の寿命消費状況（イメージ）")
図4：出荷直後と使用中の寿命消費状況（イメージ）

　このように、SSDの推定寿命を消費する要素には、ホストから受領したデータの一次書き込み（図4中のE）の他に、SMARTに代表されるSSDの統計情報や各種管理情報の書き込み（図4中のCとD）、そしてGarbage Collectionやホストから書き込まれたデータの信頼性を確保するための処理による書き込み（図4中のF）などが存在します。

　では、図4の「残寿命」がなくなると（＝SSDが備えるNANDフラッシュメモリへの書き込みサイズが推定寿命に到達すると）どうなるのでしょうか？

　そのイメージを示したのが図5になります。

![推定寿命を消費し尽くした状態（イメージ）](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/439683/081198fc-d20a-7407-b8e5-2033502cf112.png "推定寿命を消費し尽くした状態（イメージ）")
図5：推定寿命を消費し尽くした状態（イメージ）

　この、**推定寿命を全て消費した時点までにホストから受領したユーザデータの一次書き込みで消費した寿命（図5中のE）がTBW**なのです。

　つまり、図2で示した推定寿命とTBWの差（寿命）は、上記の図5中のEを除く書き込みによって消費されている、ということになります（図6）。

　なお、図6中の領域A, B, C, D, Fそれぞれの大きさ（消費した寿命）はあくまでイメージです。

![推定寿命の消費の様子とTBW（推定寿命の消費の様子（内訳）はあくまでイメージ）](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/439683/be07dc30-6458-c4c2-3e97-8279cf03c9ad.png "推定寿命の消費の様子とTBW（推定寿命の消費の様子（内訳）はあくまでイメージ）")
図6：推定寿命の消費の様子とTBW（推定寿命の消費の様子（内訳）はあくまでイメージ）

# TBWは万能ではない！
　TBWの値とは、SSDが備えるNANDフラッシュに書き込むことができるデータサイズ（推定寿命）を消費する要素のうちのひとつでしかないことを説明しました。

　ここで最初に挙げた問いの一つ、「**TBWは万能なのか？**」に対する答えを導くことができます。

　「TBWは万能なのか？」というのは、例えば、「同じ世代で同じ書き込み方式のNANDフラッシュメモリを同じ容量だけ搭載したSSDであれば、どんな使い方をしてもこのTBWの値は同じになるのだろうか？」ということです。

　答えは**No**です。TBWの値は「SSDの使い方」に強く依存します。

　たとえ、同じメーカーの同じHW/FWのSSDであっても、「使い方」が異なればTBWは異なります。

　理由は、これまで説明したように、「ホスト受領したユーザデータの一次書き込み（=TBW）」以外にもSSDの推定寿命を消費する要素が存在し、かつそのサイズが「使い方」によって変化するからです。

　例えば、同じ推定寿命のSSDに対して、同じサイズのユーザデータをホストから書き込んだ場合でも、異なる「使い方」をした場合の残寿命は、図7のようになる可能性があります。

![異なるワークロード（使い方）による推定寿命消費の違い](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/439683/eefda306-875f-751b-e3da-1a1dd71d8632.png "異なるワークロード（使い方）による推定寿命消費の違い")
図7：異なるワークロード（使い方）による推定寿命消費の違い

　この図7では、ワークロード1で使ったSSDはもう残寿命がほとんどないのに対して、ワークロード2で使ったSSDはまだまだ残寿命がありホストからのユーザデータ書き込みを行う余裕があることを示しています。

　したがって、このまま推定寿命を消費し尽くすまで使い続けた場合、ワークロード2で使ったSSDのほうがワークロード1で使ったSSDと比較してTBW（図7中のEの領域のサイズ）が大きくなると考えられます。

　つまり、「TBWの値はSSDの使い方によっても変わる」ので、「万能ではない」のです。

**※注2：**TBWは、実際には、測定対象のSSDにReadやWriteのコマンドを送る、ホスト側の性能（CPU性能、DRAMサイズ、OS、測定に使用したアプリケーションなど）によっても変わる可能性があります。SSDの性能に対してホストの性能が相対的に低い場合、SSD側が暇になる時間が増えてしまい、SSD側の処理のタイミングや内容が変わる可能性があります。したがって、ホストの性能が異なる場合、同一のワークロードを使用した場合でも、TBWが異なる可能性があります。

# TBWがワークロードによって変わる要因
　図7における「ワークロード1」と「ワークロード2」の違いは、「ホストから受領したユーザデータの一次書き込みで消費した寿命（図7のE）」以外で消費した寿命です。

　説明した通り、SSDでは、ホストから書き込まれるデータ以外にも各種管理情報をNANDフラッシュメモリに書き込む必要があります。

　また、Garbage CollectionやSSDに記録されているデータの信頼性を確保するための処理によってNANDフラッシュメモリにデータを書き込む必要もあります。

　これらの処理による寿命消費がワークロードによって異なるため、ワークロードによってTBWが変化するのです。

　例えば、以下のようなワークロード（使い方）をすると、上記のような処理によるNANDフラッシュメモリへの書き込みが多くなり、結果として、ホストから書き込むことができるデータサイズがクライアントワークロードを使用して算出されたTBW（＝よく製品仕様に記載されているTBWの値）と異なる値になります。

　以下のようなワークロードにおけるTBWが、クライアントワークロードを使用して算出されたTBWと比較して大きくなるのかそれとも小さくなるのかについては、製品によって異なりますが、一般的には、小さくなると予測されます。

* SSD内の有効データサイズがSSD容量に対して多い状態で使い続ける場合
    * Garbage Collectionによる寿命消費が多くなるため
* 24時間稼働するサーバに設置されて絶え間なくWriteアクセスされるログ格納用SSD
    * SSD内の管理データ（Flash Translation Layer (FTL)のデータなど）による寿命消費が多くなるため
* 24時間稼働し絶え間なくReadアクセスされるWebサーバのコンテンツ格納用SSD
    * Read Disturb<sup>[4]</sup>に対処するための寿命消費が多くなるため
* 温度や振動に代表される動作環境がオフィスや家庭とは異なる場所で使用されるSSD
    * NANDフラッシュメモリの温度特性に対応するための寿命消費が多くなるため
* 一回の通電時間（稼働時間）が短い機器（システム）に接続・内蔵されるSSD
    * 電源断および電源投入時の処理による寿命消費が多くなるため

　上記使い方の下4つについては、JESD219のクライアントワークロードとは異なる使い方です。

　したがって、そのようなワークロードにおいて最適に動作するように設計されたSSDの場合、JESD219のクライアントワークロードを用いて算出したTBWは、製品の得手不得手を反映したものではない、ということになります。

　どんなワークロード（使い方）がどのようにTBWに影響を与えるのかについては、次回の記事で説明したいと考えています。

# じゃあTBWって何に使えるの？
　これまでに、「**TBWの正体**」を明かし、「**TBWは万能ではない**」ことを示しました。

　最後に、「**TBWは何に使うべきものなんだ？**」という問いに対する答えを出したいと思います。

　前述の通り、TBWがワークロードによって変化する要因は、各種管理情報のNANDフラッシュメモリへの書き込みや、Garbage CollectionやSSDに記録されているデータの信頼性を確保するための処理によるNANDフラッシュメモリへのデータの書き込み、です。

　これらの書き込みは、どのようなSSDでも、サイズの多少の差はあっても、不可欠、不可避で<sup>（注3）</sup>、かつワークロードに依存します。

　ワークロードが千差万別でTBW算出に使用したワークロードと同じになることはなく、かつホストを含めたTBW算出環境が実際のSSDの使用環境と一致することもあり得ませんから、**製品仕様に記載されるような「JEDECのクライアントワークロードを使って算出されたTBW」は、SSDが備えるNANDフラッシュメモリおよびNANDフラッシュメモリ管理技術をざっくり評価するための指標**と考えるべきです。

　正直、**細かい値を気にしてもあまり意味がない**です。

　ご参考までに、表2に、この記事の執筆時点での、SSD主要各社がインターネットに公開している製品仕様記載のTBWをまとめたものを示します。

表2：主要各社の3D TLC NAND搭載SATA SSDのJESD219クライアントワークロードに基づくTBW値<sup>[5]～[9]</sup>
![主要各社の3D TLC NAND搭載SATA SSDのJESD219クライアントワークロードに基づくTBW値](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/439683/a8dca504-be43-7c3d-6e59-ca515bb8dc4d.png "主要各社の3D TLC NAND搭載SATA SSDのJESD219クライアントワークロードに基づくTBW値")

　この表2を見るとわかる通り、3D TLC NANDを搭載した同容量帯の製品であれば、数倍とか数十倍といった大きな差はないことがわかります。

　この表2における同容量帯（例：500 GBと512 GB）製品での値の差は、TBWの測定では考慮されない要素や、算出に使用したワークロードの違いで、どうとでも変わるようなものですから、目くじらを立てるようなものではありません。

　ちなみに、この表をよく見ると、同容量帯の値や傾向が近い3つのグループ（MicronとIntel、Western DigitalとSanDisk、Samsung）があると思います。

　この違いは……もうおわかりのことと思いますが、グループ間で搭載しているNANDフラッシュメモリの違いと考えるのが妥当です。

　つまり、表2は、「SamsungのNANDフラッシュメモリの機能や性能は、他社のNANDフラッシュメモリより良いのかもしれないなあ」ぐらいのことしかわからない、と受け取れば良い、と考えます。

　もちろん、コントローラ（HWとFW）などにも差はあると思いますが、これ(TBW)だけではわかりません。

　このように、**「製品仕様に記載されたTBW」は、製品に関する技術的な特徴を「ざっくり」と把握するために使用するのがちょうど良い**です。

**注3：**MRAMとNANDフラッシュメモリを混載したSSD<sup>[10]</sup>では、それらユーザデータ以外のデータの書き込み先を、NANDフラッシュメモリより読み書きのレイテンシが短く書き換え可能回数も多いMRAMにしている可能性が考えられます。その場合、「NANDフラッシュメモリのTBW」はより大きくなると考えられます。

# おわりに
　この記事では、TBWの正体と、TBWの見方について説明しました。

　次の記事では、なぜTBWが使い方（ワークロード）に依存するのか、TBWの値の大小を左右する要素は何なのかを説明し、SSDを選ぶ際におさえておかなければならない要素についてまとめます。

# おまけ：WAFとTBWは表裏一体
　実は、今回説明した推定寿命とTBWの関係を応用すると、Write Amplification FactorもしくはWrite Amplification (WAF)と呼ばれる値とTBWの関係がとてもすっきりと説明できます。

　というのも、WAFとは「ホストから書き込まれたデータサイズ」と「メディア（ここではNANDフラッシュメモリ）に書き込んだデータサイズ」の比ですから、図6の記号を流用し、故障や不良による寿命の喪失を無視すると、以下のように表すことができます。

```math
WAF（推定値）= \frac{C+D+E+F}{E} \fallingdotseq \frac{推定寿命}{E} = \frac{推定寿命}{TBW}
```

　このように、「**WAFとTBWが反比例の関係にあること**」をすっきりと表現できます。

　もちろん、**TBWがワークロードありきの値である以上、WAFもワークロードありきの値**です。

　どんなワークロードを用いて算出した値なのかが明記されていない限り、比較や検討に使用すべきではありません。

　TBWの算出にJESD219のクライアントワークロードを使用したのであれば、上記の式で示されるWAFもJESD219のクライアントワークロードを使用した場合のWAFとなります。

　さらに、実際のWAFは、NANDフラッシュメモリチップが備えるブロック数の余裕分や、SSDコントローラのFWの工夫により、上記の計算式で算出される値よりも小さい値になります。

　そもそも推定寿命が推定値（実際より小さい値）である以上、ここで説明する計算式で示されるWAFもあくまで参考値（実際より大きい値＝悪い値）であることに注意してください。

# Reference

[1] 福田、「[【福田昭のセミコン業界最前線】QLC SSDがコスト低減を武器にニアライン/クライアントHDDを侵食](https://pc.watch.impress.co.jp/docs/column/semicon/1149330.html)」、2018年10月23日（2019年10月16日閲覧）
[2] インテル、「[インテル® SSD 600p シリーズ(1.0 TB、M.2 80 mm PCIe* 3.0 x4、3D1、TLC)](https://www.intel.co.jp/content/www/jp/ja/products/memory-storage/solid-state-drives/consumer-ssds/600p-series/600p-1tb-m-2-80mm-3d1.html)」 、2019年9月30日閲覧
[3] インテル、「[インテル® SSD 660p シリーズ(1.0TB、M.2 80mm、PCIe* 3.0 x4、3D2、QLC)](https://www.intel.co.jp/content/www/jp/ja/products/memory-storage/solid-state-drives/consumer-ssds/6-series/ssd-660p-series/660p-series-1-tb-m-2-80mm-3d2.html)」、2019年9月30日閲覧
[4] @rarul 「[プログラマのためのフラッシュメモリ入門](https://qiita.com/rarul/items/40da2248dd99a18e1809 "プログラマのためのフラッシュメモリ入門")」
[5] Micron Technology、「[1300](https://www.micron.com/products/solid-state-drives/product-lines/1300 "1300")」、2019年10月11日閲覧
[6] Western Digital、「[WD Blue 3D NAND SATA SSD](https://shop.westerndigital.com/ja-jp/products/internal-drives/wd-blue-3d-nand-sata-ssd#WDS250G2B0A "WD Blue 3D NAND SATA SSD")」、2019年10月11日閲覧
[7] SanDisk、「[Ultra 3D SSD | SanDisk](https://www.sandisk.com/home/ssd/ultra-3d-ssd "Ultra 3D SSD | SanDisk")」、2019年10月11日閲覧
[8] Samsung Semiconductor、「[Samsung SSD 860 EVO | Samsung V-NAND Consumer SSD | Samsung Semiconductor Global Website](https://www.samsung.com/semiconductor/minisite/jp/ssd/consumer/860evo/ "Samsung SSD 860 EVO | Samsung V-NAND Consumer SSD | Samsung Semiconductor Global Website")」、2019年10月11日閲覧
[9] Intel、「[インテル® SSD 545s シリーズ](https://www.intel.co.jp/content/www/jp/ja/products/memory-storage/solid-state-drives/consumer-ssds/5-series/ssd-545s-series.html "インテル® SSD 545s シリーズ")」、2019年10月11日閲覧
[10] 福田、「[【福田昭のセミコン業界最前線】NANDの10倍、Intel Optaneの2倍の速度を実現するMRAM SSD](https://pc.watch.impress.co.jp/docs/column/semicon/1149330.html)」、2018年10月15日（2019年10月16日閲覧）

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