[Samba] SMB throughput inquiry, Jeremy, and James' bow tie

Linda W samba at tlinx.org
Wed Jul 31 10:37:58 MDT 2013

Stan Hoeppner wrote:
> With FDX fast ethernet steady SMB throughput was ~8.5MB/s.  FTP and HTTP
> throughput were ~11.5MB/s.  With GbE steady SMB throughput is ~23MB/s,
> nearly a 3x improvement, making large file copies such as ISOs much
> speedier.  However ProFTPd and Lighttpd throughput are both a steady
> ~48MB/s, just over double the SMB throughput.
Hi Stan --- I've done a lot of in throughput testing on my home network.

Now that you've made the jump to 1Gb, have you given thought to
move to jumbo packet sizes?   I found that moving up to a 9000 byte packet
size (9014 frame size) gave the single best throughput upgrade on winXP.

My best throughput rates on WinXP were in the 80-90MBps range, while on 
That increased to 125MB/s max write throughput and 119MB/s max read 

The reads are 6% slower due to the round-trip time it takes the requester to
do the next read.

Without that you are unlikely to get more than 40-50MB/s. 

In my recent testing with a 20Mb connection (An intel 540 dual-interface 
at each end, wired straight through, end-to-end (no intervening 
switches).  I
further optimized my test setup and wrote a test prog to help my testing:
/h> iotest
iotest [-h]|[BlockSize]; Using Defaults: Count 128 × BS 64M
R:128×64M: 8.0GB:18.28s:448.0MB/s
W:128×64M: 8.0GB:15.15s:540.7MB/s
I only got it a few months back, and haven't made much progress in getting
it any faster -- hitting Samba's single threaded limits -- based on the 
single threaded server/user design.

When I say I optimized my test setup -- I separated network throughput
testing from disk-performance.  They need to be tackeled separately, and 
are important.

Note I am using 64MB transfer sizes for my file in the test... as that
is about about the largest optimal for this setup.  I sometimes get
around same perf with 32MB xfer sizes, but higher and lower, I start
experiencing drop-offs:
/h> iotest 32M
R:256×32M: 8.0GB:18.59s:440.5MB/s
W:256×32M: 8.0GB:14.68s:557.9MB/s
/h> iotest 16M
R:512×16M: 8.0GB:26.58s:308.2MB/s
W:512×16M: 8.0GB:16.74s:489.2MB/s
/h> iotest 8M
R:1K×8M: 8.0GB:24.75s:330.9MB/s
W:1K×8M: 8.0GB:19.31s:424.1MB/s
/h> iotest 4M
R:2K×4M: 8.0GB:27.13s:301.9MB/s
W:2K×4M: 8.0GB:22.29s:367.5MB/s
/h> iotest 128M
R:64×128M: 8.0GB:21.00s:390.0MB/s
W:64×128M: 8.0GB:15.03s:544.7MB/s

Note  -- I haven't tested with ftp or http.  My only other testing was
with 'scp' which doesn't compete at all with SMB due to the encryption

As a ballpark, a quick run (output looks different due to
it being a different machine w/differently installed base HW)
over a 1Gb gave (note, this was recorded with me logged in
via remote desktop over the same connection).

>  iotest
R:512+0 records in
512+0 records out
4294967296 bytes (4.3 GB) copied, 37.2361 s, 115 MB/s
W:512+0 records in
512+0 records out
4294967296 bytes (4.3 GB) copied, 36.1117 s, 119 MB/s

You'll find that switching to jumbo packets will give you a
3x-4x improvement, maybe higher or lower depending on your
network cards and such.

After that you also need to tune the TCP/IP stacks
on the server and client (WinXP can benefit from tuning
more than Win7), linux has lots of nobs as well.
Google is your friend, and I could say more, but this
note is too long already...

Hope that gives you some ideas.

oh... to separate the network from disk testing,
use cygwin on client.  on server create devices
in your home directory for /dev/zero (as a source
device) and /dev/null (as a target).


More information about the samba mailing list