For people that need some background, this Wikipedia article may be
helpful:  https://en.wikipedia.org/wiki/TCP_delayed_acknowledgment.  The
SPLIT packet change is intended to work around issues when the unbuffered
send is used with a peer that supports RFC 1122.

In the unbuffered send case, the send operation blocks until the packet is
sent and ACKed.  Per RFC 1122, the peer may delay sending the ACK for up to
500 Msec.  So the performance of the unbuffered send is abysmal when
sending to an RFC 1122 client.

The split basically breaks each TCP send into two packets.  RFC 1122 does
*require* that an ACK be sent after two packets are received.  If you are
seeing different behavior, then those peers are not conforming to RFC
1122.  Perhaps there is some other standard.

I think that the unbuffered send logic is generally very bad and I have
suggested removing it in the past.  The buffered send performance is much
better.  We decided to retain the unbuffered send only because it does use
less memory since no write buffering is required.

I am not 100% sure of this, but I still think that it would be better to
remove the unbuffered TCP send logic rather than remove the packet split
logic.  I don't see how removing the split makes the unbuffered send
better.  It does not fix anything and certainly breaks the RFC 1122 case.
The unbuffered TCP send behavior is bad without the split and, according to
your PR, it is also bad with the split.  But my feeling is not strong so
just take that as my 2 cents worth.

Greg

On Tue, Oct 12, 2021 at 8:10 PM Takashi Yamamoto
<yamam...@midokura.com.invalid> wrote:

> hi,
>
> i submitted a PR to remove NET_TCP_SPLIT.
> https://github.com/apache/incubator-nuttx/pull/4660
>
> i'm posting this here because a feature removal should be reviewed by
> wider audience.
> especially, if you are relying on it, please speak up.
>

Reply via email to