> So now the question is: when does this new nagle algorithm delay packets in the
> write queue? It _must_ do something, otherwise TCP_NODELAY would obviously be a
> noop.
It allows _one_ incomplete segment to fly. Minshall and BSD behave absolutely
similarly in all the curcumstances except for some exceptional situations.
Andrea, I have better question: what "classic" Nagle algorithm
does in this case? Just think and you will find the issue non-trivial. 8)8)
> This was all my wondering about uncorking not being equivalent to SIOCPUSH.
The samples are mostly equivalent.
The difference may happen depending on previous history of the connection.
> If I understood wall they would been equivalent if I did write(100000*MSS)
> instead of write(100000*MSS+1).
Under CORK you may do everything. Segmentation will be perfect in any case.
I spoke about default behaviour.
> IMHO latency can be fixed in a much better way using ioctl(SIOCPUSH)
No doubts.
Only all these tricks with CORKs, MOREs, PUSHes are orthogonal issue.
Nagling is used on generic connections, which do not know and do not want
to know anything about problems of tcp, and just write bytes to socket
and read bytes from it.
> Legacy userspace
Please, rewind thread and reread Linus' mail containing mantra
to read in such hard cases. 8)
Applications not using corking or some other our home-made extensions
are not "legacy". The word is different: they are "standard"
de facto and de jure.
Alexey
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
Please read the FAQ at http://www.tux.org/lkml/