linux/drivers/net/ethernet/intel/i40e
Jacob Keller 9e3f23f44f i40e: reduce wait time for adminq command completion
When sending an adminq command, we wait for the command to complete in
a loop. This loop waits for an entire millisecond, when in practice the
adminq command is processed often much faster.

Change the loop to use i40e_usec_delay instead, and wait for 50 usecs
each time instead. This appears to be about the minimum time required,
based on some manual observation and testing.

The primary benefit of this change is reducing latency of various
operations in the PF driver, especially when related to having a large
number of VFs enabled.

For example, on Linux, when instantiating 128 VFs, the time to finish
the operation dropped from about 9 seconds down to under 6 seconds.
Additionally, the time it takes to finish a PF reset with 128 VFs
dropped from 5.1 seconds down to 0.7 seconds.

As the examples above show, a significant portion of the delay is wasted
waiting for admiqn operations which have already finished.

This patch shouldn't cause impact to functionality, as we still check
and keep waiting until the command does get processed. The only expected
change is an increase in CPU utilization as we now check for completion
far more times. However, in practice the commands appear to generally be
complete within the first delay window anyways.

Change-ID: If8af8388e100da0a14eaf9e1af3afadf73a958cf
Signed-off-by: Jacob Keller <jacob.e.keller@intel.com>
Tested-by: Andrew Bowers <andrewx.bowers@intel.com>
Signed-off-by: Jeff Kirsher <jeffrey.t.kirsher@intel.com>
2017-04-19 17:38:25 -07:00
..
i40e_adminq_cmd.h i40e: new AQ commands 2017-04-19 17:04:06 -07:00
i40e_adminq.c i40e: reduce wait time for adminq command completion 2017-04-19 17:38:25 -07:00
i40e_adminq.h i40e: reduce wait time for adminq command completion 2017-04-19 17:38:25 -07:00
i40e_alloc.h
i40e_client.c i40e: register existing client on probe 2017-04-06 20:22:28 -07:00
i40e_client.h i40e: KISS the client interface 2017-03-15 01:57:08 -07:00
i40e_common.c i40e: new AQ commands 2017-04-19 17:04:06 -07:00
i40e_dcb_nl.c
i40e_dcb.c i40e: refactor DCB function 2016-02-16 19:04:08 -08:00
i40e_dcb.h
i40e_debugfs.c i40e: dump VF information in debugfs 2017-04-19 16:38:23 -07:00
i40e_devids.h i40e: Add support for 25G devices 2016-12-06 20:59:43 -08:00
i40e_diag.c
i40e_diag.h
i40e_ethtool.c i40e: fix CONFIG_BUSY checks in i40e_set_settings function 2017-04-19 17:17:03 -07:00
i40e_fcoe.c i40e: store MAC/VLAN filters in a hash with the MAC Address as key 2016-10-31 14:26:40 -07:00
i40e_fcoe.h
i40e_hmc.c i40e: fix an uninitialized variable bug 2016-05-14 00:21:51 -07:00
i40e_hmc.h
i40e_lan_hmc.c i40e: use explicit cast from u16 to u8 2015-12-12 21:08:26 -08:00
i40e_lan_hmc.h
i40e_main.c i40e: factor out queue control from i40e_vsi_control_(tx|rx) 2017-04-19 17:13:56 -07:00
i40e_nvm.c i40e: Acquire NVM lock before reads on all devices 2017-03-14 17:52:32 -07:00
i40e_osdep.h i40e: Drop FCoE code from core driver files 2017-03-27 16:47:43 -07:00
i40e_prototype.h i40e: new AQ commands 2017-04-19 17:04:06 -07:00
i40e_ptp.c i40e: don't warn every time we clear an Rx timestamp register 2017-02-11 20:39:01 -08:00
i40e_register.h i40e: Expose some registers to program parser, FD and RSS logic 2016-02-18 23:49:31 -08:00
i40e_status.h
i40e_trace.h i40e/i40evf: Add tracepoints 2017-04-19 16:47:31 -07:00
i40e_txrx.c i40e/i40evf: Add tracepoints 2017-04-19 16:47:31 -07:00
i40e_txrx.h i40e/i40evf: Add support for padding start of frames 2017-04-08 02:53:51 -07:00
i40e_type.h i40e: new AQ commands 2017-04-19 17:04:06 -07:00
i40e_virtchnl_pf.c i40e/i40evf: Add capability exchange for outer checksum 2017-04-06 20:14:51 -07:00
i40e_virtchnl_pf.h i40e: Drop FCoE code that always evaluates to false or 0 2017-03-27 16:47:44 -07:00
i40e_virtchnl.h i40e/i40evf: Add capability exchange for outer checksum 2017-04-06 20:14:51 -07:00
i40e.h i40e: Fix support for flow director programming status 2017-04-19 16:36:18 -07:00
Makefile i40e/i40evf: Add tracepoints 2017-04-19 16:47:31 -07:00