SSDの代替処理

SSDの代替処理

この記事で紹介している製品

おことわり

 この記事は、2023年1月にQiitaに投稿した記事を加筆修正したものです。

 また、この記事のオリジナルは日本語で書かれています。記事が日本語以外の言語で表示されている場合、それは機械翻訳の結果です。当社は機械翻訳の精度に責任を負いません。

はじめに

 NANDフラッシュメモリを使用したSSD(以降単にSSDと記載)でも、Hard Disk Drive (HDD)における「代替処理」と似た処理があります。

 以下は、CrystalDiskInfoを用いたストレージの健康状態監視に関する記事でのHDDの代替処理の説明です。

 「代替処理済みのセクタ数」というのは、何らかの理由でHDDの読み書きに問題があるセクタ(場所)が見つかったため、そこに新たなデータを書き込まないようにしつつ、代わりの領域を割り当てて対処した数。いわゆる不良セクタがある証拠だが、代替処理ができているため、実使用上は何ら問題ないように見える。

ゲーマーも常駐推奨! HDDやSSDの異常を「CrystalDiskInfo」で検知」より引用

 この説明はHDD向けですが、SSDにもほぼこのまま適用できます。「実使用上は何ら問題ないように見えるものの実際には故障が近づいている可能性がある」こともHDDと同じです。

 この記事では、SSDにおける代替処理の仕組みと、代替処理の発動を検出する方法を説明します。

 なお、この記事ではHDDとしてConventional Magnetic Recording (CMR) HDDを参照します。

まとめ

  • SSDの「代替処理」のひとつは「バッドブロック発生時に代替領域からブロックを供給すること」
  • SSDで代替処理が発生すると、S.M.A.R.T.属性の変化や性能の一時的低下が起こり得る
  • 上記から代替処理の発生を検出して早期に対策することが大事

準備:HDDとSSDの記録位置管理の違い

 代替処理の説明に入る前に、HDDと最近のSSDのデータ管理アルゴリズムの違いを説明します。

 それは、ホストが指定するLogical Block Address (LBA)とドライブ内でのデータ記録位置の関係がHDDは固定でSSDは可変であること、です。これは「HDDは上書きができるが、NANDフラッシュメモリは上書きできない」ことに起因します。

 HDDの場合、典型的には図1のようにLBAと一対一で対応するセクタにデータを記録します。

図1:HDDにおける典型的なLBAとデータ記録位置の関係

 図1に示した順序でドライブがホストからコマンドを受領すると、LBA = 1へのコマンドは全てセクタ1に、LBA = 2へのコマンドは全てセクタ2にアクセスします。図1の6コマンドを処理した後の状態は同図中の「ディスクの状態」のようになります。

 一方SSDでは、典型的には図2のように受領したコマンドのLBAに関係なくデータを書き込んで管理します。

図2:SSDにおける典型的なLBAとデータ記録位置の関係

 なお、図2では1ページに1セクタのデータのみ記録するように記載していますが、これは説明を簡略化するためであり実際には1ページ内に複数セクタのデータを記録可能です。

 図2のように、SSDでは古いデータが残ることがHDDと異なります。SSDに古いデータが残るのは、古いデータが記録されたページに別のデータを書き込むには当該ブロックを消去する必要があるものの、当該ブロック(図2のブロック0)に最新データが記録されている限り当該ブロックを消去できないためです。

HDDの代替処理

 前節で説明した管理方法をもとにすると、HDDでの代替処理(イメージ)は図3のように説明できます。

図3:HDDの代替処理(イメージ)

 記録位置をセクタ単位で管理しているので、あるセクタが「データの記録に適さない」と判断された場合、そのセクタの代わりに代替領域からセクタを割り当てます。これが代替処理です。

 図3では、セクタ1が不良セクタと判断されたのでセクタ1の代替処理を行い、セクタXを割り当てています。この代替処理以降、LBA 1に対するコマンドは全てセクタXにアクセスします。

 あるセクタが「データの記録に適さない」と判断する条件はメーカーにより異なります。複数の条件が存在することもあります。Read時だけでなくWrite時に判断されることもあり得ます。

 HDDのS.M.A.R.T.属性に「代替処理済みのセクタ数」がある場合、この値は図3のセクタ1のように実際に代替処理により代替領域が割り当てられたセクタ数を示すと考えられます。一方「代替処理保留中のセクタ数」がある場合、「代替処理が必要だと判断されたが判断以降そのセクタに対応するLBAにデータが書き込まれていないため代替処理が実行されていない」セクタ数を示すと考えられます。コピーオンライトによる遅延処理に似ています。

