summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorsongyanchao <[email protected]>2022-11-10 08:20:48 +0000
committersongyanchao <[email protected]>2022-11-10 08:20:48 +0000
commitb93cb814eedf2c44212f758ded803fc8985e847c (patch)
treecbf9a060abf7f4413ca110158e5d7f1ea58a9bac
parentc4be5b6320e5f53acd9e2c42b6a4ddc200c697fa (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.c2
-rw-r--r--service/src/node_health_check.c33
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);