diff options
| author | Lu Qiuwen <[email protected]> | 2022-09-01 03:23:23 -0400 |
|---|---|---|
| committer | Lu Qiuwen <[email protected]> | 2022-09-01 03:23:23 -0400 |
| commit | 864c9e7952a065270c99dd41b0444f536c20849a (patch) | |
| tree | 06dda35fc0c8b6a54168453ac8c9e1872cbc69b1 /service/src/offload.c | |
| parent | 2360ec50ffce8a32e1f330bb9cb4397059a79db3 (diff) | |
增加控制通道的统计功能。feature-gtp-offload
Diffstat (limited to 'service/src/offload.c')
| -rw-r--r-- | service/src/offload.c | 48 |
1 files changed, 21 insertions, 27 deletions
diff --git a/service/src/offload.c b/service/src/offload.c index ac5f942..c38fd86 100644 --- a/service/src/offload.c +++ b/service/src/offload.c @@ -20,6 +20,7 @@ #include <sc_vdev.h> #include <cJSON.h> #include <mrb_define.h> +#include <MESA_prof_load.h> #define SMARTOFFLOAD_DEV_MAX 512 #define SMARTOFFLOAD_REPORT_METADATA_CTRL_ZONE_ID 0 @@ -71,6 +72,7 @@ struct smartoffload_main /* stats */ struct smartoffload_stat_per_lcore stat_per_lcore[RTE_MAX_LCORE]; + unsigned int flow_age_in_sec; }; int smartoffload_config(struct sc_main * sc) @@ -84,12 +86,8 @@ int smartoffload_init(struct sc_main * sc) MR_VERIFY_MALLOC(sc->smartoffload_main); struct smartoffload_main * smartoffload_main = sc->smartoffload_main; - struct phydev_main * phydev_main = sc->phydev_main; - struct vdev_main * vdev_main = sc->vdev_main; - - assert(phydev_main != NULL); - assert(vdev_main != NULL); + MESA_load_profile_uint_def(sc->local_cfgfile, "offload", "flow_age_in_sec", &smartoffload_main->flow_age_in_sec, 30); struct phydev * phydev_iter = NULL; /* Checkout all physical devices which smartoffload is enabled. */ @@ -810,14 +808,13 @@ void smartoffload_flow_destroy(struct smartoffload_flow * flow) } } -int smartoffload_flow_init_ctrl_mbuf(struct smartoffload_flow * offload_flow, struct phydev * phydev, struct rte_mbuf * mbuf) +int smartoffload_flow_init_ctrl_mbuf(struct smartoffload_flow * offload_flow, struct phydev * phydev, struct rte_mbuf * mbuf, unsigned int age) { unsigned int cur_offset = 0; - struct tlv_header_define * tlv_header; /* move to offload_flow->mbuf */ offload_flow->mbuf = mbuf; - offload_flow->age = 30; + offload_flow->age = age; /* pkt hdr and len */ const char * pkt_header = rte_pktmbuf_mtod(offload_flow->mbuf, const char *); @@ -879,7 +876,7 @@ void smartoffload_rxtx_loop_per_dev(struct sc_main * sc, struct smartoffload_dev struct vdev * vdev = dev_instance->vdev; struct phydev * phydev = dev_instance->phydev; struct rte_flow_error flow_error = {}; - struct smartoffload_main * main = sc->smartoffload_main; + struct smartoffload_main * so_main = sc->smartoffload_main; uint32_t lcore_id = rte_lcore_id(); unsigned int local_rxq_id = dev_instance->map_lcore_to_rxq[lcore_id]; @@ -893,16 +890,16 @@ void smartoffload_rxtx_loop_per_dev(struct sc_main * sc, struct smartoffload_dev return; } - SMARTOFFLOAD_STAT_ADD(main, offload_request_recv, rx_nr_mbufs); + SMARTOFFLOAD_STAT_ADD(so_main, offload_request_recv, rx_nr_mbufs); for (unsigned int i = 0; i < rx_nr_mbufs; i++) { struct smartoffload_flow __flow_in_stack = {}; struct smartoffload_flow * smart_offload_flow = &__flow_in_stack; - int ret = smartoffload_flow_init_ctrl_mbuf(smart_offload_flow, phydev, mbufs[i]); + int ret = smartoffload_flow_init_ctrl_mbuf(smart_offload_flow, phydev, mbufs[i], so_main->flow_age_in_sec); if (unlikely(ret < 0)) { - SMARTOFFLOAD_STAT_ADD(main, offload_request_accept_err_flow_construct, 1); + SMARTOFFLOAD_STAT_ADD(so_main, offload_request_accept_err_flow_construct, 1); goto _errout; } @@ -919,7 +916,7 @@ void smartoffload_rxtx_loop_per_dev(struct sc_main * sc, struct smartoffload_dev if (unlikely(ret < 0)) { MR_ERROR("Failed at flow validate: ret = %d, %s.", ret, flow_error.message); - SMARTOFFLOAD_STAT_ADD(main, offload_request_accept_err_flow_create, 1); + SMARTOFFLOAD_STAT_ADD(so_main, offload_request_accept_err_flow_create, 1); goto _errout; } @@ -945,19 +942,19 @@ void smartoffload_rxtx_loop_per_dev(struct sc_main * sc, struct smartoffload_dev { if(rte_errno == EEXIST) { - SMARTOFFLOAD_STAT_ADD(main, offload_request_accept_duplicated, 1); + SMARTOFFLOAD_STAT_ADD(so_main, offload_request_accept_duplicated, 1); } else { - SMARTOFFLOAD_STAT_ADD(main, offload_request_accept_err_flow_create, 1); + SMARTOFFLOAD_STAT_ADD(so_main, offload_request_accept_err_flow_create, 1); } goto _errout; } - SMARTOFFLOAD_STAT_ADD(main, offload_request_accept_success, 1); - SMARTOFFLOAD_STAT_ADD(main, flow_create, 1); + SMARTOFFLOAD_STAT_ADD(so_main, offload_request_accept_success, 1); + SMARTOFFLOAD_STAT_ADD(so_main, flow_create, 1); continue; _errout: @@ -999,7 +996,7 @@ static void create_report_mbuf_from_aged_ctxs(struct rte_mempool * pool, out_mbufs[i] = out_mbuf; } - return RT_SUCCESS; + return; } void smartoffload_timeout_flows_per_dev(struct sc_main * sc, struct smartoffload_dev_instance * dev_instance) @@ -1087,19 +1084,16 @@ out: void smartoffload_rxtx_loop(struct sc_main * sc, unsigned int lcore_id) { struct smartoffload_main * smartoffload_main = sc->smartoffload_main; - const uint64_t drain_tsc = (rte_get_tsc_hz() + US_PER_S - 1) / US_PER_S * TIMEOUT_CHECK_US; - static uint64_t prev_tsc[RTE_MAX_LCORE] = {}; - uint64_t cur_tsc = rte_rdtsc(); for (unsigned int i = 0; i < smartoffload_main->nr_dev_instances; i++) { smartoffload_rxtx_loop_per_dev(sc, smartoffload_main->dev_instances[i]); } - for (unsigned int i = 0; i < smartoffload_main->nr_dev_instances; i++) - { - smartoffload_timeout_flows_per_dev(sc, smartoffload_main->dev_instances[i]); - } + for (unsigned int i = 0; i < smartoffload_main->nr_dev_instances; i++) + { + smartoffload_timeout_flows_per_dev(sc, smartoffload_main->dev_instances[i]); + } return; } @@ -1115,7 +1109,7 @@ int32_t smartoffload_service_entry(void * args) cJSON * smartoffload_monit_loop(struct sc_main * sc) { - struct smartoffload_main * main = sc->smartoffload_main; + struct smartoffload_main * so_main = sc->smartoffload_main; cJSON * json_root = cJSON_CreateObject(); @@ -1128,7 +1122,7 @@ cJSON * smartoffload_monit_loop(struct sc_main * sc) if (!CPU_ISSET(i, &sc->cpu_set_offload)) \ continue; \ \ - uint64_t value = main->stat_per_lcore[i]._counter; \ + uint64_t value = so_main->stat_per_lcore[i]._counter; \ cJSON_AddItemToArray(json_array, cJSON_CreateNumber(value)); \ } \ cJSON_AddItemToObject(json_root, _str_counter, json_array); \ |
