Talk:RPi SD cards
This is a consolidation of the SD card information in one place; the SD card is an essential part of the Raspberry Pi and a card cannot be used elsewhere unless it is reformatted. Hopefully, this will provide a greater focus on the SD card.
The working / non-working verification data has been rebuilt from the history records of pages RPi_VerifiedPeripherals#SD_cards and the previous RaspberryPiBoardVerifiedPeripherals. The verification table is based on an initial work from User:83a/SD_Cards. Those pages had become extraordinarily long. I believe that I have checked the accuracy of the table, but have removed links to vendors, as there are often several vendors for each card. SimonSmall (talk) 00:24, 2 January 2013 (UTC)
Benchmarks are unreliable
The current read and write speeds are unreliable, the method for determining them are not accurate. The commands that have been used for most benchmarks is:
dd if=/dev/zero of=~/test.tmp bs=500K count=1024 dd if=~/test.tmp of=/dev/null bs=500K count=1024
There is a fundamental flaw in this, its results are always higher than the actual read/write speeds because the filesystem cache is involved. This makes write performance pretty unpredictable because buffers are not flushed. I tried to improve these benchmarks by adding timing information and sync, but these are still imperfect.
What about testing read performance using:
dd if=/dev/mmcblk0 of=/dev/null bs=4M count=128
Write performance is still tricky as the file system must be unmounted first when performing direct I/O (to avoid filesystem corruption). The best we can do is relying on fsync:
dd if=/dev/zero of=~/test.tmp bs=4M count=128
In my measurements on a brand-new SanDisk Ultra class 10 SDHC 8GB, block sizes of 1M and 4M performed similar (13.1 MB/s and 13.2 MB/s respectively), this possibly results from the intermediate file system layer. Note: numbers with a k and M suffix are base-2, therefore when 1M equals 1024K.
Question: should we move all old data to a new page and ask editors to re-do experiments and include new experiments on this page?
However the benchmark is done, I think that for consistency, there needs to be a section showing how to calculate the results. dd shows the output size in MB, which dd(1) says is 1000*1000, e.g.:
sync; time dd if=/dev/zero of=~/test.tmp bs=500K count=1024; time sync 1024+0 records in 1024+0 records out 524288000 bytes (524 MB) copied, 97.0954 s, 5.4 MB/s
Note this is despite the fact that the command line specifies K, which is 1024, according to dd(1).