linux/drivers/net
Manish Chopra 8a8633978b qede: Add build_skb() support.
This patch makes use of build_skb() throughout in driver's receieve
data path [HW gro flow and non HW gro flow]. With this, driver can
build skb directly from the page segments which are already mapped
to the hardware instead of allocating new SKB via netdev_alloc_skb()
and memcpy the data which is quite costly.

This really improves performance (keeping same or slight gain in rx
throughput) in terms of CPU utilization which is significantly reduced
[almost half] in non HW gro flow where for every incoming MTU sized
packet driver had to allocate skb, memcpy headers etc. Additionally
in that flow, it also gets rid of bunch of additional overheads
[eth_get_headlen() etc.] to split headers and data in the skb.

Tested with:
system: 2 sockets, 4 cores per socket, hyperthreading, 2x4x2=16 cores
iperf [server]: iperf -s
iperf [client]: iperf -c <server_ip> -t 500 -i 10 -P 32

HW GRO off – w/o build_skb(), throughput: 36.8 Gbits/sec

Average:     CPU    %usr   %nice    %sys %iowait    %irq   %soft  %steal  %guest   %idle
Average:     all    0.59    0.00   32.93    0.00    0.00   43.07    0.00    0.00   23.42

HW GRO off - with build_skb(), throughput: 36.9 Gbits/sec

Average:     CPU    %usr   %nice    %sys %iowait    %irq   %soft  %steal  %guest   %idle
Average:     all    0.70    0.00   31.70    0.00    0.00   25.68    0.00    0.00   41.92

HW GRO on - w/o build_skb(), throughput: 36.9 Gbits/sec

Average:     CPU    %usr   %nice    %sys %iowait    %irq   %soft  %steal  %guest   %idle
Average:     all    0.86    0.00   24.14    0.00    0.00    6.59    0.00    0.00   68.41

HW GRO on - with build_skb(), throughput: 37.5 Gbits/sec

Average:     CPU    %usr   %nice    %sys %iowait    %irq   %soft  %steal  %guest   %idle
Average:     all    0.87    0.00   23.75    0.00    0.00    6.19    0.00    0.00   69.19

Signed-off-by: Ariel Elior <ariel.elior@cavium.com>
Signed-off-by: Manish Chopra <manish.chopra@cavium.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
2018-05-17 17:06:53 -04:00
..
appletalk
arcnet
bonding bonding: introduce link change helper 2018-05-17 15:51:13 -04:00
caif
can can: hi311x: Work around TX complete interrupt erratum 2018-05-10 18:25:30 +02:00
dsa drivers: net: Remove device_node checks with of_mdiobus_register() 2018-05-16 14:20:36 -04:00
ethernet qede: Add build_skb() support. 2018-05-17 17:06:53 -04:00
fddi
fjes
hamradio mkiss: remove redundant check for len > 0 2018-04-25 14:12:06 -04:00
hippi
hyperv Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net 2018-05-11 20:53:22 -04:00
ieee802154 net: ieee802154: mcr20a: do not leak resources on error path 2018-04-23 20:56:23 +02:00
ipvlan
netdevsim devlink: convert occ_get op to separate registration 2018-04-08 12:45:57 -04:00
phy drivers: net: Remove device_node checks with of_mdiobus_register() 2018-05-16 14:20:36 -04:00
plip
ppp pppoe: check sockaddr length in pppoe_connect() 2018-04-23 21:12:15 -04:00
slip slip: Check if rstate is initialized before uncompressing 2018-04-11 10:33:46 -04:00
team Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net 2018-04-24 23:59:11 -04:00
usb drivers: net: Remove device_node checks with of_mdiobus_register() 2018-05-16 14:20:36 -04:00
vmxnet3 vmxnet3: Replace msleep(1) with usleep_range() 2018-05-17 15:55:38 -04:00
wan
wimax
wireless wireless-drivers-next patches for 4.18 2018-05-17 16:00:40 -04:00
xen-netback
dummy.c net: Do not take net_rwsem in __rtnl_link_unregister() 2018-03-31 22:24:58 -04:00
eql.c
geneve.c geneve: configure MTU based on a lower device 2018-04-20 11:20:05 -04:00
gtp.c
ifb.c net: Do not take net_rwsem in __rtnl_link_unregister() 2018-03-31 22:24:58 -04:00
Kconfig geneve: fix build with modular IPV6 2018-04-27 13:52:09 -04:00
LICENSE.SRC
loopback.c
macsec.c Revert "macsec: missing dev_put() on error in macsec_newlink()" 2018-04-16 10:01:12 -04:00
macvlan.c macvlan: Use software path for offloaded local, broadcast, and multicast traffic 2018-04-25 08:26:19 -07:00
macvtap.c
Makefile
mdio.c
mii.c
netconsole.c
nlmon.c
ntb_netdev.c
rionet.c
sb1000.c
Space.c
sungem_phy.c
tap.c
thunderbolt.c
tun.c tun: Do SIOCGSKNS out of rtnl_lock() 2018-05-10 15:16:49 -04:00
veth.c
virtio_net.c bpf: fix virtio-net's length calc for XDP_PASS 2018-04-23 11:28:34 +02:00
vrf.c vrf: Move fib6_table into net_vrf 2018-04-17 23:41:15 -04:00
vsockmon.c
vxlan.c vxlan: add ttl inherit support 2018-04-17 13:53:13 -04:00
xen-netfront.c