Crucial MX300 1050GB検証
概要
コンシューマ向けのSSDとして容量とスペック、価格のバランスの良いCrucil MX300 1050GB(CT1050MX300SSD1)の検証です。
検証目的
過去M500の頃から乗り継ぎで利用していましたがMX200からの変更としてNANDがMLCからTLCになりました。
速度面での変化や、一部で噂されていた大きいファイルの取り扱いが苦手などの実際のところを調査します。
またfioを用いて大量のwriteを実行し書き込み寿命の減り方を計測する
まとめ
長いので先にまとめを。詳細は続きを読んでください
- ディスクのIO性能上限の書き込みを続けると100日程度で寿命となる
- ディスクキャッシュに乗る範囲であれば十二分に高速
- trimタイミングなどは検証では追い切れず予想の範囲にとどまる
- 利用環境での想定IOによってはSSD選定時の良い選択肢となる
写真
外箱
中身と基盤表
基盤裏
ラベル情報
物理的なポイント
NAND実装が8枚なのではじめは何も考えず128GiB * 8枚 = 1024GiBで1024GiB = 1099GBで ≈ 1050GBかと思ったがNANDが6枚+2枚の二種混合なので不明
全体的に効率化 & 低コスト化が進んでおり遂にSSD本体はスクリューレス
爪で固定されているだけなので精密用途のマイナスドライバーで浮かせれば開腹できます
筐体はアルミで、コントローラのチップセットが熱伝導用のグリスで筐体に触れるようになっており、ケースがそのままヒートシンクの役割を果たしています
写真2枚目のケースに付いてる正方形の灰色の四角い物体が熱伝導用シートです
基盤の固定もケースの突起に引っかけるのみで内部的にもネジの使用は無し
NANDの表面記載の型番で検索したところこちらの情報が出てきました
当ベンチマークにおいてとても参考になりました。感謝。
SMART情報
$ sudo /usr/sbin/smartctl -iA /dev/sda smartctl 6.2 2013-07-26 r3841 [x86_64-linux-3.10.0-327.el7.x86_64] (local build) Copyright (C) 2002-13, Bruce Allen, Christian Franke, www.smartmontools.org === START OF INFORMATION SECTION === Device Model: Crucial_CT1050MX300SSD1 Serial Number: [ ] LU WWN Device Id: 5 00a075 113462c92 Firmware Version: M0CR021 User Capacity: 1,050,214,588,416 bytes [1.05 TB] Sector Size: 512 bytes logical/physical Rotation Rate: Solid State Device Device is: Not in smartctl database [for details use: -P showall] ATA Version is: ACS-3 (unknown minor revision code: 0x006d) SATA Version is: SATA >3.1, 6.0 Gb/s (current: 6.0 Gb/s) Local Time is: Thu Sep 29 10:43:26 2016 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 000 Pre-fail Always - 0 5 Reallocated_Sector_Ct 0x0032 100 100 010 Old_age Always - 0 9 Power_On_Hours 0x0032 100 100 000 Old_age Always - 19 12 Power_Cycle_Count 0x0032 100 100 000 Old_age Always - 1 171 Unknown_Attribute 0x0032 100 100 000 Old_age Always - 0 172 Unknown_Attribute 0x0032 100 100 000 Old_age Always - 0 173 Unknown_Attribute 0x0032 100 100 000 Old_age Always - 1 174 Unknown_Attribute 0x0032 100 100 000 Old_age Always - 0 183 Runtime_Bad_Block 0x0032 100 100 000 Old_age Always - 0 184 End-to-End_Error 0x0032 100 100 000 Old_age Always - 0 187 Reported_Uncorrect 0x0032 100 100 000 Old_age Always - 0 194 Temperature_Celsius 0x0022 070 067 000 Old_age Always - 30 (Min/Max 27/33) 196 Reallocated_Event_Count 0x0032 100 100 000 Old_age Always - 0 197 Current_Pending_Sector 0x0032 100 100 000 Old_age Always - 0 198 Offline_Uncorrectable 0x0030 100 100 000 Old_age Offline - 0 199 UDMA_CRC_Error_Count 0x0032 100 100 000 Old_age Always - 0 202 Unknown_SSD_Attribute 0x0030 100 100 001 Old_age Offline - 0 206 Unknown_SSD_Attribute 0x000e 100 100 000 Old_age Always - 0 246 Unknown_Attribute 0x0032 100 100 000 Old_age Always - 3941471 247 Unknown_Attribute 0x0032 100 100 000 Old_age Always - 126377 248 Unknown_Attribute 0x0032 100 100 000 Old_age Always - 226832 180 Unused_Rsvd_Blk_Cnt_Tot 0x0033 000 000 000 Pre-fail Always - 4377 210 Unknown_Attribute 0x0032 100 100 000 Old_age Always - 0
hdparm
$ sudo hdparm -tT /dev/sda /dev/sda: Timing cached reads: 33962 MB in 2.00 seconds = 17010.54 MB/sec Timing buffered disk reads: 1440 MB in 3.00 seconds = 479.83 MB/sec
書き込みによる消耗計測
`/var/tmp/fio/07_fio_mx300` という設定ファイルを作成
[global] ioengine=libaio numjobs=16 iodepth=6 group_reporting direct=1 bs=4k size=16g overwrite=1 loops=100 [RandWrite] rw=randwrite
実行用のシェルスクリプトを設置しループで実行する
#!/bin/sh testnumber=0 while : do echo $testnumber cd /var/tmp/fio/ mkdir -p /var/tmp/fio/${testnumber}/ cd /var/tmp/fio/${testnumber}/ /usr/bin/fio /var/tmp/fio/07_fio_mx300 | tee -a /var/tmp/fio/LOG.${testnumber} cd /var/tmp/fio/ rm -rf /var/tmp/fio/${testnumber}/ testnumber=`expr $testnumber + 1` sleep 1 done
72時間後のSMART状況
smartctl 6.2 2013-07-26 r3841 [x86_64-linux-3.10.0-327.el7.x86_64] (local build) Copyright (C) 2002-13, Bruce Allen, Christian Franke, www.smartmontools.org === 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 000 Pre-fail Always - 0 5 Reallocated_Sector_Ct 0x0032 100 100 010 Old_age Always - 0 9 Power_On_Hours 0x0032 100 100 000 Old_age Always - 116 12 Power_Cycle_Count 0x0032 100 100 000 Old_age Always - 1 171 Unknown_Attribute 0x0032 100 100 000 Old_age Always - 0 172 Unknown_Attribute 0x0032 100 100 000 Old_age Always - 0 173 Unknown_Attribute 0x0032 097 097 000 Old_age Always - 49 174 Unknown_Attribute 0x0032 100 100 000 Old_age Always - 0 183 Runtime_Bad_Block 0x0032 100 100 000 Old_age Always - 0 184 End-to-End_Error 0x0032 100 100 000 Old_age Always - 0 187 Reported_Uncorrect 0x0032 100 100 000 Old_age Always - 0 194 Temperature_Celsius 0x0022 053 052 000 Old_age Always - 47 (Min/Max 27/48) 196 Reallocated_Event_Count 0x0032 100 100 000 Old_age Always - 0 197 Current_Pending_Sector 0x0032 100 100 000 Old_age Always - 0 198 Offline_Uncorrectable 0x0030 100 100 000 Old_age Offline - 0 199 UDMA_CRC_Error_Count 0x0032 100 100 000 Old_age Always - 0 202 Unknown_SSD_Attribute 0x0030 097 097 001 Old_age Offline - 3 206 Unknown_SSD_Attribute 0x000e 100 100 000 Old_age Always - 0 246 Unknown_Attribute 0x0032 100 100 000 Old_age Always - 32351612002 247 Unknown_Attribute 0x0032 100 100 000 Old_age Always - 1010996703 248 Unknown_Attribute 0x0032 100 100 000 Old_age Always - 2539844662 180 Unused_Rsvd_Blk_Cnt_Tot 0x0033 000 000 000 Pre-fail Always - 4377 210 Unknown_Attribute 0x0032 100 100 000 Old_age Always - 0
Crucialのドキュメントを読む限り 202 が Percent lifetime remaining で寿命となる
上記のベンチマーク設定で休みなく実施した場合は3日で3%≒1日1%で100日程度しか持たないと予測される
初回ベンチマーク
前述の消耗計測後にベンチマーク計測をした
bandwidth | iops | |
---|---|---|
Seq-read | 330184KB/s | 82545 |
Seq-write | 120861KB/s | 30215 |
Rand-read | 81716KB/s | 20429 |
Rand-write | 37995KB/s | 9498 |
Crucialサイトによるカタログスペックはこちら
現状のステータスではカタログスペックに遠く及ばず
SSDのディスクキャッシュを有効にしたベンチマーク
TLC製品のアレコレを眺めると、多くの高速なTLC SSDについては
writeが弱いという特性を回避するためにキャッシュを有効活用している旨の記事を多く見る
前のコメントのテストはキャッシュをOFFにしてベンチマークしている
conf中の direct を1から0にしてキャッシュ込みでの性能を見てみる
$ grep direct= * 01_fio_Seq_Read:direct=0 02_fio_Seq_Write:direct=0 03_fio_Random_Read:direct=0 04_fio_Random_Write:direct=0
まだカタログスペックに劣るものの大きく改善
特にRand-WriteではSeqを超える値となった
bandwidth | iops | |
---|---|---|
Seq-read | 516026KB/s | 129006 |
Seq-write | 444327KB/s | 111081 |
Rand-read | 140969KB/s | 35242 |
Rand-write | 679034KB/s | 169758 |
キャッシュサイズ以上のファイルサイズでのベンチマーク計測
同時にキャッシュ搭載系のSSDの記事で多いのは
キャッシュサイズを上回るサイズのファイルを操作すると極端に速度が低下するという内容
そのため、10GBのファイルでベンチマークを実施する
またファイルサイズが多いとベンチマークに時間がかかるため、プロセス数を減らした
bandwidth | iops | |
---|---|---|
Seq-read | 389904KB/s | 97476 |
Seq-write | 192363KB/s | 48090 |
Rand-read | 35426KB/s | 8856 |
Rand-write | 156984KB/s | 39245 |
引き続きキャッシュは有効のままだが値としては無効状態に近いスコアになった
無効状態より良いのはキャッシュが効いていたタイミングで下駄を履けたからか
今回実際に実運する環境では複数本でのRAID0更生での運用を検討しているため、
書き込み先が分散され大きなIOは単発よりは発生しづらいとは思われるが要検証
小さいファイルでのキャッシュ挙動
20MB x 32プロセスで実施
キャッシュは公式では未公開ながら先に貼った記事るのであれば1GB
今回は20MB * 32で640MBと完全にキャッシュに乗り切る状態でのテストとなる
bandwidth | iops | |
---|---|---|
Seq-read | 517970KB/s | 129492 |
Seq-write | 3150.9MB/s | 806623 |
Rand-read | 286787KB/s | 71696 |
Rand-write | 2600.8MB/s | 665788 |
結果は一目瞭然でWrite系がかなり速い値となっている
Read系はほぼカタログスペックの値のため
キャッシュはほとんど書き込みに利用され、読み込みにはあまり使われないものと思われる
キャッシュの乗り方の調査
キャッシュの乗り方
「1GBのキャッシュ以上のファイルサイズだとどんな操作でも即性能低下」
だと困るので、2.5GBのファイルを一度作成してベンチ。その後 overwrite オプションを無効化して試す
$ perl -i -p -e 's/overwrite=1/overwrite=0/g' * $ perl -i -p -e 's/size=20m/size=2500m/g' * $ perl -i -p -e 's/numjobs=32/numjobs=2/g' *
1回目、ファイルの作成があるので全容量キャッシュに乗って速度は出ないと予想
bandwidth | iops | |
---|---|---|
Seq-read | 491396KB/s | 122849 |
Seq-write | 410012KB/s | 102503 |
Rand-read | 35695KB/s | 8923 |
Rand-write | 985587KB/s | 246396 |
結果、現時点でもキャッシュに全部乗った場合よりは劣るもののまだ高速なラインを維持できてる。
そして二回目、いつもはテストのたびにファイルを削除しているが今回は作成済みのものを再利用
bandwidth | iops | |
---|---|---|
Seq-read | 426506KB/s | 106626 |
Seq-write | 470164KB/s | 117540 |
Rand-read | 25690KB/s | 6422 |
Rand-write | 495975KB/s | 123993 |
結果は同じWriteでもRandは低下、Seqは改善。
Seqだと連続領域だから作成済みのファイルへの更新はキャッシュに乗り切って、Randだと領域をまたいだ時に1GBを超えたタイミングで低下とか?
スコア自体もキャッシュ絡みだとガッと変動するので読み切れず
ただ完全にキャッシュで収まっていた時よりは遅いため、部分更新などであっても1GBのキャッシュに乗りきらない場合は速度低下することがわかった
trimの実行タイミング
寿命を削るためのループも周回によって時間のかかり方がだいぶ違うことに気づいた
5周目(LOG.4)だけまだ途中だけれども。
$ ls -ltr LOG.* -rw-r--r-- 1 root root 2734 10月 4 09:48 LOG.0 -rw-r--r-- 1 root root 2826 10月 4 21:09 LOG.1 -rw-r--r-- 1 root root 2747 10月 5 01:04 LOG.2 -rw-r--r-- 1 root root 2749 10月 5 09:05 LOG.3 -rw-r--r-- 1 root root 117 10月 5 09:05 LOG.4
夜中はは速く朝は遅いように見える
他に何かやってるサーバではないので日中でも負荷は変わらないはず
$ ls -ltr LOG.* --time-style='+%s' | awk '{print $6}' 1475542092 1475582995 1475597046 1475625940
結構大きな時間差になったけれど、これが書き込み領域のtrim走ったタイミングによるものなのだろうか
SSDの容量が1050GBに対してテストファイルの総量が512GBなので、2回目のテスト中にtrimが走るのと、3回目のテスト中はtrim対象にならないというのなら2回目が遅くて3回目が早いのには一応筋が通ってる
5周目が終わって6周目用のファイルを作ってるタイミングでtrimの明示実施
timeを付けるのを忘れていたが約10分かかった
$ fstrim -v / /: 781.6 GiB (839196921856 bytes) trimmed
trim完走後に打ったdfの数値がこんな感じ。
データが乗ってない場所ほぼ全体にtrimがかかったとみて良さそう
$ df / ファイルシス 1K-ブロック 使用 使用可 使用% マウント位置 /dev/sda3 1021953492 370227400 651726092 37% /
先ほどのfioのスコア比較で4,5周目が近似なスコアだったのは、上書きするタイミングで上書きするファイルだけtrimされたからではという予想もできる
SMARTのID 173、ブロックの平均消去回数について
MicronのSMARTのA値は ID:173が Average block erase count
寿命を削るループ中、合わせてこの値を観測していた
cronで5分毎にSMARTを実行しuniqカウントをとる。 左の値 x 5分がカウントアップに要した時間
$ cat watch_ID173 | uniq -c 16 173 Unknown_Attribute 0x0032 096 096 000 Old_age Always - 68 15 173 Unknown_Attribute 0x0032 096 096 000 Old_age Always - 69 14 173 Unknown_Attribute 0x0032 096 096 000 Old_age Always - 70 15 173 Unknown_Attribute 0x0032 096 096 000 Old_age Always - 71 15 173 Unknown_Attribute 0x0032 096 096 000 Old_age Always - 72 14 173 Unknown_Attribute 0x0032 096 096 000 Old_age Always - 73 21 173 Unknown_Attribute 0x0032 096 096 000 Old_age Always - 74 19 173 Unknown_Attribute 0x0032 095 095 000 Old_age Always - 75 19 173 Unknown_Attribute 0x0032 095 095 000 Old_age Always - 76 19 173 Unknown_Attribute 0x0032 095 095 000 Old_age Always - 77 15 173 Unknown_Attribute 0x0032 095 095 000 Old_age Always - 78 19 173 Unknown_Attribute 0x0032 095 095 000 Old_age Always - 79 20 173 Unknown_Attribute 0x0032 095 095 000 Old_age Always - 80 19 173 Unknown_Attribute 0x0032 095 095 000 Old_age Always - 81 19 173 Unknown_Attribute 0x0032 095 095 000 Old_age Always - 82 16 173 Unknown_Attribute 0x0032 095 095 000 Old_age Always - 83 13 173 Unknown_Attribute 0x0032 095 095 000 Old_age Always - 84 15 173 Unknown_Attribute 0x0032 095 095 000 Old_age Always - 85 13 173 Unknown_Attribute 0x0032 095 095 000 Old_age Always - 86 16 173 Unknown_Attribute 0x0032 095 095 000 Old_age Always - 87 16 173 Unknown_Attribute 0x0032 095 095 000 Old_age Always - 88 14 173 Unknown_Attribute 0x0032 095 095 000 Old_age Always - 89 16 173 Unknown_Attribute 0x0032 094 094 000 Old_age Always - 90 20 173 Unknown_Attribute 0x0032 094 094 000 Old_age Always - 91 19 173 Unknown_Attribute 0x0032 094 094 000 Old_age Always - 92 18 173 Unknown_Attribute 0x0032 094 094 000 Old_age Always - 93 15 173 Unknown_Attribute 0x0032 094 094 000 Old_age Always - 94 17 173 Unknown_Attribute 0x0032 094 094 000 Old_age Always - 95 21 173 Unknown_Attribute 0x0032 094 094 000 Old_age Always - 96 19 173 Unknown_Attribute 0x0032 094 094 000 Old_age Always - 97 18 173 Unknown_Attribute 0x0032 094 094 000 Old_age Always - 98 19 173 Unknown_Attribute 0x0032 094 094 000 Old_age Always - 99 14 173 Unknown_Attribute 0x0032 094 094 000 Old_age Always - 100 20 173 Unknown_Attribute 0x0032 094 094 000 Old_age Always - 101 21 173 Unknown_Attribute 0x0032 094 094 000 Old_age Always - 102 18 173 Unknown_Attribute 0x0032 094 094 000 Old_age Always - 103 19 173 Unknown_Attribute 0x0032 094 094 000 Old_age Always - 104 16 173 Unknown_Attribute 0x0032 093 093 000 Old_age Always - 105 17 173 Unknown_Attribute 0x0032 093 093 000 Old_age Always - 106 21 173 Unknown_Attribute 0x0032 093 093 000 Old_age Always - 107 19 173 Unknown_Attribute 0x0032 093 093 000 Old_age Always - 108 19 173 Unknown_Attribute 0x0032 093 093 000 Old_age Always - 109 2 173 Unknown_Attribute 0x0032 093 093 000 Old_age Always - 110
急に極端に短くなったなどはなく、15(75分)~20(100分)の範囲でそれなりに安定している