NANDフラッシュメモリベースSSDのセクタサイズの過去と現在

# はじめに
　ハードディスクドライブ(HDD)やNANDフラッシュメモリをメディアとするSolid State Drive (SSD)のセクタサイズは「512バイト」が一般的です。

　一方、HDDではAdvanced Format (AF)という規格があります。

　この規格は、ドライブがメディアを読み書きする単位サイズ（**物理セクタサイズ**）が512バイトでなくてもホストが読み書きする単位サイズ（**論理セクタサイズ**）は512バイトとする動作モードを定義しています。

　そこで今回から2回の記事で、SSDがNANDフラッシュメモリを読み書きする際の単位データサイズと、ホストからの読み書きで扱う単位データサイズについてまとめます。

　今回の記事では、NANDフラッシュメモリおよびNANDフラッシュメモリをメディアとするSSDのセクタサイズの歴史を簡単にまとめます。

　次回の記事では、NVMe SSDを例に挙げて、実際にSSDの物理セクタサイズや論理セクタサイズを確認する方法と、それを変更する方法を説明します。

# まとめ
* NANDフラッシュメモリはその昔、当初はFDD、その後はHDDとの互換性を意識したため、そのページサイズはセクタサイズと同じ512バイト（＋α）だった
* その後、NANDフラッシュメモリのエラー率悪化に伴い物理セクタサイズを拡大
* 現在のNANDフラッシュメモリをメディアとするSSDのほとんどは、論理セクタサイズ512バイトで動作する場合はエミュレーション動作している

# NANDフラッシュメモリはFDD互換を目指した
　当初NANDフラッシュメモリは、その普及のため、フロッピーディスクドライブ(FDD)の互換メディアを指向しました。

　これは、1996年に設立されて後に「スマートメディア(SmartMedia)」という呼称を策定した「SSFDCフォーラム」の"SSFDC"が **"Solid State Floppy Disk Card"の略である** <sup>[1]</sup>ことからわかります。

　FDDの主流セクタサイズは512バイトでした。そしてスマートメディアはメディア内にコントローラがないためにNANDフラッシュメモリ自体が512バイト単位で読み書きできる必要があり、**当時はNANDフラッシュメモリのページサイズが512バイト（＋α）でした**<sup>[2]</sup>。

　つまりこの頃は物理セクタサイズ＝論理セクタサイズ（＝512バイト）の時代です。

　その後いわゆる「PCカード（PCMCIAカード）」や（当時の）SanDiskが策定したコンパクトフラッシュに繋がる流れの中で、同じくセクタサイズが512バイトであるHDDとの互換性がより強く意識されるようになりました。

　このような経緯で、NANDフラッシュメモリおよびNANDフラッシュメモリをメディアとするドライブ(SSD)は「512バイトセクタ」をサポートしてきました。

# HDDは512バイトセクタ存続へAdvanced Format策定
　一方HDDは、後述する理由により物理セクタサイズを512バイトのままとすることが辛くなりました。このため、業界団体のIDEMAが2010年に"Advanced Format"という規格を策定しました<sup>[3]</sup>。

　「**512エミュレーション(512e)**」や「**4Kネイティブ(4Kn)**」などの動作モードを定義した規格です。

　Advanced Formatの説明は、Western Digitalのホワイトペーパー（英語）<sup>[4]</sup>がわかりやすいです。このホワイトペーパーは2018年作成であり登場するOSは多少古いですが、背景を含めてAdvanced Formatの説明が良くまとめられています。

　ここでは、SSDの説明に必要な内容を中心にまとめます。

## 「論理セクタサイズ＝物理セクタサイズ」の場合(512n)
　HDDでは、メディア（磁気ディスク）上のデータの（一次）保護に、512バイトのデータとこのデータから生成したパリティから成る誤り訂正符号を使用していました。

　なお、正確には512バイトのデータに加えてそのデータに対応するメタデータも保護対象とすることが多いですが、ここでは説明を簡潔にするためにメタデータを省略します。

　HDDコントローラは、ライト処理時はホストから受領した512バイトのデータからパリティを計算して｛512バイト＋パリティ｝をメディアに書き込み、リード処理時はメディアから｛512バイト＋パリティ｝を読み出して誤り訂正処理を実施して512バイトのデータをホストに転送していました。

　ホストがドライブとの間で読み書きするデータ単位（論理セクタ）のサイズと、ドライブが内部でメディアとの間で読み書きするデータ単位（物理セクタ）のサイズが、512バイトで一致しており、とても平和です（図1）。これが **512ネイティブ(512n)** モードです。

　HDDやSSDに関する規格（SCSI、ATA、そしてNVMeなど）に登場する **Logical Block Address (LBA)** は、この論理セクタ(Logical Sector)に割り当てられるアドレスです。

