SSDの選び方(4/5)：SSDの性能表記はワナだらけ

# はじめに
　これまで3回にわたり、NANDフラッシュメモリを使ったSSDの寿命について、以下のような内容をご紹介してきました。

* [SSDの選び方(1/5)：TBWは値だけ見ても意味がない！](https://qiita.com/ken-yossy/items/27d2cdba22c58e9aa6f2)
* [SSDの選び方(2/5)：じゃあTBWって何なんだ？](https://qiita.com/ken-yossy/items/2f7ebb404201afd4eb41)
* [SSDの選び方(3/5)：SSDの寿命を縮める使い方](https://qiita.com/ken-yossy/items/094533052380e9d3f96c)

　「寿命」がSSDを選ぶ際に重要な項目のひとつであることは間違いありませんが、他にも重要な項目がいくつもあります。
　人によって重視する項目が異なることも多いと思います。

　そこで今回は、「SSDの選び方」という視点から、その「重要な項目」のひとつである「データアクセスの速度性能」について、一般的に私たちが目にする値の意味や見かた、そして注意が必要な点をまとめます。

　なお、この記事では、以降「性能」という言葉を「データアクセスの速度性能」という意味で使用します。

# サマリ

* **カタログ性能もベンチマーク性能も、値を鵜呑みにするのはダメ！**
    * どちらも「**ピーク性能（瞬間最大風速）**」であることがほとんど

* **特にSLCバッファの挙動に注意**
    * 「SLCバッファ」とは、ホストから書き込まれたデータをSLCで記録して高い性能を得る機能
    * SLCバッファが「尽きる」と性能が大きく落ちることが多く、SLCバッファが「尽きた後」の性能を確認すべき

* **実際にSSDを使う環境とワークロードを準備して性能を測るのが最も確実**

# カタログ性能とベンチマーク性能
　私たちがSSDを選ぶ際に簡単に入手可能な性能に関する情報は、「**SSDの製品仕様（カタログ）に記載された性能**」と「**ベンチマークの性能**」です。

　SSDの性能を左右する要素について説明する前に、これら2つについて、改めて確認します。

　なお、誤解しないでいただきたいのは、**製品のカタログに記載された値も、ベンチマークでの測定結果も、いずれもある条件下で測定して得た値であって、それらの値自体に「正解」や「間違い」はありません**。

　測定結果を見る時は、その値の意味を正しく捉えることこそがとても重要です。

## カタログ性能
　カタログ性能とは、製品カタログ（仕様書）に記載された性能のことを指します。

　つまり、SSDを製造・販売する会社が、ある測定条件のもとで測定した性能が記載されます。

　例えば、[弊社製SSD（3D TLC NAND搭載M.2 SATA SSD（標準品））の製品Webページ](https://www.hagisol.co.jp/products/ssd/d25s6g-3d.html)には、以下のような性能が記載されています。

表1：弊社製SSD（3D TLC NAND搭載M.2 SATA SSD（標準品））のカタログ性能（抜粋）
![弊社製SSD（3D TLC NAND搭載M.2 SATA SSD（標準品））のカタログ性能（抜粋）](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/439683/4a4cc1e4-2b63-9815-eb14-e7e00da02ff7.png "弊社製SSD（3D TLC NAND搭載M.2 SATA SSD（標準品））のカタログ性能（抜粋）")

　同じ会社の製品であれば、カタログ性能を使って複数製品の性能比較を行えることが多いです。

　なぜなら、同じ会社の製品であれば、同じ性能測定条件を使用していることが多いと考えられるからです。

　その場合でも、測定条件の確認は必要です。

　なお、**カタログ性能は基本的に「ピーク性能」であることに注意が必要**です。

　SSDをどのように使ってもカタログ性能に記載された性能が常に出るわけではありません。

　前回ご説明した「寿命」と同じようなことが言えます。

## ベンチマーク性能
　ベンチマークによる性能測定結果であるベンチマーク性能は、異なる会社の製品比較に使用できることがメリットです。

　ストレージの性能測定に良く用いられるベンチマークは、測定時のワークロードによって大きく以下の2つに分類することができます。

* アクセス範囲やアクセス単位サイズ、そしてReadやWriteなどのアクセス方法などを細かく設定した「人工ワークロード(Synthetic Workload)」を使うもの
* Microsoft社のWordやExcelさらにはAdobe社のPhotoshopといった実際のアプリケーションを自動で操作することでストレージへのアクセスを発生させるもの（"Application Level Benchmark"などと呼ばれます）

　ここではこの両方のベンチマークについて簡単に説明します。

　なお、SSDではないですが、スマートフォンでは、「ベンチマーク対策」とも受け取れる「裏モード」を備えているのではないか、という解析結果が報じられたことがありました<sup>[1][2]</sup>。

　SSDでも、ベンチマークソフトウェアのアクセスパターンを取得して解析することで、特定のベンチマークにおいてより良い性能が出るような仕掛けを作り込むことが、原理的には可能です。

　そのような「**ベンチマークでしか出ない性能**」に騙されないようにする必要があります。

### 人工ワークロードを用いたベンチマーク
　「人工ワークロード」を用いるベンチマークソフトウェアの中で、日本国内で最も有名で一般的なベンチマークソフトウェアのひとつが、[Crystal Disk Mark](https://crystalmark.info/ja/software/crystaldiskmark/)（以降CDMと表記）だと思います。

　以下のスクリーンショットは、とあるPCのシステムドライブ（WindowsのCドライブ）として使用しているSATA SSDを対象に、記事執筆時点で最新版のCDM (7.0.0f)を実行した時の実行結果です。

![Crystal Disk Mark実行結果](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/439683/fce6f9e0-2396-c689-7953-a5cd4d1a244f.png "Crystal Disk Mark実行結果
")
図1：Crystal Disk Mark実行結果

　このCDMのように、人工ワークロードを用いたベンチマークでは、製品のカタログ性能のような性能値を取得することができます。

　しかし、ベンチマーク性能についても、このCDMのように各アクセスパターンにひとつの性能値だけを表示するベンチマークの場合、その意味を正しく理解することが重要です。

　CDMの場合、測定を複数回行うことはできますが、[公式Webサイト](https://crystalmark.info/ja/software/crystaldiskmark/)に記載されている通り「**表示される性能値は測定結果のうち最も良い値**」ですので、結果的にカタログ性能と同じ「**ピーク性能**」になっています。

　SSDをどのように使ってもこのベンチマーク性能が出るわけではありません。

### Application Level Benchmark
　もう一つのベンチマーク、Application Level Benchmarkとしては、[UL](https://benchmarks.ul.com/)の"PCMark"シリーズや"3DMark"シリーズ、そして[BAPCo](https://bapco.com/)の"MobileMark"シリーズや"SYSmark"シリーズが有名です。

　これらApplication Level Benchmarkの特徴は、性能測定結果を、「人工ワークロード」を用いるベンチマークとは異なる指標で表現することです。

　つまり、性能測定結果は"MB/s"や"IOPS"ではない別の指標で表現されます。

　例えば、PCMark 10を用いてSSDの性能評価を行ったPC Watchの記事<sup>[3]</sup>を見ると、"App Start-up"というある評価項目の「スコア」が記載されています。

　このように、Application Level Benchmarkの性能測定結果は、様々なシナリオに関する「スコア」として報告されることが一般的です。

　これらApplication Level Benchmarkについて最も重要なことは、人工ワークロードを使用するベンチマークソフトウェアよりもホスト（ベンチマークソフトウェアを動作させるホスト）の性能に大きく影響を受ける、ということです。

　実際の商用ソフトウェアを動作させますので、CPUスペックやDRAM搭載量、場合によってはGPUの性能にまで、ベンチマーク全体が影響を受けることもあります。

　一番厄介なのは、「**SSDのどんな性能がそのスコアにどんな影響を与えているかがわかりにくい**」ということです。

　このApplication Level Benchmarkは、人工ワークロードを用いたベンチマークと比較して設定項目も少なく手軽にベンチマークを実行できることと、実際のソフトウェアを動作させて測定していることでスコアの差がよりユーザが実際に感じる性能の差に近いと考えられることがメリットですが、その反面、やはり値を過信することは禁物です。

# SSDの性能を左右する要素
　このように、カタログ性能やベンチマーク性能ではSSDの性能を簡潔に数値で表現します。

　一方で、SSDの性能を左右する要素には、様々なものがあります。

　パッと思いついたものを挙げただけでも以下のようになります。

* 容量（≒NANDチップの数）
* インターフェース（SATA 6GbpsやPCIe Gen3など）
* アクセスパターン（ランダムやシーケンシャル）
* データの内容（オールゼロデータ、ランダムデータ、など）
* アクセス領域サイズ
* 下地（プリコンディショニング；測定開始前にSSDに書き込まれたデータの状態）
* 省電力モードの有無と遷移条件
* SLCバッファの使いかた（SLC Cache、疑似SLC、SLC Buffer、Turbo Write、などと呼ばれる仕組みを含む）
* ホストの性能（ホストの性能とSSDの性能のバランス）
* データ管理アルゴリズム（SSD内部のデータ管理の方法）
* SSDのファームウェアバージョン
* その他、各製品の得手不得手

　これらの要素のイメージを図にまとめると、以下の図2のようになります。

![SSDの性能を左右する要素](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/439683/da9c1034-0638-31b9-1e90-98d9e1a5e68a.png "SSDの性能を左右する要素")
図2：SSDの性能を左右する要素

　この図2のポイントは、ベンチマーク等で性能を測定するうえで、「**わかりやすい（操作しやすい）設定項目**」と「**わかりにくい（操作しにくい）設定項目**」が存在する、ということです。

　「わかりにくい」という言葉の意味は、「**測定時に意図した状態（動作）を再現することが難しい**」とか「**状態（動作）の解析が難しい**」ということを意味します。

　インターフェースは実際に使用する環境と同じものを揃えることが容易ですし、最近のベンチマークソフトウェアではアクセスパターンやアクセス領域サイズを細かく設定することも可能です。

　一方、性能評価を行う直前の「下地」やSLC領域の使われ方を実際に使用する環境と同じにすることは非常に難しいですし、データ管理アルゴリズムの「くせ」を事前に知ることはまず不可能です。

　このように、SSDの性能は様々な要素が組み合わさった結果なのですが、カタログ性能やベンチマーク性能は単一の数値として性能を表現します。

　その結果、**どんな要素がどのように性能値に影響を与えているのか、その性能値が普遍的なものなのか局所的なものなのか、といった情報が欠落します**。

　したがって、ベンチマーク結果などの性能測定結果を見る（比較する）時は、測定時の設定確認が必要であることはもちろん、**それら不明瞭な要素（欠落している情報）があることを踏まえて見なければならない**、ということになります。

　この記事では、SSDの性能を左右する具体的な要素として、SLCバッファ、Queue Depth (QD)、およびプリコンディショニング（下地）、の3つに絞って説明します。

# SLCバッファ
　まず、TLCやQLC NANDフラッシュメモリを搭載した最近のSSDであればどの製品でも備えていると言っても過言ではない、SLCバッファについて説明します。

　ここで言う「SLCバッファ」とは、ホストから書き込まれたユーザデータをNANDフラッシュメモリに記録する際に、実際にはTLC（3ビット）やQLC（4ビット）でデータを記録できるNANDフラッシュメモリセルに1ビットのみ記録する（SLCとして使う）ことで、性能向上を図る機能を指します。

　SLCバッファを使うことには性能向上以外のメリットもあるのですが、それはまた別の機会にご説明できればと思います（寿命関連です）。

　この「SLCバッファ」と同様の機能には、「SLCキャッシュ」や「Turbo Write」など、製品や会社によって様々な呼び名がついています。いずれも基本的な機能は上記の通りです。この記事では、このような機能を「SLCバッファ」と呼ぶこととします。

　実は、**SSDのカタログ性能やベンチマーク性能における「ピーク性能」は、このSLCバッファが使われている時の性能であることがほとんどです。したがって、「ピーク性能」だけを見て購入すると、実際にはその「ピーク性能」が出ないということになりがちです**。

## 適用時の性能は「瞬間最大風速」
　製品によって様々ですが、TLCやQLCのNANDフラッシュメモリを使用したSSDの場合、SLCバッファで使用できるサイズは尽きます。

　なぜなら、SLCではTLCの1/3、QLCなら1/4のサイズしかデータを記録できないからです。

　TLCのNANDフラッシュメモリを使用した256GBのSSDにおいて、搭載している全てのNANDフラッシュメモリをSLCとして使用してしまった場合、容量が1/3の85GB程度になってしまいます。これではストレージ失格です。

　そこで、「**SLCバッファはどのように『尽きる』のか、尽きた後はどうなるのか**」を実験で確認します。

　以下のグラフは、とある容量240GBのSATA SSD (6Gbps)のシーケンシャルライト性能を測定した結果です。

　測定手順は、(1) 全領域をTRIM、(2) SSDを接続したPCを再起動、(3) [TxBench 0.96 beta](https://www.texim.jp/txbench.html)を用いて60秒間のシーケンシャルライトを行う（512KB単位、QDは32）、というものです。

![SLCバッファ適用時の性能が「瞬間最大風速」である例(SATA SSD)](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/439683/bc058902-86cc-9581-fc4b-db1004c42de2.png "SLCバッファ適用時の性能が「瞬間最大風速」である例(SATA SSD)")
図3：SLCバッファ適用時の性能が「瞬間最大風速」である例(SATA SSD)

　この図3からわかるようにSLCバッファが適用されているであろう500MB/s近いシーケンシャルライト性能が出るのは、サイズにして約5GBの書き込みまで、この実験では時間にして約10秒間のみ、であることがわかります。

　最近のPCであれば一瞬ですね。

　つまり、10GB程度のデータを書き込んだ場合、SATA 6GbpsのSSDに見合った性能を得られるのは開始から10秒程度の5GBの書き込み時のみとなります。しかも、図3より、10GB書き込むのに約40秒かかることがわかります。

　このように、**SLCバッファ適用時の性能は、あくまで「瞬間最大風速」です**。

　もちろん、SLCバッファ適用が続くサイズつまり「最大瞬間風速」が続く書き込みサイズや、SLCバッファ非適用時の性能との差は、製品によって異なるのはもちろんのこと、同じ製品でも容量によって異なりますが、いずれにしても、**SLCバッファ適用時の性能は、「常に得られる性能」ではありません**。

　しかし、カタログ性能やベンチマーク性能として記載される性能は、このSLCバッファ適用時の性能であることがほとんどですので、SSDの性能を見る時は、**SLCバッファ適用時の性能とは別に、SLCバッファ非適用時の性能を確認すべき**です。

　今度は、PCIe/NVMe SSDについて、同様にSLCバッファが尽きる様子を見ます。

　測定対象のSSDのカタログ性能（シーケンシャルライト）は1600MB/s（PCIe Gen3x4接続）で、測定手順は、(1) 全領域をTRIM、(2) SSDを接続したPCを再起動、(3) TxBench 0.96 betaを用いて約80秒間のシーケンシャルライトを行う（512KB単位、QDは32）、というものです。

![SLCバッファ適用時の性能が「瞬間最大風速」である例(PCIe/NVMe SSD)](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/439683/1e0a19e0-c9c9-fb5f-362f-1d322f12422c.png "SLCバッファ適用時の性能が「瞬間最大風速」である例(PCIe/NVMe SSD)")
図4：SLCバッファ適用時の性能が「瞬間最大風速」である例(PCIe/NVMe SSD)

　この図4からわかるように、約1600MB/sというカタログ性能が出るのは、時間にして約1分、サイズにして約100GBの書き込みまで、であることがわかります。

　したがって、この1600MB/sというカタログ性能も、SLCバッファ適用時の性能だと考えることができます。

　しかも、**SLCバッファが尽きた後は、550MB/s程度というSATA 6Gbps程度の性能まで落ち込んでいます**。

　このことから、このPCIe/NVMe SSDは、使いかたによってはSATA 6Gbps程度の性能しか出ないことになります。

　SSDの性能を見る時にはこのことに特に注意する必要があります。

## 「復活する」か「復活しない」か
　また、製品によって、「尽きた」SLCバッファが「復活する」タイプと「復活しない」タイプがあります。

　以下の図5は、とあるPCIe/NVMe SSDを用いて測定した結果です。

　なお、以降で示すグラフはどちらも、[TxBench 0.96 beta](https://www.texim.jp/txbench.html)を用いて、(1) 60秒シーケンシャルライト、(2) 180秒アイドル、(3) 60秒シーケンシャルライト（ただし(1)とは異なるLBA領域に対する書き込み、というアクセスを行って取得したものです。

![SLC領域が「復活する」タイプのSSDのデータ書き込み性能の時系列変化](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/439683/a9ff2e20-6c87-eb19-aef3-4eca27cd2393.png "SLC領域が「復活する」タイプのSSDのデータ書き込み性能の時系列変化")
図5：SLC領域が「復活する」タイプのSSDのデータ書き込み性能の時系列変化

　この図5では、アクセス開始から40秒強はSLCバッファへの書き込みが行われているような性能が見え、その後はSLCバッファが「尽きた」のか、TLC領域への書き込みと思われる値に性能が落ちています。

　その後、アイドル期間を経てアクセスを再開すると、またSLCバッファに書き込んでいる時とほぼ同様の性能が出ていることがわかります。

　このことから、この製品は、アイドル期間にSLCバッファに記録されているデータをTLC領域に移動させるなどして、SLCバッファの空きを増やした（復活した）のではないか、と推測することができます。この推測が正しい場合、増やせたサイズは、240秒あたりから270秒あたりまでのSLCバッファへの書き込みで書き込んだサイズになります。

　なお、このグラフだけでは、この製品が「**シーケンシャルライトが一定サイズ続くとSLC領域への書き込みをやめてTLC領域に書き込む**」という処理を行っている可能性を排除できません。

　その場合、開始から40秒強の時点からTLC領域への書き込みと思われる性能になっているのは、SLCバッファが満タンになったわけではない、ということになります。

　さらに、SLCバッファのサイズは、開始から40秒強までのSLCバッファへの書き込みサイズと、240秒あたりから270秒あたりまでのSLCバッファへの書き込みサイズを足したものであって、アイドル時間にSLCバッファが「復活していない」可能性もあります。

　もしSLCバッファが完全復活していたら、開始から40秒強までのSLCバッファへの書き込みサイズと240秒あたりから270秒あたりまでのSLCバッファへの書き込みサイズが同じになるはずだからです。

　一方、以下の図6は、SLCバッファが「復活しない」タイプの製品です。この図6は、図5とは別のSATA SSDを使って測定しました。

![SLCバッファが「復活しない」タイプのSSDのデータ書き込み性能の時系列変化](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/439683/49d0d3c3-726a-87ea-7e4c-4500486b090d.png "SLCバッファが「復活しない」タイプのSSDのデータ書き込み性能の時系列変化")
図6：SLCバッファが「復活しない」タイプのSSDのデータ書き込み性能の時系列変化

　アクセス開始直後20秒程度はSLCバッファへの書き込みが行われているような性能を示していますが、その後はTLCで書き込んでいると思われる性能に落ち込んでいます。

　さらに、アイドル期間を経た後でも、その書き込み性能はTLCで書き込んでいると思われる値のままです。

　このことから、この製品のSLCバッファの使いかたは、アイドル期間があっても、SLCバッファを復活させる処理をしていないのではないか、と推測できます。

## まとめ
　このように、SLCバッファの適用時と非適用時では性能（特に書き込み性能）が大きく異なります。

　しかも、製品や製品の状態によって大きく異なりますが、SLCバッファが適用される期間がごく短期間であったり、「尽きた」SLCバッファが復活しなかったりと、カタログ性能やベンチマーク性能からではわからないことがとても多いです。

　いずれにしても、**SSDのカタログ性能やベンチマーク性能における「ピーク性能」は、このSLCバッファ適用時の性能であることがほとんど**です。したがって、**「ピーク性能」だけを見て購入すると、実際にはその「ピーク性能」が出ないということになりがちです**。

　SLCバッファの使われかたや、SLCバッファ非適用時の性能を確かめるには、図3～図6のように、一定時間もしくは十分に広いLBA範囲に書き込みを行って書き込み性能の時間変化を確認することが、最低限必要になります。

　SLCバッファを使うと、性能だけでなく寿命の視点でもメリットがあるのですが、特に性能の視点では、**得られる性能がほんの一瞬だけ達成できる性能**である可能性に注意が必要です。

　今回の実験結果からわかる、SLCバッファを上手く活用する方法としては、以下の2点を挙げることができます。

1. 頻繁にデータを書き込むLBA領域のサイズが、各製品のSLCバッファサイズに収まっていること
2. 四六時中データを書き込むのではなく、SSDに対して、NANDフラッシュメモリの整理（SLCバッファを「復活」させる処理など）をさせる時間を与えられること

# Queue Depth (QD)
## QDの意味
　ベンチマーク結果やカタログに表記されている性能の、特にランダムアクセス性能には、"Queue Depth (QD)"の値が併記されていることが多いと思います。

　例えば「QD=32の性能」や「QD=1の性能」などです。

　以下の図7は、コマンドキューのイメージです。ホストがコマンドをコマンドキューという「お皿」に載せると、SSDがその「お皿」からコマンドを取って処理する、というものです。

![コマンドキューのイメージ](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/439683/6b1c17be-852b-2b0e-0857-f184e44ce584.png "コマンドキューのイメージ")
図7：コマンドキューのイメージ

　つまり、「QDが深くなる」というのは「お皿にコマンドがたまる」ことを意味し、「お皿」にコマンドを載せるスピードが「お皿」からコマンドを取っていくスピードを上回っていることを意味します。

![QDが深くなる状況のイメージ](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/439683/7c331760-b175-bc7b-c120-53a14de90810.png "QDが深くなる状況のイメージ")
図8：QDが深くなる状況のイメージ

　コマンドを発行するスピードがコマンドを処理するスピードを上回ることがある例としては、以下のような例を挙げることができます。

1. プロセッサが複数のコアを備えていてそれらのコアで同時にスレッドが動作している場合
1. 複数スレッド（プロセス、プログラム）のデータの読み書きが集中する場合
1. データの読み書きが中心の処理を行っている場合

　1の例としては、最近のマルチコアプロセッサ上で複数のプログラムが動作している場合が挙げられます。

　また2の例としては、システムの起動時や終了時、（複数）プログラムの起動時や終了時が、3の例としては、多数のデータやファイルを同時に扱うような入出力集約的な処理や使用環境（データ解析やコンパイル）<sup>[3][4][5][6]</sup>、が挙げられます。

　一方、動画データの再生等をしている時や、プロセッサがシングルコアの場合、またプロセッサ中心の処理をしている場合などは、QDはあまり深くならないと考えられます。

　このように、「**どんな環境で使う・使われるSSDを選ぶのか、どんな状況での性能を重視するのか**」によって性能を重視すべきQDの値は異なりますので、十分な注意が必要です。

## SSDの性能とQDの関係
　カタログ性能でもベンチマーク性能でも、SSDの性能はおおよそQDが深いほうが高くなっていると思います。

　それは、SSDの内部処理がパイプライン化されていることが理由です。

　つまり、SSD内部の処理パイプラインを埋められるだけのコマンドがある場合（QDが深い）ほうが性能は高くなる、ということです。

　加えて、SSDは複数のNANDフラッシュメモリチップを備えています。それらのNANDフラッシュメモリ全てが処理（コマンド）を実行している場合にSSDの性能が最も高くなります。

　言い換えれば、「**遊んでいるNANDフラッシュメモリチップがない場合**」が最も性能が高くなります。

![SSD内部の処理パイプラインイメージ図](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/439683/a8ef9e23-2e99-914a-84f9-8dad58914e59.png "SSD内部の処理パイプラインイメージ図")
図9：SSD内部の処理パイプラインイメージ図

　したがって、SSDの内部処理パイプラインを埋めて、かつSSDが備えるNANDフラッシュメモリチップ全てにコマンドを発行できるくらい多くのコマンドがホストから発行されている時、つまりQDが深い時のほうが、SSDの性能が高くなるわけです。

　同じ世代のNANDフラッシュメモリを使用していることを仮定すると、大容量のSSDは、小容量のSSDに比べて搭載しているNANDフラッシュメモリチップの数が多くなります。

　**大容量SSDのほうが小容量SSDと比較してQDがより深い時により高い性能を示すのは、このSSDの内部処理の仕組みに起因する傾向です**。

# プリコンディショニング（下地）
　NANDフラッシュメモリを使用したSSDにおいて、記憶している最新データと、記憶領域（＝NANDフラッシュメモリのこと）を管理する上で、最も重要な特徴の一つが、1回の処理で書き込むことができるデータサイズと消去(Erase)で消えるデータサイズが異なることです。

　この特徴と、NANDフラッシュメモリの書き換え回数制限などの要因が組み合わさった結果、最近のSSDにおける最新データと記憶領域の管理は、ホスト（ユーザ）がデータ書き込み時に指定したアドレス(LBA)に対する、そのデータを記憶する先のNANDフラッシュメモリ上のアドレスを、以前書き込んだNANDフラッシュメモリ上のアドレスや、LBAとは関係なく、データ書き込み時に毎回割り当てるアルゴリズムを採用していることがほとんどです。

　このデータ管理アルゴリズムの特徴は、「**ある時刻にホストからのアクセスが発生した際に何が起きるか（どこに書き込むか、どこからデータを読んでくるか、他にどんな処理が必要か）は、製品使用開始時からその時刻までの履歴で決まる**」ということです。

　言い換えると、**あるSSDの性能がどうなるかは、そのSSDがそれまでどのように使われてきたかに依存する**とも言えます。

　[「SSDの選び方(3/5)：SSDの寿命を縮める使い方」](https://qiita.com/ken-yossy/items/094533052380e9d3f96c)の記事内でもご説明した、Garbage Collectionの効率が良いか悪いかというのは、ここで言う「履歴」のわかりやすい例です。

　つまり、性能測定を始める前のSSDの状態について以下のことが言えます。

* Garbage Collectionの効率が良い状態から測定すれば良い性能が得られる
* Garbage Collectionの効率が悪い状態から測定すれば悪い性能が得られる（＝良い性能は得られない）

　特に、SSDの性能測定においては、性能測定前に「履歴」を作る「準備」のことを、「事前状態を作る」という意味で「プリコンディショニング(pre-conditioning)」と呼びます。

　大抵の人工ワークロードを使用するベンチマークでは、プリコンディショニングかプリコンディショニング相当のことを自動もしくは手動で実現できますが、**評価したい性能を得るためにそのプリコンディショニングで正しいのか？**ということは、なかなかわかりません。

　なぜなら、外部からはSSDのデータ管理アルゴリズムがわからない以上、プリコンディショニングの処理を行った結果SSDの内部状態がどのように変化するかを完全に予測することはできないからです。

　良く「事前にSecure Eraseする」とか「全LBA領域をランダムライトで×周する」、といった処理がプリコンディショニングとして行われますが、**このような処理は極端な状態を作るための処理であり、特定のユースケースに基づいて「使い込まれた」状態を作り出すための処理ではありません**。

　つまり、**SSDが実際に使われる状況を作り出す処理（プリコンディショニング）は、その実際に使われるアクセスパターンによってのみ実現できる**、ということになります。

　人工ワークロードを使用するベンチマークであっても、Application Level Benchmarkであっても、そのベンチマーク結果は、**SSDが実際に使われる状況で測定されたものではない**ことを明確に意識する必要があります。

# おわりに
　この記事では、いわゆる「SSDの性能」について、代表的な製品のカタログ性能やベンチマークによる性能測定結果の意味と、それらの性能を左右する要素についていくつか説明しました。

　冒頭でも説明しましたが、製品のカタログ性能やベンチマーク性能は、いずれもある条件下で測定して得た値であって、それらの値自体に「正解」や「間違い」はありません。

　ですので、**「それらの値が何を示しているのか」を正しく把握することが重要**なのです。

　特に、**カタログ性能やベンチマーク性能で示される値は「瞬間最大風速」であることが多いこと**は重要です。

　今後SSDのカタログ性能やベンチマークによる性能測定結果をご覧になる際のご参考になれば幸いです。

　次の記事では、この一連の記事の最後として、私なりの「SSDを選ぶ方法」をご紹介しようと考えています。

# Reference
[1] Brian Klug and Anand L. Shimpi, "[_Looking at CPU/GPU Benchmark Optimizations in Galaxy S 4_](https://www.anandtech.com/show/7187/looking-at-cpugpu-benchmark-optimizations-galaxy-s-4)", July 30, 2013（2019年12月2日閲覧）
[2] Andrei Frumusanu and Ian Cutress, "[_Huawei & Honor's Recent Benchmarking Behaviour: A Cheating Headache_](https://www.anandtech.com/show/13318/huawei-benchmark-cheating-headache)",  September 4, 2018（2019年12月2日閲覧）
[3] 4Gamer.net、「[「SSD 860 PRO」「SSD 860 EVO」レビュー。Samsungの新しいSATA 6Gbps接続型SSDは何が変わったのか](https://www.4gamer.net/games/999/G999902/20180123022/)」、2018年1月24日（2019年11月1日閲覧）
[4] デジカメWatch、「[特別企画：新SSD「インテル Optane SSD 900P」はパソコンでの写真編集に効くのか!?](https://dc.watch.impress.co.jp/docs/review/special/1099154.html)」、2017年12月29日（2019年11月1日閲覧）
[5] 日経XTech、「[PC増強の最新テクニック 間違えやすいSSD選び、ストレージ増強の知識まとめ](https://tech.nikkeibp.co.jp/atcl/nxt/column/18/00393/073000003/)」、2018年8月1日（2019年11月1日閲覧）
[6] PC Watch、「[SSDの基礎知識、ググらないで答えられる? ～HDDとの違い、MLC/TLC、3D NANDは高耐久? シーケンシャル/ランダムアクセスって?](https://pc.watch.impress.co.jp/docs/news/1140107.html)」、2018年8月28日（2019年11月1日閲覧）

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