Re: [PATCH net] tcp: restore autocorking

2018-05-03 Thread David Miller
From: Eric Dumazet 
Date: Wed,  2 May 2018 20:25:13 -0700

> When adding rb-tree for TCP retransmit queue, we inadvertently broke
> TCP autocorking.
> 
> tcp_should_autocork() should really check if the rtx queue is not empty.
> 
> Tested:
 ...
> Fixes: 75c119afe14f ("tcp: implement rb-tree based retransmit queue")
> Signed-off-by: Eric Dumazet 
> Reported-by: Michael Wenig 
> Tested-by: Michael Wenig 

Applied and queued up for -stable, thanks Eric.


Re: [PATCH net] tcp: restore autocorking

2018-05-03 Thread Soheil Hassas Yeganeh
On Wed, May 2, 2018 at 11:25 PM, Eric Dumazet  wrote:
> Fixes: 75c119afe14f ("tcp: implement rb-tree based retransmit queue")
> Signed-off-by: Eric Dumazet 
> Reported-by: Michael Wenig 
> Tested-by: Michael Wenig 

Acked-by: Soheil Hassas Yeganeh 

Thank you for catching and fixing this!


Re: [PATCH net] tcp: restore autocorking

2018-05-03 Thread Neal Cardwell
On Wed, May 2, 2018 at 11:25 PM Eric Dumazet  wrote:

> When adding rb-tree for TCP retransmit queue, we inadvertently broke
> TCP autocorking.

> tcp_should_autocork() should really check if the rtx queue is not empty.

...

> Fixes: 75c119afe14f ("tcp: implement rb-tree based retransmit queue")
> Signed-off-by: Eric Dumazet 
> Reported-by: Michael Wenig 
> Tested-by: Michael Wenig 
> ---

Acked-by: Neal Cardwell 

Nice. Thanks, Eric!

neal


RE: [PATCH net] tcp: restore autocorking

2018-05-03 Thread Michael Wenig
Thank you, Eric, for fixing this!

Michael 

-Original Message-
From: Eric Dumazet [mailto:eduma...@google.com] 
Sent: Wednesday, May 2, 2018 8:25 PM
To: David S . Miller 
Cc: netdev ; Eric Dumazet ; 
Michael Wenig ; Eric Dumazet 
Subject: [PATCH net] tcp: restore autocorking

When adding rb-tree for TCP retransmit queue, we inadvertently broke TCP 
autocorking.

tcp_should_autocork() should really check if the rtx queue is not empty.

Tested:

Before the fix :
$ nstat -n;./netperf -H 10.246.7.152 -Cc -- -m 500;nstat | grep AutoCork 
MIGRATED TCP STREAM TEST from 0.0.0.0 (0.0.0.0) port 0 AF_INET to 10.246.7.152 
() port 0 AF_INET
Recv   SendSend  Utilization   Service Demand
Socket Socket  Message  Elapsed  Send Recv SendRecv
Size   SizeSize Time Throughput  localremote   local   remote
bytes  bytes   bytessecs.10^6bits/s  % S  % S  us/KB   us/KB

54 26214450010.00  2682.85   2.47 1.59 3.618   2.329
TcpExtTCPAutoCorking33 0.0

// Same test, but forcing TCP_NODELAY
$ nstat -n;./netperf -H 10.246.7.152 -Cc -- -D -m 500;nstat | grep AutoCork 
MIGRATED TCP STREAM TEST from 0.0.0.0 (0.0.0.0) port 0 AF_INET to 10.246.7.152 
() port 0 AF_INET : nodelay
Recv   SendSend  Utilization   Service Demand
Socket Socket  Message  Elapsed  Send Recv SendRecv
Size   SizeSize Time Throughput  localremote   local   remote
bytes  bytes   bytessecs.10^6bits/s  % S  % S  us/KB   us/KB

54 26214450010.00  1408.75   2.44 2.96 6.802   8.259
TcpExtTCPAutoCorking1  0.0

