linux/drivers/net/ethernet/intel/ixgbe
Alexander Duyck 8ac34f10a5 ixgbe: Limit lowest interrupt rate for adaptive interrupt moderation to 12K
This patch updates the lowest limit for adaptive interrupt interrupt
moderation to roughly 12K interrupts per second.

The way I came about reaching 12K as the desired interrupt rate is by
testing with UDP flows.  Specifically I had a simple test that ran a
netperf UDP_STREAM test at varying sizes.  What I found was as the packet
sizes increased the performance fell steadily behind until we were only
able to receive at ~4Gb/s with a message size of 65507.  A bit of digging
found that we were dropping packets for the socket in the network stack,
and looking at things further what I found was I could solve it by increasing
the interrupt rate, or increasing the rmem_default/rmem_max.  What I found was
that when the interrupt coalescing resulted in more data being processed
per interrupt than could be stored in the socket buffer we started losing
packets and the performance dropped.  So I reached 12K based on the
following math.

rmem_default = 212992
skb->truesize = 2994
212992 / 2994 = 71.14 packets to fill the buffer

packet rate at 1514 packet size is 812744pps
71.14 / 812744 = 87.9us to fill socket buffer

From there it was just a matter of choosing the interrupt rate and
providing a bit of wiggle room which is why I decided to go with 12K
interrupts per second as that uses a value of 84us.

The data below is based on VM to VM over a direct assigned ixgbe interface.
The test run was:
	netperf -H <ip> -t UDP_STREAM"

Socket  Message  Elapsed      Messages                   CPU      Service
Size    Size     Time         Okay Errors   Throughput   Util     Demand
bytes   bytes    secs            #      #   10^6bits/sec % SS     us/KB
Before:
212992   65507   60.00     1100662      0     9613.4     10.89    0.557
212992           60.00      473474            4135.4     11.27    0.576

After:
212992   65507   60.00     1100413      0     9611.2     10.73    0.549
212992           60.00      974132            8508.3     11.69    0.598

Using bare metal the data is similar but not as dramatic as the throughput
increases from about 8.5Gb/s to 9.5Gb/s.

Signed-off-by: Alexander Duyck <alexander.h.duyck@redhat.com>
Tested-by: Krishneil Singh <krishneil.k.singh@intel.com>
Signed-off-by: Jeff Kirsher <jeffrey.t.kirsher@intel.com>
2015-09-15 17:05:12 -07:00
..
ixgbe_82598.c ixgbe: Add a PHY power state method 2015-06-09 17:21:14 -07:00
ixgbe_82599.c ixgbe: Add support for VXLAN RX offloads 2015-09-01 16:49:37 -07:00
ixgbe_common.c ixgbe: add new function to check for management presence 2015-09-01 16:40:19 -07:00
ixgbe_common.h ixgbe: add new function to check for management presence 2015-09-01 16:40:19 -07:00
ixgbe_dcb_82598.c ixgbe: convert low_water into an array 2014-04-22 23:07:11 -07:00
ixgbe_dcb_82598.h
ixgbe_dcb_82599.c ixgbe: convert low_water into an array 2014-04-22 23:07:11 -07:00
ixgbe_dcb_82599.h ixgbe: clean up checkpatch warnings about CODE_INDENT and LEADING_SPACE 2014-05-23 05:24:04 -07:00
ixgbe_dcb_nl.c ixgbe: Add new support for X550 MAC's 2014-11-11 06:18:56 -08:00
ixgbe_dcb.c ixgbe: Add new support for X550 MAC's 2014-11-11 06:18:56 -08:00
ixgbe_dcb.h
ixgbe_debugfs.c ixgbe: don't check NULL for debugfs_remove_recursive 2014-05-23 05:28:24 -07:00
ixgbe_ethtool.c ixgbe: Limit lowest interrupt rate for adaptive interrupt moderation to 12K 2015-09-15 17:05:12 -07:00
ixgbe_fcoe.c ixgbe: adds x550 specific FCoE offloads 2015-04-10 00:15:55 -07:00
ixgbe_fcoe.h ixgbe: adds x550 specific FCoE offloads 2015-04-10 00:15:55 -07:00
ixgbe_lib.c ixgbe: Limit lowest interrupt rate for adaptive interrupt moderation to 12K 2015-09-15 17:05:12 -07:00
ixgbe_main.c ixgbe: Limit lowest interrupt rate for adaptive interrupt moderation to 12K 2015-09-15 17:05:12 -07:00
ixgbe_mbx.c ixgbe: Add new support for X550 MAC's 2014-11-11 06:18:56 -08:00
ixgbe_mbx.h ixgbe: Add GET_RSS_KEY command to VF-PF channel commands set 2015-04-11 11:30:12 -07:00
ixgbe_phy.c ixgbe: Avoid needless PHY access on copper phys 2015-09-01 17:08:18 -07:00
ixgbe_phy.h ixgbe: Add a PHY power state method 2015-06-09 17:21:14 -07:00
ixgbe_ptp.c ptp: ixgbe: use helpers for converting ns to timespec. 2015-03-31 17:19:19 -04:00
ixgbe_sriov.c ixgbe: Add GET_RSS_KEY command to VF-PF channel commands set 2015-04-11 11:30:12 -07:00
ixgbe_sriov.h ixgbe: Add a new netdev op to allow/prevent a VF from querying an RSS info 2015-04-10 22:26:30 -07:00
ixgbe_sysfs.c ixgbe: add Linux NICS mailing list to contact info 2014-03-12 19:05:30 -07:00
ixgbe_type.h ixgbe: Avoid needless PHY access on copper phys 2015-09-01 17:08:18 -07:00
ixgbe_x540.c ixgbe: Assign set_phy_power dynamically where needed 2015-09-01 16:42:39 -07:00
ixgbe_x540.h ixgbe: Add X550 support function pointers 2014-12-05 09:13:07 -08:00
ixgbe_x550.c ixgbe: Resolve "initialized field overwritten" warnings 2015-09-01 17:20:02 -07:00
ixgbe.h ixgbe: Limit lowest interrupt rate for adaptive interrupt moderation to 12K 2015-09-15 17:05:12 -07:00
Makefile ixgbe: Add X550 support function pointers 2014-12-05 09:13:07 -08:00