Why would a "better" sd card perform worse with the "SdCardTest"

isaacjacobson

Well-known member
For audio projects, I typically use the classic SanDisk Ultra (A1; 64 GB; U1; XC)

But after noticing the Amazon Basics (A2; 64 GB; U3; XC) performed better with the Blackmagic Speed Test, I switched to that.

I soon began noticing issues in performance, so I tested it with Teensy's SdCardTest. Despite better specs and performing much better in the Blackmagic Speed Test, Amazon Basics performed much worse on Teensy's SdCardTest.

Any idea why?

Dumb question, but is there a 'coding solution' to optimize for the Amazon Basics? (I ask because I'm sitting on a 'few' of them now...)


SdCardTest Results:


SanDisk Ultra
Code:
SD Card Test
------------
SD card is connected :-)
Card type is SDHC
File system space is 63832.16 Mbytes.
SD library is able to access the filesystem

Reading SDTEST1.WAV:
  Overall speed = 21.72 Mbyte/sec
  Worst block time = 0.64 ms
    21.89% of audio frame time

Reading SDTEST1.WAV & SDTEST2.WAV:
  Overall speed = 1.27 Mbyte/sec
  Worst block time = 1.45 ms
    49.84% of audio frame time

Reading SDTEST1.WAV & SDTEST2.WAV staggered:
  Overall speed = 1.27 Mbyte/sec
  Worst block time = 1.15 ms
    39.57% of audio frame time

Reading SDTEST1.WAV, SDTEST2.WAV, SDTEST3.WAV:
  Overall speed = 1.26 Mbyte/sec
  Worst block time = 2.13 ms
    73.52% of audio frame time

Reading SDTEST1.WAV, SDTEST2.WAV, SDTEST3.WAV staggered:
  Overall speed = 1.26 Mbyte/sec
  Worst block time = 1.59 ms
    54.66% of audio frame time

Reading SDTEST1.WAV, SDTEST2.WAV, SDTEST3.WAV, SDTEST4.WAV:
  Overall speed = 1.28 Mbyte/sec
  Worst block time = 2.77 ms
    95.37% of audio frame time

Reading SDTEST1.WAV, SDTEST2.WAV, SDTEST3.WAV, SDTEST4.WAV staggered:
  Overall speed = 1.28 Mbyte/sec
  Worst block time = 1.97 ms
    67.80% of audio frame time


Amazon Basics
Code:
SD Card Test
------------
SD card is connected :-)
Card type is SDHC
File system space is 63832.16 Mbytes.
SD library is able to access the filesystem

Reading SDTEST1.WAV:
  Overall speed = 21.92 Mbyte/sec
  Worst block time = 0.58 ms
    20.06% of audio frame time

Reading SDTEST1.WAV & SDTEST2.WAV:
  Overall speed = 2.83 Mbyte/sec
  Worst block time = 4.57 ms
    157.41% of audio frame time

Reading SDTEST1.WAV & SDTEST2.WAV staggered:
  Overall speed = 2.80 Mbyte/sec
  Worst block time = 4.61 ms
    158.93% of audio frame time

Reading SDTEST1.WAV, SDTEST2.WAV, SDTEST3.WAV:
  Overall speed = 2.09 Mbyte/sec
  Worst block time = 4.07 ms
    140.28% of audio frame time

Reading SDTEST1.WAV, SDTEST2.WAV, SDTEST3.WAV staggered:
  Overall speed = 2.08 Mbyte/sec
  Worst block time = 4.79 ms
    165.03% of audio frame time

Reading SDTEST1.WAV, SDTEST2.WAV, SDTEST3.WAV, SDTEST4.WAV:
  Overall speed = 2.19 Mbyte/sec
  Worst block time = 5.10 ms
    175.75% of audio frame time
 
Blackmagic measures only sequential access speed.

For playing multiple files without large buffering, the random access read performance matters. Use a benchmark program which measures random access without queue (queue depth = 1). This is the most popular one for MacOS.

https://apps.apple.com/us/app/amorphousdiskmark/id1168254295

Sad reality is nearly all SD cards perform terribly this way, but some are less bad than others. Before the A1 & A2 rating, virtually all were optimized only for sequential access, because that's the only mode cameras use.
 
Blackmagic measures only sequential access speed.

For playing multiple files without large buffering, the random access read performance matters. Use a benchmark program which measures random access without queue (queue depth = 1). This is the most popular one for MacOS.

https://apps.apple.com/us/app/amorphousdiskmark/id1168254295

Sad reality is nearly all SD cards perform terribly this way, but some are less bad than others. Before the A1 & A2 rating, virtually all were optimized only for sequential access, because that's the only mode cameras use.


Thanks, Paul. That makes a ton of sense. It seems that was the case here.




Yes - https://forum.pjrc.com/threads/70963-Yet-Another-File-Player-(and-recorder). Not specifically for the Amazon Basics SD card, but if you want to give it a try I'd love to know if it works. 2Mbytes/sec should be able to stream 10 stereo files (though it doesn't leave time to do much else!).


This looks incredible and would definitely solve my sd audio issues with cards that are a bit shy the necessary specs. I've been following along with the thread, but haven't successfully adapted it to my own code. I'm probably just missing something simple somewhere or have my audio libraries a little tangled. Is there a simple example integrating playing wav from sd?
 
I've been following along with the thread, but haven't successfully adapted it to my own code. I'm probably just missing something simple somewhere or have my audio libraries a little tangled. Is there a simple example integrating playing wav from sd?
You’re right, I should add a simple playback example!

The nearest I have for now is https://github.com/h4yn0nnym0u5e/Au...AudioTestPlayMultiSD/AudioTestPlayMultiSD.ino, which plays back two files from two different SD cards when triggered by button presses. You could adapt it by “simply” not initialising the SD card you don’t have, and making both playback calls use the one you do have by editing line 75 or 79.

You may need to increase the buffer sizes from the 2k allocated at lines 52 and 53. Beyond 32k is fairly pointless, unless your SD cards are really poor…
 
Before the A1 & A2 rating, virtually all were optimized only for sequential access, because that's the only mode cameras use.

I'm realizing the Amazon Basics that performs worse actually is an A2, however the the A1 outperforms it in the SD card wav file test.

My understanding is that an A2 card should perform better. Does the Teensy library not take advantage of the A2 specs? Or am I missing something else?
 
Back
Top