[PATCH v4 4/5] node: add error stats for ip4 lookup node

Kiran Kumar Kokkilagadda kirankumark at marvell.com
Thu Aug 22 08:38:16 CEST 2024



> -----Original Message-----
> From: pbhagavatula at marvell.com <pbhagavatula at marvell.com>
> Sent: Friday, August 16, 2024 8:39 PM
> To: Jerin Jacob <jerinj at marvell.com>; Nithin Kumar Dabilpuram
> <ndabilpuram at marvell.com>; Kiran Kumar Kokkilagadda
> <kirankumark at marvell.com>; zhirun.yan at intel.com; Pavan Nikhilesh
> Bhagavatula <pbhagavatula at marvell.com>; Wathsala Vithanage
> <wathsala.vithanage at arm.com>; Bruce Richardson
> <bruce.richardson at intel.com>; Konstantin Ananyev
> <konstantin.v.ananyev at yandex.ru>
> Cc: dev at dpdk.org
> Subject: [PATCH v4 4/5] node: add error stats for ip4 lookup node
> 
> From: Pavan Nikhilesh <pbhagavatula at marvell.com>
> 
> Add error counters for ip4 LPM lookup failures in ip4_lookup node.
> 
> Signed-off-by: Pavan Nikhilesh <pbhagavatula at marvell.com>
> ---
Acked-by: Kiran Kumar Kokkilagadda <kirankumark at marvell.com>

