NVMe SSDのサーマルスロットリング設定温度をいじってみた（その2）

# はじめに
　以前、NVMe SSDのサーマルスロットリング設定をいじって実際にサーマルスロットリングを発生させ、[サーマルスロットリングによる性能変化の挙動を調べました](https://qiita.com/ken-yossy/items/0b40dc87fc5ae6d6e53e)。

　その際の実験ではWriteアクセスしか行いませんでしたので、今回は、より高いデータ転送バンド幅を記録するReadアクセスも行うことで性能と温度の変化を調べました。

　前回と比較しやすくするため、実験で使用したNVMe SSDや、サーマルスロットリング設定変更方法、評価環境、そして性能評価や温度取得の方法は、実験時と同一としました。サーマルスロットリング設定内容（値）の一部のみ変更しました。

# サマリ

* SSDは、規格（今回はNVMe）に沿ったサーマルスロットリング機能以外に、類似の機能を備えている可能性があり、それは実際に評価しないとわからない
* サーマルスロットリング発動時の性能変動（挙動）は評価してみないとわからない
* あるSSDについて、自分が使う環境（ワークロード）でどの程度の温度になるか、サーマルスロットリングが発動するか、は実際に評価しないとわからない
* 何より、**SSDは、可能な限りサーマルスロットリングが発動しないよう温度管理すべき**

# 性能評価条件
　前回のWriteアクセスによる評価時と異なるのはアクセスパターンです。今回のアクセスパターンは以下の通りです。

1. `Dataset Management`コマンドで全LBAをDeallocate (trim)
2. LBA = 0を先頭にした、各製品のSLCキャッシュに収まると思われるサイズのLBA領域に対し、5分間、1 MiB単位でシーケンシャルWrite (QD = 64)を繰り返す
3. Write終了後すぐに（間を空けず）、Writeした領域に対し、5分間、1 MiB単位でのシーケンシャルRead (QD = 64)を繰り返す

　1と2がプリコンディショニングに相当します。

　2の完了後に時間的間隔を空けず3を実行することで、SLCキャッシュに書き込まれたデータがTLCに移動されてしまうことを防いで3の時に高いReadデータ転送バンド幅を維持し、その結果SSDの温度がより上昇しやすくなることを期待しています。

# 評価結果（その1）
　まず1つめのSSD（前回評価時の"SSD1"）の評価結果です。

　Host Controlled Thermal Management (HCTM)の設定内容等を表1に示します。

表1：評価設定内容(SSD1)
![評価設定(SSD1)](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/439683/2b4ee93a-95af-0626-52dc-1270ab92939c.png "評価設定(SSD1)")

　HCTMの設定を変更する前の性能と温度の変化は以下の図5のようになりました。

![デフォルト設定での性能と温度の時間変化(SSD1)](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/439683/6a457b19-23cf-cc46-cd8f-68db36334256.png "デフォルト設定での性能と温度の時間変化(SSD1)")
図1：デフォルト設定での性能と温度の時間変化(SSD1)

　横軸は経過時間（右に行くほど時間が経過する）、縦軸は、左縦軸がWriteもしくはReadのバンド幅（実線）、右縦軸がSSDの温度（点線）です。

　経過時間のちょうど中央付近のバンド幅が急に高くなるタイミングが、アクセスがWriteからReadに代わるタイミングです。

　図1の通り、アクセスがReadに変わりバンド幅が3000 MB/s近くに到達すると、それまで摂氏60度台前半だったSSDの温度は摂氏80度近くまで急激に上昇しています。その後、バンド幅は2400 MB/s程度まで低下して安定し、温度も摂氏81度近くで安定します。

　前回Writeアクセスで温度を測ったとき（[前回の記事](https://qiita.com/ken-yossy/items/0b40dc87fc5ae6d6e53e)の図5）は摂氏65度程度止まりでしたので、Readアクセスで高いバンド幅を出し続けるとやはりより高い温度になることがわかりました。

　なお、この図1の実験時の、ホストが設定可能なサーマルスロットリングの設定温度は、デフォルトのまま、つまり`TMT1`は摂氏0度で`TMT2`は摂氏85度です。ですが、温度が摂氏80度に到達する辺りでバンド幅（＝性能）が低下しています。

　最初、この性能低下の原因はプリコンディショニングの失敗かと考えました。もしReadアクセスの性能低下がプリコンディショニング要因であれば、この3000 MB/s程度で読み出したデータサイズがプリコンディショニングにおける1600 MB/sで書き込んだデータサイズと同程度になるはずです。

　しかし、その仮定が正しければプリコンディショニングのWriteアクセスで1600 MB/s程度を記録した時間はReadアクセスで3000 MB/s近くを記録した時間の倍程度であるはずですが（バンド幅が半分程度だから）、図1を見るとReadアクセスバンド幅の高い時間が短すぎます。

　また、性能が低下した結果SSDの温度が摂氏80度程度で安定したことも合わせると、この性能低下はSSDがサーマルスロットリングを発動したためである、と解釈した方が自然だと考えられます。

　このように、**HCTM等のサーマルスロットリング設定とは別の、SSDの内部処理による性能抑制機能は、実際に実験（評価）しないとわかりません**。

　ちなみに、SSD1の動作保証温度に関して調べると、搭載しているNANDフラッシュメモリの動作保証温度の上限が摂氏85度でした。

　次に、HCTMの設定のうち、TMT1を摂氏70度に、TMT2を摂氏80度に変更した場合の性能と温度の変化を図2に示します。グラフの見かたは図1と同じです。

![TMT1=摂氏70度、TMT2=摂氏80度の時の性能と温度の時間変化(SSD1)](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/439683/abb21ff2-0dae-752e-2b1e-57c9552de33d.png "TMT1=摂氏70度、TMT2=摂氏80度の時の性能と温度の時間変化(SSD1)")
図2：TMT1=摂氏70度、TMT2=摂氏80度の時の性能と温度の時間変化(SSD1)

　図2を見ると、SSDの温度が`TMT1`に設定した摂氏70度になると、強烈な性能抑制が発動していることがわかります。この性能抑制がサーマルスロットリングであることは間違いないでしょう。

　実際、前回の評価で同じようにSSDの温度が`TMT1`の設定値を超えた場合の結果（[前回の記事](https://qiita.com/ken-yossy/items/0b40dc87fc5ae6d6e53e)の図7）を見ると、やはりSSDの温度が`TMT1`の設定値を超えたタイミングでバンド幅が200 MB/s程度まで落ちるような強力なサーマルスロットリングが発動しています。

　前回の評価時に示した、「SSD1はSSDの温度がTMT1の値に到達したところでサーマルスロットリングを発動する」という推測がより確からしくなったと考えます。

　このSSD1のサーマルスロットリングは、性能の変動が非常に大きいです。前回の評価結果と合わせると、「**このSSD (= SSD1)は可能な限りサーマルスロットリングが発動しないように温度管理しなければならない**」と言えます。

　このように、あるSSDについて「**サーマルスロットリングがどのような時に発動するか**」、そして「**サーマルスロットリングによる性能抑制はどのような挙動か**」、については、実際に評価しないとわからないことが多いです。

　これに加えて、「**自分が使う環境（ワークロード含む）においてSSDの温度がどのようになるか**」を把握するには、**実際にSSDを使う環境で評価しなければわかりません**。

## 評価結果（その2）
　次に2つめのSSD（前回評価時の"SSD2"）の評価結果です。

　HCTMの設定内容等を表2に示します。

表2：評価設定内容(SSD2)
![評価設定(SSD2)](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/439683/d6e5fbbb-500d-aa06-e96b-c629f53b3272.png "評価設定(SSD2)")

　HCTMの設定を変更する前の性能と温度の変化は以下の図3のようになりました。グラフの見かたは図1および図2と同じです。

![デフォルト設定での性能と温度の時間変化(SSD2)](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/439683/bfba9a02-9eb2-340d-dd1d-0bab28295888.png "デフォルト設定での性能と温度の時間変化(SSD2)")
図3：デフォルト設定での性能と温度の時間変化(SSD2)

※注意：SSD1と比較してWriteバンド幅の絶対値が低いのは、ドライブ容量が小さい（おそらく搭載NANDフラッシュメモリチップ数が少ない）ためです。

　図3を見ると、アクセスがReadに変わりバンド幅が3000 MB/sを超えるようになるとSSDの温度も上昇を始めるものの、SSD1と比較すると温度上昇は緩やかで、評価時間内に`TMT1`の値である摂氏71度に到達することはありませんでした。

　Readバンド幅に500 MB/s程度の「ブレ」が確認できますが、SSDの温度上昇は続いていることから、サーマルスロットリングではなさそうです。また、プリコンディショニング中のWriteアクセス時に300 MB/s程度までバンド幅が落ちていますが、この理由はちょっとわかりません...前回と同じく`Dataset Management`コマンドで全LBA領域を`deallocate`した後にWriteしているのですが。さすがに他社製品のファームウェアの内部処理はわかりません...

　次に、TMT1を摂氏65度に、TMT2を摂氏70度に変更した場合の性能と温度の変化を図4に示します。グラフの見かたはこれまでと同じです。

![TMT1=摂氏65度、TMT2=摂氏70度の時の性能と温度の時間変化(SSD2)](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/439683/be02339b-8e2e-4224-a996-1c7b9017c3e9.png "TMT1=摂氏65度、TMT2=摂氏70度の時の性能と温度の時間変化(SSD2)")
図4：TMT1=摂氏65度、TMT2=摂氏70度の時の性能と温度の時間変化(SSD2)

　図4を見ると、アクセスがReadに変わった後、温度が`TMT1`に設定した摂氏65度に近づくとバンド幅の「ブレ幅」が大きくなっていることがわかります。

　前回の評価時に、「SSD2は温度が`TMT1`を下回るように制御しようとしている」という推測をしています。図4の結果はこの推測に良く当てはまります。ただ、この図4のバンド幅のブレはちょっと大きすぎますね...

　次に、TMT1を摂氏60度に、TMT2を摂氏70度に変更した場合の性能と温度の変化を図5に示します。グラフの見かたはこれまでと同じです。

![TMT1=摂氏60度、TMT2=摂氏70度の時の性能と温度の時間変化(SSD2)](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/439683/cc564f7f-13de-d1d3-ff99-80a57c56784b.png "TMT1=摂氏60度、TMT2=摂氏70度の時の性能と温度の時間変化(SSD2)")
図5：TMT1=摂氏60度、TMT2=摂氏70度の時の性能と温度の時間変化(SSD2)

　この図5は、図4と傾向は同じで、バンド幅のブレ幅をより大きくした形になっていることがわかります。

　Readアクセスのピークバンド幅（Iometerの測定結果として記録された値そのまま）が4000 MB/sを超えているのは非常に怪しい（PCIe Gen3x4の帯域を超えている）のですが、無理やり解釈しようとすると、以下の2つが重なったせいだと思われます：

* サーマルスロットリングを発動したSSD2が、ホストへのデータ転送を間欠的に実行していて、このタイミングで「最大瞬間風速」的な（限界ぎりぎりに近いほどの）バンド幅を記録した
* Iometerが「1秒間」だと思っていた時間が実は1秒より長く、より長い時間で受信したデータサイズを「1秒間に受信した」と扱っていた。もしくはその逆。この結果（Iometerの）算出したバンド幅が実際より高くなった

　ただ、数値の傾向には大きな影響はないと思います。

　最後に、さらに設定温度を下げて、`TMT1`を摂氏50度に、`TMT2`を摂氏60度に変更した場合の性能と温度の変化を図6に示します。グラフの見かたはこれまでと同じです。

![TMT1=摂氏50度、TMT2=摂氏60度の時の性能と温度の時間変化(SSD2)](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/439683/cb9bd8c3-9e82-414a-6e5d-d26f8577f12f.png "TMT1=摂氏50度、TMT2=摂氏60度の時の性能と温度の時間変化(SSD2)")
図6：TMT1=摂氏50度、TMT2=摂氏60度の時の性能と温度の時間変化(SSD2)

　この図6では、アクセスがReadに変わった時点で既に温度が`TMT1`に設定した温度である摂氏50度近くだったため、Readアクセスのバンド幅が最初から大きく抑えられていることがわかります。

　その代わり、図4や図5で見られたようなバンド幅の大きなブレはなくなり、ある意味「安定した性能」を示しています。

　以上のように、やはりこのSSD2についても「**サーマルスロットリングが発動しないように温度管理しなければならない**」と言えます。

　また、図4や図5で観測したような「性能の大きなブレ」は困りますから、「**中途半端なサーマルスロットリング温度設定はしない方が良い**」こともわかります。

　このような**製品ごとの「クセ」は実際に評価しないとわかりません**。また、「**自分が使う環境（ワークロード含む）においてその製品のクセを『踏む』かどうか**」は**実際にSSDを使う環境で評価しなければわかりません**。

# おわりに
　この記事では、前回実施したNVMe SSDのサーマルスロットリングに関する性能測定を補足する形で、よりSSDの温度が上がりやすいReadアクセス時の温度上昇の様子とサーマルスロットリング発動時の性能変化の様子などを調べました。

　これらの評価を通じ、以下のようなことがわかったと言えます。

* SSDは、規格（今回はNVMe）で定められたサーマルスロットリング以外に、類似の機能を備えている可能性があり、それは実際に評価しないとわからない
* サーマルスロットリング発動時の性能変動（挙動）は評価してみないとわからない
* あるSSDについて、自分が使う環境（ワークロード）においてどの程度の温度になるか、サーマルスロットリングが発動するか、は実際に評価しないとわからない

　そして、何よりも、「**SSDは可能な限りサーマルスロットリングが発動しないように温度管理すべきである**」ことがわかります。

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