SD Card testing
by Perroboc
5 min read
I got a bunch of SD cards to use with my Steam Deck. I wanted to know which one was the best.
Links here don't earn me any money, they're here just for reference.
Reference
There are many ways to read what a card's speed should be, but nowadays you should focus on what you will be using it for, and where.
I won't rewrite the documents available at the sd card official site, so I'll just link to them for reference:
- Capacity: SD, SDHC, SDXC and SDUC Card Capacity Choices
- Bus Interface Speed: Bus Interface Speed Standards for Large Size Data Transfer
- Video Speed: Speed Class Standards for Video Recording
- Application Performance Speed: Application Performance Class for Running Smartphone Apps
In these performance tests, I will use 2 kinds of cards:
- SDHC 10MB/s cards: these could be called 2nd generation cards, slow by today's standards.
- SDXC 30MB/s cards: Pretty much the affordable standard nowadays, 3rd generation cards.
I want to use these on a Steam Deck, so it's not necessary to have more speed than this, since the Steam Deck would be incompatible with, say, UHS-II cards.
Test tools
I used f3
to see if the cards were original and valid, and iozone
to test performance.
f3probe
:f3probe --destructive --time-ops /dev/sdb
--destructive
: Do not restore blocks of the device after probing it.--time-ops /dev/sdb
: Time reads, writes, and resets.iozone
:iozone -e -I -a -s 1G -r 4k -i 0 -i 1 -i 2
-e
: Include flush (fsync,fflush) in the timing calculations-I
: Use DIRECT IO if possible for all file operations. Tells the filesystem that all operations to the file are to bypass the buffer cache and go directly to disk. (not available on all platforms)-a
: Used to select full automatic mode. Produces output that covers all tested file operations for record sizes of 4k to 16M for file sizes of 64k to 512M.-s 1G
: Used to specify the size, in Kbytes, of the file to test. One may also specify -s #k (size in Kbytes) or -s #m (size in Mbytes) or -s #g (size in Gbytes).-r 4k
: Used to specify the record size, in Kbytes, to test. One may also specify -r #k (size in Kbytes) or -r #m (size in Mbytes) or -r #g (size in Gbytes).-i 0 -i 1 -i 2
: Used to specify which tests to run. (0=write/rewrite, 1=read/re-read, 2=random-read/write, 3=Read-backwards, 4=Re-write-record, 5=stride-read, 6=fwrite/re-fwrite, 7=fread/Re-fread, 8=mixed workload, 9=pwrite/Re-pwrite, 10=pread/Re-pread, 11=pwritev/Re-pwritev, 12=preadv/Re-preadv). One will always need to specify 0 so that any of the following tests will have a file to measure. -i # -i # -i # is also supported so that one may select more than one test.
List of tested cards, all valid according to f3probe
:
- SDXC (U3, A2)
- SDHC (C10, A1)
Card | Price (USD) | Standard | Size (GB) | Bus | Class Speed | Application Performance |
---|---|---|---|---|---|---|
Samsung Pro Plus | 44.99 | SDXC | 512 | UHS-I | 30 MB/s | A2 |
Samsung Evo Plus | 44.99 | SDXC | 512 | UHS-I | 30 MB/s | A2 |
Samsung Evo Select | 39.99 | SDXC | 512 | UHS-I | 30 MB/s | A2 |
Sandisk Extreme | 54.99 | SDXC | 512 | UHS-I | 30 MB/s | A2 |
Lexar Play | 49.99 | SDXC | 512 | UHS-I | 30 MB/s | A2 |
Lexar 633x | 48.99 | SDXC | 512 | UHS-I | 30 MB/s | A2 |
Maxell | 4.75 | SDHC | 16 | High Speed | 10 MB/s | |
Sandisk Ultra | 14.99 | SDHC | 32 | High Speed | 10 MB/s | A1 |
f3probe
test results
$ f3probe --version
F3 Probe 8.0
Card | Probe time (s) | Read (us) | Write (us) |
---|---|---|---|
Samsung Pro Plus | 25.02 | 54 | 5 |
Samsung Evo Plus | 25.52 | 67 | 5 |
Samsung Evo Select | 26.06 | 67 | 6 |
Sandisk Extreme | 25.52 | 73 | 5 |
Lexar Play | 25.25 | 82 | 5 |
Lexar 633x | 33.23 | 72 | 7 |
Maxell | 160 | 88 | 38 |
Sandisk Ultra | 100 | 71 | 23 |
iozone
test results
Iozone: Performance Test of File I/O
Version $Revision: 3.489 $
Compiled for 64 bit mode.
Build: linux-AMD64
Include fsync in write timing
O_DIRECT feature enabled
Auto Mode
File size set to 1048576 kB
Record Size 4 kB
Command line used: iozone -e -I -a -s 1G -r 4k -i 0 -i 1 -i 2
Output is in kBytes/sec
Time Resolution = 0.000001 seconds.
Processor cache size set to 1024 kBytes.
Processor cache line size set to 32 bytes.
File stride size set to 17 * record size.
Card | Write speed [kB/s] | Re/Write speed [kB/s] | Read speed [kB/s] | Re-Read speed [kB/s] | Random read speed [kB/s] | Random write speed [kB/s] |
---|---|---|---|---|---|---|
Samsung Pro Plus | 4795 | 4844 | 8222 | 8743 | 10052 | 7135 |
Samsung Evo Plus | 2747 | 2764 | 8777 | 8769 | 8103 | 3464 |
Samsung Evo Select | 2583 | 2593 | 8798 | 8782 | 8374 | 3426 |
Sandisk Extreme | 2066 | 1993 | 6458 | 6458 | 5017 | 2100 |
Lexar Play | 4141 | 4053 | 9194 | 9181 | 7071 | 3702 |
Lexar 633x | 3959 | 3844 | 9937 | 9940 | 7438 | 3250 |
The important values are the random read and write speeds, so the best cards are, in order: Samsung Pro Plus, Samsung Evo Plus, Samsung Evo Select, Lexar Play, Lexar 633x.
SDXC cards (3rd gen) values
Card | Write speed [kB/s] | Re/Write speed [kB/s] | Read speed [kB/s] | Re-Read speed [kB/s] | Random read speed [kB/s] | Random write speed [kB/s] |
---|---|---|---|---|---|---|
Maxell | 1386 | 1413 | 6065 | 6090 | 0 | 0 |
Sandisk Ultra | 3860 | 3855 | 7453 | 7451 | 7276 | 1436 |
Card | Probe time (s) | Read (us) | Write (us) | Price (USD) | Price per GB (USD) |
---|---|---|---|---|---|
Samsung Pro Plus | 25.02 | 54 | 5 | 44.99 | 0.088 |
Samsung Evo Plus | 25.52 | 67 | 5 | 44.99 | 0.088 |
Samsung Evo Select | 26.06 | 67 | 6 | 39.99 | 0.078 |
Sandisk Extreme | 25.52 | 73 | 5 | 54.99 | 0.107 |
Lexar Play | 25.25 | 82 | 5 | 49.99 | 0.098 |
Lexar 633x | 33.23 | 72 | 7 | 48.99 | 0.096 |
Card | Probe time | Read | Write | Price per GB | Value |
---|---|---|---|---|---|
Samsung Pro Plus | 25% | 34% | 29% | 18% | 25% |
Samsung Evo Plus | 23% | 18% | 29% | 18% | 20% |
Samsung Evo Select | 22% | 18% | 14% | 27% | 22% |
Sandisk Extreme | 23% | 11% | 29% | 0% | 9% |
Lexar Play | 24% | 0% | 29% | 8% | 10% |
Lexar 633x | 0% | 12% | 0% | 10% | 9% |
SDHC Cards (2nd gen) values
Card | Probe time (s) | Read (us) | Write (us) | Price (USD) | Price per GB (USD) |
---|---|---|---|---|---|
Maxell | 160 | 88 | 38 | 4.75 | 0.297 |
Sandisk Ultra | 100 | 71 | 23 | 7.69 | 0.240 |
Card | Probe time | Read | Write | Price per GB | Value |
---|---|---|---|---|---|
Maxell 16 GB | 0% | 0% | 0% | 0% | 0% |
Sandisk Ultra 32 GB | 38% | 19% | 39% | 19% | 23% |