サーバ用途でコンシューマ SSD へ調子に乗って書き込みすぎると壊れるという話

Crucial M500 の write endurance が 75TB しか無いというのが話題になっていて、同じく 75TB である m4 をわざと虐待していたホストはどうなったのか気になって調べて見たところ、面白い結果が観測されたという話。

石橋を叩いて壊し障害時の挙動を見るべく「自社全サービスのアクセスログを受け止める syslog サーバ」という、どう見ても書き込み中心で SSD にやさしくないホストをあえて動かしていた。具体的には下記のようなノリのホストである。 iostat の一行目なので uptime 数百日における平均値であることに注意。

[root@touge ~]# iostat -k -x -d sda | sed -n '3,4p'
Device:         rrqm/s   wrqm/s   r/s   w/s    rkB/s    wkB/s avgrq-sz avgqu-sz   await  svctm  %util
sda              27.36   414.31 47.72 82.46  2902.21  3431.04    97.30     0.39    2.96   0.62   8.04
[root@touge ~]# 

平均で 3431KB/s 出ている。上記は HV 上での値なので、 VM の block device layer における write merge 前では write 900IOPS ぐらい。
SMART Attribute を確認して見たところ、 14ヵ月でだいぶ磨り減ったことが観測された。*1 202 Perc_Rated_Life_Used は保証期間に関する値で、書き込みまくって VALUE が 0 になるとメーカ保証の範囲外となる。 Perc は Percentage の略で、 RAW VALUE は「何パーセント使ったか」であろう。

[root@touge smartmontools-6.1]# ./smartctl -i /dev/sda | egrep '(Model|Firm|Capa)'
Model Family:     Crucial/Micron RealSSD m4/C400
Device Model:     M4-CT512M4SSD2
Firmware Version: 0309
User Capacity:    512,110,190,592 bytes [512 GB]
[root@touge smartmontools-6.1]# ./smartctl -A /dev/sda | egrep '^(ID|  5|  9|173|195|202)'
ID# ATTRIBUTE_NAME          FLAG     VALUE WORST THRESH TYPE      UPDATED  WHEN_FAILED RAW_VALUE
  5 Reallocated_Sector_Ct   0x0033   100   100   010    Pre-fail  Always       -       0
  9 Power_On_Hours          0x0032   100   100   001    Old_age   Always       -       13748
173 Wear_Leveling_Count     0x0033   033   033   010    Pre-fail  Always       -       2018
195 Hardware_ECC_Recovered  0x003a   100   100   001    Old_age   Always       -       106
202 Perc_Rated_Life_Used    0x0018   034   034   001    Old_age   Offline      -       66
[root@touge smartmontools-6.1]#

m4 の保証値である 75 TB を 3431KB/s で焼きつづければ単純計算で 271日なので、そら当たり前だろうという話ではあり、設計段階から分かっててわざとやった結果である。むしろ 3.4MB/s で 426日ほど*2焼きつづけたのにまだ 1/3 残ってることが驚きである。 2.35倍ぐらい持っている。
173 Wear_Leveling_Count の RAW VALUE も興味深い。 25nm 世代 NAND の書き換え回数が 3000回なので、これがページの平均書き換え回数だと色々しっくりくる。
14ヵ月で 1/3 まで減っているので、単純計算すると上記の使い方でこいつは 2年弱しか持たない。実環境の最悪値かつ保証が切れるだけだが「容量が手狭になるまで持てばいい!」で済ますには微妙なラインである。

結論

最近の*3コンシューマ向け SSD は書き込みまくる用途だと壊れうる。
常日頃から「SSD は壊れない」とか言っていますが、これは「お前が言ってる書き込み量はバーストの値*4でライフサイクル平均でそんな書いてる訳じゃないだろ」ないしは「DB 用途でヘビーに使っていても実は書き込みは*5そんなに多くない」という側面が強く*6、裏を返せばライフサイクル平均で書き込み量が重くのしかかる用途だと寿命を気にする必要がある。
気にする必要がある、なので、たとえば「同じぐらいの平均書き込み量で 10台ストライプするから 4000日=11年ぐらい保証の範囲で使えるので大丈夫だろう」なり、「書き込み 3倍あって同じく単体で使う予定だから 4ヵ月でいつ壊れてもおかしくない」という話ではある。
コンシューマ向け SSD も登場から年月が経ち、各ベンダーとも読みが正確になってきたのかマージンが削られる傾向にある。*7エンタープライズ向け SSD を選択肢に入れるなど、きちんと書き込み量のキャパシティプランニングを行う必要がある時期に達しつつあるのではないだろうか。

備考

