From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from dpdk.org (dpdk.org [92.243.14.124]) by dpdk.space (Postfix) with ESMTP id 3890AA046B for ; Tue, 25 Jun 2019 09:17:04 +0200 (CEST) Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id 10CE71BBF8; Tue, 25 Jun 2019 09:17:04 +0200 (CEST) Received: from mail-vs1-f66.google.com (mail-vs1-f66.google.com [209.85.217.66]) by dpdk.org (Postfix) with ESMTP id 8F53C1BBF4 for ; Tue, 25 Jun 2019 09:17:02 +0200 (CEST) Received: by mail-vs1-f66.google.com with SMTP id v6so10246311vsq.4 for ; Tue, 25 Jun 2019 00:17:02 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:references:in-reply-to:from:date :message-id:subject:to:cc; bh=2GZAqjhVVFuP8c12PGwtEuhulEK79i/s/C5jmswY1Cw=; b=iRUfY6BVDCOo2wQzCHQWEuNAURxNX89SUmsyIlwZeJ+O7NDbXeVJDmRIC/Znd9tf0p U+T9S+aLFroKJ0mjq6d+Pb17I6DSJzE7pxd/xBidAL/wLfPFGZjNR8akMf7DISzGh60s Z3Kw+2legwDjjj4eie79HLltqpUwzrCxsMeoUCKkA0HwFKToHdTqvZU8E2OWDAUGdV8T yNjNCbMyspEzhqVB6k+Z/T9m3t/2CW3uZN64SPHzrqxMZnq0vxoT4Yk9FEf16/EcI/LN Lj0xMFA3FpQgs4uzdZw+z/bnQXOvGceyobzFDq5xB4CIEajzioG103/4LjBV6Q3pUTDo NjQg== X-Gm-Message-State: APjAAAURgwTjETlpqqvvDaSB3ke04j2B4+xgf/Gcmw2ON/2OMYzXsPIP xLojxcS/QdW4I6GgOSt8SNOXSCvmPGdngzFHM0F37A== X-Google-Smtp-Source: APXvYqyX9NrhWTGcY2QrxxfxOLVIIEZDsEbi0/aIPfQzL0yXDiKMSwRN03bArevrW8X1fsXKEhA4FtdqjKAvoOGrneM= X-Received: by 2002:a67:da99:: with SMTP id w25mr2033665vsj.141.1561447021994; Tue, 25 Jun 2019 00:17:01 -0700 (PDT) MIME-Version: 1.0 References: <1560246526-264797-3-git-send-email-andy.pei@intel.com> <1560934174-408632-1-git-send-email-andy.pei@intel.com> <1560934174-408632-4-git-send-email-andy.pei@intel.com> <5941F446C088714A85408FA3132CFCBB01037924@SHSMSX105.ccr.corp.intel.com> In-Reply-To: <5941F446C088714A85408FA3132CFCBB01037924@SHSMSX105.ccr.corp.intel.com> From: David Marchand Date: Tue, 25 Jun 2019 09:16:51 +0200 Message-ID: To: "Pei, Andy" Cc: dev , "Xu, Rosen" Content-Type: text/plain; charset="UTF-8" X-Content-Filtered-By: Mailman/MimeDel 2.1.15 Subject: Re: [dpdk-dev] [PATCH v3 4/4] net/ipn3ke: implementation of statistics X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org Sender: "dev" On Tue, Jun 25, 2019 at 9:10 AM Pei, Andy wrote: > *From:* David Marchand [mailto:david.marchand@redhat.com] > *Sent:* Wednesday, June 19, 2019 5:06 PM > *To:* Pei, Andy > *Cc:* dev ; Xu, Rosen > *Subject:* Re: [dpdk-dev] [PATCH v3 4/4] net/ipn3ke: implementation of > statistics > > > > > > > > On Wed, Jun 19, 2019 at 10:56 AM Andy Pei wrote: > > This patch implemente statistics read and reset > function for ipn3ke. > > Fixes: 70d6b7f550f4 ("net/ipn3ke: add representor") > Cc: rosen.xu@intel.com > > Signed-off-by: Andy Pei > --- > drivers/net/ipn3ke/ipn3ke_representor.c | 3440 > ++++++++++++++++++++++++++++++- > 1 file changed, 3431 insertions(+), 9 deletions(-) > > diff --git a/drivers/net/ipn3ke/ipn3ke_representor.c > b/drivers/net/ipn3ke/ipn3ke_representor.c > index b166b8f..ed82ee7 100644 > --- a/drivers/net/ipn3ke/ipn3ke_representor.c > +++ b/drivers/net/ipn3ke/ipn3ke_representor.c > @@ -3,6 +3,7 @@ > */ > > #include > +#include > > #include > #include > @@ -297,31 +298,3452 @@ > { > } > > +/* Statistics collected by each port, VSI, VEB, and S-channel */ > +struct ipn3ke_rpst_eth_stats { > + uint64_t tx_bytes; /* gotc */ > + uint64_t tx_multicast; /* mptc */ > + uint64_t tx_broadcast; /* bptc */ > + uint64_t tx_unicast; /* uptc */ > + uint64_t tx_discards; /* tdpc */ > + uint64_t tx_errors; /* tepc */ > + uint64_t rx_bytes; /* gorc */ > + uint64_t rx_multicast; /* mprc */ > + uint64_t rx_broadcast; /* bprc */ > + uint64_t rx_unicast; /* uprc */ > + uint64_t rx_discards; /* rdpc */ > + uint64_t rx_unknown_protocol; /* rupp */ > +}; > + > +/* store statistics names and its offset in stats structure */ > +struct ipn3ke_rpst_xstats_name_offset { > + char name[RTE_ETH_XSTATS_NAME_SIZE]; > + unsigned int offset; > +}; > + > +static const struct ipn3ke_rpst_xstats_name_offset > +ipn3ke_rpst_stats_strings[] = { > + {"tx_multicast_packets", offsetof(struct > ipn3ke_rpst_eth_stats, > + tx_multicast)}, > + {"tx_broadcast_packets", offsetof(struct > ipn3ke_rpst_eth_stats, > + tx_broadcast)}, > + {"tx_unicast_packets", offsetof(struct > ipn3ke_rpst_eth_stats, > + tx_unicast)}, > + {"tx_dropped", offsetof(struct > ipn3ke_rpst_eth_stats, > + tx_discards)}, > + {"rx_multicast_packets", offsetof(struct > ipn3ke_rpst_eth_stats, > + rx_multicast)}, > + {"rx_broadcast_packets", offsetof(struct > ipn3ke_rpst_eth_stats, > + rx_broadcast)}, > + {"rx_unicast_packets", offsetof(struct > ipn3ke_rpst_eth_stats, > + rx_unicast)}, > + {"rx_dropped", offsetof(struct > ipn3ke_rpst_eth_stats, > + rx_discards)}, > + {"rx_unknown_protocol_packets", offsetof(struct > ipn3ke_rpst_eth_stats, > + > rx_unknown_protocol)}, > > > > Please see recent fixes on i40e and ice. > > tx_dropped -> tx_dropped_packets > > rx_dropped -> rx_dropped_packets > > > > > https://git.dpdk.org/next/dpdk-next-net-intel/commit/?id=e61e25233e9dfcd5386d83ab988790d9d5bd9400 > > > > > > >>>> Do this in v4. > > > > +}; > + > +#define IPN3KE_RPST_ETH_XSTATS_CNT (sizeof(ipn3ke_rpst_stats_strings) / \ > + sizeof(ipn3ke_rpst_stats_strings[0])) > + > +#define IPN3KE_RPST_PRIO_XSTATS_CNT 8 > + > +/* Statistics collected by the MAC */ > +struct ipn3ke_rpst_hw_port_stats { > + /* eth stats collected by the port */ > + struct ipn3ke_rpst_eth_stats eth; > + > + /* additional port specific stats */ > + uint64_t tx_dropped_link_down; > + uint64_t crc_errors; > + uint64_t illegal_bytes; > + uint64_t error_bytes; > + uint64_t mac_local_faults; > + uint64_t mac_remote_faults; > + uint64_t rx_length_errors; > + uint64_t link_xon_rx; > + uint64_t link_xoff_rx; > + uint64_t priority_xon_rx[IPN3KE_RPST_PRIO_XSTATS_CNT]; > + uint64_t priority_xoff_rx[IPN3KE_RPST_PRIO_XSTATS_CNT]; > + uint64_t link_xon_tx; > + uint64_t link_xoff_tx; > + uint64_t priority_xon_tx[IPN3KE_RPST_PRIO_XSTATS_CNT]; > + uint64_t priority_xoff_tx[IPN3KE_RPST_PRIO_XSTATS_CNT]; > + uint64_t priority_xon_2_xoff[IPN3KE_RPST_PRIO_XSTATS_CNT]; > + uint64_t rx_size_64; > + uint64_t rx_size_65_127; > + uint64_t rx_size_128_255; > + uint64_t rx_size_256_511; > + uint64_t rx_size_512_1023; > + uint64_t rx_size_1024_1518; > + uint64_t rx_size_big; > + uint64_t rx_undersize; > + uint64_t rx_fragments; > + uint64_t rx_oversize; > + uint64_t rx_jabber; > + uint64_t tx_size_64; > + uint64_t tx_size_65_127; > + uint64_t tx_size_128_255; > + uint64_t tx_size_256_511; > + uint64_t tx_size_512_1023; > + uint64_t tx_size_1024_1518; > + uint64_t tx_size_1519_to_max; > + uint64_t mac_short_packet_dropped; > + uint64_t checksum_error; > + /* flow director stats */ > + uint64_t fd_atr_match; > + uint64_t fd_sb_match; > + uint64_t fd_atr_tunnel_match; > + uint32_t fd_atr_status; > + uint32_t fd_sb_status; > + /* EEE LPI */ > + uint32_t tx_lpi_status; > + uint32_t rx_lpi_status; > + uint64_t tx_lpi_count; > + uint64_t rx_lpi_count; > +}; > + > +static const struct ipn3ke_rpst_xstats_name_offset > +ipn3ke_rpst_hw_port_strings[] = { > + {"tx_link_down_dropped", offsetof(struct > ipn3ke_rpst_hw_port_stats, > + tx_dropped_link_down)}, > + {"rx_crc_errors", offsetof(struct > ipn3ke_rpst_hw_port_stats, > + crc_errors)}, > + {"rx_illegal_byte_errors", offsetof(struct > ipn3ke_rpst_hw_port_stats, > + illegal_bytes)}, > + {"rx_error_bytes", offsetof(struct > ipn3ke_rpst_hw_port_stats, > + error_bytes)}, > + {"mac_local_errors", offsetof(struct > ipn3ke_rpst_hw_port_stats, > + mac_local_faults)}, > + {"mac_remote_errors", offsetof(struct > ipn3ke_rpst_hw_port_stats, > + mac_remote_faults)}, > + {"rx_length_errors", offsetof(struct > ipn3ke_rpst_hw_port_stats, > + rx_length_errors)}, > + {"tx_xon_packets", offsetof(struct > ipn3ke_rpst_hw_port_stats, > + link_xon_tx)}, > + {"rx_xon_packets", offsetof(struct > ipn3ke_rpst_hw_port_stats, > + link_xon_rx)}, > + {"tx_xoff_packets", offsetof(struct > ipn3ke_rpst_hw_port_stats, > + link_xoff_tx)}, > + {"rx_xoff_packets", offsetof(struct > ipn3ke_rpst_hw_port_stats, > + link_xoff_rx)}, > + {"rx_size_64_packets", offsetof(struct > ipn3ke_rpst_hw_port_stats, > + rx_size_64)}, > + {"rx_size_65_to_127_packets", offsetof(struct > ipn3ke_rpst_hw_port_stats, > + rx_size_65_127)}, > + {"rx_size_128_to_255_packets", > + offsetof(struct ipn3ke_rpst_hw_port_stats, > + rx_size_128_255)}, > + {"rx_size_256_to_511_packets", > + offsetof(struct ipn3ke_rpst_hw_port_stats, > + rx_size_256_511)}, > + {"rx_size_512_to_1023_packets", > + offsetof(struct ipn3ke_rpst_hw_port_stats, > + rx_size_512_1023)}, > + {"rx_size_1024_to_1518_packets", > + offsetof(struct ipn3ke_rpst_hw_port_stats, > + rx_size_1024_1518)}, > + {"rx_size_1519_to_max_packets", > + offsetof(struct ipn3ke_rpst_hw_port_stats, > + rx_size_big)}, > > > > Just a note, but those stats won't work with the current way ovs looks at > per size counters. > > > > >>>> Just keep this in the same way with I40E currently. > Look at the i40e stats: {"rx_size_1523_to_max_packets", offsetof(struct i40e_hw_port_stats, rx_size_big)}, Then look at ovs mapping on top of this: #define XSTAT_RX_1523_TO_MAX_PACKETS "rx_size_1523_to_max_packets" } else if (strcmp(XSTAT_RX_1523_TO_MAX_PACKETS, names[i].name) == 0) { stats->rx_1523_to_max_packets = xstats[i].value; Here, your stats name is "rx_size_1519_to_max_packets", ovs won't catch those stats for ipn3ke. Maybe you don't want to support ovs with this nic and/or the hw behaves this way and you can do nothing about it. But don't reply "same as i40e". -- David Marchand