I’ve been chatting with @garyorenstein on Twitter about his upgrade from the stock spinning rust HDD in his MacBook Pro, to an Intel 320 Series SSD. This is an upgrade that I’ve undertaken before.
I started thinking about endurance. Commercial grade MLC SSD products have a bad reputation for early wear-out. I wanted to see what I could do to determine how much life my SSD has in it, according to Intel.
Intel has their Intel SSD Toolbox, which is available for Windows only. This isn’t much help for those of us running Mac OS X.
I’ve used smartmontools, specifically the smartctl command line program, under Linux and Mac OS X in the past. It’s available for Mac as part of MacPorts. I updated my smartmontools package, and ran a quick view of the drive using “smartctl -a disk0”. The output includes a section with the SMART attributes, and I was hoping to see some SSD specific information. Here’s that section:
SMART Attributes Data Structure revision number: 5 Vendor Specific SMART Attributes with Thresholds: ID# ATTRIBUTE_NAME FLAG VALUE WORST THRESH TYPE UPDATED WHEN_FAILED RAW_VALUE 3 Spin_Up_Time 0x0020 100 100 000 Old_age Offline - 0 4 Start_Stop_Count 0x0030 100 100 000 Old_age Offline - 0 5 Reallocated_Sector_Ct 0x0032 100 100 000 Old_age Always - 12 9 Power_On_Hours 0x0032 100 100 000 Old_age Always - 585 12 Power_Cycle_Count 0x0032 100 100 000 Old_age Always - 1239 170 Unknown_Attribute 0x0033 100 100 010 Pre-fail Always - 0 171 Unknown_Attribute 0x0032 100 100 000 Old_age Always - 0 172 Unknown_Attribute 0x0032 100 100 000 Old_age Always - 0 183 Unknown_Attribute 0x0030 100 100 000 Old_age Offline - 0 184 Unknown_Attribute 0x0032 100 100 090 Old_age Always - 0 187 Reported_Uncorrect 0x0032 100 100 000 Old_age Always - 0 192 Power-Off_Retract_Count 0x0032 100 100 000 Old_age Always - 19 199 UDMA_CRC_Error_Count 0x0030 100 100 000 Old_age Offline - 0 225 Load_Cycle_Count 0x0032 100 100 000 Old_age Always - 76344 226 Load-in_Time 0x0032 100 100 000 Old_age Always - 21155 227 Torq-amp_Count 0x0032 100 100 000 Old_age Always - 14 228 Power-off_Retract_Count 0x0032 100 100 000 Old_age Always - 2147518782 232 Unknown_Attribute 0x0033 100 100 010 Pre-fail Always - 0 233 Unknown_Attribute 0x0032 100 100 000 Old_age Always - 0 241 Unknown_Attribute 0x0032 100 100 000 Old_age Always - 76344 242 Unknown_Attribute 0x0032 100 100 000 Old_age Always - 88070
Nothing really stood out, except all those “Unknown Attributes”.
A little research revealed that MacPorts has a very old outdated version of smartmontools, version 5.38, which dates back prior to the common use of SSDs that we see today.
Since MacPorts didn’t have the latest code, I downloaded the latest directly from Sourceforge. It configures, compiles and installs cleanly, but to /usr/local/bin which is NOT ealier in the path than the Macports version. Users should remove the old version, located in /opt/local/sbin.
Running the command now gave me updated attributes titles:
SMART Attributes Data Structure revision number: 5 Vendor Specific SMART Attributes with Thresholds: ID# ATTRIBUTE_NAME FLAG VALUE WORST THRESH TYPE UPDATED WHEN_FAILED RAW_VALUE 3 Spin_Up_Time 0x0020 100 100 000 Old_age Offline - 0 4 Start_Stop_Count 0x0030 100 100 000 Old_age Offline - 0 5 Reallocated_Sector_Ct 0x0032 100 100 000 Old_age Always - 12 9 Power_On_Hours 0x0032 100 100 000 Old_age Always - 587 12 Power_Cycle_Count 0x0032 100 100 000 Old_age Always - 1242 170 Reserve_Block_Count 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 183 Runtime_Bad_Block 0x0030 100 100 000 Old_age Offline - 0 184 End-to-End_Error 0x0032 100 100 090 Old_age Always - 0 187 Reported_Uncorrect 0x0032 100 100 000 Old_age Always - 0 192 Unsafe_Shutdown_Count 0x0032 100 100 000 Old_age Always - 19 199 UDMA_CRC_Error_Count 0x0030 100 100 000 Old_age Offline - 0 225 Host_Writes_32MiB 0x0032 100 100 000 Old_age Always - 76433 226 Workld_Media_Wear_Indic 0x0032 100 100 000 Old_age Always - 2147483643 227 Workld_Host_Reads_Perc 0x0032 100 100 000 Old_age Always - 281457729732607 228 Workload_Minutes 0x0032 100 100 000 Old_age Always - 4294967295 232 Available_Reservd_Space 0x0033 100 100 010 Pre-fail Always - 0 233 Media_Wearout_Indicator 0x0032 100 100 000 Old_age Always - 0 241 Host_Writes_32MiB 0x0032 100 100 000 Old_age Always - 76433 242 Host_Reads_32MiB 0x0032 100 100 000 Old_age Always - 88076
A bit of further research showed the following areas that are of most interest to understanding the history to dateof the drive: “233 Media_Wearout_Indicator” and “241 Host_Writes_32MiB”. If my understanding is correct, “Media_Wearout_Indicator” is the total life left to the nearest 1% in the Value (not Raw Value) column. Mine is showing 100, indicating that I’ve written less than 1% of the expected write lifetime. “Host_Writes_32MiB” is how much capacity of writes have been done to the drive since shipment, in 32MiB (MebiBytes). For those of you who aren’t familiar with it, a Mebibyte is 1,048,576 bytes, the base-2 number we are familiar with and sometimes call a MegaByte. Disk manufacturers use 1,000,000 bytes as a MegaByte, operating systems use 1,048,576 bytes as a MegaByte, but for disambiguation in the disk capacity world, a MebiByte is 1,048,576 bytes and a MegaByte is 1,000,000 bytes. This is why your 160GB drive formats to 149GB in the OS. It has little to do with space lost to partitioning or file system formatting, and almost entirely to do with MiB vs MB. 160MB*1,000,000/1,048,576=152MiB (or MB according to most OS tools).
But I digress! According to smartctl, my laptop SSD has absorbed 76443*32MiB, or a little under 2.3TiB.
I then looked up the endurance claims for my 300GB Intel 320 Series SSD. It was a disappointingly low 30TB!!! What the heck! BUT…. reading more closely, that’s 30TB written at 4K random write via a benchmarking tool. Mac OS X will write larger than 4K when it can, unlike, say, Linux, that writes buffered writes at 4K size regardless of the size of the write by the application, and if you are lucky, write merges can make the writes larger again.
So, does this all add up? Nope. According to Intel’s specs, I should have used up approximately 13% (2/15) of my write endurance. How much that was alleviated by large block writes, or how much of the difference is due to buggy output by the drive, is unknown.
So, I now know how to measure how used my drive is. The life left, according to the SMART attributes, is huge. Then again, I found out that this drive is supposed to wear out as early as 30TB of writes, so it really should only be used as a laptop drive, never as a server drive in an enterprise environment (but I knew that already, because I work for Fusion-io).
Not really sure if I feel better or worse about my Intel 320 Series SSD at this point in time! I’m really happy with the performance, and I should be happy with that. Any SSD or HDD can die at any time, that’s what a good backup strategy is there for.
Pingback: Takeshi HASEGAWA
Pingback: Takeshi HASEGAWA
Pingback: garyorenstein
Pingback: jan kovitch
Pingback: Char Baumgarnder
Pingback: Updating your smartmontools