summaryrefslogtreecommitdiff
path: root/service/src/offload.c
diff options
context:
space:
mode:
authorLu Qiuwen <[email protected]>2022-09-01 03:23:23 -0400
committerLu Qiuwen <[email protected]>2022-09-01 03:23:23 -0400
commit864c9e7952a065270c99dd41b0444f536c20849a (patch)
tree06dda35fc0c8b6a54168453ac8c9e1872cbc69b1 /service/src/offload.c
parent2360ec50ffce8a32e1f330bb9cb4397059a79db3 (diff)
增加控制通道的统计功能。feature-gtp-offload
Diffstat (limited to 'service/src/offload.c')
-rw-r--r--service/src/offload.c48
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); \