1
0
Fork 0
alistair23-linux/drivers/net/ethernet
willy tarreau 71f6d1b31f net: mvneta: replace Tx timer with a real interrupt
Right now the mvneta driver doesn't handle Tx IRQ, and relies on two
mechanisms to flush Tx descriptors : a flush at the end of mvneta_tx()
and a timer. If a burst of packets is emitted faster than the device
can send them, then the queue is stopped until next wake-up of the
timer 10ms later. This causes jerky output traffic with bursts and
pauses, making it difficult to reach line rate with very few streams.

A test on UDP traffic shows that it's not possible to go beyond 134
Mbps / 12 kpps of outgoing traffic with 1500-bytes IP packets. Routed
traffic tends to observe pauses as well if the traffic is bursty,
making it even burstier after the wake-up.

It seems that this feature was inherited from the original driver but
nothing there mentions any reason for not using the interrupt instead,
which the chip supports.

Thus, this patch enables Tx interrupts and removes the timer. It does
the two at once because it's not really possible to make the two
mechanisms coexist, so a split patch doesn't make sense.

First tests performed on a Mirabox (Armada 370) show that less CPU
seems to be used when sending traffic. One reason might be that we now
call the mvneta_tx_done_gbe() with a mask indicating which queues have
been done instead of looping over all of them.

The same UDP test above now happily reaches 987 Mbps / 87.7 kpps.
Single-stream TCP traffic can now more easily reach line rate. HTTP
transfers of 1 MB objects over a single connection went from 730 to
840 Mbps. It is even possible to go significantly higher (>900 Mbps)
by tweaking tcp_tso_win_divisor.

