この記事で紹介している製品
おことわり
この記事は、2022年1月にQiitaに投稿した記事を加筆修正したものです。
また、この記事のオリジナルは日本語で書かれています。記事が日本語以外の言語で表示されている場合、それは機械翻訳の結果です。当社は機械翻訳の精度に責任を負いません。
はじめに
ハードディスクドライブ(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フラッシュメモリのエラー率悪化に伴い物理セクタサイズを拡大
- 現在のNANDフラッシュメモリをメディアとするSSDのほとんどは、論理セクタサイズ512バイトで動作する場合はエミュレーション動作している
NANDフラッシュメモリは当初FDD互換を目指した
当初NANDフラッシュメモリは、その普及のため、FDDの互換メディアを指向しました。
これは、1996年に設立されて後に「スマートメディア(SmartMedia)」という呼称を策定した「SSFDCフォーラム」の名称に含まれる”SSFDC”が”Solid State Floppy Disk Card”の略である[1]ことからもわかります。
FDDの主流セクタサイズは512バイトでした。そしてスマートメディアはメディア内にコントローラがないためNANDフラッシュメモリ自体が512バイト単位で読み書きできる必要があり、当時のNANDフラッシュメモリのページサイズは512バイト(+α)でした[2]。
つまりこの頃は物理セクタサイズ=論理セクタサイズ(=512バイト)の時代です。
その後「PCカード(PCMCIAカード)」や(当時の)SanDiskが策定したコンパクトフラッシュに繋がる流れの中で、同じくセクタサイズが512バイトであるHDDとの互換性がより強く意識されるようになりました。
このような経緯で、NANDフラッシュメモリおよびNANDフラッシュメモリをメディアとするドライブ(SSDを含む)は「512バイトセクタ」をサポートしてきました。
HDDは512バイトセクタ存続へAdvanced Format策定
一方HDDは、後述する理由により物理セクタサイズを512バイトのままとすることが辛くなりました。このため、業界団体のIDEMAが2010年にAdvanced Format (AF)という規格を策定し、「512エミュレーション(512e)」や「4Kネイティブ(4Kn)」などの動作モードを定義しました[3]。
AFの説明は、Western Digitalのホワイトペーパー(英語)[4]がわかりやすいです。このホワイトペーパーは2018年作成であり登場するOSは多少古いですが、背景を含めてAFの説明が良くまとめられています。
ここでは、SSDの説明に必要な内容を中心にまとめます。
「論理セクタサイズ=物理セクタサイズ」の場合(512n)
HDDでは、メディア(磁気ディスク)上のデータの(一次)保護に、512バイトのデータとこのデータから生成したパリティから成る誤り訂正符号を使用していました。
なお、正確には512バイトのデータに加えてそのデータに対応するメタデータも保護対象とすることが多いですが、ここでは説明を簡潔にするためにメタデータを省略します。
HDDコントローラは、ライト処理時はホストから受領した512バイトのデータからパリティを計算して{512バイト+パリティ}をメディアに書き込み、リード処理時はメディアから{512バイト+パリティ}を読み出して誤り訂正処理を実施して512バイトのデータをホストに転送していました。
ホストがドライブとの間で読み書きするデータ単位(論理セクタ)のサイズと、ドライブが内部でメディアとの間で読み書きするデータ単位(物理セクタ)のサイズが、512バイトで一致しており、とても平和です(図1)。これが512ネイティブ(512n)モードです。
HDDやSSDに関する規格(SCSI、ATA、そしてNVMeなど)に登場するLogical Block Address (LBA)は、この論理セクタに割り当てられるアドレスです。
「論理セクタサイズ<物理セクタサイズ」の場合(512e)
しかし、HDDの記録密度向上を進める過程で容量効率を上げるために誤り訂正符号の符号長を拡大しました([4]参照)。
この「符号長」とは、保護したいデータ本体(情報)とそのデータから生成した検査用データ(パリティ)を合わせたもの(符号)の長さです。具体的には、情報長を4キロバイトに拡大しました。
しかしホスト(OS)は、ドライブとの間で512バイト単位でデータを読み書きする前提で作成されています。
このためドライブがメディアの読み書き単位サイズを512バイトから4キロバイトに変更しても、ホストとの間では512バイト単位で読み書きできないとシステムが破綻してしまいます。
そこで、物理セクタサイズを4キロバイトに拡大しつつ論理セクタサイズを512バイトのままとしたのが512エミュレーション(512e)モードです(図2)。
「論理セクタサイズ=物理セクタサイズ」の場合(4Kn)
ここで物理セクタサイズの拡大にあわせて論理セクタサイズも4キロバイトに変更すれば、ドライブは512e動作時のエミュレーションが不要となり、本来の自然な動作が可能です。これが4Kネイティブ(4Kn)モードです(図3)。
この図3は赤字の部分(セクタサイズ)以外図1と同じです。このことからも、図3の動作がセクタサイズのみ異なる「ネイティブ」動作であることがわかります。
システムを4Kネイティブ動作させるには、ホスト(OS含む)とドライブ双方が4Kネイティブ動作に対応している必要があります。これは、論理セクタサイズがホストとドライブの間での取り決めだからです。ホストとドライブどちらか片方だけの対応では実現できません。
OSの4Kn動作対応状況は、例えばWindowsであればWebページにまとめられています[5]。Windows 10などの新しいバージョンでは4Kn動作に対応しています。
SSDはどうしたのか?
前述の通り、HDDがAFを制定して512eという動作モードを導入した理由は「容量効率向上」です。
これに対しNANDフラッシュメモリをメディアとするSSDは、メディアのエラー率悪化に対応するため物理セクタサイズを拡大しました。
前述の通り、以前NANDフラッシュメモリのページサイズは512バイト(+α)であり、これを基準とした誤り訂正符号を採用していました。
しかし、2017年時点でQLC NANDフラッシュメモリを対象に4キロバイトを基準サイズとする誤り訂正符号が発表されるなど[6]、物理セクタサイズが512バイトではない設計の必要性が主張されました。
例えば、物理セクタサイズが4キロバイトで論理セクタサイズが512バイトで動作しているSSDは図2のような動作になり、これは実質512eモードの動作です。
SSDの場合、適用する誤り訂正符号の符号長は主に使用するNANDフラッシュメモリの信頼性に応じて決めます。これにより物理セクタサイズも決まります。4キロバイト以外にも、1キロバイトや2キロバイトなどの物理セクタサイズが考えられます。
物理セクタサイズ(≒符号長)を長くしてかつ高い性能を達成しようとすると、誤り訂正回路(特に訂正回路)の回路規模が大きくなり、SSDコントローラのチップサイズが大きくなるほか消費電力も高くなります。
このため、SSDの設計において、誤り訂正符号の符号長や訂正能力、さらには訂正回路の性能や回路規模などは、製品の特徴があらわれるポイントのひとつです。
いずれにしても、論理セクタサイズと物理セクタサイズが異なりかつ物理セクタサイズが論理セクタサイズより大きい場合、ドライブが論理セクタサイズでの読み書きをエミュレーションしています。
エミュレーション動作とネイティブ動作のメリットとデメリット
ドライブから見た512eなどのエミュレーション動作と4Knなどのネイティブ動作それぞれのメリットとデメリットは表1のようになります。
メリット | デメリット | |
---|---|---|
512e(エミュレーション動作) | ホスト側の対応が不要で たいていのホストと接続可能 | 細かい読み書きの効率が悪い |
4Kn(ネイティブ動作) | 読み書きの効率が良い | ホスト側の対応が必要 |
512e動作のメリットは簡潔で、論理セクタサイズが512バイトでのみ動作可能なホストとの組み合わせでも動作可能であることです。
OSだけでなくアプリケーションや周辺機器を含めた確認や対応の手間を考えると、512e動作できることのメリットは大きいです。
512e動作のデメリットは、物理セクタサイズ未満の読み書きの効率が悪いことです。図2に示したように、512e動作の場合は論理セクタサイズでの書き込み時にドライブ側で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キロバイト[7]ですので、ホストから16キロバイト単位で読み書きするとよりNANDフラッシュメモリに優しくなります。
おわりに
この記事では、NANDフラッシュメモリとNANDフラッシュメモリをメディアとするSSDについて、その物理セクタサイズの歴史を説明しました。
また、NANDフラッシュメモリをメディアとするSSDでは、現在では論理セクタサイズ512バイト時にエミュレーション動作していることを説明しました。
加えてドライブ視点で見た512eのメリットとデメリットを説明し、NANDフラッシュメモリをメディアとするSSDの場合、NANDフラッシュメモリの寿命という視点ではネイティブ動作のほうがより効率よく寿命を消費できることを説明しました。
次回は、NVMe SSDとWindowsを取り上げて、実際にSSDが512eで動作しているかどうかを確かめる方法や論理セクタサイズを変更する方法をまとめます。
References
[1] スマートメディア、ウィキペディア(2023年10月10日閲覧)
[2] 中村 他、「64MビットNAND型フラッシュメモリ」[PDF]、東芝レビュー、Vol.51、No.11、1996年
[3] “Advanced Format“、ウィキペディア(英語版)(2023年10月10日閲覧)
[4] Western Digital, “Advanced Format“[PDF], September, 2018 (2023年10月10日閲覧)
[5] Microsoft, “Microsoft support policy for 4K sector hard drives in Windows“, 2023年10月10日閲覧
[6] Shiuan-Hao Kuo, “Novel 4K Error Correcting Code for QLC NAND“[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“, ISSCC 2021, pp 428-430, San Francisco, CA, February, 2021
他社商標について
記事中には登録商標マークを明記しておりませんが、記事に掲載されている会社名および製品名等は一般に各社の商標または登録商標です。
記事内容について
この記事の内容は、発表当時の情報です。予告なく変更されることがありますので、あらかじめご了承ください。