From patchwork Tue Feb 14 01:35:06 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: fengchengwen X-Patchwork-Id: 123847 X-Patchwork-Delegate: ferruh.yigit@amd.com Return-Path: X-Original-To: patchwork@inbox.dpdk.org Delivered-To: patchwork@inbox.dpdk.org Received: from mails.dpdk.org (mails.dpdk.org [217.70.189.124]) by inbox.dpdk.org (Postfix) with ESMTP id 52F5641C8E; Tue, 14 Feb 2023 02:41:27 +0100 (CET) Received: from mails.dpdk.org (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id F11F540ED9; Tue, 14 Feb 2023 02:41:26 +0100 (CET) Received: from szxga02-in.huawei.com (szxga02-in.huawei.com [45.249.212.188]) by mails.dpdk.org (Postfix) with ESMTP id 681E640E2D for ; Tue, 14 Feb 2023 02:41:25 +0100 (CET) Received: from dggpeml500024.china.huawei.com (unknown [172.30.72.57]) by szxga02-in.huawei.com (SkyGuard) with ESMTP id 4PG3m80lGpzJsSP; Tue, 14 Feb 2023 09:39:36 +0800 (CST) Received: from localhost.localdomain (10.50.163.32) by dggpeml500024.china.huawei.com (7.185.36.10) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2507.17; Tue, 14 Feb 2023 09:41:11 +0800 From: Chengwen Feng To: , , CC: , , Subject: [PATCH v3] ethdev: telemetry xstats support hide zero Date: Tue, 14 Feb 2023 01:35:06 +0000 Message-ID: <20230214013506.49152-1-fengchengwen@huawei.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20230209030755.48028-1-fengchengwen@huawei.com> References: <20230209030755.48028-1-fengchengwen@huawei.com> MIME-Version: 1.0 X-Originating-IP: [10.50.163.32] X-ClientProxiedBy: dggems705-chm.china.huawei.com (10.3.19.182) To dggpeml500024.china.huawei.com (7.185.36.10) X-CFilter-Loop: Reflected X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org The number of xstats may be large, after the hide zero option is added, only non-zero values can be displayed. So display xstats with hide zero: /ethdev/xstats,0,hide_zero=true and without hide zero: /ethdev/xstats,0,hide_zero=false or /ethdev/xstats,0 Signed-off-by: Chengwen Feng Reviewed-by: Ferruh Yigit --- v3: fix only hide_zero cause segment fault, support hide_zero=false, and these address Ferruh's comments. v2: using hide_zero=true optional parameter which address Ferruh's comments. --- lib/ethdev/rte_ethdev.c | 43 +++++++++++++++++++++++++++++++++++------ 1 file changed, 37 insertions(+), 6 deletions(-) diff --git a/lib/ethdev/rte_ethdev.c b/lib/ethdev/rte_ethdev.c index d25db35f7f..fa98af1f91 100644 --- a/lib/ethdev/rte_ethdev.c +++ b/lib/ethdev/rte_ethdev.c @@ -15,6 +15,7 @@ #include #include #include +#include #include #include #include @@ -5863,27 +5864,54 @@ eth_dev_handle_port_stats(const char *cmd __rte_unused, return 0; } +static int +eth_dev_parse_hide_zero(const char *key, const char *value, void *extra_args) +{ + RTE_SET_USED(key); + + if (value == NULL) + return -1; + + if (strcmp(value, "true") == 0) + *(bool *)extra_args = true; + else if (strcmp(value, "false") == 0) + *(bool *)extra_args = false; + else + return -1; + + return 0; +} + static int eth_dev_handle_port_xstats(const char *cmd __rte_unused, const char *params, struct rte_tel_data *d) { + const char *const valid_keys[] = { "hide_zero", NULL }; struct rte_eth_xstat *eth_xstats; struct rte_eth_xstat_name *xstat_names; + struct rte_kvargs *kvlist; int port_id, num_xstats; - int i, ret; + bool hide_zero = false; char *end_param; + int i, ret; if (params == NULL || strlen(params) == 0 || !isdigit(*params)) return -1; port_id = strtoul(params, &end_param, 0); - if (*end_param != '\0') - RTE_ETHDEV_LOG(NOTICE, - "Extra parameters passed to ethdev telemetry command, ignoring"); if (!rte_eth_dev_is_valid_port(port_id)) return -1; + if (*end_param != '\0') { + kvlist = rte_kvargs_parse(end_param, valid_keys); + ret = rte_kvargs_process(kvlist, NULL, eth_dev_parse_hide_zero, &hide_zero); + if (kvlist == NULL || ret != 0) + RTE_ETHDEV_LOG(NOTICE, + "Unknown extra parameters passed to ethdev telemetry command, ignoring\n"); + rte_kvargs_free(kvlist); + } + num_xstats = rte_eth_xstats_get(port_id, NULL, 0); if (num_xstats < 0) return -1; @@ -5908,9 +5936,12 @@ eth_dev_handle_port_xstats(const char *cmd __rte_unused, } rte_tel_data_start_dict(d); - for (i = 0; i < num_xstats; i++) + for (i = 0; i < num_xstats; i++) { + if (hide_zero && eth_xstats[i].value == 0) + continue; rte_tel_data_add_dict_uint(d, xstat_names[i].name, eth_xstats[i].value); + } free(eth_xstats); return 0; } @@ -6328,7 +6359,7 @@ RTE_INIT(ethdev_init_telemetry) rte_telemetry_register_cmd("/ethdev/stats", eth_dev_handle_port_stats, "Returns the common stats for a port. Parameters: int port_id"); rte_telemetry_register_cmd("/ethdev/xstats", eth_dev_handle_port_xstats, - "Returns the extended stats for a port. Parameters: int port_id"); + "Returns the extended stats for a port. Parameters: int port_id,hide_zero=true|false(Optional for indicates hide zero xstats)"); #ifndef RTE_EXEC_ENV_WINDOWS rte_telemetry_register_cmd("/ethdev/dump_priv", eth_dev_handle_port_dump_priv, "Returns dump private information for a port. Parameters: int port_id");