読者です 読者をやめる 読者になる 読者になる

5400rpm

人生シングルスレッド

Sumsung SSD 840 120GBを使い潰す(後編)

ベンチマーク

前編と中編

e6zout.hatenablog.jp

e6zout.hatenablog.jp

負荷内容の振り返り

前編の 消耗させる の項で描いた通り、 dd コマンドで1周約111GB
及びfioコマンドで1テスト辺り10GB、シーケンシャル、ランダムそれぞれでRead,Write、及び
シーケンシャルでのreadとwriteミックスIOの5テスト、計50GBで総計約160GBの書き込みが発生します

テスト周回数とIOPSの劣化

まずはグラフをご覧ください

f:id:uyT4vEne:20170322010639p:plain

横軸がテストの周回数です。周回数 * 160GBがテストのでの総書き込み数になります
右軸の青線がSMARTによる Wear Leveling Count
左軸の他四色の線がそれぞれのSeq/RandのRead/Writeのfioスコアになります
fioの設定については前編をご覧ください

見所は以下のポイントになります

  1. ベンチマークのスコアは基本的には安定している
  2. Wear Leveling Count はの減り方は書き込み量と反比例で安定しており急激に死ぬことはない
  3. Write系はWear Leveling Count 35, Read系は同カウント3で一気に劣化する
  4. 劣化の傾向は同一だがSeqに比べRandomのReadは劣化後の値が安定しなくなる

グラフを作成したデータは下記のスプレッドシートを参照してください

docs.google.com

まとめと評価

繰り返しになりますがSumsung SSD 840 120GB に対してのテストの結果
それもddでzero書き込みによる消耗が中心となる一般用途とは異なる消耗のため
全てのSSDで同じような傾向が出るわけではありません。
コントローラの特性やファームウェアでのセッティング、MLC/TLCの違い等々
ちょっとしたことで違う結果になると思われます。
あくまでこの結果はSSD消耗パターンの一事例として参考にしてもらえればと思います。

当初の想定では途中でWriteがもうちょっと大きく劣化すると予想していました。
結果は劣化幅は小さく25,000 IOPSを下回ることなくテストを終えました。
終盤Readが大幅に劣化したとはいえ、それでも最低限の速度は保っていたこともあり
個人的には通常利用では寿命の最後まで使い切れる優秀なSSDというイメージを持ちました。

寿命を使い潰した現在の状態からは使おうとは思いませんが、今お使いの方がおりましたら
是非とも残りカウント3%ぐらいまでは愛用してあげてください。


その他最新SSDでも同様のテストをやってみたいですが、給与明細を見て諦める日々が続いております
何かこのSSDを同じようにやってほしい等々のリクエストがあればコメントください。
おちんぎんで手が届きそうなら試してみます。きっと。たぶん。

Samsung SSD 840 120GBを使い潰す(中編)

日記

前編

e6zout.hatenablog.jp

現状と結果

延々と回して気付きましたが Wear_Leveling_Count1 が最小値となっている模様

[comicsong@comicsong ~]$ sudo smartctl -A /dev/sda | grep ^177
177 Wear_Leveling_Count     0x0013   001   001   000    Pre-fail  Always       -       1240

既に 2 から 1 になる書き込み量の倍以上を行っていますが 0 になる気配は無し
まだ書き込みはできているようですが一旦これでテストを回すのは終了とします

記録について

SMART、ddコマンドによるIO、fioによる結果をログファイルに書き出していたのでそこから開始時・終了時の比較を行います

SMART値の比較

開始前

=== START OF READ SMART DATA SECTION ===
SMART Attributes Data Structure revision number: 1
Vendor Specific SMART Attributes with Thresholds:
ID# ATTRIBUTE_NAME          FLAG     VALUE WORST THRESH TYPE      UPDATED  WHEN_FAILED RAW_VALUE
  9 Power_On_Hours          0x0032   096   096   000    Old_age   Always       -       18975
 12 Power_Cycle_Count       0x0032   099   099   000    Old_age   Always       -       36
