summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authoryangwei <[email protected]>2024-04-11 09:51:34 +0800
committeryangwei <[email protected]>2024-04-12 00:42:48 +0800
commit12abc0a910c188b3b4e92fdbdfc6b81a6721622e (patch)
tree56fc7eb228ed640e9a0bc7d53572f15d977ef628
parent3bb30afc483bc0297b7b88901818021d3045d1d5 (diff)
✨ feat(sapp metric update): 新增open和timeout速率统计,暂时关闭offload统计
-rw-r--r--include/private/sapp_pkt_stat.h8
-rw-r--r--src/dealpkt/deal_tcp.c10
-rw-r--r--src/dealpkt/stream_manage.c60
-rw-r--r--src/extensions/sapp_metrics.cpp42
-rw-r--r--src/packet_io/packet_io_status.cpp20
-rw-r--r--src/support/token_bucket/token_bucket.c4
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;
}