Re: [tcpm] TCP tuning
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [tcpm] TCP tuning



On Feb 3, 2010, at 7:49 PM, Joe Touch wrote:
rick jones wrote:
Modulo slow-start after idle.

I've already cited the work that explains that this doesn't actually
happen on web exchanges exactly because the client request is small
(doesn't matter that its side was idle), and the client request causes
the server to think it wasn't idle either. That's in the ToN paper I cited.

Yes, if/when that's fixed, it'll be an issue. Not right now, though.

I'd not looked far ahead enough in my unread mail queue when I sent my message. Still... I have run some netperf TCP_RR tests between my home system:

Darwin rick-2 9.8.0 Darwin Kernel Version 9.8.0: Wed Jul 15 16:55:01 PDT 2009; root:xnu-1228.15.4~1/RELEASE_I386 i386

and netperf.org:

Linux www.netperf.org 2.6.31-15-server #50-Ubuntu SMP Tue Nov 10 15:50:36 UTC 2009 x86_64 GNU/Linux

To avoid any issues with TSO clouding the trace, I disabled TSO and GSO on netperf.org.

On my home system I did ./configure --enable-intervals then built netperf, and then while running tcpdump on netperf.org executed:

src/netperf -l 300 -p 12345 -t TCP_RR -H netperf.org -b 1 -w 1s -- -r 128,16384 -P 23456 TCP REQUEST/RESPONSE TEST from (null) (0.0.0.0) port 23456 AF_INET to netperf.org (192.6.38.59) port 23456 AF_INET : interval
Local /Remote
Socket Size   Request  Resp.   Elapsed  Trans.
Send   Recv   Size     Size    Time     Rate
bytes  Bytes  bytes    bytes   secs.    per sec

131070 262140 128      16384   300.00      1.00
16384  87380

Netperf will send a 128 byte request to netperf.org, which will respond immediately. Netperf then waits one second before sending the next request etc etc...

The raw and "cooked" traces from that can be seen at:

ftp://ftp.netperf.org/traces

There one can also see "nothinktime" raw and cooked traces for:

[rick-2:~/netperf2_work] perfgeek% src/netperf -l 30 -p 12345 -t TCP_RR -H netperf.org -- -r 128,16384 -P 23456 TCP REQUEST/RESPONSE TEST from (null) (0.0.0.0) port 23456 AF_INET to netperf.org (192.6.38.59) port 23456 AF_INET : interval
tcpLocal /Remote
Socket Size   Request  Resp.   Elapsed  Trans.
Send   Recv   Size     Size    Time     Rate
bytes  Bytes  bytes    bytes   secs.    per sec

131070 262140 128      16384   30.00       7.60
16384  87380

It certainly appears that *something* is holding-back the server in the "thinktime" case - I don't know if it is slowstart after idle, but it is something that does not appear to be holding-back the server in the "nothinktime" case. Hmm... while writing this message, I have remembered there is a sysctl in linux to control slow-start after idle, so there is also a third trace, one with thinktime, and net.ipv4.tcp_slow_start_after_idle = 0. From the look of that trace, and how it compares with the other two, I think that Linux 2.6.31 at least is not actually having the arriving request cause it to think it wasn't idle?

happy benchmarking,

rick jones

PS - I suppose if I'd been thinking more clearly, I'd have also included --enable-historgram in the ./configure command and been able to give a histogram of the response times (adding a -v 2 option to the global command line options), but I suppose that can be guesstimated from the traces.

http://homepage.mac.com/perfgeek


Note: Messages sent to this list are the opinions of the senders and do not imply endorsement by the IETF.