![論理セクタサイズと物理セクタサイズ（の基準）が512バイトで一致した平和なシステム（イメージ）](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/439683/42fb8f6b-79b0-ddcd-cfa6-fa19747f58b2.png "論理セクタサイズと物理セクタサイズ（の基準）が512バイトで一致した平和なシステム（イメージ）")
図1：論理と物理のセクタサイズ（の基準）が512バイトで一致した平和なシステム（イメージ）

## 「論理セクタサイズ＜物理セクタサイズ」の場合(512e)
　しかし、HDDの記録密度向上を進める過程で**容量効率を上げるために誤り訂正符号の符号長を拡大**しました（[4]参照）。

　この符号長とは、保護したいデータ本体（情報）とそのデータから生成した検査用データ（パリティ）を合わせたもの（符号）の長さです。具体的には、情報長を4キロバイトに拡大しました。

　しかしホスト(OS)は、ドライブとの間では512バイト単位でデータを読み書きする前提で作成されています。

　ドライブがメディアの読み書き単位サイズを512バイトから4キロバイトに変更しても、ホストとの間では512バイト単位で読み書きできないとシステムが破綻します。

　そこで、物理セクタサイズを4キロバイトに拡大しつつ論理セクタサイズを512バイトのままとしたのが **512エミュレーション(512e)** モードです（図2）。

![論理セクタサイズが512バイトで物理セクタサイズ（の基準）が4キロバイトのシステム（イメージ）](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/439683/b9187a41-acfe-86a1-95f5-c0b9f98a1fcb.png "論理セクタサイズが512バイトで物理セクタサイズ（の基準）が4キロバイトのシステム（イメージ）")
図2：論理セクタサイズが512バイトで物理セクタサイズ（の基準）が4キロバイトのシステム（イメージ）

## 「論理セクタサイズ＝物理セクタサイズ」の場合(4Kn)
　一方、物理セクタサイズの拡大にあわせて論理セクタサイズも4キロバイトに変更すれば、ドライブは512e動作時の処理（エミュレーション）が不要となり、本来の自然（ネイティブ）な動作が可能です。これが **4Kネイティブ(4Kn)** モードです（図3）。

　この図3は赤字の部分（セクタサイズ）以外図1と同じです。このことからも、図3の動作がセクタサイズのみ異なる「ネイティブ」動作であることがわかります。

![論理と物理のセクタサイズ（の基準）が4キロバイトで一致しているシステム（イメージ）](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/439683/826a37cf-2f4c-5ff9-b792-1b3870a1fba6.png "論理と物理のセクタサイズ（の基準）が4キロバイトで一致しているシステム（イメージ）")
図3：論理と物理のセクタサイズ（の基準）が4キロバイトで一致しているシステム（イメージ）

　システムを4Kネイティブ動作させるには、ホスト（OS含む）とドライブ双方が4Kネイティブ動作に対応している必要があります。これは、**論理セクタサイズがホストとドライブの間での取り決め**だからです。ホストとドライブどちらか片方だけの対応では実現できません。

　OSの4Kn動作対応状況は、例えばWindowsであればWebページにまとめられています<sup>[5]</sup>。Windows 10など新しいバージョンでは4Kn動作に対応しています。

# SSDはどうしたのか？
　前述の通り、HDDがAdvanced Formatを制定して512eという動作モードを導入した理由は「容量効率向上」です。

　一方NANDフラッシュメモリをメディアとするSSDは、**メディアのエラー率悪化に対応するため物理セクタサイズを拡大しました。**

　前述の通り、以前NANDフラッシュメモリのページサイズは512バイト（＋α）であり、これを基準とした誤り訂正符号を採用していました。

　しかし、2017年時点でQLC NANDをターゲットに4キロバイトを基準サイズとする誤り訂正符号が発表されるなど<sup>[6]</sup>、物理セクタサイズが512バイトではない設計の必要性が主張されました。

　例えば、物理セクタサイズが4キロバイトで論理セクタサイズが512バイトで動作しているSSDは図2のような動作であり、これは実質512eモードの動作です。

　SSDの場合、適用する誤り訂正符号の符号長は主に使用するNANDフラッシュメモリの信頼性に応じて決めます。これにより物理セクタサイズも決まります。4キロバイト以外にも、1キロバイトや2キロバイトなどの物理セクタサイズが考えられます。

　物理セクタサイズ（≒符号長）を長くしてかつ高い性能を達成しようとすると、誤り訂正回路（特に訂正回路）の回路規模が大きくなり、SSDコントローラのチップサイズが大きくなるほか消費電力も高くなります。

　このため、SSDの設計において、誤り訂正符号の符号長や訂正能力、さらには訂正回路の性能や回路規模などは、製品の特徴が表れるポイントのひとつです。

　いずれにしても、論理セクタサイズと物理セクタサイズが異なりかつ物理セクタサイズが論理セクタサイズより大きい場合、ドライブが論理セクタサイズでの読み書きをエミュレーションしています。

# 512エミュレーション(512e)のメリットとデメリット
　ドライブから見た512eと4Knなどのネイティブ動作それぞれのメリットとデメリットは表1のようになります。

