[<prev] [next>] [<thread-prev] [day] [month] [year] [list]
Message-Id: <20191030.121657.2103053708806525889.davem@davemloft.net>
Date: Wed, 30 Oct 2019 12:16:57 -0700 (PDT)
From: David Miller <davem@...emloft.net>
To: jon.maloy@...csson.com
Cc: netdev@...r.kernel.org, tung.q.nguyen@...tech.com.au,
hoang.h.le@...tech.com.au, lxin@...hat.com, shuali@...hat.com,
ying.xue@...driver.com, edumazet@...gle.com,
tipc-discussion@...ts.sourceforge.net
Subject: Re: [net-next 1/1] tipc: add smart nagle feature
From: Jon Maloy <jon.maloy@...csson.com>
Date: Wed, 30 Oct 2019 14:00:41 +0100
> We introduce a feature that works like a combination of TCP_NAGLE and
> TCP_CORK, but without some of the weaknesses of those. In particular,
> we will not observe long delivery delays because of delayed acks, since
> the algorithm itself decides if and when acks are to be sent from the
> receiving peer.
>
> - The nagle property as such is determined by manipulating a new
> 'maxnagle' field in struct tipc_sock. If certain conditions are met,
> 'maxnagle' will define max size of the messages which can be bundled.
> If it is set to zero no messages are ever bundled, implying that the
> nagle property is disabled.
> - A socket with the nagle property enabled enters nagle mode when more
> than 4 messages have been sent out without receiving any data message
> from the peer.
> - A socket leaves nagle mode whenever it receives a data message from
> the peer.
>
> In nagle mode, messages smaller than 'maxnagle' are accumulated in the
> socket write queue. The last buffer in the queue is marked with a new
> 'ack_required' bit, which forces the receiving peer to send a CONN_ACK
> message back to the sender upon reception.
>
> The accumulated contents of the write queue is transmitted when one of
> the following events or conditions occur.
>
> - A CONN_ACK message is received from the peer.
> - A data message is received from the peer.
> - A SOCK_WAKEUP pseudo message is received from the link level.
> - The write queue contains more than 64 1k blocks of data.
> - The connection is being shut down.
> - There is no CONN_ACK message to expect. I.e., there is currently
> no outstanding message where the 'ack_required' bit was set. As a
> consequence, the first message added after we enter nagle mode
> is always sent directly with this bit set.
>
> This new feature gives a 50-100% improvement of throughput for small
> (i.e., less than MTU size) messages, while it might add up to one RTT
> to latency time when the socket is in nagle mode.
>
> Acked-by: Ying Xue <ying.xue@...dreiver.com>
> Signed-off-by: Jon Maloy <jon.maloy@...csson.com>
Applied, thanks Jon.
Powered by blists - more mailing lists