Cc: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
Cc: Gregory CLEMENT <gregory.clement@free-electrons.com>
Cc: Arnaud Ebalard <arno@natisbad.org>
Cc: Eric Dumazet <eric.dumazet@gmail.com>
Tested-by: Arnaud Ebalard <arno@natisbad.org>
Signed-off-by: Willy Tarreau <w@1wt.eu>
Signed-off-by: David S. Miller <davem@davemloft.net>
2014-01-16 15:15:42 -08:00
..
3com drivers/net: delete non-required instances of include <linux/init.h> 2014-01-16 11:53:26 -08:00
8390 drivers/net: delete non-required instances of include <linux/init.h> 2014-01-16 11:53:26 -08:00
adaptec net: starfire: remove unnecessary pci_set_drvdata() 2013-10-18 00:03:28 -04:00
adi net: bfin_mac: do not reset PHY after phy_start() 2013-12-09 20:38:59 -05:00
aeroflex drivers/net: delete non-required instances of include <linux/init.h> 2014-01-16 11:53:26 -08:00
allwinner drivers/net: delete non-required instances of include <linux/init.h> 2014-01-16 11:53:26 -08:00
alteon drivers/net: delete non-required instances of include <linux/init.h> 2014-01-16 11:53:26 -08:00
amd drivers/net: delete non-required instances of include <linux/init.h> 2014-01-16 11:53:26 -08:00
apple macmace: add missing platform_set_drvdata() in mace_probe() 2013-11-11 14:02:08 -05:00
arc Merge branch 'master' of git://git.kernel.org/pub/scm/linux/kernel/git/davem/net 2014-01-06 17:37:45 -05:00
atheros drivers/net: delete non-required instances of include <linux/init.h> 2014-01-16 11:53:26 -08:00
broadcom drivers/net: delete non-required instances of include <linux/init.h> 2014-01-16 11:53:26 -08:00
brocade bna: Fix build due to missing use of dma_unmap_len_set() 2014-01-06 20:37:41 -05:00
cadence net: macb: Fix build warning 2013-12-11 00:19:17 -05:00
calxeda drivers/net: delete non-required instances of include <linux/init.h> 2014-01-16 11:53:26 -08:00
chelsio drivers/net: delete non-required instances of include <linux/init.h> 2014-01-16 11:53:26 -08:00
cirrus drivers/net: delete non-required instances of include <linux/init.h> 2014-01-16 11:53:26 -08:00
cisco net: enic: slight optimization of addr compare 2013-12-31 16:48:31 -05:00
davicom drivers/net: delete non-required instances of include <linux/init.h> 2014-01-16 11:53:26 -08:00
dec drivers/net: delete non-required instances of include <linux/init.h> 2014-01-16 11:53:26 -08:00
dlink drivers/net: delete non-required instances of include <linux/init.h> 2014-01-16 11:53:26 -08:00
emulex be2net: update driver version to 10.0.x 2014-01-15 15:52:03 -08:00
faraday drivers/net: delete non-required instances of include <linux/init.h> 2014-01-16 11:53:26 -08:00
freescale drivers/net: delete non-required instances of include <linux/init.h> 2014-01-16 11:53:26 -08:00
fujitsu drivers/net: delete non-required instances of include <linux/init.h> 2014-01-16 11:53:26 -08:00
hp hp100: replace hardcoded name in /proc/interrupts with interface name 2013-09-27 17:38:32 -04:00
i825xx drivers/net: delete non-required instances of include <linux/init.h> 2014-01-16 11:53:26 -08:00
ibm drivers/net: delete non-required instances of include <linux/init.h> 2014-01-16 11:53:26 -08:00
icplus drivers/net: delete non-required instances of include <linux/init.h> 2014-01-16 11:53:26 -08:00
intel drivers/net: delete non-required instances of include <linux/init.h> 2014-01-16 11:53:26 -08:00
marvell net: mvneta: replace Tx timer with a real interrupt 2014-01-16 15:15:42 -08:00
mellanox drivers/net: delete non-required instances of include <linux/init.h> 2014-01-16 11:53:26 -08:00
micrel drivers/net: delete non-required instances of include <linux/init.h> 2014-01-16 11:53:26 -08:00
microchip net: ethernet: enc28j60: use spi_get_drvdata() and spi_set_drvdata() 2013-04-07 16:48:19 -04:00
moxa drivers/net: delete non-required instances of include <linux/init.h> 2014-01-16 11:53:26 -08:00
myricom net: myri10ge: remove unnecessary pci_set_drvdata() 2013-10-21 17:21:02 -04:00
natsemi drivers/net: delete non-required instances of include <linux/init.h> 2014-01-16 11:53:26 -08:00
neterion net: vxge: slight optimization of addr compare 2013-12-31 16:48:31 -05:00
nuvoton drivers:net: delete premature free_irq 2013-09-04 13:18:19 -04:00
nvidia drivers/net: delete non-required instances of include <linux/init.h> 2014-01-16 11:53:26 -08:00
nxp drivers/net: delete non-required instances of include <linux/init.h> 2014-01-16 11:53:26 -08:00
octeon Merge branch 'for-linus-dma-masks' of git://git.linaro.org/people/rmk/linux-arm 2013-11-14 07:55:21 +09:00
oki-semi ethernet: Fix FSF address in file headers 2013-12-06 12:37:55 -05:00
packetengines net: packetengines: slight optimization of addr 2013-12-31 16:48:32 -05:00
pasemi drivers/net: delete non-required instances of include <linux/init.h> 2014-01-16 11:53:26 -08:00
qlogic drivers/net: delete non-required instances of include <linux/init.h> 2014-01-16 11:53:26 -08:00
rdc drivers/net: delete non-required instances of include <linux/init.h> 2014-01-16 11:53:26 -08:00
realtek drivers/net: delete non-required instances of include <linux/init.h> 2014-01-16 11:53:26 -08:00
renesas drivers/net: delete non-required instances of include <linux/init.h> 2014-01-16 11:53:26 -08:00
seeq drivers/net: delete non-required instances of include <linux/init.h> 2014-01-16 11:53:26 -08:00
sfc sfc: fix sparse non static symbol warning 2013-12-19 15:00:31 -05:00
sgi drivers/net: delete non-required instances of include <linux/init.h> 2014-01-16 11:53:26 -08:00
silan net/ethernet/silan/sc92031: Use module_pci_driver to register driver 2013-05-22 14:35:03 -07:00
sis net: sis900: remove unnecessary pci_set_drvdata() 2013-12-09 18:09:28 -05:00
smsc drivers/net: delete non-required instances of include <linux/init.h> 2014-01-16 11:53:26 -08:00
stmicro drivers/net: delete non-required instances of include <linux/init.h> 2014-01-16 11:53:26 -08:00
sun drivers/net: delete non-required instances of include <linux/init.h> 2014-01-16 11:53:26 -08:00
tehuti net: Spelling s/transmition/transmission/ 2014-01-14 17:11:26 -08:00
ti drivers/net: delete non-required instances of include <linux/init.h> 2014-01-16 11:53:26 -08:00
tile Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net 2014-01-14 14:42:42 -08:00
toshiba drivers/net: delete non-required instances of include <linux/init.h> 2014-01-16 11:53:26 -08:00
tundra drivers/net: delete non-required instances of include <linux/init.h> 2014-01-16 11:53:26 -08:00
via via-velocity: fix netif_receive_skb use in irq disabled section. 2013-11-28 18:43:35 -05:00
wiznet net: w5100: use dev_get_platdata() 2013-08-30 17:43:38 -04:00
xilinx drivers/net: delete non-required instances of include <linux/init.h> 2014-01-16 11:53:26 -08:00
xircom ethernet: Fix FSF address in file headers 2013-12-06 12:37:55 -05:00
xscale ixp4xx_eth: Implement the SIOCGHWTSTAMP ioctl 2013-11-21 17:17:48 +00:00
Kconfig net: Add MOXA ART SoCs ethernet driver 2013-08-11 21:38:12 -07:00
Makefile net: Add MOXA ART SoCs ethernet driver 2013-08-11 21:38:12 -07:00
dnet.c drivers/net: delete non-required instances of include <linux/init.h> 2014-01-16 11:53:26 -08:00
dnet.h
ethoc.c net: ethoc: use dev_get_platdata() 2013-08-30 17:43:35 -04:00
fealnx.c net: fealnx: remove unnecessary pci_set_drvdata() 2013-10-21 17:21:01 -04:00
jme.c net: jme: remove unnecessary pci_set_drvdata() 2013-10-21 17:21:01 -04:00
jme.h jme: Remove unused #define PFX 2013-11-07 02:14:32 -05:00
korina.c drivers/net: delete non-required instances of include <linux/init.h> 2014-01-16 11:53:26 -08:00
lantiq_etop.c Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net 2014-01-14 14:42:42 -08:00
netx-eth.c ethernet: Fix FSF address in file headers 2013-12-06 12:37:55 -05:00
s6gmac.c drivers/net: delete non-required instances of include <linux/init.h> 2014-01-16 11:53:26 -08:00