1.3.72: Acks, both double and missing, affect slip rx speed

Jeff Epler (jepler@inetnebr.com)
Sun, 10 Mar 1996 18:03:15 -0600 (CST)


[Originally posted to linux.dev.{net,kernel}. They haven't shown up on the
vger list archive after about a week, so I'm reposting directly.
I would appreciate a cc: of your responses. I follow linux.dev.net, but
our feed of it here seems pretty shaky.]

Summary: Double-acks are the least of my problems. Linux doesn't like
to ack short packets on high volume connections, and this kills throughput.

Vital info: cslip, mtu 296, kernel 1.3.71, diald-0.12, 14.4k no-name
modem, low ftp speeds of ~800cps.

Long version:
I've been having a problem with Linux lately, since mid-50's kernels. I
get disappointingly low speed on ftp 'get' commands over my slip link.
Everything is set up correctly with my provider (mtu 296, cslip, &c) and
things work great under kernel 1.2.9. I use diald, but the problems
also exist with dip (in slip or cslip mode) and when using pppd
(2.2.0e). The problem also exists when I connect Linux to slirp rather
than my provider's slip server. Also, in both DOS and Linux I get
flawless zmodem transfers at >1600cps. In no case is transmit speed out
of the linux box affected, that's as snappy as ever.

Using tcpdump on the connection, I have cut out what I suspect are the
relevant portions. The problem seems to go like this:

Some tcp connection is going full blast. Then, for one reason or
another, I get a less than full packet (<256 bytes, in this case).
Linux fails to ack the packet (discarding it entirely?), and further
packets coming for that socket get discarded till the remote side
rewinds. This time it gives a full-sized packet and then Linux happily
acks (double acks everywhere, you'll notice) and the transfer begins
again.

This dump was produced with Linux 1.3.71, the connection was made by
diald. I snipped out some extraneous stuff (the stuff on the ftp port,
otherwise the slip line was unused at the time I ran this) and many
lines at the end. I have verified that this problem remains in 1.3.72.

I hope someone here has a guess about what is going on here. I don't
think it's an error on my part, but maybe..

Tcpdump output (Tcpdump-3.0.2-linux):

[Craie is running linux, falcon is running sunos 3.something. However,
this problem seems not confined to sun-running systems]
08:17:39.329703 falcon.ftp-data > craie.1273: S 1494784000:1494784000(0) win 24576 <mss 1460>
08:17:39.329703 craie.1273 > falcon.ftp-data: S 3275435241:3275435241(0) ack 1494784001 win 13312 <mss 256> [tos 0x8]
08:17:39.549703 falcon.ftp-data > craie.1273: . ack 1 win 24576
08:17:39.779703 falcon.ftp-data > craie.1273: . 1:257(256) ack 1 win 24576
08:17:39.779703 craie.1273 > falcon.ftp-data: . ack 257 win 13312
08:17:39.779703 craie.1273 > falcon.ftp-data: . ack 257 win 13312
08:17:39.889703 falcon.ftp-data > craie.1273: . 257:513(256) ack 1 win 24576
08:17:39.889703 craie.1273 > falcon.ftp-data: . ack 513 win 13312
08:17:39.889703 craie.1273 > falcon.ftp-data: . ack 513 win 13312
08:17:39.999703 falcon.ftp-data > craie.1273: . 513:769(256) ack 1 win 24576
08:17:39.999703 craie.1273 > falcon.ftp-data: . ack 769 win 13312
08:17:39.999703 craie.1273 > falcon.ftp-data: . ack 769 win 13312
[.. snip: all the packets in here had 256 bytes of data and were double acked]
08:17:48.909703 falcon.ftp-data > craie.1273: . 30465:30721(256) ack 1 win 24576
08:17:48.909703 craie.1273 > falcon.ftp-data: . ack 30721 win 13312
08:17:48.909703 craie.1273 > falcon.ftp-data: . ack 30721 win 13312
[Trouble starts: Packet with <256 data bytes comes, and the acks stop]
08:17:48.969703 falcon.ftp-data > craie.1273: . 30721:30976(255) ack 1 win 24576
08:17:49.039703 falcon.ftp-data > craie.1273: . 30976:31214(238) ack 1 win 24576
08:17:49.109703 falcon.ftp-data > craie.1273: . 31214:31470(256) ack 1 win 24576
08:17:49.179703 falcon.ftp-data > craie.1273: . 31470:31726(256) ack 1 win 24576
08:17:49.249703 falcon.ftp-data > craie.1273: . 31726:31982(256) ack 1 win 24576
08:17:49.309703 falcon.ftp-data > craie.1273: . 31982:32238(256) ack 1 win 24576
08:17:49.379703 falcon.ftp-data > craie.1273: . 32238:32494(256) ack 1 win 24576
08:17:49.449703 falcon.ftp-data > craie.1273: . 32494:32750(256) ack 1 win 24576
08:17:49.519703 falcon.ftp-data > craie.1273: . 32750:33006(256) ack 1 win 24576
08:17:49.579703 falcon.ftp-data > craie.1273: . 33006:33262(256) ack 1 win 24576
08:17:49.649703 falcon.ftp-data > craie.1273: . 33262:33518(256) ack 1 win 24576
08:17:49.719703 falcon.ftp-data > craie.1273: . 33518:33774(256) ack 1 win 24576
08:17:49.789703 falcon.ftp-data > craie.1273: . 33774:34030(256) ack 1 win 24576
08:17:49.849703 falcon.ftp-data > craie.1273: . 34030:34286(256) ack 1 win 24576
08:17:49.919703 falcon.ftp-data > craie.1273: . 34286:34542(256) ack 1 win 24576
08:17:49.989703 falcon.ftp-data > craie.1273: . 34542:34798(256) ack 1 win 24576
08:17:50.059703 falcon.ftp-data > craie.1273: . 34798:35054(256) ack 1 win 24576
08:17:50.119703 falcon.ftp-data > craie.1273: . 35054:35310(256) ack 1 win 24576
08:17:50.189703 falcon.ftp-data > craie.1273: . 35310:35566(256) ack 1 win 24576
08:17:50.259703 falcon.ftp-data > craie.1273: . 35566:35822(256) ack 1 win 24576
08:17:50.329703 falcon.ftp-data > craie.1273: . 35822:36078(256) ack 1 win 24576
08:17:50.389703 falcon.ftp-data > craie.1273: . 36078:36334(256) ack 1 win 24576
08:17:50.459703 falcon.ftp-data > craie.1273: . 36334:36590(256) ack 1 win 24576
08:17:50.529703 falcon.ftp-data > craie.1273: . 36590:36846(256) ack 1 win 24576
08:17:50.599703 falcon.ftp-data > craie.1273: . 36846:37102(256) ack 1 win 24576
08:17:50.669703 falcon.ftp-data > craie.1273: . 37102:37358(256) ack 1 win 24576
08:17:50.729703 falcon.ftp-data > craie.1273: . 37358:37614(256) ack 1 win 24576
08:17:50.799703 falcon.ftp-data > craie.1273: . 37614:37870(256) ack 1 win 24576
08:17:50.869703 falcon.ftp-data > craie.1273: . 37870:38126(256) ack 1 win 24576
08:17:50.939703 falcon.ftp-data > craie.1273: . 38126:38382(256) ack 1 win 24576
08:17:51.009703 falcon.ftp-data > craie.1273: . 38382:38638(256) ack 1 win 24576
08:17:51.069703 falcon.ftp-data > craie.1273: . 38638:38894(256) ack 1 win 24576
08:17:51.139703 falcon.ftp-data > craie.1273: . 38894:39150(256) ack 1 win 24576
08:17:51.209703 falcon.ftp-data > craie.1273: . 39150:39406(256) ack 1 win 24576
08:17:51.279703 falcon.ftp-data > craie.1273: . 39406:39662(256) ack 1 win 24576
08:17:51.339703 falcon.ftp-data > craie.1273: . 39662:39918(256) ack 1 win 24576
08:17:51.409703 falcon.ftp-data > craie.1273: . 39918:40174(256) ack 1 win 24576
08:17:51.479703 falcon.ftp-data > craie.1273: . 40174:40430(256) ack 1 win 24576
08:17:51.549703 falcon.ftp-data > craie.1273: . 40430:40686(256) ack 1 win 24576
08:17:51.609703 falcon.ftp-data > craie.1273: . 40686:40942(256) ack 1 win 24576
08:17:51.679703 falcon.ftp-data > craie.1273: . 40942:41198(256) ack 1 win 24576
08:17:51.749703 falcon.ftp-data > craie.1273: . 41198:41454(256) ack 1 win 24576
08:17:51.819703 falcon.ftp-data > craie.1273: . 41454:41710(256) ack 1 win 24576
08:17:51.879703 falcon.ftp-data > craie.1273: . 41710:41966(256) ack 1 win 24576
08:17:51.949703 falcon.ftp-data > craie.1273: . 41966:42222(256) ack 1 win 24576
08:17:52.019703 falcon.ftp-data > craie.1273: . 42222:42478(256) ack 1 win 24576
08:17:52.089703 falcon.ftp-data > craie.1273: . 42478:42734(256) ack 1 win 24576
08:17:52.149703 falcon.ftp-data > craie.1273: . 42734:42990(256) ack 1 win 24576
08:17:52.219703 falcon.ftp-data > craie.1273: . 42990:43246(256) ack 1 win 24576
08:17:52.289703 falcon.ftp-data > craie.1273: . 43246:43502(256) ack 1 win 24576
08:17:52.359703 falcon.ftp-data > craie.1273: . 43502:43758(256) ack 1 win 24576
08:17:52.419703 falcon.ftp-data > craie.1273: . 43758:44014(256) ack 1 win 24576
[Falcon gives up on the ack, backs up .. But this time sends a 256-byte packet]
08:17:54.599703 falcon.ftp-data > craie.1273: . 30721:30977(256) ack 1 win 24576
08:17:54.599703 craie.1273 > falcon.ftp-data: . ack 30977 win 13312
08:17:54.599703 craie.1273 > falcon.ftp-data: . ack 30977 win 13312
08:17:54.909703 falcon.ftp-data > craie.1273: . 30977:31233(256) ack 1 win 24576
08:17:54.909703 craie.1273 > falcon.ftp-data: . ack 31233 win 13312
08:17:54.909703 craie.1273 > falcon.ftp-data: . ack 31233 win 13312
[.. Deletia again]
08:18:03.979703 falcon.ftp-data > craie.1273: . 62977:63233(256) ack 1 win 24576
08:18:03.979703 craie.1273 > falcon.ftp-data: . ack 63233 win 13312
08:18:04.039703 craie.1273 > falcon.ftp-data: . ack 63233 win 13312
08:18:04.049703 falcon.ftp-data > craie.1273: . 63233:63484(251) ack 1 win 24576
[.. Snip]
08:18:06.009703 falcon.ftp-data > craie.1273: . 70642:70898(256) ack 1 win 24576
[Resumes normality here, until next short packet]
08:18:08.579703 falcon.ftp-data > craie.1273: . 63233:63489(256) ack 1 win 24576
08:18:08.579703 craie.1273 > falcon.ftp-data: . ack 63489 win 13312
08:18:08.579703 craie.1273 > falcon.ftp-data: . ack 63489 win 13312
[.. Deletia till end]

-- 
\/ Jeff Epler jepler@{inetnebr.com|cse.unl.edu|herbie.unl.edu|nyx.cs.du.edu}