[dpdk-dev,v2] i40e: fixed tx packets stats bug

Message ID 1416472802-8225-1-git-send-email-zhida.zang@intel.com (mailing list archive)
State Superseded, archived
Headers

Commit Message

zzang Nov. 20, 2014, 8:40 a.m. UTC
From: zzang <zhida.zang@intel.com>

i40e only count tx packets that sent by pf. But in some condition packet can be sent by NIC without being counted by pf. So count vsi tx packets instead.

Signed-off-by: zhida zang <zhida.zang@intel.com>
---
 lib/librte_pmd_i40e/i40e_ethdev.c | 10 +++++++---
 1 file changed, 7 insertions(+), 3 deletions(-)
  

Comments

Jijiang Liu Nov. 21, 2014, 6:32 a.m. UTC | #1
This patch V2  updated commit log.

> -----Original Message-----
> From: dev [mailto:dev-bounces@dpdk.org] On Behalf Of zhida zang
> Sent: Thursday, November 20, 2014 4:40 PM
> To: dev@dpdk.org
> Subject: [dpdk-dev] [PATCH v2] i40e: fixed tx packets stats bug
> 
> From: zzang <zhida.zang@intel.com>
> 
> i40e only count tx packets that sent by pf. But in some condition packet can be
> sent by NIC without being counted by pf. So count vsi tx packets instead.
> 
> Signed-off-by: zhida zang <zhida.zang@intel.com>
> ---
>  lib/librte_pmd_i40e/i40e_ethdev.c | 10 +++++++---
>  1 file changed, 7 insertions(+), 3 deletions(-)
> 
> diff --git a/lib/librte_pmd_i40e/i40e_ethdev.c
> b/lib/librte_pmd_i40e/i40e_ethdev.c
> index 4b7a827..c1ea37e 100644
> --- a/lib/librte_pmd_i40e/i40e_ethdev.c
> +++ b/lib/librte_pmd_i40e/i40e_ethdev.c
> @@ -1102,6 +1102,7 @@ i40e_dev_stats_get(struct rte_eth_dev *dev, struct
> rte_eth_stats *stats)
>  	struct i40e_hw *hw = I40E_DEV_PRIVATE_TO_HW(dev->data-
> >dev_private);
>  	struct i40e_hw_port_stats *ns = &pf->stats; /* new stats */
>  	struct i40e_hw_port_stats *os = &pf->stats_offset; /* old stats */
> +	struct i40e_eth_stats *ves = &pf->main_vsi->eth_stats; /* vsi stats */
> 
>  	/* Get statistics of struct i40e_eth_stats */
>  	i40e_stat_update_48(hw, I40E_GLPRT_GORCH(hw->port), @@ -1277,15
> +1278,18 @@ i40e_dev_stats_get(struct rte_eth_dev *dev, struct rte_eth_stats
> *stats)
>  	/* GLPRT_MSPDC not supported */
>  	/* GLPRT_XEC not supported */
> 
> -	pf->offset_loaded = true;
> -
>  	if (pf->main_vsi)
>  		i40e_update_vsi_stats(pf->main_vsi);
> 
>  	stats->ipackets = ns->eth.rx_unicast + ns->eth.rx_multicast +
>  						ns->eth.rx_broadcast;
> -	stats->opackets = ns->eth.tx_unicast + ns->eth.tx_multicast +
> +	if (pf->offset_loaded)
> +		stats->opackets = ves->tx_unicast + ves->tx_multicast +
> +						ves->tx_broadcast;
> +	else
> +		stats->opackets = ns->eth.tx_unicast + ns->eth.tx_multicast +
>  						ns->eth.tx_broadcast;
> +	pf->offset_loaded = true;
>  	stats->ibytes   = ns->eth.rx_bytes;
>  	stats->obytes   = ns->eth.tx_bytes;
>  	stats->oerrors  = ns->eth.tx_errors;
> --
> 1.9.3

Acked-by: Jijiang Liu < Jijiang.liu@intel.com>
  
Michael Qiu Nov. 21, 2014, 6:54 a.m. UTC | #2
On 2014/11/21 14:33, Liu, Jijiang wrote:
> This patch V2  updated commit log.

Not only updated commit log, but also the code :)