177 Wear_Leveling_Count     0x0013   083   083   000    Pre-fail  Always       -       200
190 Airflow_Temperature_Cel 0x0032   054   048   000    Old_age   Always       -       46
235 POR_Recovery_Count      0x0012   099   099   000    Old_age   Always       -       17
241 Total_LBAs_Written      0x0032   099   099   000    Old_age   Always       -       44047993640

終了時

=== START OF READ SMART DATA SECTION ===
SMART Attributes Data Structure revision number: 1
Vendor Specific SMART Attributes with Thresholds:
ID# ATTRIBUTE_NAME          FLAG     VALUE WORST THRESH TYPE      UPDATED  WHEN_FAILED RAW_VALUE
  9 Power_On_Hours          0x0032   096   096   000    Old_age   Always       -       19372
 12 Power_Cycle_Count       0x0032   099   099   000    Old_age   Always       -       36
177 Wear_Leveling_Count     0x0013   001   001   000    Pre-fail  Always       -       1240
190 Airflow_Temperature_Cel 0x0032   051   042   000    Old_age   Always       -       49
235 POR_Recovery_Count      0x0012   099   099   000    Old_age   Always       -       17
241 Total_LBAs_Written      0x0032   099   099   000    Old_age   Always       -       317487645326

Wear_Leveling_Count 以外の値に大きな変化は無し。

開始時と終了時でのIO劣化

上からシーケンシャルのread,write/ランダムのread,write/シーケンシャルのIOミックス

開始時

[comicsong@comicsong ~]$ grep -A1 -E "noop_" SMART_LOG | grep iops  | head -n5
  read : io=22896MB, bw=390753KB/s, iops=97688, runt= 60001msec
  write: io=7870.7MB, bw=134323KB/s, iops=33580, runt= 60001msec
  read : io=19965MB, bw=340738KB/s, iops=85184, runt= 60001msec
  write: io=6270.5MB, bw=107013KB/s, iops=26753, runt= 60001msec
  read : io=1336.2MB, bw=22803KB/s, iops=5700, runt= 60003msec

終了時

[comicsong@comicsong ~]$ grep -A1 -E "noop_" SMART_LOG | grep iops  | tail -n5
  read : io=9134.7MB, bw=155874KB/s, iops=38968, runt= 60009msec
  write: io=7615.3MB, bw=129965KB/s, iops=32491, runt= 60001msec
  read : io=15733MB, bw=268504KB/s, iops=67126, runt= 60002msec
  write: io=6068.6MB, bw=103561KB/s, iops=25890, runt= 60005msec
  read : io=1305.4MB, bw=22276KB/s, iops=5568, runt= 60004msec

IOスケジューラはnoopでの比較
予想ではwrite系は劣化が大きくread系の劣化は大きくないと予想していました
実際は反して特にシーケンシャルのreadが劣化しwrite系はそこまで大きくありませんでした

Read劣化のポイント

ログを確認すると徐々に落ちているのではなく625周目を境に急激に落ちていることが分かりました

count: 623
  read : io=22869MB, bw=390292KB/s, iops=97573, runt= 60001msec
count: 624
  read : io=22908MB, bw=390953KB/s, iops=97738, runt= 60001msec
count: 625
  read : io=13124MB, bw=223959KB/s, iops=55989, runt= 60004msec
count: 626
  read : io=12345MB, bw=210672KB/s, iops=52668, runt= 60002msec
count: 627
  read : io=11170MB, bw=190624KB/s, iops=47655, runt= 60004msec
count: 628
  read : io=11141MB, bw=190115KB/s, iops=47528, runt= 60005msec

wearlevelingcountはこの前後は3 で減少無し
その他もreadの劣化は以外は大きな変動はありませんでした
詳細は次回のグラフに譲るとしてこのwearlevelingcount3がこのSSDの寿命という判断でよさそうです

簡易の整合テスト

ではまだ実際に利用できるのかの確認を
手持ちでサイズの大きい6.7GBのファイルをコピーし正常に書き込めるかを確認しました

