ixgbevf: Limit lowest interrupt rate for adaptive interrupt moderation to 12K
authorAlexander Duyck <aduyck@mirantis.com>
Tue, 29 Sep 2015 20:11:15 +0000 (13:11 -0700)
committerJeff Kirsher <jeffrey.t.kirsher@intel.com>
Mon, 23 Nov 2015 19:08:50 +0000 (11:08 -0800)
This patch is the ixgbevf version of commit 8ac34f10a5ea4 "ixgbe: Limit
lowest interrupt rate for adaptive interrupt moderation to 12K"

The same logic applies here as well as the same results since a netperf
test will starve for memory in the time from one Tx interrupt to the next.
As a result the ixgbevf driver underperformed when compared to vhost_net.

Signed-off-by: Alexander Duyck <aduyck@mirantis.com>
Tested-by: Darin Miller <darin.j.miller@intel.com>
Signed-off-by: Jeff Kirsher <jeffrey.t.kirsher@intel.com>
drivers/net/ethernet/intel/ixgbevf/ethtool.c
drivers/net/ethernet/intel/ixgbevf/ixgbevf.h
drivers/net/ethernet/intel/ixgbevf/ixgbevf_main.c

index d3e5f5b37999a359e1ab1d1f4468a78e9afa5527..c48aef613b0a89508882638d99b64089bc341872 100644 (file)
@@ -774,7 +774,7 @@ static int ixgbevf_set_coalesce(struct net_device *netdev,
                adapter->tx_itr_setting = ec->tx_coalesce_usecs;
 
        if (adapter->tx_itr_setting == 1)
-               tx_itr_param = IXGBE_10K_ITR;
+               tx_itr_param = IXGBE_12K_ITR;
        else
                tx_itr_param = adapter->tx_itr_setting;
 
index ec31472796213197fe50d163ce0473a0d34df7fe..68ec7daa04fd3576df1ba724716ad718e5fd1b7e 100644 (file)
@@ -326,8 +326,7 @@ static inline bool ixgbevf_qv_disable(struct ixgbevf_q_vector *q_vector)
 #define IXGBE_MIN_RSC_ITR      24
 #define IXGBE_100K_ITR         40
 #define IXGBE_20K_ITR          200
-#define IXGBE_10K_ITR          400
-#define IXGBE_8K_ITR           500
+#define IXGBE_12K_ITR          336
 
 /* Helper macros to switch between ints/sec and what the register uses.
  * And yes, it's the same math going both ways.  The lowest value
index 2955186cd4f68332a308538616697b2f2910345f..e678178c7d352dcccfbbe6eec5f36770cc1abbd4 100644 (file)
@@ -1138,7 +1138,7 @@ static void ixgbevf_configure_msix(struct ixgbevf_adapter *adapter)
                if (q_vector->tx.ring && !q_vector->rx.ring) {
                        /* Tx only vector */
                        if (adapter->tx_itr_setting == 1)
-                               q_vector->itr = IXGBE_10K_ITR;
+                               q_vector->itr = IXGBE_12K_ITR;
                        else
                                q_vector->itr = adapter->tx_itr_setting;
                } else {
@@ -1196,7 +1196,7 @@ static void ixgbevf_update_itr(struct ixgbevf_q_vector *q_vector,
        /* simple throttle rate management
         *    0-20MB/s lowest (100000 ints/s)
         *   20-100MB/s low   (20000 ints/s)
-        *  100-1249MB/s bulk (8000 ints/s)
+        *  100-1249MB/s bulk (12000 ints/s)
         */
        /* what was last interrupt timeslice? */
        timepassed_us = q_vector->itr >> 2;
@@ -1247,7 +1247,7 @@ static void ixgbevf_set_itr(struct ixgbevf_q_vector *q_vector)
                break;
        case bulk_latency:
        default:
-               new_itr = IXGBE_8K_ITR;
+               new_itr = IXGBE_12K_ITR;
                break;
        }