From 86a030143d212df4b36efccdb1f9b2edfd0266c2 Mon Sep 17 00:00:00 2001 From: songyanchao Date: Mon, 2 Aug 2021 04:53:35 -0400 Subject: [PATCH] =?UTF-8?q?=F0=9F=8E=88=20perf(traffic=20mirror):=20?= =?UTF-8?q?=E4=BC=98=E5=8C=96=E5=BA=95=E5=B1=82=E5=8F=91=E5=8C=85=E5=87=BD?= =?UTF-8?q?=E6=95=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 优化底层发包函数为marsio_send_burst --- src/tsg_send_raw_packet.cpp | 18 +++++++++--------- src/tsg_traffic_mirror.cpp | 13 +++++++------ src/tsg_traffic_mirror.h | 8 ++++---- 3 files changed, 20 insertions(+), 19 deletions(-) diff --git a/src/tsg_send_raw_packet.cpp b/src/tsg_send_raw_packet.cpp index 132ff94..6fa9b80 100644 --- a/src/tsg_send_raw_packet.cpp +++ b/src/tsg_send_raw_packet.cpp @@ -11,11 +11,11 @@ static int send_raw_packet(struct traffic_mirror *ttm,char * pkt_ptr,int pkt_len,int *vlan_array,int vlan_num,int thread_seq) { - int ret=tsg_traffic_mirror_send_burst(ttm, (char *)pkt_ptr, pkt_len, vlan_array, vlan_num, thread_seq); - if(ret==TRRAFFIC_MIRROR_SEND_SUCCESS) - { + int ret=tsg_traffic_mirror_send_burst(ttm, (char *)pkt_ptr, pkt_len, vlan_array, vlan_num, thread_seq); + if(ret==TRAFFIC_MIRROR_SEND_SUCCESS) + { FS_operate(g_tsg_para.fs2_handle, g_tsg_para.fs2_field_id[TSG_FS2_MIRRORED_PKT_SUCCESS], 0, FS_OP_ADD, 1); - FS_operate(g_tsg_para.fs2_handle, g_tsg_para.fs2_field_id[TSG_FS2_MIRRORED_BYTE_SUCCESS], 0, FS_OP_ADD, pkt_len); + FS_operate(g_tsg_para.fs2_handle, g_tsg_para.fs2_field_id[TSG_FS2_MIRRORED_BYTE_SUCCESS], 0, FS_OP_ADD, pkt_len); } else { @@ -34,7 +34,7 @@ int tsg_send_raw_packet(const struct streaminfo *a_stream, int *vlan_id, int vla void *p_eth_rawpkt=NULL; int eth_rawpkt_len=0; raw_ipfrag_list_t *frag_pkt=NULL; - + if(g_tsg_para.mirror_switch==0) { return 0; @@ -49,21 +49,21 @@ int tsg_send_raw_packet(const struct streaminfo *a_stream, int *vlan_id, int vla { break; } - + send_raw_packet(g_tsg_para.mirror_handle, (char *)p_eth_rawpkt, eth_rawpkt_len, vlan_id, vlan_id_num, thread_seq); break; case 1: frag_pkt=(raw_ipfrag_list_t *)p_eth_rawpkt; while(frag_pkt) { - send_raw_packet(g_tsg_para.mirror_handle, (char *)(frag_pkt->frag_packet), frag_pkt->pkt_len, vlan_id, vlan_id_num, thread_seq); + send_raw_packet(g_tsg_para.mirror_handle, (char *)(frag_pkt->frag_packet), frag_pkt->pkt_len, vlan_id, vlan_id_num, thread_seq); frag_pkt = frag_pkt->next; } break; default: break; } - + return 0; } @@ -96,7 +96,7 @@ int tsg_send_raw_packet_init(const char* conffile, void *logger) { return 0; } - + g_tsg_para.mirror_handle=tsg_traffic_mirror_init(conffile, g_tsg_para.logger); if(g_tsg_para.mirror_handle==NULL) { diff --git a/src/tsg_traffic_mirror.cpp b/src/tsg_traffic_mirror.cpp index 93f9f81..df36f16 100644 --- a/src/tsg_traffic_mirror.cpp +++ b/src/tsg_traffic_mirror.cpp @@ -28,7 +28,7 @@ struct traffic_mirror struct traffic_mirror *tsg_traffic_mirror_init(const char *conffile, void *logger) { - int ret=0,traffic_mirror_enable=TRRAFFIC_MIRROR_DISABLE; + int ret=0,traffic_mirror_enable=TRAFFIC_MIRROR_DISABLE; struct traffic_mirror *ttm = NULL; ttm=(struct traffic_mirror *)calloc(1, sizeof(struct traffic_mirror)); @@ -40,7 +40,7 @@ struct traffic_mirror *tsg_traffic_mirror_init(const char *conffile, void *logge } MESA_load_profile_int_def(conffile, "TRAFFIC_MIRROR", "TRAFFIC_MIRROR_ENABLE", &traffic_mirror_enable, 0); - if (traffic_mirror_enable != TRRAFFIC_MIRROR_ENABLE) + if (traffic_mirror_enable != TRAFFIC_MIRROR_ENABLE) { MESA_handle_runtime_log(logger, RLOG_LV_FATAL, "TSG_TRAFFIC_MIRROR", "Traffic Mirror Is Disable !!!"); goto init_error; @@ -131,7 +131,7 @@ int tsg_traffic_mirror_send_burst(struct traffic_mirror *ttm,char * pkt_ptr,int return SEND_ERROR_VLAN_NUM_EXCEED_BURST_MAX; } - if (PREDICT_FALSE((vlan_num <= 1) || (vlan_array == NULL))) + if (PREDICT_FALSE((vlan_num < 1) || (vlan_array == NULL))) { tx_buffer_num = 1; vlan_tag_array = &ttm->default_vlan_id; @@ -157,11 +157,12 @@ int tsg_traffic_mirror_send_burst(struct traffic_mirror *ttm,char * pkt_ptr,int marsio_buff_set_metadata(tx_buff_ptr,MR_BUFF_METADATA_VLAN_TCI,&vlan_id,sizeof(vlan_id)); } - ret = marsio_send_burst_with_options(ttm->to_dev_sendpath, thread_seq, tx_buff, tx_buffer_num, MARSIO_SEND_OPT_FAST); + ret = marsio_send_burst(ttm->to_dev_sendpath, thread_seq, tx_buff, tx_buffer_num); if (PREDICT_FALSE(ret < 0)) { - return TRRAFFIC_MIRROR_SEND_ERROR_DROP; + marsio_buff_free(ttm->mr_instance, tx_buff, tx_buffer_num, MARSIO_SOCKET_ID_ANY, MARSIO_LCORE_ID_ANY); + return TRAFFIC_MIRROR_SEND_ERROR_DROP; } - return TRRAFFIC_MIRROR_SEND_SUCCESS; + return TRAFFIC_MIRROR_SEND_SUCCESS; } \ No newline at end of file diff --git a/src/tsg_traffic_mirror.h b/src/tsg_traffic_mirror.h index 69f2bce..35a59b6 100644 --- a/src/tsg_traffic_mirror.h +++ b/src/tsg_traffic_mirror.h @@ -1,10 +1,10 @@ #ifndef __TSG_TRAFFIC_MIRROR_H__ #define __TSG_TRAFFIC_MIRROR_H__ -#define TRRAFFIC_MIRROR_DISABLE 0 -#define TRRAFFIC_MIRROR_ENABLE 1 +#define TRAFFIC_MIRROR_DISABLE 0 +#define TRAFFIC_MIRROR_ENABLE 1 -#define TRRAFFIC_MIRROR_SEND_SUCCESS 0 +#define TRAFFIC_MIRROR_SEND_SUCCESS 0 #define SEND_ERROR_NOT_INIT -1 #define SEND_ERROR_THREAD_SEQ_ERR -2 #define SEND_ERROR_PKT_BUFFER_IS_NULL -3 @@ -13,7 +13,7 @@ #define SEND_ERROR_VLAN_NUM_ERROR -6 #define SEND_ERROR_VLAN_NUM_EXCEED_BURST_MAX -7 #define SEND_ERROR_BUFF_MALLOC_ERROR -8 -#define TRRAFFIC_MIRROR_SEND_ERROR_DROP -9 +#define TRAFFIC_MIRROR_SEND_ERROR_DROP -9 struct traffic_mirror;