SSDのはなし
ざっくり。基本的にSSDの特性はNANDの特性で、そこをファームのコントローラーがどのくらいサポートするかで製品の質が決まる。
寿命
NANDの寿命 - よく言われるのが書き換え回数
- SLCだと約10万回
- 書き換え回数 = イレース回数
- ブロック単位で行われる(Linuxなんかでいうディスクブロックとは別もの)
- これが多くなるとビットエラーが多くなったり
SSD readonlyの場合
- readにも寿命がある(何百万回という単位だけど)
- 何度もreadするとまわりのブロックに電荷の影響 -> ビット化けがおきる
- 産業用だと定期的にリフレッシュかける機能を入れているものもある
データリテンション
- NANDはデータを書き込んでも電源が入っていない状態のまま放置すると時間の経過とともにデータが化ける
- 書いた後電源入れずにどのくらいもつかはだいたいの製品は出してる -> 約10年(SLC)
NANDは大容量化で品質落ちている
- 大容量だと工夫しなくても平準化する
- 負荷が特定のブロックに集中しないように
NANDは小さいデータに弱い
- 穴あきになると効率よく使えない -> スペアブロックも穴あきになるから
- ファイルの追記は大丈夫(ファイルシステムやバッファキャッシュが緩衝してる?)
故障原因
- データは電源断で壊れる(SSDとして壊れるというのとは違う)
リード中壊れることはまずない(基本的にSSDというものはそれでは壊れない)
NANDが壊れるとは -> 論理と物理のアドレスマッピングができなくなる
- 民製品ではSSDとして認識できなくなってしまう
- 産業用だと壊れる前に戻ってはじめられるものもある
ECC訂正
- エラー訂正
- これで訂正できないものをアンクエラーとよぶ
- アンクエラーまででるとそのブロックはもう使えない
- スペアブロックがなくなれば書けなくなる
-
- 電源とか
- クロック系は露骨に相性がわかる(明らかに遅いとか、そもそも認識しないとか)
NANDの物理ブロックは観測できない
- 産業用だとbad blockを検出するツールを提供しているところはある
一番こわいのはファームウェアの故障
- OS更新時とか一気に書いてるときのの電源オフは避ける
FAQ?
どういうSSDがアプリケーションによいか?
- 想定負荷をかけるしかない
小さい単位でのランダムアクセスをどうやって観測するか?
- バスアナライザを使うのが確実