SSDのスペックにある「あの機能」(2)：Power Loss Protection (PLP)

# はじめに
　前回は、SSDのスペック（製品仕様）に記載されている機能のうちの以下のような機能のひとつとして、End-to-End Data (Path) Protectionについて説明しました。

1. 内容があまりよく知られていない機能
2. 名前が似ていても内容が異なる機能
3. そもそも明確に規定されておらずメーカーにより内容が異なる機能

　2回目の今回は、**Power Loss Protection**を説明します。よくPLP（読み：ぴーえるぴー）と略されます。

# まとめ
* Power Loss Protectionは、不意の電源断からストレージを守る機能である
* Power Loss Protectionは、保護範囲などが標準化（規格化）されていないため、メーカーや製品により保護範囲（何をどの程度守るか）が異なる
* キャパシタに蓄えた電力を用いる実現方法などがある

# 発動する状況
　Power Loss Protection（以降、PLPと記載します）は、一言で言えば「ストレージを守るための機能」となります。

　というのも、PLPとは一般的に、正規の手順を経ずにSSDの電源が切られそうな時（電源電圧が閾値以下に低下した時、などを含む）に発動し、電源電圧の低下や不安定化により生じる様々な現象からストレージを保護する機能だからです。

　「正規の手順を経ずにSSDの電源が切られそうになること」はよく"unexpected power loss (down)"とか"unexpected shutdown"などと呼ばれます。"unexpected"という単語が使われている通り、「予期しない」といった意味が含まれています。

　SCSI（SASを含む）やSATAそしてNVMeなどの規格化された標準プロトコルでは、明示的もしくは暗黙的に、ドライブの電源を切る（以降、「電源断」と表記します）時の手順を定めています。

　この手順を守りSSDに事前に電源断を通知すると、SSDは電源断に備える処理を行い、その処理が完了したことをホストに伝えます。ホストはSSDから「電源断準備完了」の通知を受領してから電源を落とします（図1）。

![適切なSSDの電源断手順](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/439683/144e7bc4-d42c-a3f4-7bd4-93b1384ced38.png "適切なSSDの電源断手順")
図1：適切なSSDの電源断手順

　例えば、SATA SSDが準拠するATAコマンドセット仕様<sup>[1]</sup>には、以下の記載があります。

> Processing a STANDBY IMMEDIATE command shall cause the device to prepare for a power cycle (e.g., flush volatile write cache) prior to returning command completion.
>
> _"7.46 STANDBY IMMEDIATE – E0h, Non-Data"より抜粋_

　つまり、ホストがSATA SSDの電源を落とす際は、ドライブに`STANDBY IMMEDIATE`コマンドを発行してそのコマンドの完了通知を受領してから電源を落とすのが正規の（推奨される）手順です。

　この手順が守られないと、SSDは電源断準備を満足に行えない可能性があります。

　ここで言う「電源断準備処理」は「片付け」のイメージです。

　図2は、正規の電源断手順を踏んだ場合と踏まない場合の、SSDの電源が断たれるまでのSSDの内部状態を示したイメージ図です。

![SSD電源断手順の有無による差](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/439683/d2ecf992-49d1-4f04-6d57-e0d7fb6b3921.png "SSD電源断手順の有無による差")
図2：SSD電源断手順の有無による差

　図2のSSD Aは、時刻t<sub>0</sub>にてホストから電源断が通知されて片付け処理を開始し、時刻t<sub>1</sub>に片付け処理が完了、SSDの動作可能最低電圧(Vt<sub>L</sub>)を下回る（＝電源が落ちる）時刻(t<sub>3</sub>)では内部状態が片付いています。

　一方図2のSSD Bは、電源電圧の低下を検出する閾値(Vt<sub>H</sub>)まで落ちた時刻(t<sub>2</sub>)から慌てて片付け処理を始めるものの、SSDの動作可能最低電圧(Vt<sub>L</sub>)を下回る時刻(t<sub>3</sub>)までに片付けが終わらず、内部状態が片付かないままです。

　PLPは、図2のSSD Bのように、電源断手順が踏まれずいきなり電源電圧の降下を検出した場合でも、片付けつまり「電源断準備処理」を可能な限り行うための機能です。

　電源断準備処理が適切に行われないと、データインテグリティだけでなくストレージとしての機能継続に重大な影響を及ぼす可能性が高くなります。

　図2の説明で例えた通り、電源断準備処理は「片付け」に似ています。

　SSDは動作中、ホストから受信したデータやSSD自身の管理情報など様々なデータ・情報を扱うことで機能を実現しています。それらの情報を片付けないまま電源を切られてしまうと、電源が切られる直前まで扱っていたデータや情報を見失う、どこに記録したかわからなくなる、記録が雑になる、などの弊害が発生する可能性が高くなります（表1）。

