@cryptotaxi247 / netdata-1 / commits / 9e5e1340a

Add a metric for percpu memory (#10964)

Vladimir Kobal committed Apr 14, 2021 at 12:20 UTC 9e5e1340aa9a91382704402b83b97bfde9332fe7
1 file changed +17 -1
collectors/proc.plugin/proc_meminfo.c
+17 -1
@@ -10,6 +10,7 @@ int do_proc_meminfo(int update_every, usec_t dt) {
10
11 static procfile *ff = NULL;
12 static int do_ram = -1, do_swap = -1, do_hwcorrupt = -1, do_committed = -1, do_writeback = -1, do_kernel = -1, do_slab = -1, do_hugepages = -1, do_transparent_hugepages = -1;
13 + static int do_percpu = 0;
14
15 static ARL_BASE *arl_base = NULL;
16 static ARL_ENTRY *arl_hwcorrupted = NULL, *arl_memavailable = NULL;
@@ -49,6 +50,7 @@ int do_proc_meminfo(int update_every, usec_t dt) {
50 //VmallocTotal = 0,
51 VmallocUsed = 0,
52 //VmallocChunk = 0,
53 + Percpu = 0,
54 AnonHugePages = 0,
55 ShmemHugePages = 0,
56 HugePages_Total = 0,
@@ -106,6 +108,7 @@ int do_proc_meminfo(int update_every, usec_t dt) {
108 //arl_expect(arl_base, "VmallocTotal", &VmallocTotal);
109 arl_expect(arl_base, "VmallocUsed", &VmallocUsed);
110 //arl_expect(arl_base, "VmallocChunk", &VmallocChunk);
111 + arl_expect(arl_base, "Percpu", &Percpu);
112 arl_hwcorrupted = arl_expect(arl_base, "HardwareCorrupted", &HardwareCorrupted);
113 arl_expect(arl_base, "AnonHugePages", &AnonHugePages);
114 arl_expect(arl_base, "ShmemHugePages", &ShmemHugePages);
@@ -134,15 +137,23 @@ int do_proc_meminfo(int update_every, usec_t dt) {
137
138 arl_begin(arl_base);
139
140 + static int first_ff_read = 1;
141 +
142 for(l = 0; l < lines ;l++) {
143 size_t words = procfile_linewords(ff, l);
144 if(unlikely(words < 2)) continue;
145
146 + if (first_ff_read && !strcmp(procfile_lineword(ff, l, 0), "Percpu"))
147 + do_percpu = 1;
148 +
149 if(unlikely(arl_check(arl_base,
150 procfile_lineword(ff, l, 0),
151 procfile_lineword(ff, l, 1)))) break;
152 }
153
154 + if (first_ff_read)
155 + first_ff_read = 0;
156 +
157 // --------------------------------------------------------------------
158
159 // http://calimeroteknik.free.fr/blag/?article20/really-used-memory-on-gnu-linux
@@ -371,7 +382,8 @@ int do_proc_meminfo(int update_every, usec_t dt) {
382
383 if(do_kernel) {
384 static RRDSET *st_mem_kernel = NULL;
374 - static RRDDIM *rd_slab = NULL, *rd_kernelstack = NULL, *rd_pagetables = NULL, *rd_vmallocused = NULL;
385 + static RRDDIM *rd_slab = NULL, *rd_kernelstack = NULL, *rd_pagetables = NULL, *rd_vmallocused = NULL,
386 + *rd_percpu = NULL;
387
388 if(unlikely(!st_mem_kernel)) {
389 st_mem_kernel = rrdset_create_localhost(
@@ -395,6 +407,8 @@ int do_proc_meminfo(int update_every, usec_t dt) {
407 rd_kernelstack = rrddim_add(st_mem_kernel, "KernelStack", NULL, 1, 1024, RRD_ALGORITHM_ABSOLUTE);
408 rd_pagetables = rrddim_add(st_mem_kernel, "PageTables", NULL, 1, 1024, RRD_ALGORITHM_ABSOLUTE);
409 rd_vmallocused = rrddim_add(st_mem_kernel, "VmallocUsed", NULL, 1, 1024, RRD_ALGORITHM_ABSOLUTE);
410 + if (do_percpu)
411 + rd_percpu = rrddim_add(st_mem_kernel, "Percpu", NULL, 1, 1024, RRD_ALGORITHM_ABSOLUTE);
412 }
413 else rrdset_next(st_mem_kernel);
414
@@ -402,6 +416,8 @@ int do_proc_meminfo(int update_every, usec_t dt) {
416 rrddim_set_by_pointer(st_mem_kernel, rd_kernelstack, KernelStack);
417 rrddim_set_by_pointer(st_mem_kernel, rd_pagetables, PageTables);
418 rrddim_set_by_pointer(st_mem_kernel, rd_vmallocused, VmallocUsed);
419 + if (do_percpu)
420 + rrddim_set_by_pointer(st_mem_kernel, rd_percpu, Percpu);
421
422 rrdset_done(st_mem_kernel);
423 }