linux/drivers/net/ixgbe
John Fastabend 16b61beb39 ixgbe: DCB set PFC high and low water marks per data sheet specs
Currently the high and low water marks for PFC are being set
conservatively for jumbo frames. This means the RX buffers
are being underutilized in the default 1500 MTU. This patch
fixes this so that the water marks are set as described in
the data sheet considering the MTU size.

The equation used is,

RTT * 1.44 + MTU * 1.44 + MTU

Where RTT is the round trip time and MTU is the max frame size
in KB. To avoid floating point arithmetic FC_HIGH_WATER is
defined

((((RTT + MTU) * 144) + 99) / 100) + MTU

This changes how the hardware field fc.low_water and
fc.high_water are used. With this change they are no longer
storing the actual low water and high water markers but are
storing the required head room in the buffer. This simplifies
the logic and we do not need to account for the size of the
buffer when setting the thresholds.

Testing with iperf and 16 threads showed a slight uptick in
throughput over a single traffic class .1-.2Gbps and a reduction
in pause frames. Without the patch a 30 second run would show
~10-15 pause frames being transmitted with the patch ~2-5 are
seen. Test were run back to back with 82599.

Note RXPBSIZE is in KB and low and high water marks fields are
also in KB. However the FCRT* registers are 32B granularity and
right shifted 5 into the register,

(((rx_pbsize - water_mark) * 1024) / 32) << 5

is the most explicit conversion here we simplify

(rx_pbsize - water_mark) * 32 << 5 = (rx_pbsize - water_mark) << 10

This patch updates the PFC thresholds and legacy FC thresholds.

Signed-off-by: John Fastabend <john.r.fastabend@intel.com>
Tested-by: Ross Brattain <ross.b.brattain@intel.com>
Signed-off-by: Jeff Kirsher <jeffrey.t.kirsher@intel.com>
2010-11-16 19:26:44 -08:00
..
ixgbe_82598.c ixgbe: DCB set PFC high and low water marks per data sheet specs 2010-11-16 19:26:44 -08:00
ixgbe_82599.c ixgbe: declare functions as static 2010-10-14 10:49:43 -07:00
ixgbe_common.c ixgbe: DCB set PFC high and low water marks per data sheet specs 2010-11-16 19:26:44 -08:00
ixgbe_common.h ixgbe: declare functions as static 2010-10-14 10:49:43 -07:00
ixgbe_dcb_82598.c ixgbe: DCB set PFC high and low water marks per data sheet specs 2010-11-16 19:26:44 -08:00
ixgbe_dcb_82598.h ixgbe: declare functions as static 2010-10-14 10:49:43 -07:00
ixgbe_dcb_82599.c ixgbe: DCB set PFC high and low water marks per data sheet specs 2010-11-16 19:26:44 -08:00
ixgbe_dcb_82599.h ixgbe: DCB, fix TX hang occurring in stress condition with PFC 2010-10-28 10:19:00 -07:00
ixgbe_dcb_nl.c ixgbe: use netif_<level> instead of netdev_<level> 2010-07-05 18:50:55 -07:00
ixgbe_dcb.c ixgbe: DCB, fix TX hang occurring in stress condition with PFC 2010-10-28 10:19:00 -07:00
ixgbe_dcb.h ixgbe: DCB, fix TX hang occurring in stress condition with PFC 2010-10-28 10:19:00 -07:00
ixgbe_ethtool.c ixgbe: fix stats handling 2010-10-21 03:55:22 -07:00
ixgbe_fcoe.c ixgbe: add a refcnt when turning on/off FCoE offload capability 2010-10-21 03:55:23 -07:00
ixgbe_fcoe.h ixgbe: add a refcnt when turning on/off FCoE offload capability 2010-10-21 03:55:23 -07:00
ixgbe_main.c ixgbe: DCB set PFC high and low water marks per data sheet specs 2010-11-16 19:26:44 -08:00
ixgbe_mbx.c ixgbe: update copyright info 2010-10-21 03:55:21 -07:00
ixgbe_mbx.h ixgbe: update copyright info 2010-10-21 03:55:21 -07:00
ixgbe_phy.c ixgbe: add 1g PHY support for 82599 2010-06-30 14:27:40 -07:00
ixgbe_phy.h ixgbe: add 1g PHY support for 82599 2010-06-30 14:27:40 -07:00
ixgbe_sriov.c drivers/net/ixgbe: Remove unnecessary semicolons 2010-11-15 11:06:19 -08:00
ixgbe_sriov.h ixgbe: update copyright info 2010-10-21 03:55:21 -07:00
ixgbe_type.h ixgbe: DCB set PFC high and low water marks per data sheet specs 2010-11-16 19:26:44 -08:00
ixgbe.h ixgbe: DCB set PFC high and low water marks per data sheet specs 2010-11-16 19:26:44 -08:00
Makefile Merge branch 'master' of master.kernel.org:/pub/scm/linux/kernel/git/davem/net-2.6 2010-01-23 00:31:06 -08:00