diff options
| author | songyanchao <[email protected]> | 2022-11-10 08:20:48 +0000 |
|---|---|---|
| committer | songyanchao <[email protected]> | 2022-11-10 08:20:48 +0000 |
| commit | b93cb814eedf2c44212f758ded803fc8985e847c (patch) | |
| tree | cbf9a060abf7f4413ca110158e5d7f1ea58a9bac | |
| parent | c4be5b6320e5f53acd9e2c42b6a4ddc200c697fa (diff) | |
🎈 perf(TSG-11429): Health check private add distributer caculate funcionv4.6.6-20221111
Health check private add distributer caculate funcion
| -rw-r--r-- | service/src/node_classifier.c | 2 | ||||
| -rw-r--r-- | service/src/node_health_check.c | 33 |
2 files changed, 25 insertions, 10 deletions
diff --git a/service/src/node_classifier.c b/service/src/node_classifier.c index 7ca7ce4..9d2adb1 100644 --- a/service/src/node_classifier.c +++ b/service/src/node_classifier.c @@ -938,7 +938,7 @@ void dump_classifier_rule(struct classifier_rule * rule, struct mr_action * acti break; case CLASSIFIER_ACTION_NF_STEERING: MR_INFO(" Action : Network Function Steering"); - MR_INFO(" Redirect Next Hop Id : %u", action->redirect_next_hop_id); + MR_INFO(" Redirect Next Hop Id : %u", action->redirect_next_hop_id); break; default: break; diff --git a/service/src/node_health_check.c b/service/src/node_health_check.c index 923959a..7826250 100644 --- a/service/src/node_health_check.c +++ b/service/src/node_health_check.c @@ -5,6 +5,7 @@ #include <mrb_define.h> #include <rte_graph.h> #include <rte_graph_worker.h> +#include <rte_hash_crc.h> #include <rte_malloc.h> #include <rte_random.h> #include <sc_common.h> @@ -142,6 +143,7 @@ static struct health_check_main * global_health_check_main = NULL; struct private_health_check_ask_stat private_ask_stat[RTE_MAX_LCORE] = {}; struct private_health_check_deal_answer_stat private_deal_answer_stat[RTE_MAX_LCORE] = {}; +/************************************* Private health check public func **************************************/ /* Health check get remote state */ int64_t get_health_check_remote_state(struct health_check_session * _session) { @@ -216,6 +218,9 @@ int private_ask_func(struct health_check_main * _health_check_main, struct healt private_ctrlzone->port_egress_is_shmdev = _session->port_is_shmdev; private_ctrlzone->original_packet_flag = MR_NODE_COMMON_ORIGINAL_PKT; + /* Set mbuf pkt_len */ + mbuf->data_len = sizeof(struct rte_ether_hdr) + sizeof(struct private_health_check_hdr); + /* Build eth hdr */ struct rte_ether_hdr * _eth_hdr = rte_pktmbuf_mtod(mbuf, struct rte_ether_hdr *); /* Src ae:aa:aa:aa:port_id:port_id */ @@ -298,6 +303,21 @@ void private_health_check_func(struct health_check_session * _session) } } +/* Private distributer caculate */ +void private_distributer_caculate(struct distributer * dist_object, struct rte_mbuf * mbufs[], unsigned int nr_mbufs) +{ + for (int i = 0; i < nr_mbufs; i++) + { + /* Get eth hdr */ + struct rte_ether_hdr * _eth_hdr = rte_pktmbuf_mtod(mbufs[i], struct rte_ether_hdr *); + const char * s_data = (const char *)&_eth_hdr->src_addr.addr_bytes; + const char * d_data = (const char *)&_eth_hdr->dst_addr.addr_bytes; + uint32_t src_hash = rte_hash_crc(s_data, sizeof(_eth_hdr->src_addr.addr_bytes), dist_object->orin_hash); + uint32_t dst_hash = rte_hash_crc(d_data, sizeof(_eth_hdr->dst_addr.addr_bytes), dist_object->orin_hash); + mbufs[i]->hash.usr = src_hash ^ dst_hash; + } +} + /************************************* Health check config **************************************/ /* Parse the health check config */ int parse_health_check_config(struct sc_main * sc, struct health_check_main * _health_check_main) @@ -307,11 +327,10 @@ int parse_health_check_config(struct sc_main * sc, struct health_check_main * _h for (int session_index = 0; session_index < MAX_HEALTH_CHECK_CONFIG_NUM; session_index++) { /* Parse 'name' */ - int ret = 0; char str_section[MR_SYMBOL_MAX] = {}; char str_name[MR_STRING_MAX] = {}; snprintf(str_section, sizeof(str_section), "health_check:%d", session_index); - ret = MESA_load_profile_string_nodef(sc->local_cfgfile, str_section, "name", str_name, sizeof(str_name)); + int ret = MESA_load_profile_string_nodef(sc->local_cfgfile, str_section, "name", str_name, sizeof(str_name)); if (ret < 0) continue; @@ -408,6 +427,7 @@ int parse_health_check_config(struct sc_main * sc, struct health_check_main * _h _session->deal_answer_func = private_deal_answer_func; _session->check_service_func = private_health_check_func; } + break; } /* Update total session num */ @@ -419,13 +439,9 @@ int parse_health_check_config(struct sc_main * sc, struct health_check_main * _h /* Computer per thread session num */ if (total_session_num % sc->nr_io_thread) - { _health_check_main->per_thread_session_num = total_session_num / sc->nr_io_thread + 1; - } else - { _health_check_main->per_thread_session_num = total_session_num / sc->nr_io_thread; - } /* Get default direct pool */ struct phydev * phydev_iter = NULL; @@ -465,6 +481,7 @@ void dump_health_check_session(struct health_check_session * _session) MR_INFO(" Multiplier : %u", _session->private_target.multiplier); MR_INFO(" Interval : %u", _session->private_target.interval); } + break; } } @@ -499,9 +516,7 @@ int health_check_init(struct sc_main * sc) /* Parse health check config */ if (parse_health_check_config(sc, _health_check_main) == RT_ERR) - { return RT_ERR; - } /* Dump health check config */ dump_health_check_config(_health_check_main); @@ -725,7 +740,7 @@ static __rte_always_inline uint16_t private_health_check_ask_node_process(struct /* hash caculate */ node->idx = nr_mbufs; - distributer_caculate(sc_main_get()->dist_object, (struct rte_mbuf **)node->objs, node->idx); + private_distributer_caculate(sc_main_get()->dist_object, (struct rte_mbuf **)node->objs, node->idx); /* To eth egress */ rte_node_next_stream_move(graph, node, PRIVATE_HEALTH_CHECK_ASK_NEXT_ETH_EGRESS); |
