> -----Original Message----- > From: pbhagavat...@marvell.com <pbhagavat...@marvell.com> > Sent: Friday, August 16, 2024 8:39 PM > To: Jerin Jacob <jer...@marvell.com>; Nithin Kumar Dabilpuram > <ndabilpu...@marvell.com>; Kiran Kumar Kokkilagadda > <kirankum...@marvell.com>; zhirun....@intel.com; Zhirun Yan > <yanzhirun_...@163.com> > Cc: dev@dpdk.org; Pavan Nikhilesh Bhagavatula <pbhagavat...@marvell.com> > Subject: [PATCH v4 2/5] graph: add node fastpath error counters > > From: Pavan Nikhilesh <pbhagavat...@marvell.com> > > Add node fastpath error counters advertised during node registration. > > Signed-off-by: Pavan Nikhilesh <pbhagavat...@marvell.com> > --- Acked-by: Kiran Kumar Kokkilagadda <kirankum...@marvell.com> > lib/graph/graph_populate.c | 20 ++++++++++++++++++-- > lib/graph/graph_private.h | 2 ++ > lib/graph/rte_graph_worker_common.h | 1 + > 3 files changed, 21 insertions(+), 2 deletions(-) > > diff --git a/lib/graph/graph_populate.c b/lib/graph/graph_populate.c index > ed596a7711..9c4c919e14 100644 > --- a/lib/graph/graph_populate.c > +++ b/lib/graph/graph_populate.c > @@ -39,6 +39,15 @@ graph_fp_mem_calc_size(struct graph *graph) > /* Pointer to next nodes(edges) */ > sz += sizeof(struct rte_node *) * graph_node->node->nb_edges; > } > + sz = RTE_ALIGN(sz, RTE_CACHE_LINE_SIZE); > + graph->errors_start = sz; > + /* For 0..N node objects with error counters */ > + STAILQ_FOREACH(graph_node, &graph->node_list, next) { > + if (graph_node->node->errs == NULL) > + continue; > + sz = RTE_ALIGN(sz, RTE_CACHE_LINE_SIZE); > + sz += sizeof(uint64_t) * graph_node->node->errs->nb_errors; > + } > > graph->mem_sz = sz; > return sz; > @@ -64,6 +73,7 @@ graph_header_popluate(struct graph *_graph) static void > graph_nodes_populate(struct graph *_graph) { > + rte_graph_off_t err_off = _graph->errors_start; > rte_graph_off_t off = _graph->nodes_start; > struct rte_graph *graph = _graph->graph; > struct graph_node *graph_node; > @@ -99,6 +109,12 @@ graph_nodes_populate(struct graph *_graph) > ->adjacency_list[count] > ->node->name[0]; > > + if (graph_node->node->errs != NULL) { > + node->err_off = err_off - off; > + err_off += sizeof(uint64_t) * graph_node->node->errs- > >nb_errors; > + err_off = RTE_ALIGN(err_off, RTE_CACHE_LINE_SIZE); > + } > + > off += sizeof(struct rte_node *) * nb_edges; > off = RTE_ALIGN(off, RTE_CACHE_LINE_SIZE); > node->next = off; > @@ -158,7 +174,7 @@ graph_node_nexts_populate(struct graph *_graph) } > > static int > -graph_src_nodes_populate(struct graph *_graph) > +graph_src_nodes_offset_populate(struct graph *_graph) > { > struct rte_graph *graph = _graph->graph; > struct graph_node *graph_node; > @@ -193,7 +209,7 @@ graph_fp_mem_populate(struct graph *graph) > graph_pcap_init(graph); > graph_nodes_populate(graph); > rc = graph_node_nexts_populate(graph); > - rc |= graph_src_nodes_populate(graph); > + rc |= graph_src_nodes_offset_populate(graph); > > return rc; > } > diff --git a/lib/graph/graph_private.h b/lib/graph/graph_private.h index > e663b04d8b..01921b254c 100644 > --- a/lib/graph/graph_private.h > +++ b/lib/graph/graph_private.h > @@ -103,6 +103,8 @@ struct graph { > /**< Memzone to store graph data. */ > rte_graph_off_t nodes_start; > /**< Node memory start offset in graph reel. */ > + rte_graph_off_t errors_start; > + /**< Node error memory start offset in graph reel. */ > rte_node_t src_node_count; > /**< Number of source nodes in a graph. */ > struct rte_graph *graph; > diff --git a/lib/graph/rte_graph_worker_common.h > b/lib/graph/rte_graph_worker_common.h > index 36d864e2c1..fa59d40f57 100644 > --- a/lib/graph/rte_graph_worker_common.h > +++ b/lib/graph/rte_graph_worker_common.h > @@ -110,6 +110,7 @@ struct __rte_cache_aligned rte_node { > uint64_t total_sched_fail; /**< Number of scheduled > failure. */ > } dispatch; > }; > + rte_graph_off_t err_off; /**< Offset to error counters. */ > /* Fast path area */ > #define RTE_NODE_CTX_SZ 16 > alignas(RTE_CACHE_LINE_SIZE) uint8_t ctx[RTE_NODE_CTX_SZ]; /**< > Node Context. */ > -- > 2.25.1