freebsd-dev/sys/dev/cxgbe
Hans Petter Selasky e936121d31 Add optimizing LRO wrapper:
- Add optimizing LRO wrapper which pre-sorts all incoming packets
  according to the hash type and flowid. This prevents exhaustion of
  the LRO entries due to too many connections at the same time.
  Testing using a larger number of higher bandwidth TCP connections
  showed that the incoming ACK packet aggregation rate increased from
  ~1.3:1 to almost 3:1. Another test showed that for a number of TCP
  connections greater than 16 per hardware receive ring, where 8 TCP
  connections was the LRO active entry limit, there was a significant
  improvement in throughput due to being able to fully aggregate more
  than 8 TCP stream. For very few very high bandwidth TCP streams, the
  optimizing LRO wrapper will add CPU usage instead of reducing CPU
  usage. This is expected. Network drivers which want to use the
  optimizing LRO wrapper needs to call "tcp_lro_queue_mbuf()" instead
  of "tcp_lro_rx()" and "tcp_lro_flush_all()" instead of
  "tcp_lro_flush()". Further the LRO control structure must be
  initialized using "tcp_lro_init_args()" passing a non-zero number
  into the "lro_mbufs" argument.

- Make LRO statistics 64-bit. Previously 32-bit integers were used for
  statistics which can be prone to wrap-around. Fix this while at it
  and update all SYSCTL's which expose LRO statistics.

- Ensure all data is freed when destroying a LRO control structures,
  especially leftover LRO entries.

- Reduce number of memory allocations needed when setting up a LRO
  control structure by precomputing the total amount of memory needed.

- Add own memory allocation counter for LRO.

- Bump the FreeBSD version to force recompilation of all KLDs due to
  change of the LRO control structure size.

Sponsored by:	Mellanox Technologies
Reviewed by:	gallatin, sbruno, rrs, gnn, transport
Tested by:	Netflix
Differential Revision:	https://reviews.freebsd.org/D4914
2016-01-19 15:33:28 +00:00
..
common Add support for configuring additional virtual interfaces (VIs) on a port. 2015-12-03 00:02:01 +00:00
cxgbei cxgbei: Hardware accelerated iSCSI target and initiator for TOE capable 2015-12-26 06:05:21 +00:00
firmware cxgbe/t4_tom: add a knob to the default configuration file to tune 2015-11-10 02:29:19 +00:00
iw_cxgbe Convert cxgb/cxgbe to the new routing API. 2016-01-07 08:07:17 +00:00
tom Convert cxgb/cxgbe to the new routing API. 2016-01-07 08:07:17 +00:00
adapter.h cxgbe(4): Updates to the base NIC driver and t4_tom to support the iSCSI 2015-12-26 00:26:02 +00:00
if_cxl.c cxgbe(4): Add a minimal if_cxl module that pulls in the real driver as 2015-02-06 01:10:04 +00:00
offload.h cxgbe(4): Updates to the base NIC driver and t4_tom to support the iSCSI 2015-12-26 00:26:02 +00:00
osdep.h Add hooks in base cxgbe(4) for the iWARP upper-layer driver. Update a 2013-08-28 20:45:45 +00:00
t4_ioctl.h cxgbe(4): T4_SET_SCHED_CLASS and T4_SET_SCHED_QUEUE ioctls to program 2013-12-03 18:34:52 +00:00
t4_l2t.c Revert r279934, r279938; this is going to be fixed in sbuf instead. 2015-03-14 13:04:39 +00:00
t4_l2t.h cxgbe(4): Updates to the hardware L2 table management code. 2013-01-14 20:36:22 +00:00
t4_main.c cxgbe: bind the ithreads that handle NIC rx to the correct CPU if the kernel 2016-01-11 17:52:42 +00:00
t4_mp_ring.c Allow cxgbe(4) to be built on i386. Driver attach will succeed only on a subset 2015-01-16 01:32:40 +00:00
t4_mp_ring.h cxgbe(4): major tx rework. 2014-12-31 23:19:16 +00:00
t4_netmap.c Add support for configuring additional virtual interfaces (VIs) on a port. 2015-12-03 00:02:01 +00:00
t4_sge.c Add optimizing LRO wrapper: 2016-01-19 15:33:28 +00:00
t4_tracer.c cxgbe(4): Remove stray if_up from the code that creates the tracing ifnet. 2014-05-23 01:45:44 +00:00