]> git.baikalelectronics.ru Git - kernel.git/commit
mlx4: use napi_complete_done()
authorEric Dumazet <edumazet@google.com>
Fri, 7 Nov 2014 05:10:11 +0000 (21:10 -0800)
committerDavid S. Miller <davem@davemloft.net>
Mon, 10 Nov 2014 17:05:59 +0000 (12:05 -0500)
commit706cc477724d292304bbcf94b9e347196ae79db4
treeac9c89834e1957c438bf2a31a06e50bb70dc0097
parentce6e9b2a630ad4f98c4a60a38688c3e9c285bcc7
mlx4: use napi_complete_done()

To enable gro_flush_timeout, a driver has to use napi_complete_done()
instead of napi_complete().

Tested:
 Ran 200 netperf TCP_STREAM from A to B (10Gbe mlx4 link, 8 RX queues)

Without this feature, we send back about 305,000 ACK per second.

GRO aggregation ratio is low (811/305 = 2.65 segments per GRO packet)

Setting a timer of 2000 nsec is enough to increase GRO packet sizes
and reduce number of ACK packets. (811/19.2 = 42)

Receiver performs less calls to upper stacks, less wakes up.
This also reduces cpu usage on the sender, as it receives less ACK
packets.

Note that reducing number of wakes up increases cpu efficiency, but can
decrease QPS, as applications wont have the chance to warmup cpu caches
doing a partial read of RPC requests/answers if they fit in one skb.

B:~# sar -n DEV 1 10 | grep eth0 | tail -1
Average:         eth0 811269.80 305732.30 1199462.57  19705.72      0.00
0.00      0.50

B:~# echo 2000 >/sys/class/net/eth0/gro_flush_timeout

B:~# sar -n DEV 1 10 | grep eth0 | tail -1
Average:         eth0 811577.30  19230.80 1199916.51   1239.80      0.00
0.00      0.50

Signed-off-by: Eric Dumazet <edumazet@google.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
drivers/net/ethernet/mellanox/mlx4/en_rx.c