Thanks,
Michael
>
>> -----Original Message-----
>> From: dev [mailto:dev-bounces@dpdk.org] On Behalf Of zhida zang
>> Sent: Thursday, November 20, 2014 4:40 PM
>> To: dev@dpdk.org
>> Subject: [dpdk-dev] [PATCH v2] i40e: fixed tx packets stats bug
>>
>> From: zzang <zhida.zang@intel.com>
>>
>> i40e only count tx packets that sent by pf. But in some condition packet can be
>> sent by NIC without being counted by pf. So count vsi tx packets instead.
>>
>> Signed-off-by: zhida zang <zhida.zang@intel.com>
>> ---
>>  lib/librte_pmd_i40e/i40e_ethdev.c | 10 +++++++---
>>  1 file changed, 7 insertions(+), 3 deletions(-)
>>
>> diff --git a/lib/librte_pmd_i40e/i40e_ethdev.c
>> b/lib/librte_pmd_i40e/i40e_ethdev.c
>> index 4b7a827..c1ea37e 100644
>> --- a/lib/librte_pmd_i40e/i40e_ethdev.c
>> +++ b/lib/librte_pmd_i40e/i40e_ethdev.c
>> @@ -1102,6 +1102,7 @@ i40e_dev_stats_get(struct rte_eth_dev *dev, struct
>> rte_eth_stats *stats)
>>  	struct i40e_hw *hw = I40E_DEV_PRIVATE_TO_HW(dev->data-
>>> dev_private);
>>  	struct i40e_hw_port_stats *ns = &pf->stats; /* new stats */
>>  	struct i40e_hw_port_stats *os = &pf->stats_offset; /* old stats */
>> +	struct i40e_eth_stats *ves = &pf->main_vsi->eth_stats; /* vsi stats */
>>
>>  	/* Get statistics of struct i40e_eth_stats */
>>  	i40e_stat_update_48(hw, I40E_GLPRT_GORCH(hw->port), @@ -1277,15
>> +1278,18 @@ i40e_dev_stats_get(struct rte_eth_dev *dev, struct rte_eth_stats
>> *stats)
>>  	/* GLPRT_MSPDC not supported */
>>  	/* GLPRT_XEC not supported */
>>
>> -	pf->offset_loaded = true;
>> -
>>  	if (pf->main_vsi)
>>  		i40e_update_vsi_stats(pf->main_vsi);
>>
>>  	stats->ipackets = ns->eth.rx_unicast + ns->eth.rx_multicast +
>>  						ns->eth.rx_broadcast;
>> -	stats->opackets = ns->eth.tx_unicast + ns->eth.tx_multicast +
>> +	if (pf->offset_loaded)
>> +		stats->opackets = ves->tx_unicast + ves->tx_multicast +
>> +						ves->tx_broadcast;
>> +	else
>> +		stats->opackets = ns->eth.tx_unicast + ns->eth.tx_multicast +
>>  						ns->eth.tx_broadcast;
>> +	pf->offset_loaded = true;
>>  	stats->ibytes   = ns->eth.rx_bytes;
>>  	stats->obytes   = ns->eth.tx_bytes;
>>  	stats->oerrors  = ns->eth.tx_errors;
>> --
>> 1.9.3
> Acked-by: Jijiang Liu < Jijiang.liu@intel.com>
>
  

Patch

diff --git a/lib/librte_pmd_i40e/i40e_ethdev.c b/lib/librte_pmd_i40e/i40e_ethdev.c
index 4b7a827..c1ea37e 100644
--- a/lib/librte_pmd_i40e/i40e_ethdev.c
+++ b/lib/librte_pmd_i40e/i40e_ethdev.c
@@ -1102,6 +1102,7 @@  i40e_dev_stats_get(struct rte_eth_dev *dev, struct rte_eth_stats *stats)
 	struct i40e_hw *hw = I40E_DEV_PRIVATE_TO_HW(dev->data->dev_private);
 	struct i40e_hw_port_stats *ns = &pf->stats; /* new stats */
 	struct i40e_hw_port_stats *os = &pf->stats_offset; /* old stats */
+	struct i40e_eth_stats *ves = &pf->main_vsi->eth_stats; /* vsi stats */
 
 	/* Get statistics of struct i40e_eth_stats */
 	i40e_stat_update_48(hw, I40E_GLPRT_GORCH(hw->port),
@@ -1277,15 +1278,18 @@  i40e_dev_stats_get(struct rte_eth_dev *dev, struct rte_eth_stats *stats)
 	/* GLPRT_MSPDC not supported */
 	/* GLPRT_XEC not supported */
 
-	pf->offset_loaded = true;
-
 	if (pf->main_vsi)
 		i40e_update_vsi_stats(pf->main_vsi);
 
 	stats->ipackets = ns->eth.rx_unicast + ns->eth.rx_multicast +
 						ns->eth.rx_broadcast;
-	stats->opackets = ns->eth.tx_unicast + ns->eth.tx_multicast +
+	if (pf->offset_loaded)
+		stats->opackets = ves->tx_unicast + ves->tx_multicast +
+						ves->tx_broadcast;
+	else
+		stats->opackets = ns->eth.tx_unicast + ns->eth.tx_multicast +
 						ns->eth.tx_broadcast;
+	pf->offset_loaded = true;
 	stats->ibytes   = ns->eth.rx_bytes;
 	stats->obytes   = ns->eth.tx_bytes;
 	stats->oerrors  = ns->eth.tx_errors;