From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mails.dpdk.org (mails.dpdk.org [217.70.189.124]) by inbox.dpdk.org (Postfix) with ESMTP id 366C0457E5; Fri, 16 Aug 2024 17:09:59 +0200 (CEST) Received: from mails.dpdk.org (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 09D3F42DF0; Fri, 16 Aug 2024 17:09:59 +0200 (CEST) Received: from mx0b-0016f401.pphosted.com (mx0a-0016f401.pphosted.com [67.231.148.174]) by mails.dpdk.org (Postfix) with ESMTP id 63E4F427C7 for ; Fri, 16 Aug 2024 17:09:57 +0200 (CEST) Received: from pps.filterd (m0045849.ppops.net [127.0.0.1]) by mx0a-0016f401.pphosted.com (8.18.1.2/8.18.1.2) with ESMTP id 47GEqvnX005903; Fri, 16 Aug 2024 08:09:53 -0700 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=marvell.com; h= cc:content-transfer-encoding:content-type:date:from:in-reply-to :message-id:mime-version:references:subject:to; s=pfpt0220; bh=z gqXGCL7uVXZdoRloJ15TMkljaQv8zpEImjTdlQXNPk=; b=O0bMtnjRx8zGnVH2f jGqwYrfTQCbC2Ta0wUimCPOHpe5ngecWQCiJI8idm93pbrZbMYjYw8HdN2sgBg7g YBF6Lfujhpgm2RSecrOPonf5dm0dSyu2AV2qaWB+oojQro7/j0/eA1tXRTgUrMaA iXP4jBv3agys3l7AIFde6WEDRIbJWum/3xRgJlrKz5bYPv7qFlw1XcGxscf866Fe IuG8xsIVsHPoBxLzmWIdL4NRLEsiN6nb5t+mhUAQy9pixUBGGPrq+DBO0gSBAGAV pKwk3a75X1gnElTKDhRLGoQxeV1dtXcQ4uAGfx4a7pmSTDUK+Jh9IF4bdDDUB1Ri RaHOQ== Received: from dc6wp-exch02.marvell.com ([4.21.29.225]) by mx0a-0016f401.pphosted.com (PPS) with ESMTPS id 4128wrr3ay-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Fri, 16 Aug 2024 08:09:52 -0700 (PDT) Received: from DC6WP-EXCH02.marvell.com (10.76.176.209) by DC6WP-EXCH02.marvell.com (10.76.176.209) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.1544.4; Fri, 16 Aug 2024 08:09:51 -0700 Received: from maili.marvell.com (10.69.176.80) by DC6WP-EXCH02.marvell.com (10.76.176.209) with Microsoft SMTP Server id 15.2.1544.4 via Frontend Transport; Fri, 16 Aug 2024 08:09:51 -0700 Received: from MININT-80QBFE8.corp.innovium.com (MININT-80QBFE8.marvell.com [10.28.164.106]) by maili.marvell.com (Postfix) with ESMTP id DEAF63F7085; Fri, 16 Aug 2024 08:09:48 -0700 (PDT) From: To: , , , , Zhirun Yan CC: , Pavan Nikhilesh Subject: [PATCH v4 3/5] graph: add stats for node specific errors Date: Fri, 16 Aug 2024 20:39:24 +0530 Message-ID: <20240816150926.5789-3-pbhagavatula@marvell.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20240816150926.5789-1-pbhagavatula@marvell.com> References: <20240222122342.16375-1-pbhagavatula@marvell.com> <20240816150926.5789-1-pbhagavatula@marvell.com> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Content-Type: text/plain X-Proofpoint-ORIG-GUID: hSzfdxsdneJuSEYdTC-fley-WPx4VLIh X-Proofpoint-GUID: hSzfdxsdneJuSEYdTC-fley-WPx4VLIh X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1039,Hydra:6.0.680,FMLib:17.12.28.16 definitions=2024-08-16_09,2024-08-16_01,2024-05-17_01 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 From: Pavan Nikhilesh Add support for retrieving/printing stats for node specific errors using rte_graph_cluster_stats_get(). Signed-off-by: Pavan Nikhilesh --- lib/graph/graph_stats.c | 79 ++++++++++++++++++++++++++++++++++++++++- lib/graph/rte_graph.h | 4 +++ 2 files changed, 82 insertions(+), 1 deletion(-) diff --git a/lib/graph/graph_stats.c b/lib/graph/graph_stats.c index d71451a17b..1ac0a6797f 100644 --- a/lib/graph/graph_stats.c +++ b/lib/graph/graph_stats.c @@ -121,6 +121,25 @@ print_node(FILE *f, const struct rte_graph_cluster_node_stats *stat, bool dispat } } +static inline void +print_err(FILE *f, const struct rte_graph_cluster_node_stats *stat, bool dispatch) +{ + int i; + + if (dispatch) { + for (i = 0; i < stat->node_error_cntrs; i++) + fprintf(f, + "|\t%-24s|%15s|%-15" PRIu64 "|%15s|%15s|%15s|%15s|%15s|%11.4s|\n", + stat->node_error_desc[i], "", stat->node_error_count[i], "", "", "", + "", "", ""); + } else { + for (i = 0; i < stat->node_error_cntrs; i++) + fprintf(f, "|\t%-24s|%15s|%-15" PRIu64 "|%15s|%15.3s|%15.6s|%11.4s|\n", + stat->node_error_desc[i], "", stat->node_error_count[i], "", "", "", + ""); + } +} + static int graph_cluster_stats_cb(bool dispatch, bool is_first, bool is_last, void *cookie, const struct rte_graph_cluster_node_stats *stat) @@ -129,8 +148,11 @@ graph_cluster_stats_cb(bool dispatch, bool is_first, bool is_last, void *cookie, if (unlikely(is_first)) print_banner(f, dispatch); - if (stat->objs) + if (stat->objs) { print_node(f, stat, dispatch); + if (stat->node_error_cntrs) + print_err(f, stat, dispatch); + } if (unlikely(is_last)) { if (dispatch) boarder_model_dispatch(); @@ -203,6 +225,7 @@ stats_mem_populate(struct rte_graph_cluster_stats **stats_in, struct cluster_node *cluster; struct rte_node *node; rte_node_t count; + uint8_t i; cluster = stats->clusters; @@ -240,6 +263,36 @@ stats_mem_populate(struct rte_graph_cluster_stats **stats_in, SET_ERR_JMP(ENOENT, free, "Failed to find node %s in graph %s", graph_node->node->name, graph->name); cluster->nodes[cluster->nb_nodes++] = node; + if (graph_node->node->errs) { + cluster->stat.node_error_cntrs = graph_node->node->errs->nb_errors; + cluster->stat.node_error_count = rte_zmalloc_socket( + NULL, sizeof(uint64_t) * graph_node->node->errs->nb_errors, + RTE_CACHE_LINE_SIZE, stats->socket_id); + if (cluster->stat.node_error_count == NULL) + SET_ERR_JMP(ENOMEM, free, "Failed to allocate memory node %s graph %s", + graph_node->node->name, graph->name); + + cluster->stat.node_error_desc = rte_zmalloc_socket( + NULL, sizeof(RTE_NODE_ERROR_DESC_SIZE) * graph_node->node->errs->nb_errors, + RTE_CACHE_LINE_SIZE, stats->socket_id); + if (cluster->stat.node_error_desc == NULL) { + rte_free(cluster->stat.node_error_count); + SET_ERR_JMP(ENOMEM, free, "Failed to allocate memory node %s graph %s", + graph_node->node->name, graph->name); + } + + for (i = 0; i < cluster->stat.node_error_cntrs; i++) { + if (rte_strscpy(cluster->stat.node_error_desc[i], + graph_node->node->errs->err_desc[i], + RTE_NODE_ERROR_DESC_SIZE) < 0) { + rte_free(cluster->stat.node_error_count); + rte_free(cluster->stat.node_error_desc); + SET_ERR_JMP(E2BIG, free, + "Error description overflow node %s graph %s", + graph_node->node->name, graph->name); + } + } + } stats->sz += stats->cluster_node_size; stats->max_nodes++; @@ -388,6 +441,18 @@ rte_graph_cluster_stats_create(const struct rte_graph_cluster_stats_param *prm) void rte_graph_cluster_stats_destroy(struct rte_graph_cluster_stats *stat) { + struct cluster_node *cluster; + rte_node_t count; + + cluster = stat->clusters; + for (count = 0; count < stat->max_nodes; count++) { + if (cluster->stat.node_error_cntrs) { + rte_free(cluster->stat.node_error_count); + rte_free(cluster->stat.node_error_desc); + } + + cluster = RTE_PTR_ADD(cluster, stat->cluster_node_size); + } return rte_free(stat); } @@ -399,7 +464,10 @@ cluster_node_arregate_stats(struct cluster_node *cluster, bool dispatch) uint64_t sched_objs = 0, sched_fail = 0; struct rte_node *node; rte_node_t count; + uint64_t *err; + uint8_t i; + memset(stat->node_error_count, 0, sizeof(uint64_t) * stat->node_error_cntrs); for (count = 0; count < cluster->nb_nodes; count++) { node = cluster->nodes[count]; @@ -412,6 +480,12 @@ cluster_node_arregate_stats(struct cluster_node *cluster, bool dispatch) objs += node->total_objs; cycles += node->total_cycles; realloc_count += node->realloc_count; + + if (node->err_off == 0) + continue; + err = RTE_PTR_ADD(node, node->err_off); + for (i = 0; i < stat->node_error_cntrs; i++) + stat->node_error_count[i] += err[i]; } stat->calls = calls; @@ -464,6 +538,7 @@ rte_graph_cluster_stats_reset(struct rte_graph_cluster_stats *stat) { struct cluster_node *cluster; rte_node_t count; + uint8_t i; cluster = stat->clusters; @@ -479,6 +554,8 @@ rte_graph_cluster_stats_reset(struct rte_graph_cluster_stats *stat) node->prev_objs = 0; node->prev_cycles = 0; node->realloc_count = 0; + for (i = 0; i < node->node_error_cntrs; i++) + node->node_error_count[i] = 0; cluster = RTE_PTR_ADD(cluster, stat->cluster_node_size); } } diff --git a/lib/graph/rte_graph.h b/lib/graph/rte_graph.h index b28143d737..12b6461cf5 100644 --- a/lib/graph/rte_graph.h +++ b/lib/graph/rte_graph.h @@ -223,6 +223,10 @@ struct __rte_cache_aligned rte_graph_cluster_node_stats { uint64_t realloc_count; /**< Realloc count. */ + uint8_t node_error_cntrs; /**< Number of Node error counters. */ + char (*node_error_desc)[RTE_NODE_ERROR_DESC_SIZE]; /**< Names of the Node error counters. */ + uint64_t *node_error_count; /**< Total error count per each error. */ + rte_node_t id; /**< Node identifier of stats. */ uint64_t hz; /**< Cycles per seconds. */ char name[RTE_NODE_NAMESIZE]; /**< Name of the node. */ -- 2.25.1