>  lib/node/ip4_lookup.c      | 9 +++++++++
>  lib/node/ip4_lookup_neon.h | 5 +++++
>  lib/node/ip4_lookup_sse.h  | 6 ++++++
>  lib/node/node_private.h    | 8 ++++++++
>  4 files changed, 28 insertions(+)
> 
> diff --git a/lib/node/ip4_lookup.c b/lib/node/ip4_lookup.c index
> 18955971f6..5a7921db75 100644
> --- a/lib/node/ip4_lookup.c
> +++ b/lib/node/ip4_lookup.c
> @@ -86,6 +86,7 @@ ip4_lookup_node_process_scalar(struct rte_graph *graph,
> struct rte_node *node,
>  		rc = rte_lpm_lookup(lpm, rte_be_to_cpu_32(ipv4_hdr-
> >dst_addr),
>  				    &next_hop);
>  		next_hop = (rc == 0) ? next_hop : drop_nh;
> +		NODE_INCREMENT_ERROR_ID(node, 0, (rc != 0), 1);
> 
>  		node_mbuf_priv1(mbuf, dyn)->nh = (uint16_t)next_hop;
>  		next_hop = next_hop >> 16;
> @@ -219,11 +220,19 @@ ip4_lookup_node_init(const struct rte_graph *graph,
> struct rte_node *node)
>  	return 0;
>  }
> 
> +static struct rte_node_errors ip4_lookup_errors = {
> +	.nb_errors = 1,
> +	.err_desc = {
> +		[0] = "ip4_lookup_error",
> +	},
> +};
> +
>  static struct rte_node_register ip4_lookup_node = {
>  	.process = ip4_lookup_node_process_scalar,
>  	.name = "ip4_lookup",
> 
>  	.init = ip4_lookup_node_init,
> +	.errs = &ip4_lookup_errors,
> 
>  	.nb_edges = RTE_NODE_IP4_LOOKUP_NEXT_PKT_DROP + 1,
>  	.next_nodes = {
> diff --git a/lib/node/ip4_lookup_neon.h b/lib/node/ip4_lookup_neon.h index
> d5c8da3719..907c7c955a 100644
> --- a/lib/node/ip4_lookup_neon.h
> +++ b/lib/node/ip4_lookup_neon.h
> @@ -116,6 +116,10 @@ ip4_lookup_node_process_vec(struct rte_graph *graph,
> struct rte_node *node,
>  		priv01.u16[4] = result.u16[2];
>  		priv23.u16[0] = result.u16[4];
>  		priv23.u16[4] = result.u16[6];
> +		NODE_INCREMENT_ERROR_ID(node, 0, result.u16[1] ==
> (drop_nh >> 16), 1);
> +		NODE_INCREMENT_ERROR_ID(node, 0, result.u16[3] ==
> (drop_nh >> 16), 1);
> +		NODE_INCREMENT_ERROR_ID(node, 0, result.u16[5] ==
> (drop_nh >> 16), 1);
> +		NODE_INCREMENT_ERROR_ID(node, 0, result.u16[7] ==
> (drop_nh >> 16),
> +1);
> 
>  		node_mbuf_priv1(mbuf0, dyn)->u = priv01.u64[0];
>  		node_mbuf_priv1(mbuf1, dyn)->u = priv01.u64[1]; @@ -202,6
> +206,7 @@ ip4_lookup_node_process_vec(struct rte_graph *graph, struct
> rte_node *node,
>  				    &next_hop);
>  		next_hop = (rc == 0) ? next_hop : drop_nh;
> 
> +		NODE_INCREMENT_ERROR_ID(node, 0, (rc != 0), 1);
>  		node_mbuf_priv1(mbuf0, dyn)->nh = (uint16_t)next_hop;
>  		next_hop = next_hop >> 16;
>  		next0 = (uint16_t)next_hop;
> diff --git a/lib/node/ip4_lookup_sse.h b/lib/node/ip4_lookup_sse.h index
> 74dbf97533..a38131e629 100644
> --- a/lib/node/ip4_lookup_sse.h
> +++ b/lib/node/ip4_lookup_sse.h
> @@ -115,6 +115,11 @@ ip4_lookup_node_process_vec(struct rte_graph *graph,
> struct rte_node *node,
>  		/* Perform LPM lookup to get NH and next node */
>  		rte_lpm_lookupx4(lpm, dip, dst.u32, drop_nh);
> 
> +		NODE_INCREMENT_ERROR_ID(node, 0, dst.u16[1] == (drop_nh
> >> 16), 1);
> +		NODE_INCREMENT_ERROR_ID(node, 0, dst.u16[3] == (drop_nh
> >> 16), 1);
> +		NODE_INCREMENT_ERROR_ID(node, 0, dst.u16[5] == (drop_nh
> >> 16), 1);
> +		NODE_INCREMENT_ERROR_ID(node, 0, dst.u16[7] == (drop_nh
> >> 16), 1);
> +
>  		/* Extract next node id and NH */
>  		node_mbuf_priv1(mbuf0, dyn)->nh = dst.u32[0] & 0xFFFF;
>  		next0 = (dst.u32[0] >> 16);
> @@ -206,6 +211,7 @@ ip4_lookup_node_process_vec(struct rte_graph *graph,
> struct rte_node *node,
>  		rc = rte_lpm_lookup(lpm, rte_be_to_cpu_32(ipv4_hdr-
> >dst_addr),
>  				    &next_hop);
>  		next_hop = (rc == 0) ? next_hop : drop_nh;
> +		NODE_INCREMENT_ERROR_ID(node, 0, rc != 0, 1);
> 
>  		node_mbuf_priv1(mbuf0, dyn)->nh = next_hop & 0xFFFF;
>  		next0 = (next_hop >> 16);
> diff --git a/lib/node/node_private.h b/lib/node/node_private.h index
> 1de7306792..36b2a733db 100644
> --- a/lib/node/node_private.h
> +++ b/lib/node/node_private.h
> @@ -12,6 +12,8 @@
>  #include <rte_mbuf.h>
>  #include <rte_mbuf_dyn.h>
> 
> +#include <rte_graph_worker_common.h>
> +
>  extern int rte_node_logtype;
>  #define RTE_LOGTYPE_NODE rte_node_logtype
> 
> @@ -88,4 +90,10 @@ node_mbuf_priv2(struct rte_mbuf *m)
>  	return (struct node_mbuf_priv2 *)rte_mbuf_to_priv(m);  }
> 
> +#define NODE_INCREMENT_ERROR_ID(node, id, cond, cnt)
> \
> +	{                                                                                          \
> +		if (unlikely(rte_graph_has_stats_feature() && (cond)))
> \
> +			((uint64_t *)RTE_PTR_ADD(node, node->err_off))[id] +=
> (cnt);               \
> +	}
> +
>  #endif /* __NODE_PRIVATE_H__ */
> --
> 2.25.1



More information about the dev mailing list