linux/drivers/net/ethernet/mellanox/mlx4
Thadeu Lima de Souza Cascardo 4cce66cdd1 mlx4_en: map entire pages to increase throughput
In its receive path, mlx4_en driver maps each page chunk that it pushes
to the hardware and unmaps it when pushing it up the stack. This limits
throughput to about 3Gbps on a Power7 8-core machine.

One solution is to map the entire allocated page at once. However, this
requires that we keep track of every page fragment we give to a
descriptor. We also need to work with the discipline that all fragments will
be released (in the sense that it will not be reused by the driver
anymore) in the order they are allocated to the driver.

This requires that we don't reuse any fragments, every single one of
them must be reallocated. We do that by releasing all the fragments that
are processed and only after finished processing the descriptors, we
start the refill.

We also must somehow guarantee that we either refill all fragments in a
descriptor or none at all, without resorting to giving up a page
fragment that we would have already given. Otherwise, we would break the
discipline of only releasing the fragments in the order they were
allocated.

This has passed page allocation fault injections (restricted to the
driver by using required-start and required-end) and device hotplug
while 16 TCP streams were able to deliver more than 9Gbps.

Signed-off-by: Thadeu Lima de Souza Cascardo <cascardo@linux.vnet.ibm.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
2012-07-19 10:53:13 -07:00
..
alloc.c mlx4_core: Change bitmap allocator to work in round-robin fashion 2012-05-14 13:44:38 -07:00
catas.c mlx4_core: adjust catas operation for SRIOV mode 2011-12-13 13:56:08 -05:00
cmd.c net/mlx4_core: Add firmware commands to support device managed flow steering 2012-07-07 16:23:05 -07:00
cq.c mlx4_core: removed function index from vf. 2012-01-22 15:08:43 -05:00
en_cq.c net/mlx4_en: Add accelerated RFS support 2012-07-19 08:34:37 -07:00
en_dcb_nl.c drivers/net: fix unresolved 64bit math in mellanox/mlx4/en_dcb_nl.c 2012-04-16 02:12:11 -04:00
en_ethtool.c net/mlx4: Move MAC_MASK to a common place 2012-07-19 08:34:37 -07:00
en_main.c net/mlx4_en: Fix improper use of "port" parameter in mlx4_en_event 2012-05-31 18:18:16 -04:00
en_netdev.c net/mlx4_en: Add accelerated RFS support 2012-07-19 08:34:37 -07:00
en_port.c mlx4: Ethernet port management modifications 2011-12-13 13:56:07 -05:00
en_port.h net/mlx4_core: set port QoS attributes 2012-04-05 05:08:03 -04:00
en_resources.c net/mlx4_en: Force user priority by QP attribute 2012-04-05 05:08:03 -04:00
en_rx.c mlx4_en: map entire pages to increase throughput 2012-07-19 10:53:13 -07:00
en_selftest.c mlx4_core: Add "native" argument to mlx4_cmd and its callers (where needed) 2011-12-13 13:56:05 -05:00
en_tx.c net/mlx4_en: num cores tx rings for every UP 2012-05-17 16:17:50 -04:00
eq.c {NET,IB}/mlx4: Add rmap support to mlx4_assign_eq 2012-07-19 08:34:37 -07:00
fw.c {NET, IB}/mlx4: Add device managed flow steering firmware API 2012-07-07 16:23:05 -07:00
fw.h {NET, IB}/mlx4: Add device managed flow steering firmware API 2012-07-07 16:23:05 -07:00
icm.c mlx4_core: Add "native" argument to mlx4_cmd and its callers (where needed) 2011-12-13 13:56:05 -05:00
icm.h
intf.c mlx4_core: adjust catas operation for SRIOV mode 2011-12-13 13:56:08 -05:00
Kconfig net/mlx4_en: DCB QoS support 2012-04-05 05:08:04 -04:00
main.c {NET, IB}/mlx4: Add device managed flow steering firmware API 2012-07-07 16:23:05 -07:00
Makefile net/mlx4_en: DCB QoS support 2012-04-05 05:08:04 -04:00
mcg.c net/mlx4: Move MAC_MASK to a common place 2012-07-19 08:34:37 -07:00
mlx4_en.h mlx4_en: map entire pages to increase throughput 2012-07-19 10:53:13 -07:00
mlx4.h net/mlx4_core: Add resource tracking for device managed flow steering rules 2012-07-07 16:23:06 -07:00
mr.c net/mlx4_core: Change SYNC_TPT to be native (not wrapped) 2012-05-16 00:56:58 -04:00
pd.c net/mlx4_core: Add XRC domains and counters to resource tracker 2012-05-16 00:56:59 -04:00
port.c net/mlx4: Move MAC_MASK to a common place 2012-07-19 08:34:37 -07:00
profile.c {NET, IB}/mlx4: Add device managed flow steering firmware API 2012-07-07 16:23:05 -07:00
qp.c mlx4_core: remove buggy sched_queue masking 2012-03-06 14:43:50 -05:00
reset.c
resource_tracker.c net/mlx4: Move MAC_MASK to a common place 2012-07-19 08:34:37 -07:00
sense.c mlx4_core: Add "native" argument to mlx4_cmd and its callers (where needed) 2011-12-13 13:56:05 -05:00
srq.c mlx4_core: removed function index from vf. 2012-01-22 15:08:43 -05:00