In addition to copious amounts of Swiss chocolate and a basking platform for my turtles, I bought a solid-state disk while I was in Europe. It was cheap enough and I think the underlying technology has advanced enough to be less scary, so I bought it.
They’re still not THAT cheap, but the price was reasonable, and I think the scary problems with SSDs aren’t as scary any more… so what the hell. I don’t plan on putting important data on it (just Android source code).
Here’s a rough look at the read speeds on this 120 GB SanDisk Extreme SSD:
[root@smalls ~]# hdparm -Tt /dev/sda /dev/sda: Timing cached reads: 25760 MB in 2.00 seconds = 12898.73 MB/sec Timing buffered disk reads: 774 MB in 3.00 seconds = 257.60 MB/sec
Buffered reads (on the bottom) is what we want to look at.
257 megabytes/sec is roughly 2.0 gigabits/sec, well beyond the theoretical maximum of first-gen SATA (1.5 gigabits), but it’s not going to win any speed contests. In any case, it’s definitely faster than the spinning-disk drives I’m currently using.
To put that in perspective, here is what the read speed on my 2TB 7200 RPM Seagate looks like:
[root@smalls ~]# hdparm -Tt /dev/sdb /dev/sdb: Timing cached reads: 25284 MB in 2.00 seconds = 12659.13 MB/sec Timing buffered disk reads: 386 MB in 3.01 seconds = 128.08 MB/sec
… and here’s the read speed of a RAID1 mirror consisting of two of the 2TB Seagate drives:
[root@smalls ~]# hdparm -Tt /dev/md0 /dev/md0: Timing cached reads: 26390 MB in 2.00 seconds = 13213.76 MB/sec Timing buffered disk reads: 496 MB in 3.01 seconds = 164.77 MB/sec
gdisk, I created a single partition starting at sector 2048 so that the partition aligned with NAND erase block sizes. This is confusing, but the basic idea is: misaligned partitions means you have to erase two blocks to delete one block worth of data and, as SSDs have limited write/erase cycles, this decreases the longevity of the SSD.
Also, I’m mounting the SSD with ext4 and the following mount options in /etc/fstab:
UUID=205ee41e-d9f7-44c5-b7eb-7c176fa4ff68 /home/aorth/android ext4 noatime,discard,defaults 0 1
“noatime” tells the system not to update the access time flag of the file (therefore avoiding a write operation for every read operation), and the “discard” option tells the kernel to issue the hardware TRIM command, which allows the SSD firmware to handle block reclamation more efficiently than it would otherwise.
I’m still trying to see how much my real-world performance increase will be. I’ve moved my Android source code folder to the SSD, and I’ll start taking note of the build times to see if they’ve come down at all.