[root@comicsong benchmark]# cp  /var/www/html/epgrec/video/hoge  /mnt/benchmark/
[root@comicsong benchmark]# md5sum /var/www/html/epgrec/video/hoge  /mnt/benchmark/hoge
37e025122a3755563279ca68dbb5e659  /var/www/html/epgrec/video/hoge
37e025122a3755563279ca68dbb5e659  /mnt/benchmark/hoge
[root@comicsong benchmark]# sha512sum /var/www/html/epgrec/video/hoge  /mnt/benchmark/hoge
5e7bae62f9b028be8e26aaa3fd337dc168a065417a1f684f212d261b4f6690984bd19d048b5c059238976c101e45945b876c72a2512f69ea254eb1aae824d5e5  /var/www/html/epgrec/video/hoge
5e7bae62f9b028be8e26aaa3fd337dc168a065417a1f684f212d261b4f6690984bd19d048b5c059238976c101e45945b876c72a2512f69ea254eb1aae824d5e5  /mnt/benchmark/hoge

意外にも問題なくコピー完了。不整合も無し
寿命切れのSSDを継続使用することは無いとは思いますが即全データ死亡ともならないようです

次回は後編として、ログ内容をスプレッドシートでグラフにしようかと思います

Samsung SSD 840 120GBを使い潰す(前編)

fio ベンチマーク

概要と目的

以前windowsマシンのシステムディスクとして利用していたSSDが余りました
他の用途は無いが捨て置くのも勿体ないので SSDの書き込み上限を迎えたときの挙動を検証します
前編ではまず準備としてSSDの寿命まで書き込みを行います

現在の状態

  • SMART
[comicsong@comicsong ~]$ sudo smartctl -iA /dev/sda
smartctl 6.2 2013-07-26 r3841 [x86_64-linux-3.10.0-514.6.2.el7.x86_64] (local build)
Copyright (C) 2002-13, Bruce Allen, Christian Franke, www.smartmontools.org

