@cryptotaxi247 / netdata-1 / commits / 54d05d31a

proc: collect ksm/swap/cma/zswap only when feature enabled (#18076)

Ilya Mashchenko committed Jul 7, 2024 at 16:53 UTC 54d05d31ab80f72506c14a84ca6848fe7d832ddd
4 files changed +77 -11
src/collectors/proc.plugin/plugin_proc.c
+61
@@ -102,6 +102,9 @@ static void proc_main_cleanup(void *pptr)
102 }
103
104 bool inside_lxc_container = false;
105 +bool is_mem_swap_enabled = false;
106 +bool is_mem_zswap_enabled = false;
107 +bool is_mem_ksm_enabled = false;
108
109 static bool is_lxcfs_proc_mounted() {
110 procfile *ff = NULL;
@@ -136,6 +139,61 @@ static bool is_lxcfs_proc_mounted() {
139 return false;
140 }
141
142 +static bool is_ksm_enabled() {
143 + unsigned long long ksm_run = 0;
144 +
145 + char filename[FILENAME_MAX + 1];
146 + snprintfz(filename, FILENAME_MAX, "%s/sys/kernel/mm/ksm/run", netdata_configured_host_prefix);
147 +
148 + return !read_single_number_file(filename, &ksm_run) && ksm_run == 1;
149 +}
150 +
151 +static bool is_zswap_enabled() {
152 + char filename[FILENAME_MAX + 1];
153 + snprintfz(filename, FILENAME_MAX, "/sys/module/zswap/parameters/enabled"); // host prefix is not needed here
154 + char state[1 + 1]; // Y or N
155 +
156 + int ret = read_txt_file(filename, state, sizeof(state));
157 +
158 + return !ret && !strcmp(state, "Y");
159 +}
160 +
161 +static bool is_swap_enabled() {
162 + char filename[FILENAME_MAX + 1];
163 + snprintfz(filename, FILENAME_MAX, "%s/proc/meminfo", netdata_configured_host_prefix);
164 +
165 + procfile *ff = procfile_open(filename, " \t:", PROCFILE_FLAG_DEFAULT);
166 + if (!ff) {
167 + return false;
168 + }
169 +
170 + ff = procfile_readall(ff);
171 + if (!ff) {
172 + procfile_close(ff);
173 + return false;
174 + }
175 +
176 + unsigned long long swap_total = 0;
177 +
178 + size_t lines = procfile_lines(ff), l;
179 +
180 + for (l = 0; l < lines; l++) {
181 + size_t words = procfile_linewords(ff, l);
182 + if (words < 2)
183 + continue;
184 +
185 + const char *key = procfile_lineword(ff, l, 0);
186 + if (strcmp(key, "SwapTotal") == 0) {
187 + swap_total = str2ull(procfile_lineword(ff, l, 1), NULL);
188 + break;
189 + }
190 + }
191 +
192 + procfile_close(ff);
193 +
194 + return swap_total > 0;
195 +}
196 +
197 static bool log_proc_module(BUFFER *wb, void *data) {
198 struct proc_module *pm = data;
199 buffer_sprintf(wb, "proc.plugin[%s]", pm->name);
@@ -174,6 +232,9 @@ void *proc_main(void *ptr)
232 heartbeat_init(&hb);
233
234 inside_lxc_container = is_lxcfs_proc_mounted();
235 + is_mem_swap_enabled = is_swap_enabled();
236 + is_mem_zswap_enabled = is_zswap_enabled();
237 + is_mem_ksm_enabled = is_ksm_enabled();
238
239 #define LGS_MODULE_ID 0
240
src/collectors/proc.plugin/plugin_proc.h
+4
@@ -53,6 +53,10 @@ int get_numa_node_count(void);
53 extern unsigned long long zfs_arcstats_shrinkable_cache_size_bytes;
54 extern bool inside_lxc_container;
55
56 +extern bool is_mem_swap_enabled;
57 +extern bool is_mem_zswap_enabled;
58 +extern bool is_mem_ksm_enabled;
59 +
60 // netdev renames
61 void cgroup_rename_task_add(
62 const char *host_device,
src/collectors/proc.plugin/proc_meminfo.c
+8 -8
@@ -101,18 +101,18 @@ int do_proc_meminfo(int update_every, usec_t dt) {
101 ;
102
103 if(unlikely(!arl_base)) {
104 - do_ram = config_get_boolean(CONFIG_SECTION_PLUGIN_PROC_MEMINFO, "system ram", 1);
104 + do_ram = config_get_boolean(CONFIG_SECTION_PLUGIN_PROC_MEMINFO, "system ram", CONFIG_BOOLEAN_YES);
105 do_swap = config_get_boolean_ondemand(CONFIG_SECTION_PLUGIN_PROC_MEMINFO, "system swap", CONFIG_BOOLEAN_AUTO);
106 do_hwcorrupt = config_get_boolean_ondemand(CONFIG_SECTION_PLUGIN_PROC_MEMINFO, "hardware corrupted ECC", CONFIG_BOOLEAN_AUTO);
107 - do_committed = config_get_boolean(CONFIG_SECTION_PLUGIN_PROC_MEMINFO, "committed memory", 1);
108 - do_writeback = config_get_boolean(CONFIG_SECTION_PLUGIN_PROC_MEMINFO, "writeback memory", 1);
109 - do_kernel = config_get_boolean(CONFIG_SECTION_PLUGIN_PROC_MEMINFO, "kernel memory", 1);
110 - do_slab = config_get_boolean(CONFIG_SECTION_PLUGIN_PROC_MEMINFO, "slab memory", 1);
107 + do_committed = config_get_boolean(CONFIG_SECTION_PLUGIN_PROC_MEMINFO, "committed memory", CONFIG_BOOLEAN_YES);
108 + do_writeback = config_get_boolean(CONFIG_SECTION_PLUGIN_PROC_MEMINFO, "writeback memory", CONFIG_BOOLEAN_YES);
109 + do_kernel = config_get_boolean(CONFIG_SECTION_PLUGIN_PROC_MEMINFO, "kernel memory", CONFIG_BOOLEAN_YES);
110 + do_slab = config_get_boolean(CONFIG_SECTION_PLUGIN_PROC_MEMINFO, "slab memory", CONFIG_BOOLEAN_YES);
111 do_hugepages = config_get_boolean_ondemand(CONFIG_SECTION_PLUGIN_PROC_MEMINFO, "hugepages", CONFIG_BOOLEAN_AUTO);
112 do_transparent_hugepages = config_get_boolean_ondemand(CONFIG_SECTION_PLUGIN_PROC_MEMINFO, "transparent hugepages", CONFIG_BOOLEAN_AUTO);
113 do_reclaiming = config_get_boolean(CONFIG_SECTION_PLUGIN_PROC_MEMINFO, "memory reclaiming", CONFIG_BOOLEAN_AUTO);
114 do_high_low = config_get_boolean(CONFIG_SECTION_PLUGIN_PROC_MEMINFO, "high low memory", CONFIG_BOOLEAN_AUTO);
115 - do_cma = config_get_boolean(CONFIG_SECTION_PLUGIN_PROC_MEMINFO, "cma memory", CONFIG_BOOLEAN_AUTO);
115 + do_cma = config_get_boolean_ondemand(CONFIG_SECTION_PLUGIN_PROC_MEMINFO, "cma memory", CONFIG_BOOLEAN_AUTO);
116 do_directmap = config_get_boolean(CONFIG_SECTION_PLUGIN_PROC_MEMINFO, "direct maps", CONFIG_BOOLEAN_AUTO);
117
118 // https://github.com/torvalds/linux/blob/master/fs/proc/meminfo.c
@@ -285,7 +285,7 @@ int do_proc_meminfo(int update_every, usec_t dt) {
285 rrdset_done(st_mem_swap_cached);
286 }
287
288 - if(arl_zswapped->flags & ARL_ENTRY_FLAG_FOUND) {
288 + if (is_mem_zswap_enabled && (arl_zswapped->flags & ARL_ENTRY_FLAG_FOUND)) {
289 static RRDSET *st_mem_zswap = NULL;
290 static RRDDIM *rd_zswap = NULL, *rd_zswapped = NULL;
291
@@ -673,7 +673,7 @@ int do_proc_meminfo(int update_every, usec_t dt) {
673 rrdset_done(st_mem_high_low);
674 }
675
676 - if(do_cma == CONFIG_BOOLEAN_YES || (do_cma == CONFIG_BOOLEAN_AUTO && (arl_cma_total->flags & ARL_ENTRY_FLAG_FOUND) && CmaTotal)) {
676 + if (CmaTotal && do_cma != CONFIG_BOOLEAN_NO) {
677 do_cma = CONFIG_BOOLEAN_YES;
678
679 static RRDSET *st_mem_cma = NULL;
src/collectors/proc.plugin/proc_vmstat.c
+4 -3
@@ -10,6 +10,7 @@
10 #define _COMMON_PLUGIN_MODULE_NAME PLUGIN_PROC_MODULE_VMSTAT_NAME
11 #include "../common-contexts/common-contexts.h"
12
13 +
14 int do_proc_vmstat(int update_every, usec_t dt) {
15 (void)dt;
16
@@ -262,7 +263,7 @@ int do_proc_vmstat(int update_every, usec_t dt) {
263
264 // --------------------------------------------------------------------
265
265 - if (do_swapio == CONFIG_BOOLEAN_YES || do_swapio == CONFIG_BOOLEAN_AUTO) {
266 + if (is_mem_swap_enabled && (do_swapio == CONFIG_BOOLEAN_YES || do_swapio == CONFIG_BOOLEAN_AUTO)) {
267 do_swapio = CONFIG_BOOLEAN_YES;
268
269 static RRDSET *st_swapio = NULL;
@@ -465,7 +466,7 @@ int do_proc_vmstat(int update_every, usec_t dt) {
466
467 // --------------------------------------------------------------------
468
468 - if (do_zswapio == CONFIG_BOOLEAN_YES || do_zswapio == CONFIG_BOOLEAN_AUTO) {
469 + if (is_mem_zswap_enabled && (do_zswapio == CONFIG_BOOLEAN_YES || do_zswapio == CONFIG_BOOLEAN_AUTO)) {
470 do_zswapio = CONFIG_BOOLEAN_YES;
471
472 static RRDSET *st_zswapio = NULL;
@@ -498,7 +499,7 @@ int do_proc_vmstat(int update_every, usec_t dt) {
499
500 // --------------------------------------------------------------------
501
501 - if (do_ksm == CONFIG_BOOLEAN_YES || do_ksm == CONFIG_BOOLEAN_AUTO) {
502 + if (is_mem_ksm_enabled && (do_ksm == CONFIG_BOOLEAN_YES || do_ksm == CONFIG_BOOLEAN_AUTO)) {
503 do_ksm = CONFIG_BOOLEAN_YES;
504
505 static RRDSET *st_ksm_cow = NULL;