Мониторинг SMART атрибутов SSD Intel DC S3500/S3700 Series

Mar 13, 2017 11:18 · 1185 words · 6 minute read monitoring ssd

Не стоит лишний раз упоминать о важности постоянного наблюдения за состоянием накопителей на серверах, будь то привычные все жесткие диски (HDD) или современные твердотельные накопители (SSD).

В данной статье будет описана методология расчета примерного времени жизни твердотельного накопителя от Intel на основе значений атрибутов, полученных с помощью консольной утилиты smartctl. Давайте разберемся!

Прежде всего, стоит пояснить, почему SSD именно от Intel:

  • личный опыт использования SSD-дисков — Intel пока ни разу не подводил, в отличие от Kingston или OSZ;
  • Intel предлагают именно серверные решения (DC — Data Center). Они существенно дороже решений конкурентов, но сохранность данных для меня важнее;
  • Intel хорошо составляет спецификации на свои продукты, например здесь подробно описаны все SMART-атрибуты (таких документов у конкурентов не встречал, хотя, возможно, плохо искал).

Итак, работать будем со следующим SSD-диском:

smartctl -i /dev/sdb
smartctl 6.4 2014-10-07 r4002 [x86_64-linux-3.16.0-4-amd64] (local build)
Copyright (C) 2002-14, Bruce Allen, Christian Franke, www.smartmontools.org

=== START OF INFORMATION SECTION ===
Model Family:     Intel 730 and DC S3500/S3700 Series SSDs
Device Model:     INTEL SSDSC2BA400G4
Serial Number:    BTHV605603R3400NGN
LU WWN Device Id: 5 5cd2e4 04c1befc0
Firmware Version: G2010140
User Capacity:    400,088,457,216 bytes [400 GB]
Sector Sizes:     512 bytes logical, 4096 bytes physical
Rotation Rate:    Solid State Device
Form Factor:      2.5 inches
Device is:        In smartctl database [for details use: -P show]
ATA Version is:   ACS-2 T13/2015-D revision 3
SATA Version is:  SATA 2.6, 6.0 Gb/s (current: 6.0 Gb/s)
Local Time is:    Wed Mar  8 10:02:29 2017 EET
SMART support is: Available - device has SMART capability.
SMART support is: Enabled

Получаем SMART-атрибуты диска:

smartctl -A /dev/sdb
smartctl 6.4 2014-10-07 r4002 [x86_64-linux-3.16.0-4-amd64] (local build)
Copyright (C) 2002-14, Bruce Allen, Christian Franke, www.smartmontools.org

=== 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   0x0032   100   100   000    Old_age   Always       -       0
  9 Power_On_Hours          0x0032   100   100   000    Old_age   Always       -       5981
 12 Power_Cycle_Count       0x0032   100   100   000    Old_age   Always       -       23
170 Available_Reservd_Space 0x0033   100   100   010    Pre-fail  Always       -       0
171 Program_Fail_Count      0x0032   100   100   000    Old_age   Always       -       0
172 Erase_Fail_Count        0x0032   100   100   000    Old_age   Always       -       0
174 Unsafe_Shutdown_Count   0x0032   100   100   000    Old_age   Always       -       16
175 Power_Loss_Cap_Test     0x0033   100   100   010    Pre-fail  Always       -       6830 (26 7216)
183 SATA_Downshift_Count    0x0032   100   100   000    Old_age   Always       -       0
184 End-to-End_Error        0x0033   100   100   090    Pre-fail  Always       -       0
187 Reported_Uncorrect      0x0032   100   100   000    Old_age   Always       -       0
190 Temperature_Case        0x0022   069   063   000    Old_age   Always       -       31 (Min/Max 20/37)
192 Unsafe_Shutdown_Count   0x0032   100   100   000    Old_age   Always       -       16
194 Temperature_Internal    0x0022   100   100   000    Old_age   Always       -       31
197 Current_Pending_Sector  0x0012   100   100   000    Old_age   Always       -       0
199 CRC_Error_Count         0x003e   100   100   000    Old_age   Always       -       0
225 Host_Writes_32MiB       0x0032   100   100   000    Old_age   Always       -       1938779
226 Workld_Media_Wear_Indic 0x0032   100   100   000    Old_age   Always       -       727
227 Workld_Host_Reads_Perc  0x0032   100   100   000    Old_age   Always       -       50
228 Workload_Minutes        0x0032   100   100   000    Old_age   Always       -       358724
232 Available_Reservd_Space 0x0033   100   100   010    Pre-fail  Always       -       0
233 Media_Wearout_Indicator 0x0032   100   100   000    Old_age   Always       -       0
234 Thermal_Throttle        0x0032   100   100   000    Old_age   Always       -       0/0
241 Host_Writes_32MiB       0x0032   100   100   000    Old_age   Always       -       1938779
242 Host_Reads_32MiB        0x0032   100   100   000    Old_age   Always       -       2022002
243 Unknown_Attribute       0x0032   100   100   000    Old_age   Always       -       2914870

Лично я считаю необходимым постоянное наблюдение (например, с помощью Zabbix) за следующими параметрами:

  • Reallocated_Sector_Ct — shows the number of retired blocks since leaving the factory (grown defect count);
  • Reported_Uncorrect — shows the count of errors that could not be recovered using Error Correction Code (ECC);
  • Temperature_Internal — shows the internal temperature of the SSD in degrees Celsius;
  • Current_Pending_Sector — shows the number of current unrecoverable read errors that will be re-allocated on next write;
  • Host_Writes_32MiB — shows the total number of sectors written by the host system. The raw value is increased by 1 for every 65,536 sectors (32MB) written by the host.

Резкое изменение одного или нескольких из этих параметров должно, как минимум, настораживать и призывать к углубленному анализу состояния твердотельного накопителя.

Для расчета примерного времени жизни SSD Intel DC S3500/S3700 Series будем работать со SMART-атрибутами E2h (226), E3h (227) и E4h (228). Остановимся наних чуть подробнее:

  • (226) Workld_Media_Wear_Indic — временный процент износа флеш памяти за определённое время и при определённой нагрузке. Выдаётся в raw-формате, результат необходимо разделить на 1024;
  • (227) Workld_Host_Reads_Perc — процентное соотношение операций чтения/записи при создаваемой нагрузке. К примеру, если показатель будет равен 60, то это значит, что операций чтения было 60%, операций записи — 40%;
  • (228) Workload_Minutes — счётчик времени (в минутах), используется для расчёта процента износа памяти в единицу времени.

Примечание. Параметр (227) Workld_Host_Reads_Perc не принимает непосредственное участие в расчетах времени жизни SSD-диска, но крайне полезен для понимания типа создаваемой нагрузки на накопитель.

В нашем случае их значения выглядят следующим образом:

...
226 Workld_Media_Wear_Indic 0x0032   100   100   000    Old_age   Always       -       727
227 Workld_Host_Reads_Perc  0x0032   100   100   000    Old_age   Always       -       50
228 Workload_Minutes        0x0032   100   100   000    Old_age   Always       -       358724
...

Можно провести расчеты на основании уже имеющихся данных (что мы и сделаем), но лучше все же сбросить значения этих SMART-атрибутов и провести замеры заново. Замеры следует проводить не менее 1 часа (а лучше сутки), создавая в этот период нагрузку на SSD-диск, например, операциями произвольного/последовательного чтения/записи с размерами блока от 8 до 16 KiB, и количеством потоков — от 10 до 300.

Сбросить значения SMART-атрибутов можно следующей командой:

smartctl -t vendor,0x40 /dev/sdb

Проведем расчеты на основании имеющихся у нас данных. Значение Workld_Host_Reads_Perc показывает нам, что за время работы твердотельного накопителя операций чтения было 50% (следовательно, записи тоже 50%).

Для получения процента износа SSD-диска за все время работы следует разделить значение SMART-атрибута Workld_Media_Wear_Indic на 1024:

727/1024=0.7099609375(%)

Далее можно рассчитать, каким будет процент износа твердотельного накопителя за один час работы:

0.70996(%)/358724(мин)*60(мин)=0.00011874(%)

Зная процент износа накопителя за один час, можно легко вычислить, когда износ станет 100% (диск станет неработоспособным):

100(%)*1(час)/0.00011874(%)=842176.18(часов)

Если учесть, что в году ~8760 часов, а нагрузка будет неизменной и равномерной 24/7 (что крайне маловероятно), то диск станет абсолютно неработоспособным через 842176.18/8760=96 лет!

Для упрощения вышеизложенных расчетов можно использовать следующий скрипт (назовем его smartctsreport.sh):

#!/bin/bash
smartctl -A /dev/sdb | awk -v prev=0 '/^22[5-8]/{\
if ($1==225) {
  value[1]=($10-prev)*65535*512/1000000000
} else if($1==226) {
  value[2]=$10/1024
} else if($1==227) {
  value[3]=$10
} else if($1==228) {
  value[4]=$10
  value[5]=$10/60/24
}
}END{
  printf("The workload took %s minutes (%s days) to complete with %s%% reads and %s%% writes. A total of %sGB of data was written to the device, which increased the media wear in the drive by %s%%. At this point in time, this workload is causing a wear rate of %s%% for every %s minutes, or %s%%/hour.\n",
                            value[4],   value[5],                 value[3],      100-value[3],           value[1],                                                                              value[2],                                                            value[2],      value[4],      value[2]/value[4]*60);
}'

Таким будет результат его выполнения:

./smartctsreport.sh
The workload took 358758 minutes (249.138 days) to complete with 50% reads and 50% writes. A total of 65058.7GB of data was written to the device, which increased the media wear in the drive by 0.709961%. At this point in time, this workload is causing a wear rate of 0.709961% for every 358758 minutes, or 0.000118736%/hour.
tweet Share