SSDのOPはどこから来たものなのか？

# はじめに
　NANDフラッシュメモリを使用したSSDについて「オーバープロビジョニング(Over Provisioning: OP)」や「OP領域」という言葉を聞いたことがある方が多いと思います。

　また、ハードディスクドライブ(HDD)の使用経験がある方は「代替処理」という言葉も聞いたことがあるかもしれません。この代替処理で使用する領域（代替としての交換用に確保された予備の領域）を「代替領域」と呼ぶことがあります。

　NANDフラッシュメモリを使用したSSDには、このOP領域と代替領域の両方が存在します。

　SSDのOP領域と代替領域についてどちらも「ユーザ領域の外側」というイメージを持たれている方が多いと思いますが、この2つは使いかたが大きく異なります。

　OP領域は「**通常動作中に使われる領域**」であり、代替領域は「**万が一の時に使われる領域**」です。

　そこで2回の記事で、NANDフラッシュメモリを使用したSSDにおけるOP領域と代替領域について説明します。今回はOP領域です。

　ただ「OP領域が大きいとなぜ性能が良くなるのか」などを説明すると長くなりますので、今回は「そもそもOP領域はどこからやってきたものなのか」を説明します。

　なお、この記事では以降「NANDフラッシュメモリを使用したSSD」のことを単に「SSD」と記載します。

# まとめ
* （固定）OP領域とはSSDのNANDフラッシュメモリの搭載容量とユーザデータ領域の差の一部
* 固定OP領域はSSDがドライブとしての機能を果たすために必要不可欠なもの
* OP領域の大小はSSDの寿命含む性能を左右するため製品選択時には総合的な判断が必要

# OP（OP領域）の定義
　オーバープロビジョニングを調べると、以下のような説明が見つかります。

