What exactly is being tested?
Why are so many otherwise “fast” SD cards doing so poorly on the sdtest, while older and slower cards post better results?
Why is there so much variation even amongst identical cards from the same manufacturer, but not when their actual read/write speeds are tested when removed from the Proffie board
It’s testing reading files from the SD card.
ProffieOS uses an ancient (and still required) way to talk to the SD card called
SPI mode doesn’t allow for super-high speed, but it’s still fast enough for our purposes.
Unfortunately, most consumer electronics have moved past SPI mode, onto SDIO mode, which can be a lot faster. SPI mode maxes out at 12.5 MB/s.
V3 Proffieboards uses 4-bit SDIO mode which maxes out at 50 MB/s.
Teensy v4.1 boards use SDIO at a higher frequency and maxes out at 104 MB/s.
Now, since most people don’t use SPI mode anymore, it’s not prioritized by the SD card makers, so sometimes SPI mode is badly implemented, and even though the card is generally fast, SPI mode is slow. At least that’s what I think is happening, the SD card market is also full of fake and second-sort cards which could behave badly for other reasons…
I should also point out that ProffieOS cares about speed in a way that most SD applications don’t… Every block read from the SD card must come back quickly, or you get audio glitches. In most cases, that’s just not how it works. If you’re copying a bunch of photos from an SD card, you don’t really care if 10 of those blocks take an extra 100ms to read, as long as all the files get copied correctly. So this is generally what SD card is optimized for. They have one fast read path that is invoked when there are only a small number of bit errors in the stored data. These bit-errors can be corrected by hardware that can fix them without any overhead. If on the other hand the number of bit errors is not small, then the CPU inside the SD card has to actually think about it. It usually does several read passes to get several samples of the data, then it calculates which bits are most likely to be wrong and twiddles them until it finds a combination that works. This can take a while, in some cases as long as a second. The SD card will most likely re-write the slow-to-read data to another location on the SD card, which also takes some time, but hides the problem so that it doesn’t happen again.
SD cards are complicated, and not really meant to be used the way we use them.
I think the “A1/A2” cards are optimized for small, fast reads and writes though, so maybe those are better? (I have not actually tested them myself.)
Good info, thank you.
I’m trying to make a logbook of all the SD cards I have, and how they fare on the sdtest
I’ve got a dozen of them now, but due to how random my results have been, I can’t actually draw any conclusions from my testing aside from learning their individual speeds.
Even buying directly from the manufacturer hasn’t yielded better results in most cases.
If you find cards that have consistent speeds across many cards.
Please let us know, those are probably the good ones.
(Even if they aren’t the fastest cards.)
I’ve been using 16Gb Sandisk Industrial cards for a while. They aren’t the fastest, but I don’t think I’ve had one quit on me yet.
Here’s my SanDisk And Kingston cards tested so far
3 SanDisk Ultras:
16GB red/grey, new, from SaberBay
32GB white/grey, new, from Korbanth
Older 64GB red/grey Ultra PLUS from a Samsung Galaxy 9. Formatted FAT 32.
All are averaging 1,100 kb/s and 12.5 streams consistently.
4 Kingston Canvas Select Plus
16GB from a 2020 build Saberforge
1,230 kb/s and 14 streams
2x 32GB new from Kingston Website
Both 890 kb/s and 10.05 streams
32GB new from Amazon (packaging identical to above, looks legit)
960 kb/s. 10.85 streams
1 Kingston Canvas Go Plus 64GB, new from Amazon
Reformatted to FAT 32, will not boot in saber. Unsure on authenticity, but it looks right and functions well in non Proffie applications.
1 Kingston Industrial 8GB, new, from Kingston Website
1,349 kb/s and 15.3 streams. I’m excited about this one. Ordering another to test against.