diff options
| author | songyanchao <[email protected]> | 2022-09-07 04:13:13 +0000 |
|---|---|---|
| committer | songyanchao <[email protected]> | 2022-09-07 04:13:13 +0000 |
| commit | f31c97a5918bf615b89cf5688975a6cee5fa9d8f (patch) | |
| tree | ee9858d40c89f9da7812dbb7082de50477df6e84 | |
| parent | aa4c1f9a13c4c2db968e804bf313000d99820aea (diff) | |
π perf(TSG-11887): bfd node ιι
eth-egress node
bfd node ιι
eth-egress node
| -rw-r--r-- | service/include/sc_node_common.h | 7 | ||||
| -rw-r--r-- | service/src/node_bfd.c | 117 |
2 files changed, 39 insertions, 85 deletions
diff --git a/service/include/sc_node_common.h b/service/include/sc_node_common.h index 35a6b60..3b2f4b3 100644 --- a/service/include/sc_node_common.h +++ b/service/include/sc_node_common.h @@ -57,13 +57,6 @@ enum MR_PARSE_G_VXLAN = 1 << 3, }; -/* Egress Port Type */ -enum -{ - MR_NODE_COMMON_EGRESS_PORT_NOT_IS_SHMDEV = 0, - MR_NODE_COMMON_EGRESS_PORT_IS_SHMDEV -}; - /* Pkt Get Head Struct */ struct pkt_head_info { diff --git a/service/src/node_bfd.c b/service/src/node_bfd.c index d5c1807..1abcb1b 100644 --- a/service/src/node_bfd.c +++ b/service/src/node_bfd.c @@ -51,13 +51,16 @@ do } while(0) /* Bfd Next Node */ -enum { +enum +{ BFD_NEXT_PKT_DROP = 0, + BFD_NEXT_ETH_EGRESS, BFD_NEXT_MAX }; /* Bfd State */ -enum { +enum +{ BFD_STATE_ADMINDOWN = 0, BFD_STATE_DOWN, BFD_STATE_INIT, @@ -106,7 +109,6 @@ struct bfd_stat_per_lcore /* Bfd Main Struct */ struct node_bfd_main { - uint16_t port_id_to_edge_node[MR_PHYDEV_MAX]; struct bfd_stat_per_lcore graph_stat[RTE_MAX_LCORE]; }; @@ -114,36 +116,6 @@ struct node_bfd_main static struct node_bfd_main * global_bfd_main = NULL; /************************************* Bfd Config **************************************/ -/* Ingress Port To Tx Node Index Map Table Init */ -static void port_tx_map_init(struct sc_main * sc,struct node_bfd_main * bfd_main) -{ - uint32_t next_edges_count = 0; - rte_node_t bfd_node_id = 0; - char edge_node_name[MR_SYMBOL_MAX]; - char ** next_edges = NULL; - struct phydev * phydev_iter = NULL; - - /* Create 'Port Id To Tx Node Index' Table */ - bfd_node_id = rte_node_from_name("bfd"); - next_edges_count = rte_node_edge_get(bfd_node_id, NULL); - next_edges = malloc(next_edges_count); - next_edges_count = rte_node_edge_get(bfd_node_id, next_edges); - - while (phydev_iterate(sc->phydev_main, &phydev_iter) >= 0) - { - snprintf(edge_node_name, sizeof(edge_node_name), "phydev_tx-%s",phydev_iter->symbol); - - for (int i = 0; i < next_edges_count; i++) - { - if (strncmp(next_edges[i],edge_node_name,sizeof(edge_node_name)) == 0) - { - bfd_main->port_id_to_edge_node[phydev_iter->port_id] = i; - break; - } - } - } -} - /* Init Bfd Servicd */ int bfd_init(struct sc_main * sc) { @@ -151,8 +123,6 @@ int bfd_init(struct sc_main * sc) bfd_main = ZMALLOC(sizeof(struct node_bfd_main)); MR_VERIFY_MALLOC(bfd_main); - - port_tx_map_init(sc,bfd_main); sc->bfd_node_main = bfd_main; global_bfd_main = bfd_main; return RT_SUCCESS; @@ -226,7 +196,7 @@ static __rte_always_inline uint16_t bfd_node_process(struct rte_graph * graph, s n_left_from = cnt; pkts = (struct rte_mbuf **)objs; from = objs; - next_index = BFD_NEXT_PKT_DROP; + next_index = BFD_NEXT_ETH_EGRESS; bfd_main = global_bfd_main; gid = graph->id; @@ -293,7 +263,9 @@ static __rte_always_inline uint16_t bfd_node_process(struct rte_graph * graph, s /* Update prev_tsc */ MR_BFD_STAT_UPDATE_TSC_FOR_SESSION_ID(bfd_main,gid,bfd_session_id,prev_tsc,rte_rdtsc()); /* From Ingress Port Id Get Next Node Index (TX) */ - next0 = bfd_main->port_id_to_edge_node[ingress_port_id]; + private_ctrlzone->port_egress = ingress_port_id; + private_ctrlzone->port_egress_is_shmdev = 0; + next0 = BFD_NEXT_ETH_EGRESS; goto node_enqueue; exception_handling: @@ -323,7 +295,6 @@ node_enqueue: for (uint16_t i = 0; i < last_spec; i++) rte_node_enqueue_x1(graph, node, next_index, from[i]); } - return cnt; } @@ -335,9 +306,9 @@ static struct rte_node_register bfd_node_base = { .nb_edges = BFD_NEXT_MAX, .next_nodes = { [BFD_NEXT_PKT_DROP] = "pkt_drop", + [BFD_NEXT_ETH_EGRESS] = "eth_egress", }, }; - RTE_NODE_REGISTER(bfd_node_base); /************************************** Bfd Statistics **************************************/ @@ -358,37 +329,32 @@ cJSON * bfd_node_monit_loop(struct sc_main * sc) struct bfd_stat_per_lcore * stat_item = &bfd_main->graph_stat[gid]; stats = stat_item->total_pkts; - if (stats > 0) + if (stats == 0) + continue; + + graph_obj = cJSON_CreateObject(); + cJSON_AddNumberToObject(graph_obj, "total_pkts", stats); + stats = stat_item->invalid_pkts; + cJSON_AddNumberToObject(graph_obj, "invalid_pkts", stats); + stats = stat_item->no_support_ipv6_pkts; + cJSON_AddNumberToObject(graph_obj, "no_support_ipv6_pkts", stats); + stats = stat_item->no_free_session_id; + cJSON_AddNumberToObject(graph_obj, "no_free_session_id", stats); + for (session_index = 0; session_index < MR_BFD_MAX_SESSION_NUM; session_index++) { - graph_obj = cJSON_CreateObject(); - cJSON_AddNumberToObject(graph_obj, "total_pkts", stats); - stats = stat_item->invalid_pkts; - cJSON_AddNumberToObject(graph_obj, "invalid_pkts", stats); - stats = stat_item->no_support_ipv6_pkts; - cJSON_AddNumberToObject(graph_obj, "no_support_ipv6_pkts", stats); - stats = stat_item->no_free_session_id; - cJSON_AddNumberToObject(graph_obj, "no_free_session_id", stats); - - for (session_index = 0; session_index < MR_BFD_MAX_SESSION_NUM; session_index++) + struct bfd_stat_for_session * session_stat_item = &stat_item->stat_for_session[session_index]; + stats = session_stat_item->total_pkts; + if (stats > 0) { - struct bfd_stat_for_session * session_stat_item = &stat_item->stat_for_session[session_index]; - stats = session_stat_item->total_pkts; - if (stats > 0) - { - graph_session_obj = cJSON_CreateObject(); - cJSON_AddNumberToObject(graph_session_obj, "bfd_session_id", session_index); - cJSON_AddNumberToObject(graph_session_obj, "total_pkts", stats); - stats = session_stat_item->no_bfd_pkts; - cJSON_AddNumberToObject(graph_session_obj, "no_bfd_pkts", stats); - sprintf(bfd_session_id,"bfd-session-%u",session_index); - cJSON_AddItemToObject(graph_obj,bfd_session_id,graph_session_obj); - } + graph_session_obj = cJSON_CreateObject(); + cJSON_AddNumberToObject(graph_session_obj, "bfd_session_id", session_index); + cJSON_AddNumberToObject(graph_session_obj, "total_pkts", stats); + stats = session_stat_item->no_bfd_pkts; + cJSON_AddNumberToObject(graph_session_obj, "no_bfd_pkts", stats); + sprintf(bfd_session_id,"bfd-session-%u",session_index); + cJSON_AddItemToObject(graph_obj,bfd_session_id,graph_session_obj); } } - else - { - continue; - } cJSON_AddNumberToObject(graph_obj, "graph_id", gid); sprintf(graph_index,"graph-%u",graph_num); @@ -406,23 +372,18 @@ cJSON * bfd_node_monit_loop(struct sc_main * sc) struct bfd_stat_per_lcore * stat_item = &bfd_main->graph_stat[gid]; stats = stat_item->total_pkts; + if (stats == 0) + continue; + struct bfd_stat_for_session * session_stat_item = &stat_item->stat_for_session[session_index]; + stats = session_stat_item->total_pkts; if (stats > 0) { - struct bfd_stat_for_session * session_stat_item = &stat_item->stat_for_session[session_index]; - stats = session_stat_item->total_pkts; - if (stats > 0) + if (session_stat_item->prev_tsc > max_tsc) { - if (session_stat_item->prev_tsc > max_tsc) - { - max_tsc = session_stat_item->prev_tsc; - newest_gid = gid; - } + max_tsc = session_stat_item->prev_tsc; + newest_gid = gid; } } - else - { - continue; - } } if(max_tsc != 0) |
