Message ID | 1414431051.16231.23.camel@edumazet-glaptop2.roam.corp.google.com |
---|---|
State | Accepted, archived |
Delegated to: | David Miller |
Headers | show |
On 2014/10/28 2:30, Eric Dumazet wrote: > From: Toshiaki Makita <makita.toshiaki@lab.ntt.co.jp> > > This patch generalizes commit d6a4a1041176 ("tcp: GSO should be TSQ > friendly") to protocols using skb_set_owner_w() > > TCP uses its own destructor (tcp_wfree) and needs a more complex scheme > as explained in commit 6ff50cd55545 ("tcp: gso: do not generate out of > order packets") > > This allows UDP sockets using UFO to get proper backpressure, > thus avoiding qdisc drops and excessive cpu usage. > ... > [edumazet] Rewrote patch and changelog. This looks better in performance. I tested this patch and couldn't find any problem. Thank you for your reviewing and suggesting, Toshiaki Makita -- To unsubscribe from this list: send the line "unsubscribe netdev" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
From: Eric Dumazet <eric.dumazet@gmail.com> Date: Mon, 27 Oct 2014 10:30:51 -0700 > From: Toshiaki Makita <makita.toshiaki@lab.ntt.co.jp> > > This patch generalizes commit d6a4a1041176 ("tcp: GSO should be TSQ > friendly") to protocols using skb_set_owner_w() > > TCP uses its own destructor (tcp_wfree) and needs a more complex scheme > as explained in commit 6ff50cd55545 ("tcp: gso: do not generate out of > order packets") > > This allows UDP sockets using UFO to get proper backpressure, > thus avoiding qdisc drops and excessive cpu usage. > > Here are performance test results (macvlan on vlan): ... > [edumazet] Rewrote patch and changelog. > > Signed-off-by: Toshiaki Makita <makita.toshiaki@lab.ntt.co.jp> > Signed-off-by: Eric Dumazet <edumazet@google.com> Applied, thanks everyone. -- To unsubscribe from this list: send the line "unsubscribe netdev" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
diff --git a/net/core/skbuff.c b/net/core/skbuff.c index c16615bfb61edd2a1dae9ef7935a3153d78dc4df..e48e5c02e877d9a9389ea54f0e015ba041d3f2a7 100644 --- a/net/core/skbuff.c +++ b/net/core/skbuff.c @@ -3099,6 +3099,16 @@ perform_csum_check: * (see validate_xmit_skb_list() for example) */ segs->prev = tail; + + /* Following permits correct backpressure, for protocols + * using skb_set_owner_w(). + * Idea is to tranfert ownership from head_skb to last segment. + */ + if (head_skb->destructor == sock_wfree) { + swap(tail->truesize, head_skb->truesize); + swap(tail->destructor, head_skb->destructor); + swap(tail->sk, head_skb->sk); + } return segs; err: