バックナンバーはこちら。
https://www.simulationroom999.com/blog/In-vehicle-external-storage-backnumber/
はじめに
SDカードのCQ Modeの読み書き以外のコマンドたちの話。
CMD38(ERASE)の続きでDiscardについて。
登場人物
博識フクロウのフクさん
イラストACにて公開の「kino_k」さんのイラストを使用しています。
https://www.ac-illust.com/main/profile.php?id=iKciwKA9&area=1
エンジニア歴8年の太郎くん
イラストACにて公開の「しのみ」さんのイラストを使用しています。
https://www.ac-illust.com/main/profile.php?id=uCKphAW2&area=1
CQ Modeのステートマシンと読み書き以外のコマンド
今回はCMD38(ERASE)の続きでDiscardについての話だ。
CQ Modeのステートマシン図は以下。
そして、CQ Modeの読み書き以外のコマンドたち。
- CMD19(SEND_TUNING_BLOCK)
- CMD32(ERASE_WR_BLK_START)
- CMD33(ERASE_WR_BLK_END)
- CMD38(ERASE) ← これの第3回/全3回
- CMD43(Q_MANAGEMENT)
CMD38(ERASE)のDiscard
ERASE関連で良く分からんのがDiscardだな。
単語の意味としては「捨てる」「破棄」ってことなんだろうけど、
どういう効能があるんだ???
まぁDiscardについては結構特殊だね。
実際には消去してないかもしれないし。
消去してないかもしれない???
なんで?
消去用のコマンドでしょ?
Discardについては、
管理から破棄するだけで、具体的にどうするかは仕様上としては未規定なんだよね。
ますますわからん。
CMD38(ERASE)のDiscardの目的
Discardという言葉自体はSDカードというよりも
SSD(Solid State Drive)由来の言葉なんだよね。
ほう?
SSDもSDカードと同じく内部はNAND-FlashRomだ。
そして、NAND-FlashRomは均等に使わないと後天性不良ブロックが発生し易くなる。
よって、寿命を最大化させるためにはウェアレベリングをしてあげる必要がある。
んー?ウェアレベリング?どっかで聞いたな?
ここで一回説明したな。
むっちゃ前やん・・・。
で、ウェアレベリングがどう関係してくるの?
管理から破棄したといことは「使用していないBlockと明言した」ということになって、
ウェアレベリングのアルゴリズムが積極的に再利用を考慮できるってことになる。
おー!
というわけで、ホスト側は使ってないBlockに対しては
とっととDiscardしてあげるとストレージの寿命が延びやすくなる。
ってことになる。
なるほど。
確かに重要な仕様かもね。
CMD38(ERASE)のDiscardのSupport有無確認
ところで、Discardは必ず使用できる機能なの?
FULEみたいにサポート有無がありそうな気がするんだけど。
そうだね。
FULEと同じくSD_STATUSで確認できる。
Bits | Identifier | Value | Description |
---|---|---|---|
511:510 | DAT_BUS_WIDTH | ’00’=1(default),’10’=4bit | 現在のバス幅。ACMD6(SET_BUS_WIDTH)でも取得可能 |
509 | SECURED_MODE | ‘0’=Not in the mode,’1’=In Serured Mode | Secured modeか否か |
508:496 | reserved | – | – |
495:480 | SD_CARD_TYPE | ‘0000h’=SD,’0001h’=SD ROM,’0002h’=OPT | |
479:448 | SIZE_OF_PROTECTED_AREA | Size of protected area | 保護領域サイズ |
447:440 | SPEED_CLASS | Speed Class of the card | カードのSpeed Class |
439:432 | PERFORMANCE_MOVE | AUのコピー速度 | |
431:428 | AU_SIZE | Size of AU | Allocation Unit(NAND-FLASH消去単位) |
427:424 | reserved | – | – |
423:408 | ERASE_SIZE | Number of AUs to be erased at a time | ERASE_TIMEOUTで指定された時間で消去できるAU数 |
407:402 | ERASE_TIMEOUT | Timeout value for erasing areas specified by UNIT_OF_ERASE_AU | ERASE_SIZEで指定されたAU数を消去するのに必要な時間 |
401:400 | ERASE_OFFSET | Fixed offset value added to erase time. | AU消去時に必ずかかるオフセット時間 |
388:396 | UHS_SPEED_GRADE | Speed Grade for UHS mode. | UHS mode時のSpeed Grade |
395:392 | UHS_AU_SIZE | size of AU for UHS mode | UHS mode時のAUサイズ |
391:384 | VIDEO_SPEED_CLASS | Vedeo Speed Class value of the card | ビデオスピードクラス |
383:378 | reserved | – | – |
377:368 | VSC_AU_SIZE | AU size in MB for Video Speed Class | ビデオスピードクラスに於いてのAUサイズ |
367:346 | SUS_ADDR | Suspension Address | サスペンドアドレス |
345:340 | reserved | – | – |
339:336 | APP_PERF_CLASS | Application Performance Class Value of the card | アプリケーションパフォーマンスクラス |
335:328 | PERFORMANCE_ENHANCE | Support for Performance Enhancement functionalities | 応答向上機能 |
327:314 | reserved | – | – |
313 | DISCARD_SUPPORT | ‘1’:Supported | ERASE操作サポート |
312 | FULE_SUPPORT | ‘1’:Supported | ユーザエリア全域のERASE操作サポート |
あ、FULE_SUPPORTの隣にいたのか。
これを確認すればOKってことだねー。
というわけでErase関連の説明は終了だ。
まとめ
まとめだよ。
- CMD38(ERASE)のDiscardについて説明。
- DiscardはSSD由来の用語。
- Discard指定したBlockがどのような状態になるかは仕様上の規定はない。
- Discardしておくと、ストレージ側(SD/SSD)で効果的なウェアレベリングを実施してくれる可能性が上がり、結果として寿命が延びやすくなる。
バックナンバーはこちら。
コメント