SSDの代替処理

 いよいよSSDの代替処理です。SSDにおいてある記録位置が「データの記録に適さない」と判断されると、その記録位置を含むブロックがいわゆる「バッドブロック(Bad Block)」となることが多いです。そしてバッドブロックが発生すると代替処理が行われます。

 ここで「多い」と書いたのは基準などがメーカーにより異なるからです。あるブロックをバッドブロックと扱う基準がNANDフラッシュメモリメーカーそしてSSDメーカーにより異なるのは、この条件がNANDフラッシュメモリひいてはSSDの寿命や信頼性に大きな影響を与えるためです。実際、各社工夫を凝らしています。ご利用のSSDのバッドブロック化条件や代替処理発動条件はメーカーにお問い合わせください。 

 この記事では、ある記録位置が「データの記録に適さない」と判断される状況で場合分けをしてSSDにおける代替処理を説明します。場合分けは、Read時、Write (Program)時、Erase時の3つです。Eraseの存在がSSDの特徴です。

Read時に判断した場合

 ある記録位置がデータの記録に適さないとRead時に判断されるのは、その記録位置からデータをReadした時に多数のエラービットを検出した場合などです。

 Read時に多数のエラービットを検出する主要因にはData Retentionの悪化とRead Disturbの影響が挙げられます。Read Disturbの影響はEraseにより解消する可能性があるため、Read Disturbの影響が原因だと判断されれば当該ブロックをバッドブロック化せずに様子を見る方法もあります。

 Data Retentionが原因だと判断された場合、安全策をとると、当該ブロックをバッドブロック化します。「多数のエラービットを検出した記録位置(ページ)のみ以降使用しない」という細かな管理も技術的には可能ですが、細かい管理はコストが高いこと、Data Retentionの悪化は消去回数増加が主要因であり消去単位はブロックなので当該ブロックの他のページの信頼性も低下している可能性が高いこと、などから当該ブロックを丸ごと使わない(=バッドブロック化する)ことが多いです。

 Read時にあるブロックのバッドブロック化を決定すると、当該ブロックに記録されている少なくとも最新データは他のブロックにコピーする必要があります。図4は、ブロックAのバッドブロック化に際してブロックBを代替ブロックとして割り当ててブロックAのデータをデッドコピーしている例です。これがSSDにおける代替処理のひとつです。

図4:Read時に発生したバッドブロックに対する代替処理の一例

 代替ブロック(図4のブロックB)はいわゆる代替領域として確保されていたブロックから選ばれて割り当てられます。

Write時に判断した場合

 ある記録位置がデータの記録に適さないとWrite (Program)時に判断されるのは、その記録位置へのデータ書き込みに失敗した場合などです。

 NANDフラッシュメモリは一般的に、データ書き込みの成否を確認可能です。SSDコントローラはNANDフラッシュメモリにデータ書き込みを指示した後、その成否を確認します。この確認時に書き込み結果が「失敗」だと判明したらそのリカバリ処理を行います。

 データ書き込みに失敗したブロックを即バッドブロックにするかどうかも、NANDフラッシュメモリメーカーそしてSSDメーカーにより異なります。ですが、やはり安全策を採ればデータ書き込みに失敗したブロックはバッドブロック化します。

 NANDフラッシュメモリへのデータ書き込みはページ単位ですので、あるページへのデータ書き込みに失敗したら、書き込もうとしていたデータを代替ブロックに書き込む必要があります。それに加えて、当該ブロックの他のページには既にデータを書き込んだ可能性があるので、それら既に書き込んだデータの代替処理も必要です。例えば図5のように、書き込みに失敗したデータと、当該ブロックに書き込まれていたデータを、代替ブロックにコピーする方法が考えられます。