表1：片付けと電源断準備処理の対比
![片付けと電源断準備処理の対比](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/439683/c2923d09-d4b4-6b8e-385b-9d71d8d6848b.png "片付けと電源断準備処理の対比")

# 使われるシステム
　前節で説明した通り、PLPが発動するのは「SSDの電源がSSDに通知されずに切られそうな時」です。

　このため、SSDにPLPが使われる（必要とされる）システムは、何らかの理由でSSDの電源がSSDに通知されずに切られることがある、そうゆう事態が発生してもデータインテグリティの保障やストレージとしての機能継続が非常に重要、な機器やシステムとなります。具体的を挙げると以下の通りです。

* 電源が不安定な機器やシステム（例：電池で動作する機器やシステム）
* 機器丸ごと電源を落とす利用方法が採られるシステム（例：ブレーカーなどで多数の機器を一斉に電源投入・遮断する使いかた）
* 活線挿抜が行われる機器・システム
    * 活線挿抜は、Hot-Plug、Hot-Swap、Hot-Add / Hot-Remove、Surprise Removal / Surprise Insertionなどとも呼ばれます
* エンタープライズシステムのストレージ

# 保護の範囲
　前回のEnd-to-End Data Path Protection同様、**Power Loss Protection (PLP)という名の「標準化された機能」は存在しません。つまりカタログスペックに「Power Loss Protection（搭載）」と記載されていた場合、その具体的な機能（保護の範囲）や保証内容そして実現方法はメーカー依存です。**

　このため、SSDのカタログスペックに記載されたPLPについては、機能の内容などを適宜メーカーに問い合わせるなどの対応が必要です。

　しかし指標がない状態では説明も難しいので、PLPの保護範囲について便宜上レベル分けしたものが表2です。これはあくまで私が作成した説明用のものであり、このようなレベル分けがされているわけではないことにご注意ください。

表2：PLPによる保護のレベルと内容
![PLPによる保護のレベルと内容](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/439683/d57109be-0426-c5f8-f496-33a05e9ee111.png "PLPによる保護のレベルと内容")

　表2のレベル1は、とにかくSSDが認識不良やアクセス不能になることを防ぐものです。SSDが認識できなくなると手の施しようがなくなるため、そのような事態に陥ることを防ぐための機能です。その反面、データインテグリティは保障されません。

　レベル2は、SSDが電源断を認識した時点でメディア（NANDフラッシュメモリ）に記録されていたデータ（"data at-rest"と呼ばれます）を保護するものです。処理中のNANDフラッシュメモリの電源が不安定になると、それまでに記録されたデータの状態が不安定になる危険があります。そのような事態を防ぐための機能です。ちょうど書き込み中、もしくはまだ揮発性のバッファ内にあり未書き込みのデータ（"data in-flight"と呼ばれます）を失う可能性があります。

　レベル3は、レベル2では保護されないデータ、つまりdata in-flightも守る機能です。このレベル3が最も強力な機能です。

　レベル2とレベル3の違いやそれらのレベルが求められるシステムについては、Micron Technologiesのホワイトペーパー<sup>[2]</sup>が参考になります。この文書では、特にレベル2について、NANDフラッシュメモリ特に多値記憶方式（MLCやTLC、もちろんQLCも含む）に起因する複雑さが詳しく説明されています。

# メリットとデメリット
　前節で説明したように保護内容の違いがあるので一概に当てはめることはできませんが、PLPのメリットとデメリットの概要を示したものが表3になります。

表3：PLPのメリットとデメリット
![PLPのメリットとデメリット](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/439683/ec16c3bd-c9cb-a296-44fc-e8811b2a47cd.png "PLPのメリットとデメリット")

　in-flightのデータとat-restのデータのそれぞれが保護対象かどうかという保護範囲の違いがありますが、保護が全くない場合と比較すると、PLPの一番のメリットはデータインテグリティ保障の強化です。

　PLPが正しく設計・実装・動作している限り、電源断に起因するデータインテグリティ喪失からは、設計した範囲内で保護されます。

　また、これはPLPの実現方法に依存しますが、PLPを実装することで副次的に性能向上が得られる可能性もあります。というのは、電源断準備処理つまり「片付け」の適切な実行が保障されているので、その保障の範囲内で性能が最大になるような動作が可能になるためです。

　もうひとつのメリットも適切な「片付け」実行の保障による効果で、起動時間の安定度が増す、ということです。

　図2にイメージを示した通り、片付けの実施によりデータやSSDのシステム情報がSSD内部で可能な限り整理された状態となり、次に電源が投入された時に必要な情報を素早く取得できます。このことは、SSDの起動時間がより安定する、という効果をもたらします。