以下は、生の smartctl 出力と備考。

  • TRIM を使っていないので消耗が激しくなっている可能性がある
  • VM 側のアライメントは合わせてある(はず)
  • 容量の 80% ぐらいをファイルで埋めている
  • これは極端な例なので他の多数の m4 は 8割 9割残っている
  • 202 Perc_Rated_Life_Used の RAW VALUE は 100% を越えて動く模様
  • この手の値をグラフにしようってのいい加減手をつけろ >self
  • サーバにおいて「ピーク MB/s」みたいな微分やピークには敏感だが「積算 MB」のような単位は未経験で勘が鈍いのではないか
    • 積算で効くのは稼働時間ぐらいしか思いつかないが時間の流れる速さは大体一定である
[root@touge smartmontools-6.1]# ./smartctl -iA /dev/sda
smartctl 6.1 2013-03-16 r3800 [x86_64-linux-2.6.18-238.19.1.el5xen] (local build)
Copyright (C) 2002-13, Bruce Allen, Christian Franke, www.smartmontools.org

=== START OF INFORMATION SECTION ===
Model Family:     Crucial/Micron RealSSD m4/C400
Device Model:     M4-CT512M4SSD2
Serial Number:    00000000111403056xxx
LU WWN Device Id: 5 00a075 103056783
Firmware Version: 0309
User Capacity:    512,110,190,592 bytes [512 GB]
Sector Size:      512 bytes logical/physical
Rotation Rate:    Solid State Device
Device is:        In smartctl database [for details use: -P show]
ATA Version is:   ACS-2, ATA8-ACS T13/1699-D revision 6
SATA Version is:  SATA 3.0, 6.0 Gb/s (current: 3.0 Gb/s)
Local Time is:    Tue Apr 16 19:54:36 2013 JST
SMART support is: Available - device has SMART capability.
SMART support is: Enabled

=== START OF READ SMART DATA SECTION ===
SMART Attributes Data Structure revision number: 16
Vendor Specific SMART Attributes with Thresholds:
ID# ATTRIBUTE_NAME          FLAG     VALUE WORST THRESH TYPE      UPDATED  WHEN_FAILED RAW_VALUE
  1 Raw_Read_Error_Rate     0x002f   100   100   050    Pre-fail  Always       -       0
  5 Reallocated_Sector_Ct   0x0033   100   100   010    Pre-fail  Always       -       0
  9 Power_On_Hours          0x0032   100   100   001    Old_age   Always       -       13747
 12 Power_Cycle_Count       0x0032   100   100   001    Old_age   Always       -       7
170 Grown_Failing_Block_Ct  0x0033   100   100   010    Pre-fail  Always       -       0
171 Program_Fail_Count      0x0032   100   100   001    Old_age   Always       -       0
172 Erase_Fail_Count        0x0032   100   100   001    Old_age   Always       -       0
173 Wear_Leveling_Count     0x0033   033   033   010    Pre-fail  Always       -       2018
174 Unexpect_Power_Loss_Ct  0x0032   100   100   001    Old_age   Always       -       1
181 Non4k_Aligned_Access    0x0022   100   100   001    Old_age   Always       -       65535 44819 28690
183 SATA_Iface_Downshift    0x0032   100   100   001    Old_age   Always       -       0
184 End-to-End_Error        0x0033   100   100   050    Pre-fail  Always       -       0
187 Reported_Uncorrect      0x0032   100   100   001    Old_age   Always       -       0
188 Command_Timeout         0x0032   100   100   001    Old_age   Always       -       0
189 Factory_Bad_Block_Ct    0x000e   100   100   001    Old_age   Always       -       323
194 Temperature_Celsius     0x0022   100   100   000    Old_age   Always       -       0
195 Hardware_ECC_Recovered  0x003a   100   100   001    Old_age   Always       -       106
196 Reallocated_Event_Count 0x0032   100   100   001    Old_age   Always       -       0
197 Current_Pending_Sector  0x0032   100   100   001    Old_age   Always       -       0
198 Offline_Uncorrectable   0x0030   100   100   001    Old_age   Offline      -       0
199 UDMA_CRC_Error_Count    0x0032   100   100   001    Old_age   Always       -       0
202 Perc_Rated_Life_Used    0x0018   034   034   001    Old_age   Offline      -       66
206 Write_Error_Rate        0x000e   100   100   001    Old_age   Always       -       0

[root@touge smartmontools-6.1]#

m4 の話ばっかりしてるけど、 Intel, Samsung も同等以上にバンバン使っているので、そいつらも取り上げていきたい。

*1:SMART Database が最新じゃないと unknown ばかりで読みづらいので最新版の smartmontools を使っている。

*2:Power On Hours と合わないが電源入れてから直ぐに使ってる訳ではない

*3:具体的には 25nm 世代以降のものを指している

*4:サーバ捨てるまでの4年間を考えれば日単位もバーストである

*5:Web アプリケーションは九割方参照である則

*6:メーカが安全側へ盛大に倒してるのでマージンを美味しくしゃぶりましょうという意図ももちろんある

*7:d:id:halfrack:20130417:1366197019