* [dpdk-dev] [PATCH 0/2] xstats related patches
@ 2019-11-01 20:12 Stephen Hemminger
2019-11-01 20:12 ` [dpdk-dev] [PATCH 1/2] app/testpmd: block xstats for hidden ports Stephen Hemminger
` (2 more replies)
0 siblings, 3 replies; 6+ messages in thread
From: Stephen Hemminger @ 2019-11-01 20:12 UTC (permalink / raw)
To: dev; +Cc: Stephen Hemminger
This is an updated simplified version of previous failsafe xstats
patch and a bug fix for testpmd.
The failsafe xstats patch is almostly a complete redo.
Stephen Hemminger (2):
app/testpmd: block xstats for hidden ports
failsafe: implement xstats
app/test-pmd/config.c | 8 ++
drivers/net/failsafe/failsafe_ops.c | 152 ++++++++++++++++++++++++++++
2 files changed, 160 insertions(+)
--
2.20.1
^ permalink raw reply [flat|nested] 6+ messages in thread
* [dpdk-dev] [PATCH 1/2] app/testpmd: block xstats for hidden ports
2019-11-01 20:12 [dpdk-dev] [PATCH 0/2] xstats related patches Stephen Hemminger
@ 2019-11-01 20:12 ` Stephen Hemminger
2019-11-04 11:25 ` Iremonger, Bernard
2019-11-01 20:12 ` [dpdk-dev] [PATCH 2/2] failsafe: implement xstats Stephen Hemminger
2019-11-08 18:26 ` [dpdk-dev] [PATCH 0/2] xstats related patches Ferruh Yigit
2 siblings, 1 reply; 6+ messages in thread
From: Stephen Hemminger @ 2019-11-01 20:12 UTC (permalink / raw)
To: dev; +Cc: Stephen Hemminger
All the other testpmd commands block access to devices that
are owned. Looks like xstat got overlooked.
Fixes: bfd5051b43b5 ("app/testpmd: new command to get extended statistics")
Signed-off-by: Stephen Hemminger <stephen@networkplumber.org>
---
app/test-pmd/config.c | 8 ++++++++
1 file changed, 8 insertions(+)
diff --git a/app/test-pmd/config.c b/app/test-pmd/config.c
index efe2812a85ef..ad926d573b81 100644
--- a/app/test-pmd/config.c
+++ b/app/test-pmd/config.c
@@ -238,6 +238,10 @@ nic_xstats_display(portid_t port_id)
int cnt_xstats, idx_xstat;
struct rte_eth_xstat_name *xstats_names;
+ if (port_id_is_invalid(port_id, ENABLED_WARN)) {
+ print_valid_ports();
+ return;
+ }
printf("###### NIC extended statistics for port %-2d\n", port_id);
if (!rte_eth_dev_is_valid_port(port_id)) {
printf("Error: Invalid port number %i\n", port_id);
@@ -295,6 +299,10 @@ nic_xstats_clear(portid_t port_id)
{
int ret;
+ if (port_id_is_invalid(port_id, ENABLED_WARN)) {
+ print_valid_ports();
+ return;
+ }
ret = rte_eth_xstats_reset(port_id);
if (ret != 0) {
printf("%s: Error: failed to reset xstats (port %u): %s",
--
2.20.1
^ permalink raw reply [flat|nested] 6+ messages in thread
* [dpdk-dev] [PATCH 2/2] failsafe: implement xstats
2019-11-01 20:12 [dpdk-dev] [PATCH 0/2] xstats related patches Stephen Hemminger
2019-11-01 20:12 ` [dpdk-dev] [PATCH 1/2] app/testpmd: block xstats for hidden ports Stephen Hemminger
@ 2019-11-01 20:12 ` Stephen Hemminger
2019-11-08 18:13 ` Ferruh Yigit
2019-11-08 18:26 ` [dpdk-dev] [PATCH 0/2] xstats related patches Ferruh Yigit
2 siblings, 1 reply; 6+ messages in thread
From: Stephen Hemminger @ 2019-11-01 20:12 UTC (permalink / raw)
To: dev; +Cc: Stephen Hemminger
Add support for extended statistics in failsafe driver.
Reports detailed statistics for each sub device.
Example:
testpmd> show port xstats 1
rx_good_packets: 0
tx_good_packets: 0
rx_good_bytes: 0
tx_good_bytes: 0
rx_missed_errors: 0
rx_errors: 0
tx_errors: 0
rx_mbuf_allocation_errors: 0
rx_q0packets: 0
rx_q0bytes: 0
rx_q0errors: 0
tx_q0packets: 0
tx_q0bytes: 0
rx_sub0_good_packets: 0
tx_sub0_good_packets: 0
...
rx_sub1_good_packets: 0
tx_sub1_good_packets: 0
rx_sub1_good_bytes: 0
Signed-off-by: Stephen Hemminger <stephen@networkplumber.org>
---
drivers/net/failsafe/failsafe_ops.c | 152 ++++++++++++++++++++++++++++
1 file changed, 152 insertions(+)
diff --git a/drivers/net/failsafe/failsafe_ops.c b/drivers/net/failsafe/failsafe_ops.c
index 0afae6c71feb..a87e49b97d33 100644
--- a/drivers/net/failsafe/failsafe_ops.c
+++ b/drivers/net/failsafe/failsafe_ops.c
@@ -14,6 +14,7 @@
#include <rte_flow.h>
#include <rte_cycles.h>
#include <rte_ethdev.h>
+#include <rte_string_fns.h>
#include "failsafe_private.h"
@@ -881,6 +882,154 @@ fs_stats_reset(struct rte_eth_dev *dev)
return 0;
}
+static int
+__fs_xstats_count(struct rte_eth_dev *dev)
+{
+ struct sub_device *sdev;
+ int count = 0;
+ uint8_t i;
+ int ret;
+
+ FOREACH_SUBDEV_STATE(sdev, i, dev, DEV_ACTIVE) {
+ ret = rte_eth_xstats_get_names(PORT_ID(sdev), NULL, 0);
+ if (ret < 0)
+ return ret;
+ count += ret;
+ }
+
+ return count;
+}
+
+static int
+__fs_xstats_get_names(struct rte_eth_dev *dev,
+ struct rte_eth_xstat_name *xstats_names,
+ unsigned int limit)
+{
+ struct sub_device *sdev;
+ unsigned int count = 0;
+ uint8_t i;
+
+ /* Caller only cares about count */
+ if (!xstats_names)
+ return __fs_xstats_count(dev);
+
+ FOREACH_SUBDEV_STATE(sdev, i, dev, DEV_ACTIVE) {
+ struct rte_eth_xstat_name *sub_names = xstats_names + count;
+ int j, r;
+
+ if (count >= limit)
+ break;
+
+ r = rte_eth_xstats_get_names(PORT_ID(sdev),
+ sub_names, limit - count);
+ if (r < 0)
+ return r;
+
+ /* add subN_ prefix to names */
+ for (j = 0; j < r; j++) {
+ char *xname = sub_names[j].name;
+ char tmp[RTE_ETH_XSTATS_NAME_SIZE];
+
+ if ((xname[0] == 't' || xname[0] == 'r') &&
+ xname[1] == 'x' && xname[2] == '_')
+ snprintf(tmp, sizeof(tmp), "%.3ssub%u_%s",
+ xname, i, xname + 3);
+ else
+ snprintf(tmp, sizeof(tmp), "sub%u_%s",
+ i, xname);
+
+ strlcpy(xname, tmp, RTE_ETH_XSTATS_NAME_SIZE);
+ }
+ count += r;
+ }
+ return count;
+}
+
+static int
+fs_xstats_get_names(struct rte_eth_dev *dev,
+ struct rte_eth_xstat_name *xstats_names,
+ unsigned int limit)
+{
+ int ret;
+
+ fs_lock(dev, 0);
+ ret = __fs_xstats_get_names(dev, xstats_names, limit);
+ fs_unlock(dev, 0);
+ return ret;
+}
+
+static int
+__fs_xstats_get(struct rte_eth_dev *dev,
+ struct rte_eth_xstat *xstats,
+ unsigned int n)
+{
+ unsigned int count = 0;
+ struct sub_device *sdev;
+ uint8_t i;
+ int j, ret;
+
+ ret = __fs_xstats_count(dev);
+ /*
+ * if error
+ * or caller did not give enough space
+ * or just querying
+ */
+ if (ret < 0 || ret > (int)n || xstats == NULL)
+ return ret;
+
+ FOREACH_SUBDEV_STATE(sdev, i, dev, DEV_ACTIVE) {
+ ret = rte_eth_xstats_get(PORT_ID(sdev), xstats, n);
+ if (ret < 0)
+ return ret;
+
+ if (ret > (int)n)
+ return n + count;
+
+ /* add offset to id's from sub-device */
+ for (j = 0; j < ret; j++)
+ xstats[j].id += count;
+
+ xstats += ret;
+ n -= ret;
+ count += ret;
+ }
+
+ return count;
+}
+
+static int
+fs_xstats_get(struct rte_eth_dev *dev,
+ struct rte_eth_xstat *xstats,
+ unsigned int n)
+{
+ int ret;
+
+ fs_lock(dev, 0);
+ ret = __fs_xstats_get(dev, xstats, n);
+ fs_unlock(dev, 0);
+
+ return ret;
+}
+
+
+static int
+fs_xstats_reset(struct rte_eth_dev *dev)
+{
+ struct sub_device *sdev;
+ uint8_t i;
+ int r = 0;
+
+ fs_lock(dev, 0);
+ FOREACH_SUBDEV_STATE(sdev, i, dev, DEV_ACTIVE) {
+ r = rte_eth_xstats_reset(PORT_ID(sdev));
+ if (r < 0)
+ break;
+ }
+ fs_unlock(dev, 0);
+
+ return r;
+}
+
static void
fs_dev_merge_desc_lim(struct rte_eth_desc_lim *to,
const struct rte_eth_desc_lim *from)
@@ -1331,6 +1480,9 @@ const struct eth_dev_ops failsafe_ops = {
.link_update = fs_link_update,
.stats_get = fs_stats_get,
.stats_reset = fs_stats_reset,
+ .xstats_get = fs_xstats_get,
+ .xstats_get_names = fs_xstats_get_names,
+ .xstats_reset = fs_xstats_reset,
.dev_infos_get = fs_dev_infos_get,
.dev_supported_ptypes_get = fs_dev_supported_ptypes_get,
.mtu_set = fs_mtu_set,
--
2.20.1
^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [dpdk-dev] [PATCH 1/2] app/testpmd: block xstats for hidden ports
2019-11-01 20:12 ` [dpdk-dev] [PATCH 1/2] app/testpmd: block xstats for hidden ports Stephen Hemminger
@ 2019-11-04 11:25 ` Iremonger, Bernard
0 siblings, 0 replies; 6+ messages in thread
From: Iremonger, Bernard @ 2019-11-04 11:25 UTC (permalink / raw)
To: Stephen Hemminger, dev
> -----Original Message-----
> From: dev <dev-bounces@dpdk.org> On Behalf Of Stephen Hemminger
> Sent: Friday, November 1, 2019 8:13 PM
> To: dev@dpdk.org
> Cc: Stephen Hemminger <stephen@networkplumber.org>
> Subject: [dpdk-dev] [PATCH 1/2] app/testpmd: block xstats for hidden ports
>
> All the other testpmd commands block access to devices that are owned.
> Looks like xstat got overlooked.
>
> Fixes: bfd5051b43b5 ("app/testpmd: new command to get extended
> statistics")
> Signed-off-by: Stephen Hemminger <stephen@networkplumber.org>
./devtools/check-git-log.sh -1
Is it candidate for Cc: stable@dpdk.org backport?
Otherwise:
Acked-by: Bernard Iremonger <bernard.iremonger@intel.com>
^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [dpdk-dev] [PATCH 2/2] failsafe: implement xstats
2019-11-01 20:12 ` [dpdk-dev] [PATCH 2/2] failsafe: implement xstats Stephen Hemminger
@ 2019-11-08 18:13 ` Ferruh Yigit
0 siblings, 0 replies; 6+ messages in thread
From: Ferruh Yigit @ 2019-11-08 18:13 UTC (permalink / raw)
To: Stephen Hemminger, dev, Gaetan Rivet
On 11/1/2019 8:12 PM, Stephen Hemminger wrote:
> Add support for extended statistics in failsafe driver.
> Reports detailed statistics for each sub device.
>
> Example:
>
> testpmd> show port xstats 1
> rx_good_packets: 0
> tx_good_packets: 0
> rx_good_bytes: 0
> tx_good_bytes: 0
> rx_missed_errors: 0
> rx_errors: 0
> tx_errors: 0
> rx_mbuf_allocation_errors: 0
> rx_q0packets: 0
> rx_q0bytes: 0
> rx_q0errors: 0
> tx_q0packets: 0
> tx_q0bytes: 0
> rx_sub0_good_packets: 0
> tx_sub0_good_packets: 0
> ...
> rx_sub1_good_packets: 0
> tx_sub1_good_packets: 0
> rx_sub1_good_bytes: 0
>
> Signed-off-by: Stephen Hemminger <stephen@networkplumber.org>
Reviewed-by: Ferruh Yigit <ferruh.yigit@intel.com>
Hi Stephen, Geatan,
What do you think about adding Stephen as additional failsafe maintainer?
^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [dpdk-dev] [PATCH 0/2] xstats related patches
2019-11-01 20:12 [dpdk-dev] [PATCH 0/2] xstats related patches Stephen Hemminger
2019-11-01 20:12 ` [dpdk-dev] [PATCH 1/2] app/testpmd: block xstats for hidden ports Stephen Hemminger
2019-11-01 20:12 ` [dpdk-dev] [PATCH 2/2] failsafe: implement xstats Stephen Hemminger
@ 2019-11-08 18:26 ` Ferruh Yigit
2 siblings, 0 replies; 6+ messages in thread
From: Ferruh Yigit @ 2019-11-08 18:26 UTC (permalink / raw)
To: Stephen Hemminger, dev
On 11/1/2019 8:12 PM, Stephen Hemminger wrote:
> This is an updated simplified version of previous failsafe xstats
> patch and a bug fix for testpmd.
>
> The failsafe xstats patch is almostly a complete redo.
>
> Stephen Hemminger (2):
> app/testpmd: block xstats for hidden ports
> failsafe: implement xstats
Series applied to dpdk-next-net/master, thanks.
^ permalink raw reply [flat|nested] 6+ messages in thread
end of thread, other threads:[~2019-11-08 18:26 UTC | newest]
Thread overview: 6+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2019-11-01 20:12 [dpdk-dev] [PATCH 0/2] xstats related patches Stephen Hemminger
2019-11-01 20:12 ` [dpdk-dev] [PATCH 1/2] app/testpmd: block xstats for hidden ports Stephen Hemminger
2019-11-04 11:25 ` Iremonger, Bernard
2019-11-01 20:12 ` [dpdk-dev] [PATCH 2/2] failsafe: implement xstats Stephen Hemminger
2019-11-08 18:13 ` Ferruh Yigit
2019-11-08 18:26 ` [dpdk-dev] [PATCH 0/2] xstats related patches Ferruh Yigit
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).