　一方で、PLPのデメリットは、いずれも実現方法に依存するので一概には言えませんが、性能や信頼性が犠牲となることです。

　キャパシタなどを用いて適切な電源断準備処理を行うために必要な電力を確保する実現方法の場合、電力を蓄えるキャパシタをはじめ充放電回路や充電量検出回路などが追加で必要となります。

　SSDの装置信頼性（寿命）は通常NANDフラッシュメモリの信頼性（寿命）が支配的ですが、キャパシタなどが存在する場合それらの部品がSSDの装置信頼性の支配的要素となる可能性があります。

　また、NANDフラッシュメモリの寿命消費速度が増す、性能が低下する、などの可能性があります。これは、電源断準備処理つまり「片付け」そのものの処理量を減らす、という実現方法を採用した場合です。

　「片付け」そのものの処理量を減らすというのは、「未片付け」のデータやシステム情報の量を減らすということです。つまり、「未片付け」の総データ量を減らすためにより頻繁にNANDフラッシュメモリに書き込みを行うため、NANDフラッシュメモリの寿命消費速度がより速くなり、かつ性能低下が発生する可能性が高いです。

# Power Loss Protection実現例

　ここではPLPを実現する具体例を2つ説明します。ひとつは備蓄しておいた電力を利用する方法、もうひとつは電源断準備処理つまり「片付け」にかかる時間を極力減らす方法です。

　なお、既に説明した通りPLPという標準化された機能はなく、実現方法も複数の方法を組み合わせるなどメーカー依存でかつ様々です。方法自体もここに記載したもの以外もあり得ます。

　また、ある意味当然ではありますが、PLPという言葉が使われるようになるより前から、事前通知なしの電源断時のストレージドライブ保護機能は存在します。

　そのため、SSDのカタログ（製品仕様）にPLPという記載がなくても何らかの機能を備えている可能性があります。

## 備蓄電力の利用
　メリットの説明時に少し説明しましたが、PLPの実現方法として最も一般的な方法はキャパシタなどを用いて予備の電力を確保する方法です。

　予めキャパシタに必要な電力を蓄えておき、電源電圧の低下を検出したらその備蓄電力を供給します。図3はこの動作イメージを表したものです。

![備蓄電力の供給によるPLP実現例](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/439683/d1c7f108-ca70-9430-18e6-4aaaf4a82f2c.png "備蓄電力の供給によるPLP実現例")
図3：備蓄電力の供給によるPLP実現例

　SSDの電源回路が電源電圧の低下を検知すると（時刻t<sub>0</sub>）、電源回路がキャパシタから電力を供給するように切り替えます。

　そして電源回路はキャパシタからの電力供給を開始したことをコントローラに通知し、その通知を受領したコントローラは急いで片付け処理を行い、SSDの内部状態を整理するなどして電源が切られても良い状態にします。

　この図3では予備電源の供給時間はt<sub>1</sub> - t<sub>0</sub>として描いていますが、この供給時間は、どこまでデータを守るか（data in-flightも守るかどうか）や、SSDの内部状態の片付けにかかる最悪（最長）時間などから慎重に計算されます。

　備蓄電力で動作可能な時間が長ければ長いほどより良く整理整頓できますが、搭載キャパシタ量が多くなるなどのトレードオフがあります。

## 電源断準備処理時間削減

　この方法は、「片付けに十分な時間がないなら片付ける量を減らす」という方法です。

　例えば、あるSSDがホストからライトされたユーザデータをNANDフラッシュメモリに書き込む前に一時的にDRAMにためる仕組みだとします。その場合、NANDフラッシュメモリに書き込まれていないユーザデータは片付けが必要なデータです。

　ここでdata in-flightも保護対象とするPLPを実現する場合、片付ける量を減らすにはDRAMにためるユーザデータを減らせばよいことになります。イメージを表したものが図4になります。

![DRAMにためるデータ量の削減により電源断準備処理時間を削減するイメージ](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/439683/70a6af37-499d-ed7a-a907-8dbdd344ecc9.png "DRAMにためるデータ量の削減により電源断準備処理時間を削減するイメージ")
図4：DRAMにためるデータ量の削減により電源断準備処理時間を削減するイメージ

　図4 (A)のように片付けにかかる時間が目標時間を超過している場合に、図4 (B)のようにためるデータサイズを減らすことで片付けにかかる時間を削減し、電源断準備処理時間を目標時間内に収める、という方法です。

　実際のSSDでは、片付けが必要なデータにはユーザデータだけでなくシステムデータも含まれます。例えば、ホストが指定するLBAとそのLBAの最新データが記録されている場所の対応関係を管理するデータや、統計情報です。

