<HTML><HEAD>
<STYLE><!--
.hmmessage P
{
margin:0px;
padding:0px
}
body.hmmessage
{
font-size: 12pt;
font-family:Calibri
}
--></STYLE>
</HEAD>
<BODY class=hmmessage dir=ltr>
<DIV dir=ltr>
<DIV style="FONT-SIZE: 12pt; FONT-FAMILY: 'Tahoma'; COLOR: #000000">
<DIV>It seems another take-away is that the larger block sizes (and cache sizes) 
obtain the fastest transfer rates, which is what should be expected. 5.8MB/s 
appears to be the average.</DIV>
<DIV 
style='FONT-SIZE: small; TEXT-DECORATION: none; FONT-FAMILY: "Calibri"; FONT-WEIGHT: normal; COLOR: #000000; FONT-STYLE: normal; DISPLAY: inline'>
<DIV style="FONT: 10pt tahoma">
<DIV> </DIV>
<DIV style="BACKGROUND: #f5f5f5">
<DIV style="font-color: black"><B>From:</B> <A title=doug@crompton.com 
href="mailto:doug@crompton.com">Doug Crompton</A> </DIV>
<DIV><B>Sent:</B> Saturday, November 21, 2015 10:26 PM</DIV>
<DIV><B>To:</B> <A title=arm-allstar@hamvoip.org 
href="mailto:arm-allstar@hamvoip.org">ARM Allstar</A> </DIV>
<DIV><B>Subject:</B> Re: [arm-allstar] faster SD card write</DIV></DIV></DIV>
<DIV> </DIV></DIV>
<DIV 
style='FONT-SIZE: small; TEXT-DECORATION: none; FONT-FAMILY: "Calibri"; FONT-WEIGHT: normal; COLOR: #000000; FONT-STYLE: normal; DISPLAY: inline'>
<DIV dir=ltr><FONT color=#000000 face=Tahoma,sans-serif>OK so now we know that 
DD parameters have little effect on write speed in most cases. What really does 
have effect is the type of card and the speed of the writer. Most cheap writers 
are USB2 but to really achieve speed you need USB3 and a FAST card. Of course 
you pay for it and unless you are really impatient and write a lot of images it 
would not be worth it. If you are writing an occasional image to SD just start 
the burn and go get a cup of coffee!<BR><BR>Currently the fastest <B>write 
</B>speed for a micro SD card seems to be Sandisk at better than 
50MB/sec<BR><BR><A 
href="http://www.bhphotovideo.com/explora/photography/buying-guide/fastest-memory-cards-money-can-buy" 
target=_blank>http://www.bhphotovideo.com/explora/photography/buying-guide/fastest-memory-cards-money-can-buy</A><BR><BR 
id=FontBreak></FONT><FONT face=Tahoma,sans-serif><A 
href="http://highonandroid.com/android-accessories/fastest-micro-sd-card-shootout-samsung-vs-sony-vs-sandisk/" 
target=_blank><A 
href="http://highonandroid.com/android-accessories/fastest-micro-sd-card-shootout-samsung-vs-sony-vs-sandisk/" 
target=_blank>http://highonandroid.com/android-accessories/fastest-micro-sd-card-shootout-samsung-vs-sony-vs-sandisk/</A></A><BR><BR>BTW 
they are getting cheaper - the Sandisk Extreme pro 8Gb is $17 at amazon, about 
twice as much as the standard ultra card.<BR></FONT><BR><B><FONT 
style="FONT-SIZE: 16pt" size=4>73 Doug</FONT><FONT style="FONT-SIZE: 16pt" 
size=4><BR></FONT><FONT style="FONT-SIZE: 16pt" size=4>WA3DSP</FONT><FONT 
style="FONT-SIZE: 16pt" size=4><BR></FONT><FONT style="FONT-SIZE: 16pt" 
size=4>http://www.crompton.com/hamradio</FONT></B><FONT style="FONT-SIZE: 16pt" 
size=4><BR></FONT><BR><BR>
<DIV>> Date: Sat, 21 Nov 2015 21:13:10 -0500<BR>> From: 
kb4fxc@inttek.net<BR>> To: arm-allstar@hamvoip.org<BR>> Subject: Re: 
[arm-allstar] faster SD card write<BR>> <BR>> <BR>> Hi Guys,<BR>> 
<BR>> I found this thread interesting, too. Over the last few years, 
I've<BR>> written firmware images to hundreds or thousands of flash cards. 
And,<BR>> years ago, I just increased the buffer sizes in dd (probably 
following<BR>> advise from some website). The increased size made sense to 
me, it was<BR>> much faster and I didn't study it any further. Typically, 
the<BR>> "recommended" command I mention to people is very similar 
to:<BR>> <BR>> dd if=<input file> of=/dev/sdX bs=1M<BR>> <BR>> 
or<BR>> <BR>> zcat <gzipped input image file> | dd of=/dev/sdX 
bs=1M<BR>> <BR>> ...where /dev/sdX is the linux SD card block 
interface.<BR>> <BR>> So, since there is some interest and I'm wondering 
about the optimal<BR>> settings, too, I did some googling and testing. I 
found this webpage that<BR>> has some scripts: 
http://blog.tdg5.com/tuning-dd-block-size/ ...Please<BR>> find the test 
script I used attached to bottom of this message (below). <BR>> For this 
test, I transferred a 64MB file of zeros from /dev/zero.<BR>> <BR>> 
<BR>> I tried 3 test setups, all Linux:<BR>> <BR>> First, my primary 
setup is a roaring 4-core high-speed 3.6GHz 64-bit linux<BR>> PC running 
Debian Wheezy, with a cheapo 8GB Sandisk SD card attached via a<BR>> good 
performing external USB 2.0 hub. Here are the results:<BR>> <BR>> 
david-vb:/home/mcgough/ham/RasPi2# ./dd_obs_test.sh /dev/sdf<BR>> <BR>> 
block size : transfer rate<BR>> 512 : 2.2 MB/s<BR>> 1024 : 2.2 
MB/s<BR>> 2048 : 2.2 MB/s<BR>> 4096 : 5.8 MB/s<BR>> 8192 : 5.8 
MB/s<BR>> 16384 : 5.8 MB/s<BR>> 32768 : 5.8 MB/s<BR>> 65536 : 5.8 
MB/s<BR>> 131072 : 5.8 MB/s<BR>> 262144 : 5.8 MB/s<BR>> 524288 : 5.8 
MB/s<BR>> 1048576 : 5.4 MB/s<BR>> 2097152 : 5.8 MB/s<BR>> 4194304 : 5.4 
MB/s<BR>> 8388608 : 5.8 MB/s<BR>> 16777216 : 5.4 MB/s<BR>> 33554432 : 
5.4 MB/s<BR>> 67108864 : 5.4 MB/s<BR>> <BR>> Second, the same setup as 
above, except the SD card reader is plugged <BR>> directly into a USB 2.0 
port on the PC, rather than the external <BR>> hub...Virtually the same 
speed:<BR>> <BR>> david-vb:/home/mcgough/ham/RasPi2# ./dd_obs_test.sh 
/dev/sdf<BR>> block size : transfer rate<BR>> 512 : 2.4 MB/s<BR>> 1024 
: 2.2 MB/s<BR>> 2048 : 2.2 MB/s<BR>> 4096 : 5.8 MB/s<BR>> 8192 : 5.8 
MB/s<BR>> 16384 : 5.8 MB/s<BR>> 32768 : 5.8 MB/s<BR>> 65536 : 5.8 
MB/s<BR>> 131072 : 5.8 MB/s<BR>> 262144 : 5.8 MB/s<BR>> 524288 : 5.8 
MB/s<BR>> 1048576 : 5.8 MB/s<BR>> 2097152 : 5.4 MB/s<BR>> 4194304 : 5.8 
MB/s<BR>> 8388608 : 5.8 MB/s<BR>> 16777216 : 5.4 MB/s<BR>> 33554432 : 
5.3 MB/s<BR>> 67108864 : 5.4 MB/s<BR>> <BR>> Finally, the same test, 
using the same SD card reader, but now plugged <BR>> into a RPi2 USB port. 
Note that the RPi2 is running our latest & greatest <BR>> beta firmware 
with a 4.1.13 kernel. Also, the SD card block device is <BR>> now /dev/sda 
(it was /dev/sdf on the PC):<BR>> <BR>> <BR>> [root@RPi2-dev2 ~]# 
./dd_obs_test.sh /dev/sda<BR>> block size : transfer rate<BR>> 512 : 2.3 
MB/s<BR>> 1024 : 2.3 MB/s<BR>> 2048 : 2.4 MB/s<BR>> 4096 : 5.6 
MB/s<BR>> 8192 : 5.6 MB/s<BR>> 16384 : 5.6 MB/s<BR>> 32768 : 5.7 
MB/s<BR>> 65536 : 5.6 MB/s<BR>> 131072 : 5.6 MB/s<BR>> 262144 : 5.6 
MB/s<BR>> 524288 : 5.6 MB/s<BR>> 1048576 : 5.6 MB/s<BR>> 2097152 : 5.6 
MB/s<BR>> 4194304 : 5.6 MB/s<BR>> 8388608 : 5.6 MB/s<BR>> 16777216 : 
5.6 MB/s<BR>> 33554432 : 5.6 MB/s<BR>> 67108864 : 5.5 MB/s<BR>> 
<BR>> Again, using the RPi2 also yielded the results I expected.<BR>> 
<BR>> So, on the positive side, using a 1 megabyte buffer (like I typically 
<BR>> tell people) is perfectly acceptable....But, a smaller buffer is fine 
<BR>> too--ANY buffer size at least 4K bytes seems to yield optimal thru-put. 
<BR>> <BR>> NOTE that another useful test would be to monitor CPU use 
while performing <BR>> each test and report this as well...I expect the 
larger buffer sizes will <BR>> win here, slightly, with quickly diminishing 
returns once past perhaps <BR>> 128K byte sizes....<BR>> <BR>> As with 
everything, your mileage may vary. I recommend trying this script <BR>> on 
-YOUR- system, too. And, please report the results!<BR>> <BR>> Here is the 
script:<BR>> <BR>> 
#------------------------------------------------------------------------------------<BR>> 
#!/bin/bash<BR>> <BR>> # Since we're dealing with dd, abort if any errors 
occur<BR>> set -e<BR>> <BR>> TEST_FILE=${1:-dd_obs_testfile}<BR>> [ 
-e "$TEST_FILE" ]; TEST_FILE_EXISTS=$?<BR>> 
###TEST_FILE_SIZE=134217728<BR>> TEST_FILE_SIZE=67108864<BR>> <BR>> # 
Header<BR>> PRINTF_FORMAT="%8s : %s\n"<BR>> printf "$PRINTF_FORMAT" 'block 
size' 'transfer rate'<BR>> <BR>> # Block sizes of 512b 1K 2K 4K 8K 16K 32K 
64K 128K 256K 512K 1M 2M 4M 8M 16M 32M 64M<BR>> for BLOCK_SIZE in 512 1024 
2048 4096 8192 16384 32768 65536 131072 262144 <BR>> 524288 1048576 2097152 
4194304 8388608 16777216 33554432 67108864<BR>> do<BR>> # Calculate number 
of segments required to copy<BR>> COUNT=$(($TEST_FILE_SIZE / 
$BLOCK_SIZE))<BR>> <BR>> if [ $COUNT -le 0 ]; then<BR>> echo "Block 
size of $BLOCK_SIZE estimated to require $COUNT blocks, aborting further 
tests."<BR>> break<BR>> fi<BR>> <BR>> # Create a test file with the 
specified block size<BR>> DD_RESULT=$(dd if=/dev/zero of=$TEST_FILE 
bs=$BLOCK_SIZE count=$COUNT 2>&1 1>/dev/null)<BR>> <BR>> # 
Extract the transfer rate from dd's STDERR output<BR>> TRANSFER_RATE=$(echo 
$DD_RESULT | \grep --only-matching -E '[0-9.]+ ([MGk]?B|bytes)/s(ec)?')<BR>> 
<BR>> # Clean up the test file if we created one<BR>> [ $TEST_FILE_EXISTS 
-ne 0 ] && rm $TEST_FILE<BR>> <BR>> # Output the result<BR>> 
printf "$PRINTF_FORMAT" "$BLOCK_SIZE" "$TRANSFER_RATE"<BR>> done<BR>> 
#------------------------------------------------------------------------------------<BR>> 
<BR>> <BR>> Have fun!<BR>> <BR>> 73, David KB4FXC<BR>> <BR>> 
_______________________________________________<BR>> <BR>> arm-allstar 
mailing list<BR>> arm-allstar@hamvoip.org<BR>> 
http://lists.hamvoip.org/cgi-bin/mailman/listinfo/arm-allstar<BR>> <BR>> 
Visit the BBB and RPi2 web page - http://hamvoip.org<BR>> <BR></DIV></DIV>
<P>
<HR>
_______________________________________________<BR><BR>arm-allstar mailing 
list<BR>arm-allstar@hamvoip.org<BR>http://lists.hamvoip.org/cgi-bin/mailman/listinfo/arm-allstar<BR><BR>Visit 
the BBB and RPi2 web page - http://hamvoip.org</DIV></DIV></DIV></BODY></HTML>