> オーバープロビジョニング（OP）は、SSD容量の一部をキャッシュとして割り当てるファームウェア最適化テクノロジーです。
> 
> OPによってSSDのパフォーマンスが向上するだけでなく、ガベージコレクション（GC）がより効率的になり、データ転送速度の維持とSSDのデータ書き換え寿命の向上に繋がります。
>
> _「[オーバープロビジョニング (Over-Provisioning) - トランセンド](https://jp.transcend-info.com/Embedded/Essay-39)」より引用_

　また、以下のような説明も見つかります。

> 　SSDの一定領域を余剰領域として確保する「オーバープロビジョニング」は、SSDを制御する「SSDコントローラー」専用に、SSDの領域の一部を確保する。この領域（以下、オーバープロビジョニング領域）はOSからは全く見えない。平均的なSSDの場合、オーバープロビジョニング領域の容量は、通常であれば全容量の約7％だ。
>
>（中略）
>
>　実はオーバープロビジョニングの主目的は、書き込み操作のパフォーマンス向上にこそある。
>
>（中略）
>
>　ドライブの寿命を延ばすための手段として、オーバープロビジョニングを生かそうとするベンダーもある。
>
> _「[SSDの「オーバープロビジョニング」とは？　仕組みとメリットを解説](https://techtarget.itmedia.co.jp/tt/news/1807/12/news04.html)」より引用_

　つまり「SSDの全体性能（寿命含む）向上目的で使用する領域」と言えます。

　ただ「オーバープロビジョニング」そのものには上記のような意味はなく、この内容はOP領域の大きさを調整することによる効果を記載しています。というのは**OP領域がゼロではSSDとしての機能を果たせない**からです。

　話を元に戻して、「プロビジョニング」の意味を検索すると「準備」「提供」「設備」などの意味が見つかります。これらの単語を使用して「オーバープロビジョニング」を表現するならば「余剰設備」が一番適していると思います。

　というのは、 **SSDにおける「オーバープロビジョニング」は「ユーザ領域容量に対する余剰容量（＝設備）」** だからです。

# 複数存在するSSDの「容量」
　OP領域の正体を説明する前に、OP領域のサイズについて説明します。

　SSDの「容量」と聞くと、カタログに記載されている「240 GB」や「960 GB」などの値がまず思い浮かぶと思います。この「カタログに記載された容量」のことは「**表記容量(Advertised Capacity)**」などと呼ばれます。

　これに対して、SSDには「NANDフラッシュメモリの搭載量」という「容量」もあります。これはカタログには通常記載されません。ただNANDフラッシュメモリチップの容量は通常2のべき乗で表記されますので、TLC NANDフラッシュメモリをそのまま使用したケースを仮定すると、表記容量240 GBのSSDであれば256 GiB分、表記容量960 GBのSSDであれば1,024 GiB分搭載されていると考えるのが妥当です。

　この「表記容量」から計算される「ユーザ領域サイズ」と、「NAND搭載容量」と「ユーザ領域サイズ」の差と割合の例を表1に示します。

表1：「表記容量」と「ユーザ領域サイズ」と「NAND搭載容量」の関係例（1セクタ512バイトを仮定）
| A：表記容量 | B：ユーザ領域サイズ（Windows表記） | C：NAND搭載容量 | D：余剰率((C - B)÷B) |
|-:|-:|-:|-:|
| 480 GB | 約447.13 GB | 512 GiB | 約14.5% |
| 512 GB | 約476.94 GB | 512 GiB | 約7.35% |
| 960 GB | 約894.25 GB | 1,024 GiB | 約14.5% |
| 1024 GB | 約953.87 GB | 1,024 GiB | 約7.35% |

　表1を見ると、たとえ表記容量(A)が512 GBでもユーザ領域サイズ(B)は512 GBより小さいことがわかります。

　Bの数値はWindowsでよく見る容量かと思います。Windowsは、(A)に示したGB単位の表記容量を1,000の3乗倍してバイト単位にしたものを1,024の3乗で割り算した結果を「ユーザ領域サイズ」として表示しています<sup>[1]</sup>。

　実際私が使用している512 GBのSSDも、Windowsの「ディスクの管理」では図1のように476.92 GBと表示されます。

![512 GBのSSDがWindowsでは476.92 GBと表示されている様子](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/439683/b5c77710-1f44-205f-07f7-d060a6ba218a.png "512 GBのSSDがWindowsでは476.92 GBと表示されている様子")
図1：512 GBのSSDがWindowsでは476.92 GBと表示されている様子

　このWindowsの容量計算方法は、次のようにしても確かめることができます。

　JEDECでは、表記容量が8,000 GB未満でかつフォーマットが1セクタ512バイトの場合、ドライブの総セクタ数を求める計算式を下記のように定義しています<sup>[2]</sup>。

> User-addressable logical block count = 21168 + (1953504 x SSD Capacity in Gbytes)

　この計算式中の"SSD Capacity in Gbytes"が「GB単位の表記容量」で、"User-addressable logical block count"が「ドライブの総セクタ数」です。

　Windowsが図1で表示している値は、この計算結果（左辺）に512バイトを掛け算してバイト単位の総容量を求め、その値を1,024の3乗で割り算した結果とほぼ一致します。

　そしてこの「NAND搭載容量」と「ユーザ領域サイズ」の差を「ユーザ領域サイズ」で割り算して百分率で示したものが表1の「余剰率(D)」です。表記容量が480 GBや960 GBさらに表には示していませんが1920 GBなどの場合は14%強、そして512 GBや1024 GBそして2,048 GBなどの場合は7%強、となります。

　**この差（＝余剰）の中にOP領域が含まれています。**

## 余剰領域の使い道

　SSDは、この「NAND搭載容量」と「ユーザ領域サイズ」の差分である余剰領域をドライブの内部管理向けに使用します（図2）。

![NAND搭載容量と表記容量の差とその使い道](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/439683/4e2bfced-124c-5715-e656-9bacfba7b18f.png "NAND搭載容量と表記容量の差とその使い道")
図2：NAND搭載容量と表記容量の差とその使い道

　ドライブの内部管理には、ファームウェアの管理や、統計情報を含むドライブ情報の管理、そしてドライブ内のどこにどのセクタの最新データが書き込まれているかを記した情報の管理が含まれます。代替の管理用領域つまり「代替領域」もここに含まれます。

　そして、「NAND搭載容量」と「ユーザ領域サイズ」の差からこのドライブ内部管理向けに確保する領域を差し引いた分が純粋な「固定OP領域」です。

　このように、SSDが搭載するNANDフラッシュメモリ容量よりもユーザデータ領域サイズのほうが小さいために「ユーザ領域容量に対する余剰容量（＝設備）」が存在し、その余剰容量のうちSSDがドライブの管理に使用する領域の分を差し引いたものを固定OP領域と呼びます。

　この固定OP領域がないと、ユーザデータ領域サイズ全体に有効データが書き込まれた状態で新たな書き込み要求を受領した際にGCが実行できずにデータを書き込む場所を確保できず、ドライブとしての機能を果たせません。イメージとしては、**倉庫番ゲームにおいて倉庫満杯に荷物が格納された状態で一番奥に格納された荷物を取り出そうとしても、倉庫から荷物を一時的に取り出しておく領域（＝固定OP領域）がないために処理ができない「詰んだ」状態**、が近いです。

　固定OP領域の大きさは百分率(%)で示されることが多いです。正確には図2のようにドライブ管理向けサイズを差し引くべきですが、ドライブ管理向けサイズはメーカーや製品により大きく異なるため、表1のD列のように単純に割り算して求めた値を使うことも多いです。

　この **「ドライブ内部処理向けサイズ」つまり余剰領域のサイズを小さく抑えつつも可能な限り固定OP領域は大きく確保し、同じNAND搭載容量でより大きいユーザデータ領域を提供してかつ記録されているユーザデータサイズが大きくても性能（寿命）を維持することが、SSDメーカーの腕の見せ所** です。

　また、**同じ容量のNANDフラッシュメモリを搭載していても、表記容量が小さいSSDのほうが固定OP領域は大きいので高性能・長寿命を実現しやすい** こともわかります。

　なお、ユーザデータ領域サイズより少ないサイズしか有効データが記録されていない場合、ドライブは「使われていないユーザデータ領域」を性能向上や長寿命化に活用します。

　このように使用する「使われていないユーザデータ領域」のことを、「可変OP領域」や「ダイナミックOP領域」などと呼ぶことがあります<sup>[3][4]</sup>。

　記事の最初でご紹介したOPの説明では、この「可変OP領域」を含めて「オーバープロビジョニング」と説明していると考えることができます。

　登場初期のSSDの表記容量は64 GBや256 GBなど2のべき乗がほとんどでしたが、最近では480 GBや960 GBそして1920 GBなどの表記容量が多くなりました。これはNANDフラッシュメモリの世代が進むにつれてそのブロックサイズが増大していることなどが要因であり、それを受けてSSDメーカーが苦渋の決断を下した結果です。これも別の機会に説明できればと思います。

# まとめ
　今回の記事では、SSDについて一度は耳にしたことがあると思われる「オーバープロビジョニング(OP)」について、その領域がどこから来ている物なのかを説明しました。

　HDDの時代からストレージドライブの記憶領域の容量（SSDで言えばNANDフラッシュメモリの搭載容量）とユーザがアクセス可能な容量（ユーザ領域サイズ）は異なり、その差はドライブの内部処理用領域として使われています。

　SSDの場合、そのドライブ内部処理用領域の一部を「オーバープロビジョニング領域」として使用することでドライブとしての機能を果たし、さらには長寿命化や性能向上そして性能維持を実現しています。

　OP領域はユーザには「容量の目減り」に映りますが、性能というユーザの価値に直結したものです。製品の選択時には、性能や寿命などの指標と合わせて総合的に判断していただければと思います。

# References
[1] バッファロー、_「[ハードディスク容量の計算方法（Windows、Mac）](https://www.buffalo.jp/support/faq/detail/1087.html)」_、2022年12月13日閲覧
[2] JEDEC, _"Solid-State Drive (SSD) Requirements and Endurance Test Method"_, JESD218B.02, June 2022
[3] Seagate, _“[SSD Performance Advancements](https://www.seagate.com/www-content/product-content/enterprise/nytro/nytro-sata/document.pdf)”_ [PDF], Technology Paper, November 2018
[4] ハギワラソリューションズ、_「[TRIM（コマンド）とは](https://www.hagisol.co.jp/techblog/?p=1034)」_、技術コラム、2022年7月

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