10 April 2013
I've got a shiny new SSD which I'm playing with in FreeBSD. There doesn't seem to be an easy way to TRIM the device, other than using
newfs -E -t, which leaves a UFS behind, so I wrote my own:
# git clone http://unix4lyfe.org/git/trim # make # ./trim /dev/ada4
See the trim code in gitweb.
Although the SSD reports a sector size of 512 bytes, it won't TRIM a block smaller than 4K, and it won't be efficient about it until about the 2MB mark.
I've also noticed that if I write a block, then immediately TRIM it, it doesn't work. Sleeping for a second and re-issuing the TRIM makes it work.
Sometimes, the SSD silently fails to TRIM. The tool I wrote verifies and reports this.
Here's the SMART data for my SSD:
# smartctl -i /dev/ada4 Model Family: Intel 520 Series SSDs Device Model: INTEL SSDSC2CW120A3 Firmware Version: 400i 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 T13/2015-D revision 3 SATA Version is: SATA 3.0, 3.0 Gb/s (current: 3.0 Gb/s) SMART support is: Available - device has SMART capability. SMART support is: Enabled # camcontrol identify ada4 pass4: <INTEL SSDSC2CW120A3 400i> ATA-9 SATA 2.x device pass4: 300.000MB/s transfers (SATA 2.x, UDMA6, PIO 8192bytes) protocol ATA/ATAPI-9 SATA 2.x device model INTEL SSDSC2CW120A3 firmware revision 400i cylinders 16383 heads 16 sectors/track 63 sector size logical 512, physical 512, offset 0 LBA supported 234441648 sectors LBA48 supported 234441648 sectors PIO supported PIO4 DMA supported WDMA2 UDMA6 media RPM non-rotating Feature Support Enabled Value read ahead yes yes write cache yes yes flush cache yes yes overlap no Tagged Command Queuing (TCQ) no no Native Command Queuing (NCQ) yes 32 tags SMART yes yes microcode download yes yes security yes no power management yes yes advanced power management yes yes 254/0xFE automatic acoustic management no no media status notification no no power-up in Standby yes no write-read-verify no no unload yes yes free-fall no no data set management (TRIM) yes
And some performance estimates:
# diskinfo -ctv /dev/ada4 /dev/ada4 512 # sectorsize 120034123776 # mediasize in bytes (111G) 234441648 # mediasize in sectors 0 # stripesize 0 # stripeoffset 232581 # Cylinders according to firmware. 16 # Heads according to firmware. 63 # Sectors according to firmware. I/O command overhead: time to read 10MB block 0.045524 sec = 0.002 msec/sector time to read 20480 sectors 0.863500 sec = 0.042 msec/sector calculated command overhead = 0.040 msec/sector Seek times: Full stroke: 250 iter in 0.024130 sec = 0.097 msec Half stroke: 250 iter in 0.029164 sec = 0.117 msec Quarter stroke: 500 iter in 0.056782 sec = 0.114 msec Short forward: 400 iter in 0.040810 sec = 0.102 msec Short backward: 400 iter in 0.040303 sec = 0.101 msec Seq outer: 2048 iter in 0.088492 sec = 0.043 msec Seq inner: 2048 iter in 0.087823 sec = 0.043 msec Transfer rates: outside: 102400 kbytes in 0.432411 sec = 236812 kbytes/sec middle: 102400 kbytes in 0.431852 sec = 237118 kbytes/sec inside: 102400 kbytes in 0.422050 sec = 242625 kbytes/sec