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:

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:

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%