How to check/test internal card reader speed

benchmarkblock-devicesd card

I got new SD card claimed to be 10 class of speed, but internal Disk utility in linux after test showed up only 6th class of speed.
How can I check my card reader speed to be sure that it's not the limit of the device, but the limit of a card?

I don't have any approved SD cards to perform tests with them.

My card reader shows like this in lspci:

0000:07:00.0 FireWire (IEEE 1394): Ricoh Co Ltd R5C832 IEEE 1394 Controller (rev 05)
0000:07:00.1 SD Host controller: Ricoh Co Ltd R5C822 SD/SDIO/MMC/MS/MSPro Host Adapter (rev 22)
0000:07:00.2 System peripheral: Ricoh Co Ltd R5C592 Memory Stick Bus Host Adapter (rev 12)
0000:07:00.3 System peripheral: Ricoh Co Ltd xD-Picture Card Controller (rev 12)

Best Answer

Testing the speed of an internal card reader with Disks

In order to find the maximum throughput via the internal card reader the other components must be faster (the read/write process on both sides of the card reader, and in particular, the card. And I think the real card speed [which may differ from the nominal speed] can only be verified in a system with a card reader, that is not the bottleneck (for example an adapter via USB 3).

  • We can expect that a good USB 3 adapter will be at least as fast as the memory card used in the test. We can also expect that an internal HDD or SSD is faster than the card. So it should be enough that the card and the USB 3 adapter are faster than the internal card reader in order to test the speed for reading and/or writing (of the internal card reader).

    A good test procedure includes flushing the buffers. Let us rely on Disks alias gnome-disks and simply run it using

    • the internal card reader
    • a USB 3 adapter via a USB 3 port on the computer

    • Remember to tick the box in order to test also writing.

If using the internal card reader takes longer time, you can conclude that it is the bottleneck.

enter image description here

General discussion including testing also other hardware

It is very important that you test not only what is the output from for example dd or pv, but you should measure the time of the read or write command including flushing the buffers. The following method should work in linux,

time ( read or write command ; sync )

and then divide the amount of data written by the 'real' time to get the real speed.

It is a good idea to test read/write of a single big file and of 'many small files'. (Writing 'many small files' is often much slower than writing a single big file measured in MB/s).

You can use some standard test or design a test for your particular use case, which may rank combinations of hardware and software in a different way from the standard test.

For write tests it is important that reading or creating the input is not the bottleneck. Running in a live system with the data in RAM is one alternative. For read tests you can write to /dev/null.

To find the bottleneck you can try with different

  • cards (different nominal speed)
  • adapters
  • USB ports or built-in card slots
  • computers
  • operating systems
Related Question