After the fix :
$ nstat -n;./netperf -H 10.246.7.152 -Cc -- -m 500;nstat | grep AutoCork 
MIGRATED TCP STREAM TEST from 0.0.0.0 (0.0.0.0) port 0 AF_INET to 10.246.7.152 
() port 0 AF_INET
Recv   SendSend  Utilization   Service Demand
Socket Socket  Message  Elapsed  Send Recv SendRecv
Size   SizeSize Time Throughput  localremote   local   remote
bytes  bytes   bytessecs.10^6bits/s  % S  % S  us/KB   us/KB

54 26214450010.00  5472.46   2.45 1.43 1.761   1.027
TcpExtTCPAutoCorking361293 0.0

// With TCP_NODELAY option
$ nstat -n;./netperf -H 10.246.7.152 -Cc -- -D -m 500;nstat | grep AutoCork 
MIGRATED TCP STREAM TEST from 0.0.0.0 (0.0.0.0) port 0 AF_INET to 10.246.7.152 
() port 0 AF_INET : nodelay
Recv   SendSend  Utilization   Service Demand
Socket Socket  Message  Elapsed  Send Recv SendRecv
Size   SizeSize Time Throughput  localremote   local   remote
bytes  bytes   bytessecs.10^6bits/s  % S  % S  us/KB   us/KB

54 26214450010.00  5454.96   2.46 1.63 1.775   1.174
TcpExtTCPAutoCorking315448 0.0

Fixes: 75c119afe14f ("tcp: implement rb-tree based retransmit queue")
Signed-off-by: Eric Dumazet 
Reported-by: Michael Wenig 
Tested-by: Michael Wenig 
---
 net/ipv4/tcp.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/net/ipv4/tcp.c b/net/ipv4/tcp.c index 
44be7f43455e4aefde8db61e2d941a69abcc642a..c9d00ef54deca15d5760bcbe154001a96fa1e2a7
 100644
--- a/net/ipv4/tcp.c
+++ b/net/ipv4/tcp.c
@@ -697,7 +697,7 @@ static bool tcp_should_autocork(struct sock *sk, struct 
sk_buff *skb,  {
return skb->len < size_goal &&
   sock_net(sk)->ipv4.sysctl_tcp_autocorking &&
-  skb != tcp_write_queue_head(sk) &&
+  !tcp_rtx_queue_empty(sk) &&
   refcount_read(&sk->sk_wmem_alloc) > skb->truesize;  }
 
--
2.17.0.441.gb46fe60e1d-goog



Re: [PATCH net] tcp: restore autocorking

2018-05-03 Thread Eric Dumazet
On Thu, May 3, 2018 at 4:06 AM Tariq Toukan  wrote:



> On 03/05/2018 6:25 AM, Eric Dumazet wrote:
> > When adding rb-tree for TCP retransmit queue, we inadvertently broke
> > TCP autocorking.
> >
> > tcp_should_autocork() should really check if the rtx queue is not empty.
> >

> Hi Eric,

> We are glad to see that the issue that Tal investigated and reported [1]
> is now addressed.
> Thanks for doing that!

> Tal, let’s perf test to see the effect of this fix.

> Best,
> Tariq

> [1] https://patchwork.ozlabs.org/cover/822218/

Yes, but you never really gave any  insights of what exact tests you were
running :/

Sometimes the crystal ball is silent, sometimes it gives a hint :)


Re: [PATCH net] tcp: restore autocorking

2018-05-03 Thread Tariq Toukan



On 03/05/2018 6:25 AM, Eric Dumazet wrote:

When adding rb-tree for TCP retransmit queue, we inadvertently broke
TCP autocorking.

tcp_should_autocork() should really check if the rtx queue is not empty.



Hi Eric,

We are glad to see that the issue that Tal investigated and reported [1] 
is now addressed.

Thanks for doing that!

Tal, let’s perf test to see the effect of this fix.

Best,
Tariq

[1] https://patchwork.ozlabs.org/cover/822218/


[PATCH net] tcp: restore autocorking

2018-05-02 Thread Eric Dumazet
When adding rb-tree for TCP retransmit queue, we inadvertently broke
TCP autocorking.

