A few years ago I stepped in to the world of NVME storage on my primary laptop. Not shortly after, I built a desktop whose OS/boot drive was also NVME. The difference between NVME and SATA-based SSD is night and day. In addition to being silent (which is a plus over spinning disk), boot times are amazing. Before this I’d never really thought about how much single-device (one drive) storage speed impacts usability. I always opted for 7200 rpm spinning disks vs 5400 rpm spinning disks whenever possible just based on the theory that faster speed means faster reads/writes, but didn’t really experience any noticeable performance between the two. In a double-blind test I’d be hard pressed to tell the difference.
When SATA-based SSDs started becoming the norm, they were a bit faster, and we got the benefits of a silent drive. Speed may have been noticeable over a spinning disk, but there wasn’t an insane amount of difference. A quick Google search of Workbench scores between 7200 rpm spinning SATA disks and SATA-based SSDs reveals that the SSD almost doubled the speed. A 2X increase in performance was obviously noticeable, but not as noticeable as the jump to NVME. Where read speeds on a SATA-based SSD fall in right around 480MB/s, NVME raises that up to around 2200MB/s. Writes are equally as impressive, going from 250MB/s to around 1500MB/s. Combined reads/writes from around 270MB/s to around 1700MB/s.
The TL;DR? When going from a 7200 rpm spinning SATA disk to SATA-based SSDs, we saw a performance increase of around 2X. When going from SATA-based SSD to NVME SSD, we saw a performance increase of over 6X. As I said before, jumping in to an NVME based system was the first time I thought about the speed of my storage and how it had an impact on the speed of my system as a whole, versus before, when I only thought about RAM and CPU.
How does apply to the Raspberry Pi? I was reading an article on Ars Technica where the author was building a Raspberry Pi-based emulation machine using RetroPie, something I’ve done myself many times. He said that in order to get the most performance out of the machine, that you shouldn’t “cheap out” on the SD card. This made me wonder – where is the point of diminishing returns when spending money on an SD card for a Pi?
UHS-I vs UHS-II
When I purchased my Sony A7R II recently, I did some research in to SD card speeds. It’s a good thing I did because before doing so I didn’t know the difference between UHS-I and UHS-II, as well as the different speed classes of cards. We’ll start with looking at the difference between UHS-I and UHS-II. If you’ve got some old SD card lying around, or even some new ones, they’re probably UHS-I. You can tell the difference by looking at the edge connector, as they’re physically different.
This image shows a UHS-I card on the left, and a UHS-II card on the right. They’re 100% backward compatible with each other. You can put a UHS-I card in a slot designed for UHS-II and vice versa, but if you use a UHS-I card in a UHS-II slot, you’ll be limited to UHS-I speeds. The take-away from this is that UHS-I and UHS-II are physically different from each other, and that UHS-II is the new kid on the block and is capable of being much faster, BUT in order to take advantage of that speed you’ll need a device with a UHS-II reader built in. As I said above, it’s a good thing I did my research before buying my camera, as the camera guy tried to sell me a super expensive V90 UHS-II SD card with the camera, even though the card slot on the camera is only a UHS-I slot.
The SD card reader on the Pi is not a UHS-II reader, so all of the V-rated cards are out. Since UHS-II cards are newer, they tend to be more expensive as well, so for your dollar you won’t be gaining anything if you purchase a UHS-II card. Will they work in the Pi? Sure. Are they a waste of money? Yup. With a UHS-II card, you’d be paying for extra performance that the Pi isn’t capable of.
Just FYI, there’s also a new UHS-III standard that was announced in 2017, but I have yet to see any of those cards for sale or any devices that can take advantage of them. Even the brand new Sony Alpha A7 III and A7R III that just came out don’t support UHS-III. The theoretical max for a UHS-II card is 312MB/s, though a speed rating doesn’t exist yet for that spec. The theoretical max for a UHS-III card is 624MB/s. Insane. Realistically, the new UHS-III card might not see real-world use, as a new SD Express standard was just announced in mid 2018, which puts the SD card on the PCI-Express bus, just like an NVME device, and tops out at 985MB/s with a max capacity of 128TB.
SD Card Speed Classes
Now that we’ve got UHS-I and UHS-II figured out, what about speeds?
The classic SDHC cards are rated in speeds of C2, C4, C6, or C10. SDXC cards are rated in speeds of either U1 or U3. Both SDHC and SDXC cards rated in terms of the C or U classes are all UHS-I cards. Newer SDXC II cards are rated V6, V10, V30, V60 or V90. SDCard.org has a great page that outlines this, but in case that page goes away, I’ll re-host their image:
This is a great chart that outlines all of the speed classes for each rating of both UHS-I and UHS-II cards.
Didn’t Someone Say Pi?
So what card is best for the Pi?
Since UHS-II cards are out of the question, that leaves us with looking at either SDHC or SDXC cards. Theoretically, the U3 rated SDXC cards would be the fastest, on paper. But I wondered if that would translate to real-world tests. Searching around, I found a few good datasets.
Pidramble.com had a great comparison of quite a few of very common and easy to find SD cards that were benchmarked in the latest Raspberry Pi, the Pi 3B+. I pulled their data, put it in a spreadsheet, sorted by card class, and tried to pick a winner based on performance and cost per GB. Here’s the data:
The darker blue highlights indicate the best performance in each category. The lighter blue highlights indicate performance that’s close to the best. As you can see, there’s no clear runaway winner contrary to the fact that there are a mix of U1 and U3 cards. Even the C10 card managed to come close in one benchmark. The C6 card is a clear loser here, with very poor performance when compared to the U1 and U3 cards. This just goes to show that spending more money doesn’t always guarantee you more performance.
Out of this data pool there were two winners in terms of performance. Both scored the highest marks in 2 of the 4 benchmarks, and both scored close to the highest marks in 1 of the 4 benchmarks.
The U3 card beats out the U1 card in fast sequential writes, but this particular U1 card is much faster at random reads and writes combined. Since we’re running an operating system on the card when we use it in the Pi, I’m going to assume based on this that the U1 card would be the better overall performance card here.
The U1 card bests the U3 class card here in terms of value per gigabyte as well, as it’s double the capacity for just over half the price.