図5:Write (Program)時に発生する代替処理の一例

Erase時に判断した場合

 ある記録位置がデータの記録に適さないとErase時に判断されるのは、当該ブロックのErase処理に失敗した場合などです。

 データ書き込みと同様、NANDフラッシュメモリは一般的にErase処理の成否も確認可能です。SSDコントローラはNANDフラッシュメモリにErase処理を指示した後、その成否を確認します。この確認時にErase結果が「失敗」だと判明したらそのリカバリ処理を行います。

 Erase処理に失敗したブロックを即バッドブロックにするかどうかも、NANDフラッシュメモリメーカーそしてSSDメーカーにより異なります。ですが、やはり安全策を採ればErase処理に失敗したブロックはバッドブロック化します。

 ただErase処理はデータ書き込みの準備ですので、Erase処理に失敗したブロックには最新データはありません。ですので、Read時やWrite時と異なりデータの代替(退避)処理は不要です。Erase失敗時の代替処理は、代替領域から代わりのブロックを用意してEraseする、という処理になります。

代替処理による影響

 以上のとおり、SSDの代替処理では発動要因にかかわらず代替領域から代替ブロックを供給します。このことはS.M.A.R.T.属性などに反映されます。

 SATA SSDであれば冒頭で示した「代替処理済みセクタ数」が増えるはずです(サポートしていれば)。NVMe SSDであれば、余剰領域率(Available Spare)、使用率(Percentage Used)、メディアエラー数(Media and Data Integrity Errors)、エラーログエントリ数(Number of Error Information Log Entries)、などの属性に変化の可能性があります。

 HDDでは、図3のとおり代替処理が行われたセクタへのアクセスのみ以後毎回代替領域に飛びますので、当該セクタを含む領域のアクセス性能は低下したままとなります。代替領域へのアクセスに回転待ちが必要であれば性能低下度合いは顕著になります。特にストリーミングデータの読み書きなどシーケンシャル性能の安定性が求められる場合には注意が必要となります。

 一方SSDでは、Read時やWrite時に代替処理が発生した場合はデータのコピー処理が、Erase時に代替処理が発生した場合は再度のErase処理が必要となり、この結果一時的に性能が落ちます。

 その代わり、HDDのように「あるセクタだけ代替領域にアクセスする」ということはなく、シーケンシャルアクセスにおいても性能劣化は(もちろんメーカー依存ですが)軽微で済む可能性が高いです。

 ただこの「代替処理による性能低下が一時的で済む」というSSDの特徴は、逆に「実使用上は何ら問題ないように見えてしまう」ことに繋がります。

 このためSSDの利用者としては、この「S.M.A.R.T.属性値の変化」や「性能の一時的な変化」をとらえて代替処理の発生を早期に察知し、例えば「バックアップをとる(頻度を高くする)」「バックアップや(RAIDなどの)冗長化機能を確認する」「SSDの交換を検討する」「交換用SSDを手配する」などの対策を講じることが大事です。

おわりに

 今回の記事では、SSDにおける「代替処理」を説明しました。

 NANDフラッシュメモリへのアクセスではRead時とWrite時とErase時の各処理でエラー発生の可能性があり、エラー発生時は最終的にバッドブロック発生に至ることがあります。バッドブロックが発生すると、当該ブロックの代わりに代替領域からブロックが割り当てられ、発生したエラーにしたがいリカバリ処理が行われます。これがSSDにおける代替処理です。

 ただ説明中でも触れたとおり、実製品における代替処理や代替処理に繋がるバッドブロック化に関する条件や処理は、NANDフラッシュメモリメーカーやSSDメーカーにより大きく異なる可能性がありますのでご注意ください。

他社商標について

 記事中には登録商標マークを明記しておりませんが、記事に掲載されている会社名および製品名等は一般に各社の商標または登録商標です。

記事内容について

 この記事の内容は、発表当時の情報です。予告なく変更されることがありますので、あらかじめご了承ください。