[dpdk-dev] net/i40e: latency issue due fix interrupt throttling setting in PF
Xing, Beilei
beilei.xing at intel.com
Wed Dec 6 12:00:29 CET 2017
Hi,
I tested Rx latency with testpmd and ixia, found that the interval configuration works on X710.
With the default configuration, the latency is about 32us.
When RTE_LIBRTE_I40E_ITR_INTERVAL=0, the max latency is < 8us.
When RTE_LIBRTE_I40E_ITR_INTERVAL=8160, the max latency is about 8ms.
My test steps:
1. connect a X710 port with ixia, and bind the port to igb_uio
2. run testpmd and start io forwding
3. send a burst (5 packets) with ixia to X710 port
4. check the latency on ixia.
Best Regards,
Beilei
> -----Original Message-----
> From: dev [mailto:dev-bounces at dpdk.org] On Behalf Of Wu, Jingjing
> Sent: Friday, December 1, 2017 1:47 AM
> To: Hanoch Haim (hhaim) <hhaim at cisco.com>
> Cc: dev at dpdk.org
> Subject: Re: [dpdk-dev] net/i40e: latency issue due fix interrupt throttling
> setting in PF
>
> Hi, Hanoch
>
> Thanks a lot for the trying. Are you using igb_uio to bind the device?
>
> I guess it would be because that fix is not complete, the overlap with Rx
> interrupt mode is not considered. We will look into it.
> And it would be great if you can have a try on vfio_pci cases.
>
> Thanks
> Jingjing
>
> From: Hanoch Haim (hhaim) [mailto:hhaim at cisco.com]
> Sent: Friday, December 1, 2017 12:48 AM
> To: Wu, Jingjing <jingjing.wu at intel.com>
> Cc: dev at dpdk.org; Hanoch Haim (hhaim) <hhaim at cisco.com>
> Subject: RE: [dpdk-dev] net/i40e: latency issue due fix interrupt throttling
> setting in PF
>
> Hi Jingjing,
> I did that and see the results, It does not work as expected
>
> TRex command:
> $sudo ./t-rex-64 -f astf/http_simple.py -m 10000 -l 1000 -d 1000 --astf -c 1
>
>
>
> 1) with the issue (without the patch)
> *itr_idx << I40E_QINT_RQCTL_ITR_INDX_SHIFT | *#define
> RTE_LIBRTE_I40E_ITR_INTERVAL -1
>
>
> latency : 40usec
>
> -Latency stats enabled
> Cpu Utilization : 0.2 %
> if| tx_ok , rx_ok , rx check ,error, latency (usec) , Jitter max
> window
> | , , , , average , max , (usec)
> ---------------------------------------------------------------------------------------------
> -------------------
> 0 | 5603, 5603, 0, 0, 6 , 43, 1 | 0 0 0 0 41 41 34 40 41
> 33 43 8 8
> 1 | 5603, 5603, 0, 0, 12 , 44, 24 | 0 0 0 0 39 41 41 34 40
> 33 33 8 8
> 2 | 5603, 5603, 0, 0, 8 , 43, 5 | 0 0 0 0 38 41 42 40 40
> 40 42 9 8
> 3 | 5603, 5603, 0, 0, 6 , 43, 1 | 0 0 0 0 36 41 34 42 43
> 8 35 40 41
> *** TRex is shutting down - cause: 'CTRL + C detected'
>
> 2) with RTE_LIBRTE_I40E_ITR_INTERVAL 4
>
> itr_idx << I40E_QINT_RQCTL_ITR_INDX_SHIFT | #define
> RTE_LIBRTE_I40E_ITR_INTERVAL 4
>
> latency : 40usec
>
> -Latency stats enabled
> Cpu Utilization : 0.2 %
> if| tx_ok , rx_ok , rx check ,error, latency (usec) , Jitter max
> window
> | , , , , average , max , (usec)
> ---------------------------------------------------------------------------------------------
> -------------------
> 0 | 5034, 5034, 0, 0, 10 , 42, 0 | 0 0 0 0 0 42 40 38 24
> 32 23 24 23
> 1 | 5034, 5034, 0, 0, 8 , 43, 0 | 0 0 0 0 0 43 37 38 19
> 20 30 18 21
> 2 | 5034, 5034, 0, 0, 8 , 45, 0 | 0 0 0 0 0 37 40 41 40
> 41 41 40 45
> 3 | 5034, 5034, 0, 0, 8 , 48, 0 | 0 0 0 0 0 42 36 43 44
> 43 43 44 48
> *
>
>
> 3) RTE_LIBRTE_I40E_ITR_INTERVAL 0
>
> itr_idx << I40E_QINT_RQCTL_ITR_INDX_SHIFT | #define
> RTE_LIBRTE_I40E_ITR_INTERVAL 0
>
> latency : 40usec
>
> -Latency stats enabled
> Cpu Utilization : 0.2 %
> if| tx_ok , rx_ok , rx check ,error, latency (usec) , Jitter max
> window
> | , , , , average , max , (usec)
> ---------------------------------------------------------------------------------------------
> -------------------
> 0 | 5034, 5034, 0, 0, 10 , 42, 0 | 0 0 0 0 0 42 40 38 24
> 32 23 24 23
> 1 | 5034, 5034, 0, 0, 8 , 43, 0 | 0 0 0 0 0 43 37 38 19
> 20 30 18 21
> 2 | 5034, 5034, 0, 0, 8 , 45, 0 | 0 0 0 0 0 37 40 41 40
> 41 41 40 45
> 3 | 5034, 5034, 0, 0, 8 , 48, 0 | 0 0 0 0 0 42 36 43 44
> 43 43 44 48
> *
>
> 4) TRex patch issue solved
>
> I40E_QINT_RQCTL_ITR_INDX_MASK
> #define RTE_LIBRTE_I40E_ITR_INTERVAL -1
>
> latency : 8usec
>
> -Latency stats enabled
> Cpu Utilization : 0.1 %
> if| tx_ok , rx_ok , rx check ,error, latency (usec) , Jitter max
> window
> | , , , , average , max , (usec)
> ---------------------------------------------------------------------------------------------
> -------------------
> 0 | 9501, 9501, 0, 0, 7 , 21, 0 | 21 9 9 12 9 9 14 12 8 9
> 9 9 8
> 1 | 9501, 9501, 0, 0, 7 , 25, 0 | 22 8 9 12 9 9 15 12 8 8
> 9 9 8
> 2 | 9501, 9501, 0, 0, 6 , 26, 0 | 22 9 10 9 10 10 15 13 8
> 9 9 9 8
> 3 | 9501, 9501, 0, 0, 6 , 32, 0 | 22 8 9 9 9 9 15 12 8 7
> 9 9 9
>
> Thanks,
> Hanoh
>
> From: Wu, Jingjing [mailto:jingjing.wu at intel.com]
> Sent: Tuesday, November 28, 2017 5:01 PM
> To: Hanoch Haim (hhaim)
> Cc: dev at dpdk.org<mailto:dev at dpdk.org>
> Subject: RE: [dpdk-dev] net/i40e: latency issue due fix interrupt throttling
> setting in PF
>
> Hi, Hanoch
>
> If DPDK PF, the commit affects that because it introduces an argument
> (itr_idx) for i40e_vsi_enable_queues_intr. And use the default itr_idx with
> default value 32us.
>
> If you'd like to get the descriptor write back immediately, you can set
> "CONFIG_RTE_LIBRTE_I40E_ITR_INTERVAL=0" in config/common_base file.
>
> Or you can just change the definition of
> I40E_QUEUE_ITR_INTERVAL_DEFAULT like:
> #define I40E_QUEUE_ITR_INTERVAL_DEFAULT 0 /* 0 us */
>
> Thanks
> Jingjing
>
> From: Hanoch Haim (hhaim) [mailto:hhaim at cisco.com]
> Sent: Tuesday, November 28, 2017 9:14 PM
> To: Wu, Jingjing <jingjing.wu at intel.com<mailto:jingjing.wu at intel.com>>
> Cc: dev at dpdk.org<mailto:dev at dpdk.org>; Hanoch Haim (hhaim)
> <hhaim at cisco.com<mailto:hhaim at cisco.com>>
> Subject: RE: [dpdk-dev] net/i40e: latency issue due fix interrupt throttling
> setting in PF
>
> Hi Jingjing,
>
> 1. The issue is with DPDK PF.
>
> 2. The rate is high ~10gb, one DP core, one latency core.
>
> 3. The fix is here
>
> /* Bind all RX queues to allocated MSIX interrupt */
> for (i = 0; i < nb_queue; i++) {
> val = (msix_vect << I40E_QINT_RQCTL_MSIX_INDX_SHIFT) |
> #ifdef TREX_PATCH
> I40E_QINT_RQCTL_ITR_INDX_MASK |
> << low latency 11b = NoITR
> #else
> itr_idx << I40E_QINT_RQCTL_ITR_INDX_SHIFT |
> << high spkies
> #endif
>
> I40E_WRITE_REG(hw, I40E_QINT_RQCTL(base_queue + i), val);
>
> The Interrupt Throttling ITR is configure using a different setting using a
> different register here :
>
>
> 4. The ITR_INTERVAL is 32 usec and it affect a different PF register
>
> #define I40E_ITR_INDEX_DEFAULT 0
> #define I40E_ITR_INDEX_NONE 3
> #define I40E_QUEUE_ITR_INTERVAL_DEFAULT 32 /* 32 us */
>
>
> 5. My question is why the VF configuration affects PF INT_INTERVAL ? Can
> I remove my patch and fix this latency issue in the different way?
>
> Thanks,
> Hanoh
>
> From: Wu, Jingjing [mailto:jingjing.wu at intel.com]
> Sent: Tuesday, November 28, 2017 2:50 PM
> To: Hanoch Haim (hhaim); dev at dpdk.org<mailto:dev at dpdk.org>
> Subject: RE: [dpdk-dev] net/i40e: latency issue due fix interrupt throttling
> setting in PF
>
> Hi, Hanoch
>
> Are you talking about i40 VF's latency? And you are using DPDK PF as host
> driver?
>
> In this case, we are setting the Interrupt Throttling (ITR) to be maximum.
> That is to say, if the packet rate is very slow , the receive descriptor is written
> back when ITR timeout, otherwise it is written back when cache line is full (4
> descriptors/packets). I think that's why you saw the latency is varying.
>
> If we change the ITR to minor, then huge number of interrupts will coming to
> core which impact performance.
>
>
> Thanks
> Jingjing
>
> From: Hanoch Haim (hhaim) [mailto:hhaim at cisco.com]
> Sent: Friday, November 24, 2017 7:25 PM
> To: dev at dpdk.org<mailto:dev at dpdk.org>
> Cc: Wu, Jingjing <jingjing.wu at intel.com<mailto:jingjing.wu at intel.com>>
> Subject: RE: [dpdk-dev] net/i40e: latency issue due fix interrupt throttling
> setting in PF
>
> Re-sending
>
> Hanoh
>
> From: Hanoch Haim (hhaim)
> Sent: Monday, November 20, 2017 5:19 PM
> To: dev at dpdk.org<mailto:dev at dpdk.org>
> Cc: Wu, Jingjing (jingjing.wu at intel.com<mailto:jingjing.wu at intel.com>);
> Hanoch Haim (hhaim)
> Subject: [dpdk-dev] net/i40e: latency issue due fix interrupt throttling setting
> in PF
>
> Hi All,
> While integrating dpdk17.11 into TRex latest code a new latency issue is
> observed (i40e is very sensitive because it has very good resolution due to
> Qos configuration).
> git bitsec found the following commit.
> With this commit we observe high spikes of Rx latency (~40usec) vs (~8usec).
> Any idea why?
> I can send how to reproduce this, it is very simple.
>
> cfd662d22e7bddb4ba41dbd1384f8497f38c2b4e is the first bad commit
> commit cfd662d22e7bddb4ba41dbd1384f8497f38c2b4e
> Author: Jingjing Wu <jingjing.wu at intel.com<mailto:jingjing.wu at intel.com>>
> Date: Thu Aug 24 09:57:51 2017 +0800
>
> net/i40e: fix interrupt throttling setting in PF
>
> As no matter the PF host driver is DPDK or other kernel drivers,
> they are sharing the same virtchnnl interfaces to communicate to VFs.
> To follow the generic interface, DPDK PF need to set Interrupt
> Throttling (ITR) index according to the rxitr_idx from virtchnnl
> instead of ITR_NONE.
>
> Fixes: 6d59e4ea74a6 ("net/i40e: change version number to support Linux
> VF")
> Cc: stable at dpdk.org<mailto:stable at dpdk.org>
>
> Signed-off-by: Jingjing Wu
> <jingjing.wu at intel.com<mailto:jingjing.wu at intel.com>>
>
>
>
> Thanks,
> Hanoh
More information about the dev
mailing list