110 lines
4.4 KiB
Diff
110 lines
4.4 KiB
Diff
From 66f2015f6710d86966b8abcf028f69a3165c10aa Mon Sep 17 00:00:00 2001
|
|
From: jiangheng <jiangheng14@huawei.com>
|
|
Date: Tue, 28 Nov 2023 18:43:42 +0800
|
|
Subject: [PATCH] dfx: add tcp exception and kernel event statistics
|
|
|
|
---
|
|
src/common/gazelle_dfx_msg.h | 4 ++++
|
|
src/lstack/api/lstack_epoll.c | 9 +++++++--
|
|
src/ltran/ltran_dfx.c | 7 ++++++-
|
|
3 files changed, 17 insertions(+), 3 deletions(-)
|
|
|
|
diff --git a/src/common/gazelle_dfx_msg.h b/src/common/gazelle_dfx_msg.h
|
|
index 8071108..bfc4992 100644
|
|
--- a/src/common/gazelle_dfx_msg.h
|
|
+++ b/src/common/gazelle_dfx_msg.h
|
|
@@ -75,6 +75,7 @@ struct gazelle_wakeup_stat {
|
|
uint64_t app_write_cnt;
|
|
uint64_t app_read_cnt;
|
|
uint64_t read_null;
|
|
+ uint64_t kernel_events;
|
|
};
|
|
|
|
struct gazelle_stat_pkts {
|
|
@@ -120,6 +121,9 @@ struct gazelle_stat_lstack_snmp {
|
|
uint32_t tcp_fin_ack_cnt;
|
|
uint32_t tcp_delay_ack_cnt;
|
|
uint32_t tcp_refused_cnt;
|
|
+ uint32_t tcp_out_of_seq;
|
|
+ uint32_t tcp_acceptmbox_full;
|
|
+ uint32_t tcp_listen_drops;
|
|
|
|
/* UDP */
|
|
uint32_t udp_in_datagrams;
|
|
diff --git a/src/lstack/api/lstack_epoll.c b/src/lstack/api/lstack_epoll.c
|
|
index 2cb459e..a2d2a9b 100644
|
|
--- a/src/lstack/api/lstack_epoll.c
|
|
+++ b/src/lstack/api/lstack_epoll.c
|
|
@@ -493,7 +493,6 @@ int32_t epoll_lwip_event_nolock(struct wakeup_poll *wakeup, struct epoll_event *
|
|
}
|
|
}
|
|
|
|
- wakeup->stat.app_events += event_num;
|
|
return event_num;
|
|
}
|
|
|
|
@@ -611,6 +610,7 @@ int32_t lstack_rtc_epoll_wait(int32_t epfd, struct epoll_event* events, int32_t
|
|
|
|
lwip_num = epoll_lwip_event_nolock(wakeup, &events[kernel_num], tmpmaxevents - kernel_num);
|
|
wakeup->stat.app_events += lwip_num;
|
|
+ wakeup->stat.kernel_events += kernel_num;
|
|
|
|
return lwip_num + kernel_num;
|
|
}
|
|
@@ -634,7 +634,6 @@ int32_t lstack_rtw_epoll_wait(int32_t epfd, struct epoll_event* events, int32_t
|
|
do {
|
|
__atomic_store_n(&wakeup->in_wait, true, __ATOMIC_RELEASE);
|
|
lwip_num = epoll_lwip_event(wakeup, events, maxevents);
|
|
- wakeup->stat.app_events += lwip_num;
|
|
|
|
if (__atomic_load_n(&wakeup->have_kernel_event, __ATOMIC_ACQUIRE)) {
|
|
kernel_num = posix_api->epoll_wait_fn(epfd, &events[lwip_num], maxevents - lwip_num, 0);
|
|
@@ -661,6 +660,9 @@ int32_t lstack_rtw_epoll_wait(int32_t epfd, struct epoll_event* events, int32_t
|
|
} while (ret == 0);
|
|
|
|
__atomic_store_n(&wakeup->in_wait, false, __ATOMIC_RELEASE);
|
|
+ wakeup->stat.app_events += lwip_num;
|
|
+ wakeup->stat.kernel_events += kernel_num;
|
|
+
|
|
return lwip_num + kernel_num;
|
|
}
|
|
|
|
@@ -870,6 +872,9 @@ int32_t lstack_poll(struct pollfd *fds, nfds_t nfds, int32_t timeout)
|
|
} while (ret == 0);
|
|
|
|
__atomic_store_n(&wakeup->in_wait, false, __ATOMIC_RELEASE);
|
|
+ wakeup->stat.app_events += lwip_num;
|
|
+ wakeup->stat.kernel_events += kernel_num;
|
|
+
|
|
return lwip_num + kernel_num;
|
|
}
|
|
|
|
diff --git a/src/ltran/ltran_dfx.c b/src/ltran/ltran_dfx.c
|
|
index 98e23dc..3bd120c 100644
|
|
--- a/src/ltran/ltran_dfx.c
|
|
+++ b/src/ltran/ltran_dfx.c
|
|
@@ -604,7 +604,9 @@ static void show_lstack_stats(struct gazelle_stack_dfx_data *lstack_stat)
|
|
printf("write_lwip: %-17"PRIu64" ", lstack_stat->data.pkts.stack_stat.write_lwip_cnt);
|
|
printf("app_write_rpc: %-14"PRIu64" \n", lstack_stat->data.pkts.wakeup_stat.app_write_rpc);
|
|
printf("recv_list: %-18"PRIu64" ", lstack_stat->data.pkts.recv_list_cnt);
|
|
- printf("conn_num: %-19hu \n", lstack_stat->data.pkts.conn_num);
|
|
+ printf("conn_num: %-19hu ", lstack_stat->data.pkts.conn_num);
|
|
+
|
|
+ printf("kernel_events: %-14"PRIu64"\n", lstack_stat->data.pkts.wakeup_stat.kernel_events);
|
|
printf("wakeup_events: %-14"PRIu64" ", lstack_stat->data.pkts.stack_stat.wakeup_events);
|
|
printf("app_events: %-17"PRIu64" ", lstack_stat->data.pkts.wakeup_stat.app_events);
|
|
printf("read_null: %-18"PRIu64" \n", lstack_stat->data.pkts.wakeup_stat.read_null);
|
|
@@ -839,6 +841,9 @@ static void gazelle_print_lstack_tcp_stat(const struct gazelle_stat_lstack_snmp
|
|
printf("tcp_fin_ack_cnt: %u\n", snmp->tcp_fin_ack_cnt);
|
|
printf("tcp_delay_ack_cnt: %u\n", snmp->tcp_delay_ack_cnt);
|
|
printf("tcp_refused_cnt: %u\n", snmp->tcp_refused_cnt);
|
|
+ printf("tcp_out_of_seq: %u\n", snmp->tcp_out_of_seq);
|
|
+ printf("tcp_acceptmbox_full: %u\n", snmp->tcp_acceptmbox_full);
|
|
+ printf("tcp_listen_drops: %u\n", snmp->tcp_listen_drops);
|
|
}
|
|
|
|
static void gazelle_print_lstack_stat_snmp_core(const struct gazelle_stack_dfx_data *stat,
|
|
--
|
|
2.27.0
|
|
|