Patchwork ipgre rss is broken since gro

login
register
mail settings
Submitter Eric Dumazet
Date Dec. 10, 2012, 4:54 p.m.
Message ID <1355158471.27891.44.camel@edumazet-glaptop>
Download mbox | patch
Permalink /patch/204972/
State RFC
Delegated to: David Miller
Headers show

Comments

Eric Dumazet - Dec. 10, 2012, 4:54 p.m.
On Mon, 2012-12-10 at 11:32 +0000, Dmitry Kravkov wrote:

> CPU is not loaded at all 
> 
> > cat /proc/net/softnet_stat
> Please find attached.
> 
> For gre interface RX and DROP statistics are advancing simultaneously (by one each ICMP request):
> 
> [root@ ~]# ifconfig gre
> gre       Link encap:UNSPEC  HWaddr C0-A8-0A-40-73-72-83-D2-00-00-00-00-00-00-00-00
>           inet addr:8.0.0.1  P-t-P:8.0.0.1  Mask:255.255.255.0
>           inet6 addr: fe80::5efe:c0a8:a40/64 Scope:Link
>           UP POINTOPOINT RUNNING NOARP  MTU:1476  Metric:1
>           RX packets:1646824 errors:0 dropped:51610 overruns:0 frame:0
>           TX packets:140519 errors:1 dropped:0 overruns:0 carrier:1
>           collisions:0 txqueuelen:0
>           RX bytes:2357650904 (2.1 GiB)  TX bytes:7309072 (6.9 MiB)


dropped:51610  so obviously  one cpu is fully loaded.

I believe performance problem might come from the
skb_set_queue_mapping(skb, 0); in __skb_tunnel_rx()

So all packets are queued into a single GRO queue, instead of being
split as intended in multiple queues.

I cant find why we must clear queue_mapping, so could you try :





--
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
Dmitry Kravkov - Dec. 10, 2012, 7:20 p.m.
> -----Original Message-----

> From: Eric Dumazet [mailto:eric.dumazet@gmail.com]

> Sent: Monday, December 10, 2012 6:55 PM

> To: Dmitry Kravkov

> Cc: Eric Dumazet; netdev@vger.kernel.org

> Subject: RE: ipgre rss is broken since gro

> 

> On Mon, 2012-12-10 at 11:32 +0000, Dmitry Kravkov wrote:

> 

> 

> dropped:51610  so obviously  one cpu is fully loaded.

Link partner continued pushing data overnight

> 

> I believe performance problem might come from the

> skb_set_queue_mapping(skb, 0); in __skb_tunnel_rx()

> 

> So all packets are queued into a single GRO queue, instead of being

> split as intended in multiple queues.

> 

> I cant find why we must clear queue_mapping, so could you try :

> 

> 

> diff --git a/include/net/dst.h b/include/net/dst.h

> index 9a78810..4cb27df 100644

> --- a/include/net/dst.h

> +++ b/include/net/dst.h

> @@ -329,7 +329,6 @@ static inline void __skb_tunnel_rx(struct sk_buff *skb,

> struct net_device *dev)

>  	 */

>  	if (!skb->l4_rxhash)

>  		skb->rxhash = 0;

> -	skb_set_queue_mapping(skb, 0);

>  	skb_dst_drop(skb);

>  	nf_reset(skb);

>  }

> 

Yep, this resolved the issue - Interface is functional after 3 and 100 TCP connections. Thanks

Patch

diff --git a/include/net/dst.h b/include/net/dst.h
index 9a78810..4cb27df 100644
--- a/include/net/dst.h
+++ b/include/net/dst.h
@@ -329,7 +329,6 @@  static inline void __skb_tunnel_rx(struct sk_buff *skb, struct net_device *dev)
 	 */
 	if (!skb->l4_rxhash)
 		skb->rxhash = 0;
-	skb_set_queue_mapping(skb, 0);
 	skb_dst_drop(skb);
 	nf_reset(skb);
 }