On 2017-11-12 00:54, Eric Dumazet wrote: > From: Eric Dumazet <eduma...@google.com> > > I had many reports that TSQ logic breaks wifi aggregation. > > Current logic is to allow up to 1 ms of bytes to be queued into qdisc > and drivers queues. > > But Wifi aggregation needs a bigger budget to allow bigger rates to > be discovered by various TCP Congestion Controls algorithms. > > This patch adds an extra socket field, allowing wifi drivers to select > another log scale to derive TCP Small Queue credit from current pacing > rate. > > Initial value is 10, meaning that this patch does not change current > behavior. > > We expect wifi drivers to set this field to smaller values (tests have > been done with values from 6 to 9) > > They would have to use following template : > > if (skb->sk && skb->sk->sk_pacing_shift != MY_PACING_SHIFT) > skb->sk->sk_pacing_shift = MY_PACING_SHIFT; I did some experiments with this approach (with your patch backported to a 4.9 kernel), and I got some crashes. After looking at the crashes and code some more, it seems that this would need some extra checks to ensure that skb->sk is a full struct sock, instead of just a struct request_sock. Should this be done by checking for skb->sk->sk_state == TCP_ESTABLISHED? It seems to me that this might introduce some extra overhead.
- Felix