A principios del año pasado cedí en la tentación y terminé adquiriendo uno de los tan promocionados discos de estado sólido para el escritorio, aprovechando una oferta interesante de uno de los proveedores locales. Decirle “disco” a un dispositivo como éste es un anacronismo: no tiene nada de redondo, pero me permitiré mantener el término por cuestión de costumbre.
Para dar una definición en una línea, un Solid-State Drive o SSD es análogo a un “disco rígido” que almacena los datos persistentemente en memoria Flash, en vez de hacerlo sobre un dispositivo de rotación. La principal ventaja es una gran velocidad de acceso, además del hecho de no ser un dispositivo de base mecánica. No es la única diferencia contra un HDD, pero sí la más notable. Los SSD no son tecnología demasiado nueva, pero alrededor de 2008 / 2009 hubo un boom y desde allí comenzaron a verse más seguido en las casas de venta de hardware.
Entre las opciones del mercado, me quedé con un modelo Kingston Hyperx Savage SSD 240GB SATA 3 que hasta la fecha (año y medio de uso) se ha portado excelentemente bien (aquí las reviews). Y ahora que los tiempos no apremian tanto, puedo aprovechar para publicar el benchmark que hice en su momento, continuando con la serie de benchmarks de discos que venía realizando años atrás (ver parte I y parte II).
Antes de realizar los diagnósticos, debo mencionar que si van a hacer un análisis de atributos SMART en discos SSD de Kingston, conviene actualizar la base de unidades (drivedb.h) del paquete smartmontools mediante el comando update-smart-drivedb
, pues Kingston ha variado la semántica de los atributos SMART para ciertas unidades SSD (como se detallan en este documento). Versiones antiguas de smartmontools utilizan los nombres genéricos para ciertos atributos y esto puede dar lugar a confusiones, tales como creer que una SSD está por fallar cuando no es así.
Siguen las especificaciones y más abajo los resultados por si a alguno le interesa. He remarcado los datos más relevantes.
Kingston HyperX Savage SSD 240GB
Modelo: KINGSTON SHSS37A240G
Capacidad: 240 GB
Interfaz: SATA III
Caché: 8 MB
Tipo: Disco de estado sólido
Tamaño de sector: 512 físico, 512 lógico
# hdparm -I /dev/sdb
ATA device, with non-removable media
Model Number: KINGSTON SHSS37A240G
Serial Number: [REDACTED]
Firmware Revision: SAFM00.r
Transport: Serial, ATA8-AST, SATA 1.0a, SATA II Extensions, SATA Rev 2.5, SATA Rev 2.6, SATA Rev 3.0
Standards:
Supported: 9 8 7 6 5
Likely used: 9
Configuration:
Logical max current
cylinders 16383 16383
heads 16 16
sectors/track 63 63
CHS current addressable sectors: 16514064
LBA user addressable sectors: 268435455
LBA48 user addressable sectors: 468862128
Logical Sector size: 512 bytes
Physical Sector size: 512 bytes
Logical Sector-0 offset: 0 bytes
device size with M = 1024*1024: 228936 MBytes
device size with M = 1000*1000: 240057 MBytes (240 GB)
cache/buffer size = 10104 KBytes
Form Factor: 2.5 inch
Nominal Media Rotation Rate: Solid State Device
Capabilities:
LBA, IORDY(can be disabled)
Queue depth: 32
Standby timer values: spec'd by Standard, no device specific minimum
R/W multiple sector transfer: Max = 16 Current = 16
Advanced power management level: 254
DMA: mdma0 mdma1 mdma2 udma0 udma1 udma2 udma3 udma4 udma5 *udma6
Cycle time: min=120ns recommended=120ns
PIO: pio0 pio1 pio2 pio3 pio4
Cycle time: no flow control=120ns IORDY flow control=120ns
Commands/features:
Enabled Supported:
* SMART feature set
Security Mode feature set
* Power Management feature set
* Write cache
* Look-ahead
* Host Protected Area feature set
* WRITE_BUFFER command
* READ_BUFFER command
* NOP cmd
* DOWNLOAD_MICROCODE
* Advanced Power Management feature set
SET_MAX security extension
* 48-bit Address feature set
* Device Configuration Overlay feature set
* Mandatory FLUSH_CACHE
* FLUSH_CACHE_EXT
* SMART error logging
* SMART self-test
* General Purpose Logging feature set
* WRITE_{DMA|MULTIPLE}_FUA_EXT
* Disable Data Transfer After Error Detection
* {READ,WRITE}_DMA_EXT_GPL commands
* Segmented DOWNLOAD_MICROCODE
* Gen1 signaling speed (1.5Gb/s)
* Gen2 signaling speed (3.0Gb/s)
* Gen3 signaling speed (6.0Gb/s)
* Native Command Queueing (NCQ)
* Host-initiated interface power management
* Phy event counters
* unknown 76[13]
* unknown 76[14]
* unknown 76[15]
* DMA Setup Auto-Activate optimization
Device-initiated interface power management
* Software settings preservation
* DOWNLOAD MICROCODE DMA command
* SET MAX SETPASSWORD/UNLOCK DMA commands
* WRITE BUFFER DMA command
* READ BUFFER DMA command
* DEVICE CONFIGURATION SET/IDENTIFY DMA commands
* Data Set Management TRIM supported (limit 8 blocks)
* Deterministic read ZEROs after TRIM
Security:
Master password revision code = 65534
supported
not enabled
not locked
frozen
not expired: security count
supported: enhanced erase
2min for SECURITY ERASE UNIT. 2min for ENHANCED SECURITY ERASE UNIT.
Checksum: correct
# smartctl -x /dev/sdb
smartctl 6.4 2014-10-07 r4002 [x86_64-linux-4.6.0-0.bpo.1-amd64] (local build)
Copyright (C) 2002-14, Bruce Allen, Christian Franke, www.smartmontools.org
=== START OF INFORMATION SECTION ===
Model Family: Phison Driven SSDs
Device Model: KINGSTON SHSS37A240G
Serial Number: [REDACTED]
Firmware Version: SAFM00.r
User Capacity: 240.057.409.536 bytes [240 GB]
Sector Size: 512 bytes logical/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 (minor revision not indicated)
SATA Version is: SATA 3.1, 6.0 Gb/s (current: 6.0 Gb/s)
Local Time is: Wed Jul 6 22:13:10 2016 ART
SMART support is: Available - device has SMART capability.
SMART support is: Enabled
=== START OF READ SMART DATA SECTION ===
SMART overall-health self-assessment test result: PASSED
See vendor-specific Attribute list for marginal Attributes.
General SMART Values:
Offline data collection status: (0x00) Offline data collection activity
was never started.
Auto Offline Data Collection: Disabled.
Self-test execution status: ( 0) The previous self-test routine completed
without error or no self-test has ever
been run.
Total time to complete Offline
data collection: ( 30) seconds.
Offline data collection
capabilities: (0x5b) SMART execute Offline immediate.
Auto Offline data collection on/off support.
Suspend Offline collection upon new
command.
Offline surface scan supported.
Self-test supported.
No Conveyance Self-test supported.
Selective Self-test supported.
SMART capabilities: (0x0003) Saves SMART data before entering
power-saving mode.
Supports SMART auto save timer.
Error logging capability: (0x01) Error logging supported.
General Purpose Logging supported.
Short self-test routine
recommended polling time: ( 1) minutes.
Extended self-test routine
recommended polling time: ( 2) minutes.
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 0x000b 100 100 050 Pre-fail Always - 0
2 Not_In_Use 0x0005 100 100 050 Pre-fail Offline - 0
3 Not_In_Use 0x0007 100 100 050 Pre-fail Always - 0
5 Retired_Block_Count 0x0013 100 100 050 Pre-fail Always - 0
7 Not_In_Use 0x000b 100 100 050 Pre-fail Always - 0
8 Not_In_Use 0x0005 100 100 050 Pre-fail Offline - 0
9 Power_On_Hours 0x0012 100 100 000 Old_age Always - 2488
12 Power_Cycle_Count 0x0012 100 100 000 Old_age Always - 30
168 SATA_Phy_Error_Count 0x0012 100 100 000 Old_age Always - 0
170 Bad_Blk_Ct_Erl/Lat 0x0003 100 100 010 Pre-fail Always - 0/556
173 MaxAvgErase_Ct 0x0012 100 100 000 Old_age Always - 40 (Average 3)
175 Not_In_Use 0x0013 100 100 050 Pre-fail Always - 0
183 Unknown_Attribute 0x0012 100 100 100 Old_age Always FAILING_NOW 2621443
187 Reported_Uncorrect 0x0012 100 100 000 Old_age Always - 0
192 Unsafe_Shutdown_Count 0x0012 100 100 000 Old_age Always - 19
194 Temperature_Celsius 0x0023 076 060 030 Pre-fail Always - 24 (Min/Max 19/40)
196 Not_In_Use 0x0002 100 100 010 Old_age Always - 0
197 Not_In_Use 0x0032 100 100 000 Old_age Always - 0
199 CRC_Error_Count 0x000b 100 100 050 Pre-fail Always - 0
218 CRC_Error_Count 0x000b 100 100 050 Pre-fail Always - 0
231 SSD_Life_Left 0x0013 100 100 000 Pre-fail Always - 100
233 Flash_Writes_GiB 0x000b 100 100 000 Pre-fail Always - 570
240 Not_In_Use 0x0013 100 100 000 Pre-fail Always - 0
241 Lifetime_Writes_GiB 0x0012 100 100 000 Old_age Always - 538
242 Lifetime_Reads_GiB 0x0012 100 100 000 Old_age Always - 186
244 Average_Erase_Count 0x0002 100 100 000 Old_age Always - 3
245 Max_Erase_Count 0x0002 100 100 000 Old_age Always - 40
246 Total_Erase_Count 0x0012 100 100 000 Old_age Always - 239616
SMART Error Log Version: 1
No Errors Logged
SMART Self-test log structure revision number 1
Num Test_Description Status Remaining LifeTime(hours) LBA_of_first_error
# 1 Extended offline Completed without error 00% 2481 -
# 2 Extended offline Completed without error 00% 529 -
SMART Selective self-test log data structure revision number 1
SPAN MIN_LBA MAX_LBA CURRENT_TEST_STATUS
1 0 0 Not_testing
2 0 0 Not_testing
3 0 0 Not_testing
4 0 0 Not_testing
5 0 0 Not_testing
Selective self-test flags (0x0):
After scanning selected spans, do NOT read-scan remainder of disk.
If Selective self-test is pending on power-up, resume after 0 minute delay.
El atributo 183, indicado como FAILING NOW no ha de ser estimado pues según el documento de Kingston no corresponde a un atributo relevante.
# hdparm -tT /dev/sdb
/dev/sdb:
Timing cached reads: 25580 MB in 2.00 seconds = 12801.73 MB/sec
Timing buffered disk reads: 1580 MB in 3.00 seconds = 526.61 MB/sec
$ dd if=/dev/zero of=archivo.img count=1K bs=1M conv=fdatasync
1024+0 registros leídos
1024+0 registros escritos
1073741824 bytes (1,1 GB) copiados, 2,35045 s, 457 MB/s
Las pruebas de lectura con hdparm y con dd. Cuanto más velocidad indiquen, mejor, por supuesto.
palimpsest – Prueba de rendimiento de solo lectura (clic para agrandar)
Este gráfico representa la velocidad de lectura y el tiempo de acceso en distintas partes del disco. La línea azul representa la velocidad de lectura (asociada a la escala izquierda), mientras que los puntos verdes representan los tiempos de acceso en distintas ubicaciones del disco (asociada a la escala derecha).
Como puede verse, al ser un disco SSD (no rotativo), la velocidad de lectura es casi constante en todo el espacio, y se aprecia la diferencia notable entre los discos tradicionales. Los tiempos de acceso de la SSD rondan entre 0.1 y 0.2 ms (SSD) contra 20.1 ms (HDD), velocidad media de lectura de 554 MB/s contra 118 MB/s de un disco rígido tradicional.
Aquí dejo una comparativa de velocidad entre un disco rotativo y la SSD (clic para agrandar). Presten especial atención a las unidades.
Gráficos originales: parte I, parte II y parte III.
$ bonnie++
Version 1.97 ------Sequential Output------ --Sequential Input- --Random-
Concurrency 1 -Per Chr- --Block-- -Rewrite- -Per Chr- --Block-- --Seeks--
Machine Size K/sec %CP K/sec %CP K/sec %CP K/sec %CP K/sec %CP /sec %CP
hc-maurom 15864M 1514 99 521685 34 259973 24 +++++ +++ 645581 28 +++++ +++
Latency 10308us 246ms 296ms 2681us 3144us 2510us
Version 1.97 ------Sequential Create------ --------Random Create--------
hc-maurom -Create-- --Read--- -Delete-- -Create-- --Read--- -Delete--
files /sec %CP /sec %CP /sec %CP /sec %CP /sec %CP /sec %CP
16 +++++ +++ +++++ +++ +++++ +++ +++++ +++ +++++ +++ +++++ +++
Latency 50us 407us 1048us 667us 5us 442us
Los resultados de bonnie++ son bastante completos. Además de hacer mediciones de entrada/salida sobre el disco, mide también operaciones sobre el sistema de archivos (que por ahora no reviso). Lo relevante son las tasas de escritura y lectura en bloques, la cantidad de búsquedas por segundo (más es mejor) y la latencia de las mismas (menos es mejor). Al comparar contra otras mediciones, recuerden que las unidades en este último reporte son ms (milisegundos) y µs (microsegundos)!
Todas las pruebas fueron realizadas sobre una partición ext4.