From mboxrd@z Thu Jan 1 00:00:00 1970 From: Felix Fietkau Subject: Re: [PATCH v2 net-next] tcp: allow drivers to tweak TSQ logic Date: Tue, 28 Nov 2017 14:10:10 +0100 Message-ID: <5cc376a2-895e-68f6-cddd-1011b0fc26bd@nbd.name> References: <1510281664.2849.143.camel@edumazet-glaptop3.roam.corp.google.com> <1510444452.2849.149.camel@edumazet-glaptop3.roam.corp.google.com> Mime-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit Cc: netdev , Johannes Berg , =?UTF-8?Q?Toke_H=c3=b8iland-J=c3=b8rgensen?= , Kir Kolyshkin To: Eric Dumazet , David Miller Return-path: Received: from nbd.name ([46.4.11.11]:33778 "EHLO nbd.name" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751684AbdK1NKU (ORCPT ); Tue, 28 Nov 2017 08:10:20 -0500 In-Reply-To: <1510444452.2849.149.camel@edumazet-glaptop3.roam.corp.google.com> Content-Language: en-US Sender: netdev-owner@vger.kernel.org List-ID: On 2017-11-12 00:54, Eric Dumazet wrote: > From: Eric Dumazet > > 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