Skip to content
  1. Oct 20, 2021
    • Jesse Brandeburg's avatar
      ice: fix software generating extra interrupts · 23be7075
      Jesse Brandeburg authored
      The driver tried to work around missing completion events that occurred
      while interrupts are disabled, by triggering a software interrupt
      whenever we exit polling (but we had to have polled at least once).
      
      This was causing a *lot* of extra interrupts for some workloads like
      NVMe over TCP, which resulted in regressions in performance. It was also
      visible when polling didn't prevent interrupts when busy_poll was
      enabled.
      
      Fix the extra interrupts by utilizing our previously unused 3rd ITR
      (interrupt throttle) index and set it to 20K interrupts per second, and
      then trigger a software interrupt within that rate limit.
      
      While here, slightly refactor the code to avoid an overwrite of a local
      variable in the case of wb_en = true.
      
      Fixes: b7306b42
      
       ("ice: manage interrupts during poll exit")
      Signed-off-by: default avatarJesse Brandeburg <jesse.brandeburg@intel.com>
      Tested-by: default avatarGurucharan G <gurucharanx.g@intel.com>
      Signed-off-by: default avatarTony Nguyen <anthony.l.nguyen@intel.com>
      23be7075
    • Jesse Brandeburg's avatar
      ice: fix rate limit update after coalesce change · d16a4f45
      Jesse Brandeburg authored
      If the adaptive settings are changed with
      ethtool -C ethx adaptive-rx off adaptive-tx off
      then the interrupt rate limit should be maintained as a user set value,
      but only if BOTH adaptive settings are off. Fix a bug where the rate
      limit that was being used in adaptive mode was staying set in the
      register but was not reported correctly by ethtool -c ethx. Due to long
      lines include a small refactor of q_vector variable.
      
      Fixes: b8b47723
      
       ("ice: refactor interrupt moderation writes")
      Signed-off-by: default avatarJesse Brandeburg <jesse.brandeburg@intel.com>
      Tested-by: default avatarGurucharan G <gurucharanx.g@intel.com>
      Signed-off-by: default avatarTony Nguyen <anthony.l.nguyen@intel.com>
      d16a4f45
    • Jesse Brandeburg's avatar
      ice: update dim usage and moderation · d8eb7ad5
      Jesse Brandeburg authored
      
      
      The driver was having trouble with unreliable latency when doing single
      threaded ping-pong tests. This was root caused to the DIM algorithm
      landing on a too slow interrupt value, which caused high latency, and it
      was especially present when queues were being switched frequently by the
      scheduler as happens on default setups today.
      
      In attempting to improve this, we allow the upper rate limit for
      interrupts to move to rate limit of 4 microseconds as a max, which means
      that no vector can generate more than 250,000 interrupts per second. The
      old config was up to 100,000. The driver previously tried to program the
      rate limit too frequently and if the receive and transmit side were both
      active on the same vector, the INTRL would be set incorrectly, and this
      change fixes that issue as a side effect of the redesign.
      
      This driver will operate from now on with a slightly changed DIM table
      with more emphasis towards latency sensitivity by having more table
      entries with lower latency than with high latency (high being >= 64
      microseconds).
      
      The driver also resets the DIM algorithm state with a new stats set when
      there is no work done and the data becomes stale (older than 1 second),
      for the respective receive or transmit portion of the interrupt.
      
      Add a new helper for setting rate limit, which will be used more
      in a followup patch.
      
      Signed-off-by: default avatarJesse Brandeburg <jesse.brandeburg@intel.com>
      Tested-by: default avatarGurucharan G <gurucharanx.g@intel.com>
      Signed-off-by: default avatarTony Nguyen <anthony.l.nguyen@intel.com>
      d8eb7ad5
    • Brett Creeley's avatar
      ice: Add support for VF rate limiting · 4ecc8633
      Brett Creeley authored
      
      
      Implement ndo_set_vf_rate to support setting of min_tx_rate and
      max_tx_rate; set the appropriate bandwidth in the scheduler for the
      node representing the specified VF VSI.
      
      Co-developed-by: default avatarTarun Singh <tarun.k.singh@intel.com>
      Signed-off-by: default avatarTarun Singh <tarun.k.singh@intel.com>
      Signed-off-by: default avatarBrett Creeley <brett.creeley@intel.com>
      Tested-by: default avatarKonrad Jankowski <konrad0.jankowski@intel.com>
      Signed-off-by: default avatarTony Nguyen <anthony.l.nguyen@intel.com>
      4ecc8633
  2. Oct 19, 2021