From 157647762a87973785594b58e8d7af02f01fc34e Mon Sep 17 00:00:00 2001 From: Hang Zhao Date: Mon, 4 Jul 2022 10:45:33 +0800 Subject: [PATCH] mservice:add vmevent Signed-off-by: Hang Zhao --- .../mservice/master/conf/sysakmon.conf | 1 + .../monitor/mservice/master/modules/Makefile | 4 +- .../mservice/master/modules/mod_vmevent.c | 99 +++++++++++++++++++ 3 files changed, 102 insertions(+), 2 deletions(-) create mode 100644 source/tools/monitor/mservice/master/modules/mod_vmevent.c diff --git a/source/tools/monitor/mservice/master/conf/sysakmon.conf b/source/tools/monitor/mservice/master/conf/sysakmon.conf index 31cbb408..76b06289 100644 --- a/source/tools/monitor/mservice/master/conf/sysakmon.conf +++ b/source/tools/monitor/mservice/master/conf/sysakmon.conf @@ -21,6 +21,7 @@ mod_percpu off mod_proc off pidname mod_cgroup on mod_jitter on +mod_vmevent on ####output_interface file,db,nagios output_interface file diff --git a/source/tools/monitor/mservice/master/modules/Makefile b/source/tools/monitor/mservice/master/modules/Makefile index 97420391..0b291b28 100644 --- a/source/tools/monitor/mservice/master/modules/Makefile +++ b/source/tools/monitor/mservice/master/modules/Makefile @@ -11,13 +11,13 @@ ifeq ($(UNAME_S),Darwin) mod_lvs.so mod_mem.so mod_ncpu.so mod_nginx.so \ mod_pcsw.so mod_percpu.so mod_pernic.so \ mod_proc.so mod_squid.so mod_tcp.so mod_tcpx.so mod_traffic.so mod_udp.so \ - mod_cgroup.so mod_jitter.so + mod_cgroup.so mod_jitter.so mod_vmevent.so else OBJS = mod_apache.so mod_cpu.so mod_haproxy.so mod_io.so mod_load.so mod_swap.so \ mod_lvs.so mod_mem.so mod_ncpu.so mod_nginx.so \ mod_partition.so mod_pcsw.so mod_percpu.so mod_pernic.so \ mod_proc.so mod_squid.so mod_tcp.so mod_tcpx.so mod_traffic.so mod_udp.so \ - mod_cgroup.so mod_jitter.so + mod_cgroup.so mod_jitter.so mod_vmevent.so endif all: $(OBJS) diff --git a/source/tools/monitor/mservice/master/modules/mod_vmevent.c b/source/tools/monitor/mservice/master/modules/mod_vmevent.c new file mode 100644 index 00000000..990dc7c9 --- /dev/null +++ b/source/tools/monitor/mservice/master/modules/mod_vmevent.c @@ -0,0 +1,99 @@ +#include "tsar.h" + +struct stats_vmevent { + unsigned long long kswapd_reclaim; /* pageoutrun */ + unsigned long long pgsteal_kswapd; + unsigned long long pgsteal_direct; + unsigned long long kcompactd_reclaim; /* compact_daemon_wake */ + unsigned long long direct_compact; /* compact_stall */ + unsigned long long dcompact_success; /* compact_success */ + unsigned long long oom_kill; +}; + +#define NR_EVENT 7 +#define STATS_PGEVENT_SIZE (sizeof(struct stats_vmevent)) + +static char *vmevent_storage = " --vmevent mem main event"; + +/* + ************************************************************* + * Read swapping statistics from /proc/vmstat & /proc/meminfo. + ************************************************************* + */ +static void +read_vmstat_vmevent(struct module *mod) +{ + FILE *fp; + char line[LEN_4096], buf[LEN_4096]; + struct stats_vmevent st_vmevent; + + memset(buf, 0, LEN_4096); + memset(&st_vmevent, 0, sizeof(struct stats_vmevent)); + /* read /proc/vmstat*/ + if ((fp = fopen(VMSTAT, "r")) == NULL) { + return ; + } + + while (fgets(line, LEN_4096, fp) != NULL) { + + if (!strncmp(line, "pageoutrun ", 11)) { + /* Read number of swap pages brought in */ + sscanf(line + 11, "%llu", &st_vmevent.kswapd_reclaim); + + } else if (!strncmp(line, "pgsteal_kswapd ", 15)) { + /* Read number of swap pages brought out */ + sscanf(line + 14, "%llu", &st_vmevent.pgsteal_kswapd); + + } else if (!strncmp(line, "pgsteal_direct ", 15)) { + /* Read number of direct reclaim page scan */ + sscanf(line + 14, "%llu", &st_vmevent.pgsteal_direct); + + } else if (!strncmp(line, "compact_daemon_wake ", 20)) { + /* Read number of kcompactd wake */ + sscanf(line + 20, "%llu", &st_vmevent.kcompactd_reclaim); + + } else if (!strncmp(line, "compact_stall ", 14)) { + /* Read number of direct copmpact */ + sscanf(line + 14, "%llu", &st_vmevent.direct_compact); + + } else if (!strncmp(line, "compact_success ", 16)) { + /* Read number of direct copmpact success */ + sscanf(line + 16, "%llu", &st_vmevent.dcompact_success); + + } else if (!strncmp(line, "oom_kill ", 9)) { + /* Read number of oom kill */ + sscanf(line + 9, "%llu", &st_vmevent.oom_kill); + } + } + fclose(fp); + sprintf(buf, "%lld,%lld,%lld,%lld,%lld,%lld,%lld", st_vmevent.kswapd_reclaim, st_vmevent.pgsteal_kswapd, st_vmevent.pgsteal_direct, + st_vmevent.kcompactd_reclaim, st_vmevent.direct_compact, st_vmevent.dcompact_success, st_vmevent.oom_kill); + set_mod_record(mod, buf); + return; +} + +static void +set_vmevent_record(struct module *mod, double st_array[], + U_64 pre_array[], U_64 cur_array[], int inter) +{ + int i; + for (i = 0; i < NR_EVENT; i++) { + st_array[i] = cur_array[i]; + } +} + +static struct mod_info vmevent_info[] = { + {"kswapd", DETAIL_BIT, 0, STATS_NULL}, + {"pg_kr", DETAIL_BIT, 0, STATS_NULL}, + {"pg_dr", DETAIL_BIT, 0, STATS_NULL}, + {"kcompd", DETAIL_BIT, 0, STATS_NULL}, + {"dc_all", DETAIL_BIT, 0, STATS_NULL}, + {"dc_fin", DETAIL_BIT, 0, STATS_NULL}, + {" oom", DETAIL_BIT, 0, STATS_NULL} +}; + +void +mod_register(struct module *mod) +{ + register_mod_fields(mod, "--vmevent", vmevent_storage, vmevent_info, 7, read_vmstat_vmevent, set_vmevent_record); +} -- Gitee