=== START OF INFORMATION SECTION ===
Model Family:     Samsung based SSDs
Device Model:     Samsung SSD 840 Series
Serial Number:    S14CNEAD312546J
LU WWN Device Id: 5 002538 5502533cd
Firmware Version: DXT07B0Q
User Capacity:    120,034,123,776 bytes [120 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 4c
SATA Version is:  SATA 3.1, 6.0 Gb/s (current: 6.0 Gb/s)
Local Time is:    Wed Mar  1 22:25:17 2017 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: 1
Vendor Specific SMART Attributes with Thresholds:
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   096   096   000    Old_age   Always       -       18927
 12 Power_Cycle_Count       0x0032   099   099   000    Old_age   Always       -       36
177 Wear_Leveling_Count     0x0013   094   094   000    Pre-fail  Always       -       64
179 Used_Rsvd_Blk_Cnt_Tot   0x0013   100   100   010    Pre-fail  Always       -       0
181 Program_Fail_Cnt_Total  0x0032   100   100   010    Old_age   Always       -       0
182 Erase_Fail_Count_Total  0x0032   100   100   010    Old_age   Always       -       0
183 Runtime_Bad_Block       0x0013   100   100   010    Pre-fail  Always       -       0
187 Uncorrectable_Error_Cnt 0x0032   100   100   000    Old_age   Always       -       0
190 Airflow_Temperature_Cel 0x0032   072   059   000    Old_age   Always       -       28
195 ECC_Error_Rate          0x001a   200   200   000    Old_age   Always       -       0
199 CRC_Error_Count         0x003e   100   100   000    Old_age   Always       -       0
235 POR_Recovery_Count      0x0012   099   099   000    Old_age   Always       -       17
241 Total_LBAs_Written      0x0032   099   099   000    Old_age   Always       -       8578427501
  • マウント状態
[comicsong@comicsong ~]$ mount | grep sda
/dev/sda1 on /mnt/benchmark type xfs (rw,relatime,attr2,discard,inode64,noquota)
[comicsong@comicsong ~]$ sudo parted /dev/sda -s unit s p
モデル: ATA Samsung SSD 840 (scsi)
ディスク /dev/sda: 234441648s
セクタサイズ (論理/物理): 512B/512B
パーティションテーブル: gpt
ディスクフラグ:

番号  開始   終了        サイズ      ファイルシステム  名前       フラグ
 1    2048s  234440703s  234438656s  xfs               benchmark

事前ベンチマーク

書き込み上限到達後のスコアと比較するため、現時点でのスコアを見ます
テストの設定は以前 M4-CT256M4SSD2 をテストした時と同一です
その時点でのスケジューラによる挙動差も見たいのでスケジューラ毎に確認

e6zout.hatenablog.jp

  Description  : [cfq_read]
  read : io=5274.2MB, bw=539696KB/s, iops=134923, runt= 10007msec
  Description  : [cfq_write]
  write: io=2545.7MB, bw=259042KB/s, iops=64760, runt= 10063msec
  Description  : [cfq_randread]
  read : io=1367.3MB, bw=138808KB/s, iops=34701, runt= 10086msec
  Description  : [cfq_randwrite]
  write: io=2046.4MB, bw=208856KB/s, iops=52213, runt= 10033msec
  Description  : [cfq_rw]
  read : io=1063.8MB, bw=108405KB/s, iops=27101, runt= 10048msec
noop deadline [cfq]
---------------
  Description  : [deadline_read]
  read : io=1937.9MB, bw=198074KB/s, iops=49518, runt= 10018msec
  Description  : [deadline_write]
  write: io=1833.6MB, bw=187324KB/s, iops=46831, runt= 10023msec
  Description  : [deadline_randread]
  read : io=1213.7MB, bw=123122KB/s, iops=30780, runt= 10089msec
  Description  : [deadline_randwrite]
  write: io=2253.2MB, bw=230099KB/s, iops=57524, runt= 10027msec
  Description  : [deadline_rw]
  read : io=903884KB, bw=90262KB/s, iops=22565, runt= 10014msec
noop [deadline] cfq
---------------
  Description  : [noop_read]
  read : io=2610.6MB, bw=267161KB/s, iops=66790, runt= 10006msec
  Description  : [noop_write]
  write: io=1762.8MB, bw=179907KB/s, iops=44976, runt= 10033msec
  Description  : [noop_randread]
  read : io=1187.8MB, bw=112432KB/s, iops=28107, runt= 10818msec
  Description  : [noop_randwrite]
  write: io=2324.2MB, bw=237164KB/s, iops=59290, runt= 10035msec
  Description  : [noop_rw]
  read : io=720968KB, bw=71824KB/s, iops=17955, runt= 10038msec
[noop] deadline cfq
---------------

M4に比べてランダムアクセスが速いですね

消耗させる

消耗は dd コマンドで行います
まずは利用可能なブロックサイズの確認。物理・論理共に512バイトなので512指定で df

[comicsong@comicsong benchmark]$ df --block-size=512 /dev/sda1
ファイルシス   512B-ブロック  使用    使用可 使用% マウント位置
/dev/sda1          234324184 65888 234258296    1% /mnt/benchmark

234258296 ブロック利用可能なようです。直接指定して while ループさせた dd コマンドを実施

[comicsong@comicsong benchmark]$ while (i=0);do sudo dd if=/dev/zero of=/mnt/benchmark/FILE bs=512 count=234258296 ;done

SMARTの書き込み数を確認すると、無事にモリモリと書き込まれているようなのでこのまま放置

[comicsong@comicsong /]$ sudo smartctl -A /dev/sda | grep ^241
241 Total_LBAs_Written      0x0032   099   099   000    Old_age   Always       -       8638597904
[comicsong@comicsong /]$ sudo smartctl -A /dev/sda | grep ^241
241 Total_LBAs_Written      0x0032   099   099   000    Old_age   Always       -       8639640384
[comicsong@comicsong /]$ sudo smartctl -A /dev/sda | grep ^241
241 Total_LBAs_Written      0x0032   099   099   000    Old_age   Always       -       8640746256

次回更新は書き込み上限達成後の予定です。それでは