Re: [PATCH v3 net-next 2/2] tcp: Add Redundant Data Bundling (RDB)
From: Eric Dumazet <hidden>
Date: 2016-02-02 20:35:09
On Tue, 2016-02-02 at 20:23 +0100, Bendik Rønning Opstad wrote:
RDB is a mechanism that enables a TCP sender to bundle redundant
(already sent) data with TCP packets containing new data. By bundling
(retransmitting) already sent data with each TCP packet containing new
data, the connection will be more resistant to sporadic packet loss
which reduces the application layer latency significantly in congested
scenarios.
The main functionality added:
o Loss detection of hidden loss events: When bundling redundant data
with each packet, packet loss can be hidden from the TCP engine due
to lack of dupACKs. This is because the loss is "repaired" by the
redundant data in the packet coming after the lost packet. Based on
incoming ACKs, such hidden loss events are detected, and CWR state
is entered.
o When packets are scheduled for transmission, RDB replaces the SKB to
be sent with a modified SKB containing the redundant data of
previously sent data segments from the TCP output queue.Really this looks very complicated. Why not simply append the new skb content to prior one ? skb_still_in_host_queue(sk, prior_skb) would also tell you if the skb is really available (ie its clone not sitting/waiting in a qdisc on the host) Note : select_size() always allocate skb with SKB_WITH_OVERHEAD(2048 - MAX_TCP_HEADER) available bytes in skb->data. Also note that tcp_collapse_retrans() is very similar to your needs. You might simply expand it.