diff options
| author | yangwei <[email protected]> | 2024-04-11 09:51:34 +0800 |
|---|---|---|
| committer | yangwei <[email protected]> | 2024-04-12 00:42:48 +0800 |
| commit | 12abc0a910c188b3b4e92fdbdfc6b81a6721622e (patch) | |
| tree | 56fc7eb228ed640e9a0bc7d53572f15d977ef628 | |
| parent | 3bb30afc483bc0297b7b88901818021d3045d1d5 (diff) | |
✨ feat(sapp metric update): 新增open和timeout速率统计,暂时关闭offload统计
| -rw-r--r-- | include/private/sapp_pkt_stat.h | 8 | ||||
| -rw-r--r-- | src/dealpkt/deal_tcp.c | 10 | ||||
| -rw-r--r-- | src/dealpkt/stream_manage.c | 60 | ||||
| -rw-r--r-- | src/extensions/sapp_metrics.cpp | 42 | ||||
| -rw-r--r-- | src/packet_io/packet_io_status.cpp | 20 | ||||
| -rw-r--r-- | src/support/token_bucket/token_bucket.c | 4 |
6 files changed, 98 insertions, 46 deletions
diff --git a/include/private/sapp_pkt_stat.h b/include/private/sapp_pkt_stat.h index 40f6b4b..358d0a8 100644 --- a/include/private/sapp_pkt_stat.h +++ b/include/private/sapp_pkt_stat.h @@ -191,6 +191,14 @@ typedef enum __sapp_sys_stat_type{ SAPP_STAT_UDP_DUP_KICK_STREAM, + SAPP_STAT_TCP_OPENING_OVERSPEED, + SAPP_STAT_UDP_OPENING_OVERSPEED, + + SAPP_STAT_TCP_TIMEOUTS_OVERSPEED, + SAPP_STAT_UDP_TIMEOUTS_OVERSPEED, + + SAPP_STAT_TCP_TRY_TIMEOUTS, + SAPP_STAT_UDP_TRY_TIMEOUTS, /************* memory stat *******************/ diff --git a/src/dealpkt/deal_tcp.c b/src/dealpkt/deal_tcp.c index b9a8bd4..49a3ac3 100644 --- a/src/dealpkt/deal_tcp.c +++ b/src/dealpkt/deal_tcp.c @@ -54,7 +54,7 @@ static inline void update_stream_list_raw_pkt_pointer(struct streaminfo_private void addr_reverse_memcpy(const struct streaminfo_private *stack_pr,void *daddr, const void *saddr, int addrtype, int addrlen); int copy_ipport_union_addr(struct streaminfo *pstream_heap, struct streaminfo *pstream_stack, int reverse); void iterate_stream_list(const struct streaminfo *stream); -int del_stream_by_time(struct stream_list *plist, const struct streamindex *current_drive_index, int thread_id); +int del_stream_by_time(struct stream_list *plist, const struct streamindex *current_drive_index, int thread_id, enum stream_type_t type); //int g_kill_tcp_remedy_sw = 0; /* 2016-06-21 lijia add, �Ƿ����FD���� */ @@ -755,7 +755,11 @@ static struct streamindex *tcp_add_new_stream_bysyn(struct streamindex *pindex, { if(token_bucket_consume(G_MESA_GLOBAL_STREAM[threadnum]->tcp_opening_ratelimiter, 1, g_current_time_ms) == 0) - pstream_pr->under_ddos_bypass = 1; + { + pstream_pr->under_ddos_bypass = 1; + sapp_gval_mthread_sys_stat_t *local_sys_stat = &sapp_global_val->mthread_volatile[threadnum]->sys_stat; + local_sys_stat->count[SAPP_STAT_TCP_OPENING_OVERSPEED]++; + } } } } @@ -1296,7 +1300,7 @@ static void tcp_change_stream_tonouse(struct streamindex *pindex) ����TCP_NOUSE_STATE״̬�µ�����̭��ȥ, ���Դ˴���ɨ��һ��TCP_NOUSE_STATE�ij�ʱ��. */ - del_stream_by_time(plist, pindex, threadnum); + del_stream_by_time(plist, pindex, threadnum, STREAM_TYPE_TCP); } diff --git a/src/dealpkt/stream_manage.c b/src/dealpkt/stream_manage.c index b0b102f..81a980e 100644 --- a/src/dealpkt/stream_manage.c +++ b/src/dealpkt/stream_manage.c @@ -472,11 +472,12 @@ enum del_stream_by_time_returen_code DEL_STREAM_BY_TIME_RET_NO_TOKEN = 3, }; -int del_stream_by_time(struct stream_list *plist, const struct streamindex *current_drive_index, int thread_id) +int del_stream_by_time(struct stream_list *plist, const struct streamindex *current_drive_index, int tid, enum stream_type_t type) { int ret = DEL_STREAM_BY_TIME_RET_NORMAL; struct timeout *t=NULL; - struct global_stream *g_stream = G_MESA_GLOBAL_STREAM[thread_id]; + struct global_stream *g_stream = G_MESA_GLOBAL_STREAM[tid]; + sapp_gval_mthread_sys_stat_t *local_sys_stat = &sapp_global_val->mthread_volatile[tid]->sys_stat; if(unlikely(plist->last_update_timer_ms < g_CurrentTime_ms)) { timeouts_update(plist->streamindex_timer, g_CurrentTime_ms); @@ -488,28 +489,34 @@ int del_stream_by_time(struct stream_list *plist, const struct streamindex *curr plist->last_update_timer_ms = g_CurrentTime_ms; plist->interval_to_next_timeout_ms=timeouts_timeout(plist->streamindex_timer); } + else + { + plist->interval_to_next_timeout_ms=timeouts_timeout(plist->streamindex_timer); + } if (plist->interval_to_next_timeout_ms == 0) { - if ( plist->timeout_ratelimiter == NULL || token_bucket_consume(plist->timeout_ratelimiter, 1, g_current_time_ms) > 0) + t = timeouts_get(plist->streamindex_timer); + if (t != NULL) { - t = timeouts_get(plist->streamindex_timer); - if (t != NULL) - { - struct streamindex *pindex = - (struct streamindex *)sapp_get_struct_header(t, struct streamindex, timeout); - struct streaminfo_private *pstream_pr = &(pindex->stream); - struct streaminfo *pstream = &(pstream_pr->stream_public); + if(type==STREAM_TYPE_UDP)local_sys_stat->count[SAPP_STAT_UDP_TRY_TIMEOUTS]++; + else if(type==STREAM_TYPE_TCP)local_sys_stat->count[SAPP_STAT_TCP_TRY_TIMEOUTS]++; - if (pindex == current_drive_index) - { /* ��ǰ�����ڵ�����ʱ, ˵��֮ǰ�ܳ�ʱ��û�а�����, ��ʱ����free, ���Ƿ���1, �ٵ���reset */ - if (STREAM_TYPE_TCP == pstream->type) - { - /* 2016-12-15 lijia add, ��ʱreset֮ǰ, ��Ҫ����link_state */ - ((struct tcpdetail_private *)(pstream->pdetail))->link_state = STREAM_LINK_TIMEOUT; - } - ret = DEL_STREAM_BY_TIME_RET_DEL_SELF; + struct streamindex *pindex = (struct streamindex *)sapp_get_struct_header(t, struct streamindex, timeout); + struct streaminfo_private *pstream_pr = &(pindex->stream); + struct streaminfo *pstream = &(pstream_pr->stream_public); + + if (pindex == current_drive_index) + { /* ��ǰ�����ڵ�����ʱ, ˵��֮ǰ�ܳ�ʱ��û�а�����, ��ʱ����free, ���Ƿ���1, �ٵ���reset */ + if (STREAM_TYPE_TCP == pstream->type) + { + /* 2016-12-15 lijia add, ��ʱreset֮ǰ, ��Ҫ����link_state */ + ((struct tcpdetail_private *)(pstream->pdetail))->link_state = STREAM_LINK_TIMEOUT; } - else + ret = DEL_STREAM_BY_TIME_RET_DEL_SELF; + } + else + { + if (token_bucket_consume(plist->timeout_ratelimiter, 1, g_current_time_ms) > 0) { if (STREAM_TYPE_TCP == pstream->type) { @@ -524,6 +531,13 @@ int del_stream_by_time(struct stream_list *plist, const struct streamindex *curr ret = DEL_STREAM_BY_TIME_RET_DEL_OTHER; } } + else + { + if (type == STREAM_TYPE_UDP) + local_sys_stat->count[SAPP_STAT_UDP_TIMEOUTS_OVERSPEED]++; + else if (type == STREAM_TYPE_TCP) + local_sys_stat->count[SAPP_STAT_TCP_TIMEOUTS_OVERSPEED]++; + } } } } @@ -576,7 +590,7 @@ int lrustream(struct streamindex *pindex) plist=&(G_MESA_GLOBAL_STREAM[pstream->threadnum]->tcpList[pstream->stream_state]); } - if(1 == del_stream_by_time(plist, pindex, pstream->threadnum)) + if(1 == del_stream_by_time(plist, pindex, pstream->threadnum, pstream->type)) { return 1; } @@ -1570,6 +1584,7 @@ void hash_add_stream(struct streamindex *pindex) g_current_time_ms) == 0) { pindex->stream.under_ddos_bypass = 1; + local_sys_stat->count[SAPP_STAT_UDP_OPENING_OVERSPEED]++; } } if (STREAM_TYPE_TCP == ptmp->type && G_MESA_GLOBAL_STREAM[threadnum]->tcp_opening_ratelimiter != NULL) @@ -1578,6 +1593,7 @@ void hash_add_stream(struct streamindex *pindex) g_current_time_ms) == 0) { pindex->stream.under_ddos_bypass = 1; + local_sys_stat->count[SAPP_STAT_TCP_OPENING_OVERSPEED]++; } } } @@ -2725,7 +2741,7 @@ int polling_stream_timeout(int tid) plist = &(G_MESA_GLOBAL_STREAM[tid]->udpList[i]); if (plist->cnt > 0) { - ret = del_stream_by_time(plist, NULL, tid); + ret = del_stream_by_time(plist, NULL, tid, STREAM_TYPE_UDP); if (ret > 0) { has_work = POLLING_STATE_WORK; @@ -2739,7 +2755,7 @@ int polling_stream_timeout(int tid) plist = &(G_MESA_GLOBAL_STREAM[tid]->tcpList[i]); if (plist->cnt > 0) { /* polling�ο��ܻ�û����, ����û�д�״̬����, plist����ΪNULL */ - ret = del_stream_by_time(plist, NULL, tid); + ret = del_stream_by_time(plist, NULL, tid, STREAM_TYPE_TCP); if (ret > 0) { has_work = POLLING_STATE_WORK; diff --git a/src/extensions/sapp_metrics.cpp b/src/extensions/sapp_metrics.cpp index f9a8a02..b150697 100644 --- a/src/extensions/sapp_metrics.cpp +++ b/src/extensions/sapp_metrics.cpp @@ -598,23 +598,39 @@ static int sapp_fs3_init(sapp_global_t *global_paramters) fs3_rt->metrics_ids[1][SAPP_STAT_UDP_BYPASS_BYTES] = fieldstat_register(fs3_handle, FIELD_TYPE_COUNTER, "Udp_Bypass_Bit", NULL, 0); - fs3_rt->metrics_ids[0][SAPP_STAT_TCP_OFFLOAD_STREAM] = fieldstat_register(fs3_handle, FIELD_TYPE_COUNTER, "Tcp_Offload_STM", - NULL, 0); - fs3_rt->metrics_ids[0][SAPP_STAT_TCP_OFFLOAD_PKTS] = fieldstat_register(fs3_handle, FIELD_TYPE_COUNTER, "Tcp_Offload_Pkt", - NULL, 0); - fs3_rt->metrics_ids[1][SAPP_STAT_TCP_OFFLOAD_BYTES] = fieldstat_register(fs3_handle, FIELD_TYPE_COUNTER, "Tcp_Offload_Bit", - NULL, 0); - - fs3_rt->metrics_ids[0][SAPP_STAT_UDP_OFFLOAD_STREAM] = fieldstat_register(fs3_handle, FIELD_TYPE_COUNTER, "Udp_Offload_STM", - NULL, 0); - fs3_rt->metrics_ids[0][SAPP_STAT_UDP_OFFLOAD_PKTS] = fieldstat_register(fs3_handle, FIELD_TYPE_COUNTER, "Udp_Offload_Pkt", - NULL, 0); - fs3_rt->metrics_ids[1][SAPP_STAT_UDP_OFFLOAD_BYTES] = fieldstat_register(fs3_handle, FIELD_TYPE_COUNTER, "Udp_Offload_Bit", - NULL, 0); + //fs3_rt->metrics_ids[0][SAPP_STAT_TCP_OFFLOAD_STREAM] = fieldstat_register(fs3_handle, FIELD_TYPE_COUNTER, "Tcp_Offload_STM", + // NULL, 0); + //fs3_rt->metrics_ids[0][SAPP_STAT_TCP_OFFLOAD_PKTS] = fieldstat_register(fs3_handle, FIELD_TYPE_COUNTER, "Tcp_Offload_Pkt", + // NULL, 0); + //fs3_rt->metrics_ids[1][SAPP_STAT_TCP_OFFLOAD_BYTES] = fieldstat_register(fs3_handle, FIELD_TYPE_COUNTER, "Tcp_Offload_Bit", + // NULL, 0); + + //fs3_rt->metrics_ids[0][SAPP_STAT_UDP_OFFLOAD_STREAM] = fieldstat_register(fs3_handle, FIELD_TYPE_COUNTER, "Udp_Offload_STM", + // NULL, 0); + //fs3_rt->metrics_ids[0][SAPP_STAT_UDP_OFFLOAD_PKTS] = fieldstat_register(fs3_handle, FIELD_TYPE_COUNTER, "Udp_Offload_Pkt", + // NULL, 0); + //fs3_rt->metrics_ids[1][SAPP_STAT_UDP_OFFLOAD_BYTES] = fieldstat_register(fs3_handle, FIELD_TYPE_COUNTER, "Udp_Offload_Bit", + // NULL, 0); fs3_rt->metrics_ids[0][SAPP_STAT_UDP_DUP_KICK_STREAM] = fieldstat_register(fs3_handle, FIELD_TYPE_COUNTER, "Udp_DUP_STM", NULL, 0); + fs3_rt->metrics_ids[0][SAPP_STAT_TCP_OPENING_OVERSPEED] = fieldstat_register(fs3_handle, FIELD_TYPE_COUNTER, "Tcp_OPEN_SPD", + NULL, 0); + + fs3_rt->metrics_ids[0][SAPP_STAT_UDP_OPENING_OVERSPEED] = fieldstat_register(fs3_handle, FIELD_TYPE_COUNTER, "Udp_OPEN_SPD", + NULL, 0); + + fs3_rt->metrics_ids[0][SAPP_STAT_TCP_TIMEOUTS_OVERSPEED] = fieldstat_register(fs3_handle, FIELD_TYPE_COUNTER, "Tcp_TIMED_SPD", + NULL, 0); + + fs3_rt->metrics_ids[0][SAPP_STAT_UDP_TIMEOUTS_OVERSPEED] = fieldstat_register(fs3_handle, FIELD_TYPE_COUNTER, "Udp_TIMED_SPD", + NULL, 0); + + fs3_rt->metrics_ids[0][SAPP_STAT_TCP_TRY_TIMEOUTS] = fieldstat_register(fs3_handle, FIELD_TYPE_COUNTER, "Tcp_TRY_TIMED", + NULL, 0); + fs3_rt->metrics_ids[0][SAPP_STAT_UDP_TRY_TIMEOUTS] = fieldstat_register(fs3_handle, FIELD_TYPE_COUNTER, "Udp_TRY_TIMED", + NULL, 0); return 0; } diff --git a/src/packet_io/packet_io_status.cpp b/src/packet_io/packet_io_status.cpp index bae92e4..f8ed442 100644 --- a/src/packet_io/packet_io_status.cpp +++ b/src/packet_io/packet_io_status.cpp @@ -218,17 +218,25 @@ static void packet_io_update_metrics_fs3(void) sapp_fs3_metric_incrby(0, SAPP_STAT_UDP_BYPASS_PKTS,cur_count[SAPP_STAT_UDP_BYPASS_PKTS]-history_count[SAPP_STAT_UDP_BYPASS_PKTS]); sapp_fs3_metric_incrby(0, SAPP_STAT_UDP_BYPASS_BYTES,cur_count[SAPP_STAT_UDP_BYPASS_BYTES]-history_count[SAPP_STAT_UDP_BYPASS_BYTES]); - sapp_fs3_metric_incrby(0, SAPP_STAT_TCP_OFFLOAD_STREAM,cur_count[SAPP_STAT_TCP_OFFLOAD_STREAM]-history_count[SAPP_STAT_TCP_OFFLOAD_STREAM]); - sapp_fs3_metric_incrby(0, SAPP_STAT_TCP_OFFLOAD_PKTS,cur_count[SAPP_STAT_TCP_OFFLOAD_PKTS]-history_count[SAPP_STAT_TCP_OFFLOAD_PKTS]); - sapp_fs3_metric_incrby(0, SAPP_STAT_TCP_OFFLOAD_BYTES,cur_count[SAPP_STAT_TCP_OFFLOAD_BYTES]-history_count[SAPP_STAT_TCP_OFFLOAD_BYTES]); + //sapp_fs3_metric_incrby(0, SAPP_STAT_TCP_OFFLOAD_STREAM,cur_count[SAPP_STAT_TCP_OFFLOAD_STREAM]-history_count[SAPP_STAT_TCP_OFFLOAD_STREAM]); + //sapp_fs3_metric_incrby(0, SAPP_STAT_TCP_OFFLOAD_PKTS,cur_count[SAPP_STAT_TCP_OFFLOAD_PKTS]-history_count[SAPP_STAT_TCP_OFFLOAD_PKTS]); + //sapp_fs3_metric_incrby(0, SAPP_STAT_TCP_OFFLOAD_BYTES,cur_count[SAPP_STAT_TCP_OFFLOAD_BYTES]-history_count[SAPP_STAT_TCP_OFFLOAD_BYTES]); - sapp_fs3_metric_incrby(0, SAPP_STAT_UDP_OFFLOAD_STREAM,cur_count[SAPP_STAT_UDP_OFFLOAD_STREAM]-history_count[SAPP_STAT_UDP_OFFLOAD_STREAM]); - sapp_fs3_metric_incrby(0, SAPP_STAT_UDP_OFFLOAD_PKTS,cur_count[SAPP_STAT_UDP_OFFLOAD_PKTS]-history_count[SAPP_STAT_UDP_OFFLOAD_PKTS]); - sapp_fs3_metric_incrby(0, SAPP_STAT_UDP_OFFLOAD_BYTES,cur_count[SAPP_STAT_UDP_OFFLOAD_BYTES]-history_count[SAPP_STAT_UDP_OFFLOAD_BYTES]); + //sapp_fs3_metric_incrby(0, SAPP_STAT_UDP_OFFLOAD_STREAM,cur_count[SAPP_STAT_UDP_OFFLOAD_STREAM]-history_count[SAPP_STAT_UDP_OFFLOAD_STREAM]); + //sapp_fs3_metric_incrby(0, SAPP_STAT_UDP_OFFLOAD_PKTS,cur_count[SAPP_STAT_UDP_OFFLOAD_PKTS]-history_count[SAPP_STAT_UDP_OFFLOAD_PKTS]); + //sapp_fs3_metric_incrby(0, SAPP_STAT_UDP_OFFLOAD_BYTES,cur_count[SAPP_STAT_UDP_OFFLOAD_BYTES]-history_count[SAPP_STAT_UDP_OFFLOAD_BYTES]); sapp_fs3_metric_incrby(0, SAPP_STAT_UDP_DUP_KICK_STREAM,cur_count[SAPP_STAT_UDP_DUP_KICK_STREAM]-history_count[SAPP_STAT_UDP_DUP_KICK_STREAM]); + + sapp_fs3_metric_incrby(0, SAPP_STAT_TCP_OPENING_OVERSPEED,cur_count[SAPP_STAT_TCP_OPENING_OVERSPEED]-history_count[SAPP_STAT_TCP_OPENING_OVERSPEED]); + sapp_fs3_metric_incrby(0, SAPP_STAT_UDP_OPENING_OVERSPEED,cur_count[SAPP_STAT_UDP_OPENING_OVERSPEED]-history_count[SAPP_STAT_UDP_OPENING_OVERSPEED]); + sapp_fs3_metric_incrby(0, SAPP_STAT_TCP_TIMEOUTS_OVERSPEED,cur_count[SAPP_STAT_TCP_TIMEOUTS_OVERSPEED]-history_count[SAPP_STAT_TCP_TIMEOUTS_OVERSPEED]); + sapp_fs3_metric_incrby(0, SAPP_STAT_UDP_TIMEOUTS_OVERSPEED,cur_count[SAPP_STAT_UDP_TIMEOUTS_OVERSPEED]-history_count[SAPP_STAT_UDP_TIMEOUTS_OVERSPEED]); + + sapp_fs3_metric_incrby(0, SAPP_STAT_TCP_TRY_TIMEOUTS,cur_count[SAPP_STAT_TCP_TRY_TIMEOUTS]-history_count[SAPP_STAT_TCP_TRY_TIMEOUTS]); + sapp_fs3_metric_incrby(0, SAPP_STAT_UDP_TRY_TIMEOUTS,cur_count[SAPP_STAT_UDP_TRY_TIMEOUTS]-history_count[SAPP_STAT_UDP_TRY_TIMEOUTS]); return; } diff --git a/src/support/token_bucket/token_bucket.c b/src/support/token_bucket/token_bucket.c index eeedba4..580e8cb 100644 --- a/src/support/token_bucket/token_bucket.c +++ b/src/support/token_bucket/token_bucket.c @@ -32,7 +32,7 @@ void token_bucket_free(struct token_bucket *t) int token_bucket_consume(struct token_bucket *t, long long tokens, long long now_ms) { - if (t == NULL || tokens <= 0 || now_ms <= 0)return 0; + if (t == NULL || tokens <= 0 || now_ms <= 0)return 1; if (tokens > t->CBS)return 0; if (now_ms < t->last_refill_timestamp_ms) return 0; @@ -42,7 +42,7 @@ int token_bucket_consume(struct token_bucket *t, long long tokens, long long now if(delta_ms > DEFALUT_REFILL_INTERVAL_MS && refill > 0) { - t->tokens += MIN(refill, t->CBS); + t->tokens = MIN(refill, t->CBS); t->last_refill_timestamp_ms = now_ms; } |