tcp_should_autocork() should really check if the rtx queue is not empty.

Tested:

Before the fix :
$ nstat -n;./netperf -H 10.246.7.152 -Cc -- -m 500;nstat | grep AutoCork
MIGRATED TCP STREAM TEST from 0.0.0.0 (0.0.0.0) port 0 AF_INET to 10.246.7.152 
() port 0 AF_INET
Recv   SendSend  Utilization   Service Demand
Socket Socket  Message  Elapsed  Send Recv SendRecv
Size   SizeSize Time Throughput  localremote   local   remote
bytes  bytes   bytessecs.10^6bits/s  % S  % S  us/KB   us/KB

54 26214450010.00  2682.85   2.47 1.59 3.618   2.329
TcpExtTCPAutoCorking33 0.0

// Same test, but forcing TCP_NODELAY
$ nstat -n;./netperf -H 10.246.7.152 -Cc -- -D -m 500;nstat | grep AutoCork
MIGRATED TCP STREAM TEST from 0.0.0.0 (0.0.0.0) port 0 AF_INET to 10.246.7.152 
() port 0 AF_INET : nodelay
Recv   SendSend  Utilization   Service Demand
Socket Socket  Message  Elapsed  Send Recv SendRecv
Size   SizeSize Time Throughput  localremote   local   remote
bytes  bytes   bytessecs.10^6bits/s  % S  % S  us/KB   us/KB

54 26214450010.00  1408.75   2.44 2.96 6.802   8.259
TcpExtTCPAutoCorking1  0.0

After the fix :
$ nstat -n;./netperf -H 10.246.7.152 -Cc -- -m 500;nstat | grep AutoCork
MIGRATED TCP STREAM TEST from 0.0.0.0 (0.0.0.0) port 0 AF_INET to 10.246.7.152 
() port 0 AF_INET
Recv   SendSend  Utilization   Service Demand
Socket Socket  Message  Elapsed  Send Recv SendRecv
Size   SizeSize Time Throughput  localremote   local   remote
bytes  bytes   bytessecs.10^6bits/s  % S  % S  us/KB   us/KB

54 26214450010.00  5472.46   2.45 1.43 1.761   1.027
TcpExtTCPAutoCorking361293 0.0

// With TCP_NODELAY option
$ nstat -n;./netperf -H 10.246.7.152 -Cc -- -D -m 500;nstat | grep AutoCork
MIGRATED TCP STREAM TEST from 0.0.0.0 (0.0.0.0) port 0 AF_INET to 10.246.7.152 
() port 0 AF_INET : nodelay
Recv   SendSend  Utilization   Service Demand
Socket Socket  Message  Elapsed  Send Recv SendRecv
Size   SizeSize Time Throughput  localremote   local   remote
bytes  bytes   bytessecs.10^6bits/s  % S  % S  us/KB   us/KB

54 26214450010.00  5454.96   2.46 1.63 1.775   1.174
TcpExtTCPAutoCorking315448 0.0

Fixes: 75c119afe14f ("tcp: implement rb-tree based retransmit queue")
Signed-off-by: Eric Dumazet 
Reported-by: Michael Wenig 
Tested-by: Michael Wenig 
---
 net/ipv4/tcp.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/net/ipv4/tcp.c b/net/ipv4/tcp.c
index 
44be7f43455e4aefde8db61e2d941a69abcc642a..c9d00ef54deca15d5760bcbe154001a96fa1e2a7
 100644
--- a/net/ipv4/tcp.c
+++ b/net/ipv4/tcp.c
@@ -697,7 +697,7 @@ static bool tcp_should_autocork(struct sock *sk, struct 
sk_buff *skb,
 {
return skb->len < size_goal &&
   sock_net(sk)->ipv4.sysctl_tcp_autocorking &&
-  skb != tcp_write_queue_head(sk) &&
+  !tcp_rtx_queue_empty(sk) &&
   refcount_read(&sk->sk_wmem_alloc) > skb->truesize;
 }
 
-- 
2.17.0.441.gb46fe60e1d-goog