Over the years I’ve used plenty of SD cards from various manufacturers at various prices. I never seem to have a spare card when I need one so I decided to buy a small selection and benchmark their performance. I was curious as to the differences and thought other people would be interested in the results.
All the cards were new, microSD and, apart from the official NOOBs card, 16GB in capacity. I went for 16GB so they would be useful in the future in any other media devices while being a sensible price.
|Brand – Model||Capacity||Class||Price*||Buy|
|Official Raspberry Pi NOOBs||8GB||Class 10||£4.00||BUY|
|Samsung EVO||16GB||Class 10||£7.00||BUY|
|SanDisk Ultra||16GB||Class 10||£6.00||BUY|
* The price is the amount I paid excluding post and packing. This obviously varies depending on supplier and what else you are ordering at the time. The Official Pi card was £5 delivered to my house while the others came from Amazon where the postage scheme is a bit more complicated!
In order to give each card a fair chance I tested them on both my Windows 7 desktop PC, my Ubuntu laptop and a Raspberry Pi 2. On Windows I used CrystalDiskMark which is a free disk benchmark utility. On Ubuntu I used the standard “Disks” utility which has a benchmark facility. On the Pi I used the command line technique detailed on the RPi Wiki. The test sequence looked something like this :
- Format on Windows using SDFormatter
- Run H2testw to check capacity is genuine
- Run CrystalDiskMark on desktop PC
- Run benchmark on Ubuntu laptop
- Write latest Raspbian image using Win32DiskImager
- Boot on a Pi and run command line benchmarks
I used the same card readers and when I needed to use a microSD-SD converter I always used the one that came with the NOOBs card.
There are lots of fake SD cards out there. I only purchase SD cards from sellers I trust but I tested all five cards using H2testw 1.4 to double check. Without checking using this tool you won’t be able to spot a fake card until it is too late. They all passed *phew*. As the checking involved writing over the entire card and then reading it all back I captured the read and write speeds reported after each test :
|Brand – Model||Capacity||Write Speed (MB/s)||Read Speed (MB/s)||Rank|
|Official Raspberry Pi NOOBs||8GB||9.17||17.4||4th|
Official Raspberry Pi NOOBs 8GB, Class 10
Kingston 16 GB Class 10
Samsung EVO 16GB, Class 10
SanDisk Ultra 16 GB, Class 10
Toshiba 16GB, Class 10
The table below shows the results :
|Brand – Model||Average Speed (MB/s)||Rank|
|Official Raspberry Pi NOOBs||40.257||2nd|
Ubuntu Disk Benchmarking
The Ubuntu “Disks” utility includes a feature to “Benchmark Partition”. I ran this test using 100 samples/1MB sample size. The table below shows the results :
|Brand – Model||Read Speed (MB/s)||Write Speed (MB/s)||Average (MB/s)||Rank|
|Official Raspberry Pi NOOBs||17.4||3.5||10.45||2|
Raspbian Command Line Results
The final test was booting the card in a Raspberry Pi 2, extracting the device’s CID and then running some basic benchmarking. The commands for doing this are documented in the RPiWiki.
To read the card’s CID I used :
cd /sys/class/mmc_host/mmc?/mmc?:* echo "man:$(cat manfid) oem:$(cat oemid) name:$(cat name) hwrev:$(cat hwrev) fwrev:$(cat fwrev)"
To measure the write speed :
sync; dd if=/dev/zero of=~/test.tmp bs=500K count=1024
To measure the read speed :
sync; echo 3 | sudo tee /proc/sys/vm/drop_caches sync; time dd if=~/test.tmp of=/dev/null bs=500K count=1024
Finally I deleted the temporary file created by the above commands.
The table below shows the results :
|Brand – Model||Device CID||Write Speed (MB/s)||Read Speed (MB/s)||Rank|
|Official Raspberry Pi NOOBs||man:0x000003 oem:0x5344 name:SL08G hwrev:0x8 fwrev:0x0||9.4||19.0||5th|
|Kingston||man:0x000027 oem:0x5048 name:SD16G hwrev:0x3 fwrev:0x0||12.0||17.7||3rd|
|Samsung EVO||man:0x00001b oem:0x534d name:00000 hwrev:0x1 fwrev:0x0||10.6||18.9||4th|
|SanDisk Ultra||man:0x000003 oem:0x5344 name:SL16G hwrev:0x8 fwrev:0x0||12.6||19.0||2nd|
|Toshiba||man:0x000002 oem:0x544d name:SA16G hwrev:0x2 fwrev:0x2||16.0||17.6||1st|
Averaging the ranks in all tests gives up the final ranking :
|SanDisk Ultra 16GB||1st|
|Official NOOBs (SanDisk 8GB)||3rd|
|Samsung EVO 16GB||4th|
What my tests showed was that there is very little difference between the cards. I would be happy to use any of them in my Pi projects. Some of the differences are so slight I’m not sure I would ever notice in reality.
- The cost of the card made no real difference to its performance. Why pay £7 for the Samsung EVO when the Toshiba is almost half the price?
- The Kingston did badly in my “Ubuntu” test because the benchmarking utility threw an error with this card and I was unable to get any results.
- The SanDisk Ultra only stole 1st place from the Toshiba due to the big difference in Write speed on the Ubuntu test.
- How you judge the cards may determine on how relevant you think my tests are to real-world performance on the Pi. However even if you discard one of the tests (ie the Crystalmark under Windows) the top three are the same.
If I need more cards I would be happy picking one of the top three depending on availability and postage charges. The Samsung EVO and Kingston aren’t bad cards but I’ve just got no reason to favour them over the others.