SDCard Testing
This page discusses additional tests for SD Cards. The 'base' tests are described in NAND_Testing.
Flashbench random I/O test procedure
Preparations
- On an XO with the latest stable OS release installed
- Download and compile flashbench from git://git.linaro.org/people/arnd/flashbench.git (or fetch a precompiled x86 version from http://dev.laptop.org/~martin/flashbench/flashbench )
- Download the flashbench wrapper script from http://dev.laptop.org/~martin/flashbench/run_test.sh , place it in the same directory as the flashbench executable
Procedure
- When booting the test bench machine, ensure no SD cards are present in the external slot
- Insert uSD card with adapter in the external slot
- Open a Sugar Terminal or GNOME Terminal
- run
flashbench_sdtest.sh /dev/mmcblk1
- Copy output
Note: unfortunately as of May 2011 flashbench has a bug that prevents writing output to a file.
Cards tested
"A" SanDisk C2 4GB uSD NAME=SU04G OEMID=0x5344 MANFID=0x000003 HWREV=0x8 FWREV=0x0 "A1" SanDisk C2 4GB uSD (mislabelled batch?) NAME=SU04G OEMID=0x5344 MANFID=0x000003 HWREV=0x8 FWREV=0x0 "B" Toshiba (?) C4 4GB uSD NAME=SD OEMID=0x4144 MANFID=0x00001d HWREV=0x1 FWREV=0x0 "C" SanDisk C2 8GB uSD== NAME=SA08G OEMID=0x5344 MANFID=0x000002 HWREV=0x0 FWREV=0x6
Results
Segment size vs throughput.
The first and last examples are based on numbers provided by Arnd Bergmann \
Size | Sample High perf card | A (C2-4GB) | A1 (C2-4GB) | B (C4-4GB) | C (C2-8GB) | Unusable card |
---|---|---|---|---|---|---|
4MiB | 8.86M/s | 3.14M/s | 3.51M/s | 5.84M/s | 4.19M/s | 15M/s |
2MiB | 6.3M/s | 4.09M/s | 2.9M/s | 3.6M/s | 2.59M/s | 9.47M/s |
1MiB | 5.02M/s | 2.84M/s | 2.84M/s | 2.21M/s | 1.35M/s | 4.47M/s |
512KiB | 5.16M/s | 1.33M/s | 2.45M/s | 1.3M/s | 649K/s | 1.61M/s |
256KiB | 4.69M/s | 868K/s | 2.3M/s | 701K/s | 353K/s | 849K/s |
128KiB | 3.78M/s | 556K/s | 2.02M/s | 363K/s | 180K/s | 441K/s |
64KiB | 4.62M/s | 297K/s | 1.71M/s | 186K/s | 90.6K/s | 226K/s |
32KiB | 2.71M/s | 155K/s | 1.29M/s | 92K/s | 45.7K/s | 115K/s |
16KiB | 2.38M/s | 76K/s | 1.48M/s | 47K/s | 23.1K/s | 57K/s |
8KiB | 1.24M/s | 38K/s | 923K/s | 23K/s | 11.7K/s | 23K/s |
4KiB | 907K/s | 19K/s | 919K/s | 11.8K/s | 5.95K/s | 8K/s |
Technical discussion
Flashbench is useful to experimentally establish the operating parameters of the FTL embedded in an SD card. See https://wiki.linaro.org/WorkingGroups/Kernel/Projects/FlashCardSurvey for the author's own SD card survey.
In our case, we want to evaluate the suitability of an SD card for usage as the root filesystem of our Linux-powered laptops. The key factor is write/read performance in 4KB blocks as used by ext3/4, btrfs and other modern linux filesystems.
So the 4KiB row results are the strongest indicators of whether a particular SD card will be responsive under Linux.