表1：ドライブ(SSD)からみた512eとネイティブ動作のメリットとデメリット
![ドライブ(SSD)からみた512eとネイティブ動作のメリットとデメリット](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/439683/1f930968-3653-a977-6e6d-79159773928e.png "ドライブ(SSD)からみた512eとネイティブ動作のメリットとデメリット")

　512e動作のメリットは簡潔で、512バイトの論理セクタでのみ動作可能なホストとの組み合わせでも動作可能であることです。

　OSだけでなくアプリケーションや周辺機器を含めた確認や対応の手間を考えると、512e動作できることのメリットは大きいです。

　512e動作のデメリットは、物理セクタサイズ未満の読み書きの効率が悪いことです。512e動作の場合、図2に示したように、論理セクタサイズでの読み書き時にドライブ側でRead-Modify-Writeが必要となるからです。

　逆に、ドライブから見た4Knなどネイティブ動作のメリットは、512eでは必要なRead-Modify-Write処理が不要となり読み書きの効率が良いことです。ホストから物理セクタサイズ未満の読み書きが来ないためです。

　一方デメリットは、512e動作のメリットの裏返しで、ホストが512バイトではない論理セクタサイズでの動作に対応している必要であることです。

# NANDフラッシュメモリの視点では
　ご存知の通り、NANDフラッシュメモリに対する書き込みが多くなると寿命の消費が進みます。

　DRAMなどに書き込みデータ用バッファを持つSSDであれば、一定量の書き込みデータをそのバッファに溜めることでそのバッファ上でRead-Modify-Writeが完結する可能性もあります。しかし、SSDが備えるバッファのサイズとホストが搭載するDRAMのサイズでは後者の方が圧倒的に大きいです。

　したがって、SSDの視点では、論理セクタサイズ未満の読み書きをホスト側がホスト側のDRAMなどでRead-Modify-Write処理する**ネイティブ動作のほうがSSDひいてはNANDフラッシュメモリに優しくなる可能性が高い**、と言えます。

　なお、NANDフラッシュメモリはその読み書きの単位は「ページ」なので、読み書きの単位サイズをページサイズと同じにするとさらに読み書きの効率が高くなります。

　具体的には、最近のNANDフラッシュメモリのページサイズは16キロバイト<sup>[7]</sup>なので、ホストから16キロバイト単位で読み書きするとよりNANDフラッシュメモリに優しくなります。

# まとめ
　この記事では、NANDフラッシュメモリとNANDフラッシュメモリをメディアとするSSDについて、その物理セクタサイズの歴史を説明しました。

　また、NANDフラッシュメモリをメディアとするSSDでは、現在では論理セクタサイズ512バイト時にエミュレーション動作していることを説明しました。

　加えてドライブ視点で見た512eのメリットとデメリットを説明し、NANDフラッシュメモリをメディアとするSSDの場合、NANDフラッシュメモリの寿命という視点ではネイティブ動作のほうがより効率よく寿命を消費できることを説明しました。

　次回は、NVMe SSDとWindowsを取り上げて、実際にSSDが512eで動作しているかどうかを確かめる方法やそれを変更する方法をまとめます。

# References

[1] _[スマートメディア](https://ja.wikipedia.org/wiki/%E3%82%B9%E3%83%9E%E3%83%BC%E3%83%88%E3%83%A1%E3%83%87%E3%82%A3%E3%82%A2)_、ウィキペディア（2022年1月10日閲覧）
[2] 中村 他、_「[64MビットNAND型フラッシュメモリ](https://www.global.toshiba/content/dam/toshiba/migration/corp/techReviewAssets/tech/review/1996/11/51_11pdf/a04.pdf)_」[PDF]、東芝レビュー、Vol.51、No.11、1996
[3] _"[Advanced Format](https://en.wikipedia.org/wiki/Advanced_Format)"_、ウィキペディア（英語版）（2022年1月10日閲覧）
[4] Western Digital, _"[Advanced Format](https://documents.westerndigital.com/content/dam/doc-library/en_us/assets/public/western-digital/collateral/white-paper/white-paper-advanced-format.pdf)"_[PDF], September, 2018 （2022年1月5日閲覧）
[5] Microsoft, _"[Microsoft support policy for 4K sector hard drives in Windows](https://docs.microsoft.com/en-us/troubleshoot/windows-server/backup-and-storage/support-policy-4k-sector-hard-drives)"_, 2022年1月5日閲覧
[6] Shiuan-Hao Kuo, _"[Novel 4K Error Correcting Code for QLC NAND](https://www.flashmemorysummit.com/English/Collaterals/Proceedings/2017/20170809_FE22_Kuo.pdf)"_[PDF], Flash Memory Summit 2017, Santa Clara, CA, August 9, 2017 
[7] T. Higuchi et el, _"[A 1Tb 3b/Cell 3D-Flash Memory in a 170+ Word-Line-Layer Technology](https://ieeexplore.ieee.org/document/9366003/)"_, ISSCC 2021, pp 428-430, San Francisco, CA, February, 2021

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