TCP push sometimes missing under 2.2.5?

Jens-Uwe Mager (jum@ra.han.de)
Fri, 9 Apr 1999 22:09:46 GMT


I am seeing strange performance problems on an application that sends
records across a TCP socket using writev (Nagle is turned off). I am using
writev with two iovec's, one with a fixed length header and another one
with the data payload. Upon sniffing the Ethernet I see that on some of
the short writev's the TCP push bit is not set as the client in question
(MacOS 8.5.1 with OpenTransport) does delay it's ACK about 50ms if the
PUSH bit is not set. Ok, it is a bit strange that the Mac uses the PUSH
bit in that way, but I cannot change that.

The problem does not appear with 2.0.36, there the PUSH bit is always set
on the last packet after all data that belong to one write are sent. I
played a bit with the PSH_NEEDED macro and if I always send a PUSH the
performance problem with small packets goes away, but larger writev's that
need the windows do run much slower due to the many ACK's induced by the
PUSH bits. I looked at the logic in tcp.c and I fail to understand why the
PUSH bit is not set on some of the packets. Does anybody have any idea?

-- 
Jens-Uwe Mager	<pgp-mailto:62CFDB25>

- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.rutgers.edu Please read the FAQ at http://www.tux.org/lkml/