　PLPのメリットとデメリットの説明で触れたように、この方法は必要な追加ハードウェア量などを削減できることが利点である一方、性能低下の可能性という欠点があります。

　性能低下が生じる理由を示したイメージ図が図5になります。

![単にためるデータサイズを減らすと性能が落ちるイメージ](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/439683/61150c1c-36c2-a66f-2cd7-0272e2973509.png "単にためるデータサイズを減らすと性能が落ちるイメージ")
図5：単にためるデータサイズを減らすと性能が落ちるイメージ

　図5 (A)と(B)はともに、ホストと実効3 GB/s（おおよそPCIe Gen3x4接続相当）で接続されたSSDをイメージしたものです。ホストとの接続バンド幅は、SSD内のバッファメモリにデータがたまる速度（グラフの傾き）に表れます。

　そして、図5 (A)はバッファメモリに1 MBのデータをためてから、図5 (B)は(A)の半分の512 KBためてから、NANDフラッシュメモリに書き込むアルゴリズムです。ここで、図5 (A)と(B)ともに、搭載するNANDフラッシュメモリのデータ書き込みにかかる時間は300μs、搭載する全NANDフラッシュメモリチップを使って一度に書き込むことができる最大データサイズは1 MB、とします。

　図5 (B)は、図5 (A)に比べてバッファメモリにためるデータサイズが半分ですから、もし通知なく電源電圧の低下を検出しても、急いで片付けるデータの最大サイズも図5 (A)の半分で済みます。また、先ほど説明した通り、SSDのデータインテグリティ保護のためにはユーザデータだけでなくシステムデータも片付ける必要がありますので、例えばそのシステムデータを、データ書き込みをしていないNANDフラッシュメモリに書き込むことにすれば、電源断準備処理の時間の増加を抑制可能です。

　しかし、図5に示した通り、図5 (B)のSSDの通常動作時のライト性能は図5 (A)と比較して半分程度になります。これはNANDフラッシュメモリのデータ書き込みにかかる時間と、ホストからデータを受け取るバンド幅がバランスしていないためです。

　ライト性能を高めるにはなるべく多くのデータをバッファして一度にNANDフラッシュメモリに書き込むべきなのですが、バッファするデータを多くしすぎると電源断準備処理時間が長くなる、というトレードオフの関係にあるわけです。

　このあたりはSSDの内部アーキテクチャ・アルゴリズム設計の一番のキモになる部分で、各メーカーがしのぎを削る部分です。

## その他の方法

　これまで説明した2つの方法の他には、例えば、バッファメモリやワーキングメモリとしてDRAMではなくMRAMを用いるものがあり、その方法を採用したSSDが既に発表されています<sup>[3][4]</sup>。

　MRAMは、DRAMに近いオーダーのレイテンシでアクセスできてかつ不揮発、というメモリです。

　このため、理想的には、揮発性のDRAM上に配置していたために電源断時の片付けをしていたデータ（in-flightなユーザデータ、システムデータ）を不揮発性のMRAM上に配置することで電源断時の片付けを不要にできます。

　この他にも、様々なテクニックがあり、各メーカー各製品により実現方法は様々です。

# まとめ
　今回は、SSDのスペック（仕様）に記載されていることがある機能のひとつ、Power Loss Protection (PLP)について説明しました。

　PLPは、不意の電源断に見舞われてもドライブの機能やデータインテグリティを守るための機能です。

　一方で動作や保証範囲が標準化（規格化）されていないこともあり、メーカーや製品により機能の内容や実現方法が多種多様です。

　このため、SSDのスペックに「Power Loss Protection (PLP)サポート」のように記載されていた時は、**その機能が何をどのように保護しているのか確認することが重要**です。

　SSDのスペックを読み解く際のご参考になれば幸いです。

# References
[1] T13, _"Information technology - ATA Command Set - 4 (ACS-4)"_, Revision 14, October 2016
[2] Micron Technologies, _"[How Micron SSDs Handle Unexpected Power Loss](https://www.micron.com/content/dam/micron/global/public/products/white-paper/ssd-power-loss-protection-white-paper-lo.pdf)"_ [PDF], White Paper, February 2024（2024/3/8閲覧）
[3] Brent Yardley, _"STT-MRAM applications use in IBM FCMs"_, Flash Memory Summit 2018, Santa Clara, CA, August 2018
[4] Phison Electronics、_"[Everspin and Phison Partner to Bring Spin Torque Transfer MRAM to Next Generation Enterprise SSD Controllers](https://www.phison.com/ja/company/newsroom/press-releases/109-gen4/1135-everspin-and-phison-partner-to-bring-spin-torque-transfer-mram-to-next-generation-enterprise-ssd-controllers-jp)"_、2019/7/25（2021/4/25閲覧）

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