mirror of https://gitee.com/openkylin/linux.git
vxlan: GRO support at tunnel layer
Add calls to gro_cells infrastructure to do GRO when receiving on a tunnel. Testing: Ran 200 netperf TCP_STREAM instance - With fix (GRO enabled on VXLAN interface) Verify GRO is happening. 9084 MBps tput 3.44% CPU utilization - Without fix (GRO disabled on VXLAN interface) Verified no GRO is happening. 9084 MBps tput 5.54% CPU utilization Signed-off-by: Tom Herbert <tom@herbertland.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
b7fe10e5eb
commit
58ce31cca1
|
@ -1208,7 +1208,7 @@ static void vxlan_rcv(struct vxlan_sock *vs, struct sk_buff *skb,
|
|||
stats->rx_bytes += skb->len;
|
||||
u64_stats_update_end(&stats->syncp);
|
||||
|
||||
netif_rx(skb);
|
||||
gro_cells_receive(&vxlan->gro_cells, skb);
|
||||
|
||||
return;
|
||||
drop:
|
||||
|
@ -2446,6 +2446,8 @@ static void vxlan_setup(struct net_device *dev)
|
|||
|
||||
vxlan->dev = dev;
|
||||
|
||||
gro_cells_init(&vxlan->gro_cells, dev);
|
||||
|
||||
for (h = 0; h < FDB_HASH_SIZE; ++h)
|
||||
INIT_HLIST_HEAD(&vxlan->fdb_head[h]);
|
||||
}
|
||||
|
@ -2885,6 +2887,7 @@ static void vxlan_dellink(struct net_device *dev, struct list_head *head)
|
|||
hlist_del_rcu(&vxlan->hlist);
|
||||
spin_unlock(&vn->sock_lock);
|
||||
|
||||
gro_cells_destroy(&vxlan->gro_cells);
|
||||
list_del(&vxlan->next);
|
||||
unregister_netdevice_queue(dev, head);
|
||||
}
|
||||
|
@ -3093,8 +3096,10 @@ static void __net_exit vxlan_exit_net(struct net *net)
|
|||
/* If vxlan->dev is in the same netns, it has already been added
|
||||
* to the list by the previous loop.
|
||||
*/
|
||||
if (!net_eq(dev_net(vxlan->dev), net))
|
||||
if (!net_eq(dev_net(vxlan->dev), net)) {
|
||||
gro_cells_destroy(&vxlan->gro_cells);
|
||||
unregister_netdevice_queue(vxlan->dev, &list);
|
||||
}
|
||||
}
|
||||
|
||||
unregister_netdevice_many(&list);
|
||||
|
|
|
@ -161,6 +161,7 @@ struct vxlan_dev {
|
|||
struct timer_list age_timer;
|
||||
spinlock_t hash_lock;
|
||||
unsigned int addrcnt;
|
||||
struct gro_cells gro_cells;
|
||||
|
||||
struct vxlan_config cfg;
|
||||
|
||||
|
|
Loading…
Reference in New Issue