Speed problem - smbclient doesn't send duplicate ACKs in case of pacekt loss

Heinz Knocke knockefreebsd at o2.pl
Sun Jan 2 13:18:30 GMT 2005


Hi!

I'm not sure if this is an OS or Samba problem, so I send similar
questions to both: FreeBSD related list and Samba.

I'm a newbe here, so let me shortly introduce myself. I've been into
computer science for about 8 years, currently work on tcp tuning ,
especially for gigabit ethernet purposes. My favorite system is
FreeBSD.

So, I'm trying to tune samba on my two directly linked boxes and
encountered a strange problem.
When serving one big (1-2GB file) locally over lo0 transmission
reaches speed of about 32 MB/s which is OK.  But when doing the very
same thing over the network, speed drops to 10 MB/s. It's so because
of quite often single packet drops, which are detected by the server
only using RTO timeout. Smbclient simply doesn't send duplicate ACKs
to show that sth is missing, so server needs to wait whole RTO (as
long as ab. 300ms) and then resends missing packet, transmissions
resumes. Such beahovior appears every few seconds. Of course in result
of congestion window drop, speed is very unstable, raising with the
cwnd and dropping rapidly after RTO timeout. Thats why i think the
average speed is so low.

My general question is why it happens and what can I do about it? Is
it a samba side problem or OS' ? I don't expect to be the latter,
because netperf TCP stream gives as much as 720 Mbps.
One thing that specially makes me wonder, is that theoretically client
doesnt need to send duplicate ACK, because the missing segment is the
last in the burst sent (see packet dump extract below). So it may not
know if it's just missing or never sent. What should the TCP do then,
what may I tune?


Samba:
3.0.7 both smbclient and server, compiled from FreeBSD ports
totaly basic, default smb.conf, with TCP_NODELAY socket option only

hardware details:
Intel P4 2.8 Ghz , 512 MB RAM
SATA HDDs (capable of giving the test file with a speed of 52 MB/s
when writing to RAM directly)

net:
Marvell Gigabit Ethernet 32bit PCI NICs, using 9K jumbograms
capable of doing about 720 Mbps bandwith for TCP application
(meassured with netperf after link layer tuning).

OS:
FreeBSD 5-STABLE (Dec 19 20:48:37)

packet dumps:
server:
1104512342.542532 IP 10.10.10.1.445 > 10.10.10.2.49821: P
3807194718:3807198814(4096) ack 1971888923 win 32768
<nop,nop,timestamp 8099541 8263475>
1104512342.542541 IP 10.10.10.1.445 > 10.10.10.2.49821: P
3807198814:3807202910(4096) ack 1971888923 win 32768
<nop,nop,timestamp 8099541 8263475>
1104512342.542872 IP 10.10.10.2.49821 > 10.10.10.1.445: . ack
3807194718 win 31744 <nop,nop,timestamp 8263475 8099541>
1104512342.635501 IP 10.10.10.2.49821 > 10.10.10.1.445: . ack
3807198814 win 32768 <nop,nop,timestamp 8263485 8099541>
1104512342.956050 IP 10.10.10.1.445 > 10.10.10.2.49821: P
3807198814:3807202910(4096) ack 1971888923 win 32768
<nop,nop,timestamp 8099583 8263485>

client:
1104516217.899613 IP 10.10.10.1.445 > 10.10.10.2.49821: P
3807194718:3807198814(4096) ack 1971888923 win 32768
<nop,nop,timestamp 8099541 8263475>
1104516217.899629 IP 10.10.10.2.49821 > 10.10.10.1.445: . ack
3807194718 win 31744 <nop,nop,timestamp 8263475 8099541>
1104516217.992217 IP 10.10.10.2.49821 > 10.10.10.1.445: . ack
3807198814 win 32768 <nop,nop,timestamp 8263485 8099541>
1104516218.313000 IP 10.10.10.1.445 > 10.10.10.2.49821: P
3807198814:3807202910(4096) ack 1971888923 win 32768
<nop,nop,timestamp 8099541 8263475>



smb.conf:

[global]
   workgroup = MYGROUP
   server string = Samba Server
   security = user
   interfaces = 10.10.1.98,10.10.10.1
   log file = /var/log/samba/log.%m
   max log size = 50000
   log level = 1
   socket options = TCP_NODELAY
   dns proxy = no

[homes]
   comment = Home Directories
   browseable = no
   writable = yes

[test]
   comment = export SATA
   path = /mnt/sata/test
   guest ok = yes
   read only = yes









More information about the samba-technical mailing list