Finding the fastest SD cards for the Raspberry Pi
Speed Racer
A few issues back, I examined the infamous label soup that is printed on modern SD cards, exploring the meaning of those arcane runes and the standards they represent [1]. The most common variants of performance speed found in stores today is summed up in Table 1 [2] in order of increasing speed, ranging from the now dated C10 (speed class 10) to the newest A2 (application performance 2). SD cards are advertised on maximum throughput – meaning sequential I/O. This choice is perfectly sensible given their primary application area is to store pictures and video. For computing, however, random I/O is a much more interesting metric.
Table 1
Common SD Card Storage Speeds
Label | Rating | Speed |
---|---|---|
C2 | Speed class 2 | At least 2MBps of read/write speed |
C10 | Speed class 10 | At least 10MBps of read/write speed |
UHS 1 | Ultrahigh speed class 1 | At least 10MBps (same as C10) |
UHS 3 | Ultrahigh speed class 3 | At least 30MBps (same as V30) |
V10 | Video speed class 10 | At least 10MBps (same as C10) |
V60 | Video speed class 60 | At least 60MBps |
V90 | Video speed class 90 | At least 90MBps |
A1 | Application performance class 1 | At least 1,500 4K random read, 500 write IOPSAt least 10MBps sustained sequential write |
A2 | Application performance class 2 | At least 4,000 4K random read, 2,000 write IOPSAt least 10MBps sustained sequential write |
As SD cards careen toward ever faster speeds, it is important to remember that performance is achieved by the combination of the reader in the host and the memory card. Bus speeds are not the same as speed classes, and some of the newest classes rely on additional hardware; for example, the UHS-II, UHS-III, and SD Express standards have the ability to provide even faster speeds than UHS-I by using two lanes for data transfer on two rows of pins.
Similarly, full-duplex and half-duplex modes are now available [3]. Also, don't forget that faster options are available when SD cards are not sufficient. The Raspberry Pi 4 model B incorporates a USB controller. Although not capable of the full 625MBps of the standard, it can handily reach over 340MBps with any half-decent external SSD drive.
Lies and Benchmarks
It is said that, in life, there are only lies, damn lies, and benchmarks. That is especially true when vendors are involved, but the adage is always worth remembering to highlight the one-dimensional nature of benchmarks. They don't answer the question of what is "fastest" across all dimensions of "fast," only one specific line of inquiry per number, at best. That said, I'll bench test some cards. Jeff Geerling of Ansible fame used to run an annual SD performance comparison for use on single-board computers (SBCs) [4]. Jeff moved on from the practice a few years back, so I thought it might be fun to run my own tests in 2023.
The testing platform is the all-in-one Raspberry Pi 400 (Figure 1), a custom board redesign (for cooling reasons) of the Raspberry Pi 4 in the once popular "computer in a keyboard" form factor of days past. Board layout aside, it can be thought of as a Raspberry Pi 4 SBC with 4GB of RAM, WiFi access, and some additional layout changes to expose the GPIO connector at the back of the keyboard.
Jeff has set up a really convenient script on the benchmarking section of his site [5], which you can pull down and execute with a one-liner. To reduce the amount of typing required, I aliased the original path [6]:
curl -L https://tinyurl.com/5f5rkn9p | sudo bash
I am running the same 32-bit Raspberry Pi OS image on all SD cards tested (Figure 2), in a stock default configuration, only setting up network and running updates before testing. The details of the actual benchmarks and their purpose is examined in the "Individual Tests" box, but first, look at the results!
Individual Tests
Sequential reads is a measurement of raw throughput without help from the Linux caches (unbuffered) and is remarkably consistent across all modern cards tested. Run with the hdparm
[7] tool as:
sudo hdparm -t /dev/mmcblk0
Sequential writes is a large continuous write, forcing filesystem sync to ignore caching effects. Run with the dd
[8] tool as:
sudo dd if=/dev/zero of=/home/pi/test bs=8k count=50k conv=fsync; sudo rm -f /home/pi/test
Random reads and random writes are 4K random I/O operations at the heart of a filesystem in general compute use. The random write portion was historically problematic for low-end SD cards. Run as
iozone -e -I -a -s 100M -r 4k -i 0 -i 1 -i 2 [-f /path/to/file]
with the iozone
[9] benchmark.
Run Like the Wind
The first card tested, a SanDisk Edge model, performed admirably well, closer to the A2 standard than its stated A1 rating, falling short just a few IOPS from the higher rating (Figure 3). This was the card model with which the Raspberry Pi Foundation's own store equipped early Pi 400 orders, so it could stake a claim to the official baseline for this device.
Next up, the Samsung Evo posted impressive results, exceeding the requirements for an A2 card yet also modestly only claiming A1 performance, while doubling the sequential write performance of the previous entry. Matching the 130 MBps claim on the packaging required using an external USB 3.0 reader, and performed at 126.46 MBps in sequential read tests (results did not change in the write test). As performance results from a combination of reader and card, perhaps this unit is using newer standard capabilities the Pi's card reader does not yet supply to achieve its high throughput claim – like using multiple I/O lanes.
The next two models were generic Micro Center units, offering really good performance at a cheaper price. The comparison highlights the bigger card's A2 rating and outsize write performance, but to be clear, even the cheaper A1 card will boot Linux just fine (Figures 4 and 5). Interestingly, the 64GB card repeatedly fell just short of its claimed V30 write throughput rating, yet it simultaneously beat all other cards in random I/O reads (one should expect at least a 10% variability in SD card IOPS figures). The Micro Center 128GB was really the champion of this little test, repeatedly and consistently posting an outstanding random 4K write IOPS.
The final entry was a recent purchase of a low-spec card from Micro Center, with listed specs that may have been in use a few years back. Its high performance shows it was clearly made with recent silicon, exceeding historical performance for a C10 but badged to a lower specification to streamline production lines.
Everyone Wins
Until recently, the only way to be sure of an SD card's performance as an SBC mass storage device was to order one and run benchmarks on it yourself. Today multiple websites exist [5] [10] [11] to collect and share standardized results, making it rather effortless to validate performance before purchasing a card. One thing stands out above all: Although some cards have markedly better performance than others, perhaps the one reason Jeff stopped publishing benchmarks annually is that all of the cards tested are now adequate to run an SBC with a Linux distribution. With significant range in the 4K random write IOPS test results, all cards tested performed admirably compared with the performance landscape just a few years back [12].
Infos
- "The weak spot of SBCs" by Federico Lucifredi, ADMIN , issue 74, 2023, pg. 94, https://www.admin-magazine.com/Archive/2023/74/The-weak-spot-of-SBCs
- SD Card standard forum, speed class overview: https://www.sdcard.org/developers/sd-standard-overview/speed-class/
- SD Card standard forum, bus speed overview: https://www.sdcard.org/developers/sd-standard-overview/bus-speed-default-speed-high-speed-uhs-sd-express/
- "Raspberry Pi microSD card performance comparison (2019)" by Jeff Geerling: https://www.jeffgeerling.com/blog/2019/raspberry-pi-microsd-card-performance-comparison-2019
- microSD card benchmarks: http://www.pidramble.com/wiki/benchmarks/microsd-cards
- microsd-benchmarks.sh (Jeff Geerling): https://raw.githubusercontent.com/geerlingguy/raspberry-pi-dramble/master/setup/benchmarks/microsd-benchmarks.sh
- hdparm(8) man page: https://manpages.ubuntu.com/manpages/jammy/en/man8/hdparm.8.html
- dd(1) man page: https://manpages.ubuntu.com/manpages/jammy/man1/dd.1.html
- iozone(1) man page: https://manpages.ubuntu.com/manpages/jammy/en/man1/iozone.1.html
- Elinux.org – Pi SD cards: https://elinux.org/RPi_SD_cards#Performance
- "Raspberry Pi Storage Benchmarks + Benchmarking Script" by James A. Chambers: https://jamesachambers.com/raspberry-pi-storage-benchmarks-2019-benchmarking-script/
- "A2-class microSD cards offer no better performance for the Raspberry" by Jeff Geerling: https://www.jeffgeerling.com/blog/2019/a2-class-microsd-cards-offer-no-better-performance-raspberry-pi
Buy this article as PDF
(incl. VAT)