@cryptotaxi247 / netdata-1 / commits / 556434b2d

monitor hugepages; fixes #3461

Costa Tsaousis (ktsaou) committed Feb 23, 2018 at 15:02 UTC 556434b2d0aee4a3a9fdb44ae9c9810b0429d82a
2 files changed +54 -11
src/common.h
+1
@@ -133,6 +133,7 @@
133 #define NETDATA_CHART_PRIO_MEM_SYSTEM_PGFAULTS 1030
134 #define NETDATA_CHART_PRIO_MEM_KERNEL 1100
135 #define NETDATA_CHART_PRIO_MEM_SLAB 1200
136 +#define NETDATA_CHART_PRIO_MEM_HUGEPAGES 1250
137 #define NETDATA_CHART_PRIO_MEM_KSM 1300
138 #define NETDATA_CHART_PRIO_MEM_NUMA 1400
139 #define NETDATA_CHART_PRIO_MEM_HW 1500
src/proc_meminfo.c
+53 -11
@@ -4,7 +4,7 @@ int do_proc_meminfo(int update_every, usec_t dt) {
4 (void)dt;
5
6 static procfile *ff = NULL;
7 - static int do_ram = -1, do_swap = -1, do_hwcorrupt = -1, do_committed = -1, do_writeback = -1, do_kernel = -1, do_slab = -1;
7 + 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;
8
9 static ARL_BASE *arl_base = NULL;
10 static ARL_ENTRY *arl_hwcorrupted = NULL, *arl_memavailable = NULL;
@@ -45,11 +45,11 @@ int do_proc_meminfo(int update_every, usec_t dt) {
45 VmallocUsed = 0,
46 //VmallocChunk = 0,
47 //AnonHugePages = 0,
48 - //HugePages_Total = 0,
49 - //HugePages_Free = 0,
50 - //HugePages_Rsvd = 0,
51 - //HugePages_Surp = 0,
52 - //Hugepagesize = 0,
48 + HugePages_Total = 0,
49 + HugePages_Free = 0,
50 + HugePages_Rsvd = 0,
51 + HugePages_Surp = 0,
52 + Hugepagesize = 0,
53 //DirectMap4k = 0,
54 //DirectMap2M = 0,
55 HardwareCorrupted = 0;
@@ -62,6 +62,7 @@ int do_proc_meminfo(int update_every, usec_t dt) {
62 do_writeback = config_get_boolean("plugin:proc:/proc/meminfo", "writeback memory", 1);
63 do_kernel = config_get_boolean("plugin:proc:/proc/meminfo", "kernel memory", 1);
64 do_slab = config_get_boolean("plugin:proc:/proc/meminfo", "slab memory", 1);
65 + do_hugepages = config_get_boolean("plugin:proc:/proc/meminfo", "hugepages", CONFIG_BOOLEAN_AUTO);
66
67 arl_base = arl_create("meminfo", NULL, 60);
68 arl_expect(arl_base, "MemTotal", &MemTotal);
@@ -100,11 +101,11 @@ int do_proc_meminfo(int update_every, usec_t dt) {
101 //arl_expect(arl_base, "VmallocChunk", &VmallocChunk);
102 arl_hwcorrupted = arl_expect(arl_base, "HardwareCorrupted", &HardwareCorrupted);
103 //arl_expect(arl_base, "AnonHugePages", &AnonHugePages);
103 - //arl_expect(arl_base, "HugePages_Total", &HugePages_Total);
104 - //arl_expect(arl_base, "HugePages_Free", &HugePages_Free);
105 - //arl_expect(arl_base, "HugePages_Rsvd", &HugePages_Rsvd);
106 - //arl_expect(arl_base, "HugePages_Surp", &HugePages_Surp);
107 - //arl_expect(arl_base, "Hugepagesize", &Hugepagesize);
104 + arl_expect(arl_base, "HugePages_Total", &HugePages_Total);
105 + arl_expect(arl_base, "HugePages_Free", &HugePages_Free);
106 + arl_expect(arl_base, "HugePages_Rsvd", &HugePages_Rsvd);
107 + arl_expect(arl_base, "HugePages_Surp", &HugePages_Surp);
108 + arl_expect(arl_base, "Hugepagesize", &Hugepagesize);
109 //arl_expect(arl_base, "DirectMap4k", &DirectMap4k);
110 //arl_expect(arl_base, "DirectMap2M", &DirectMap2M);
111 }
@@ -427,6 +428,47 @@ int do_proc_meminfo(int update_every, usec_t dt) {
428 rrdset_done(st_mem_slab);
429 }
430
431 + // --------------------------------------------------------------------
432 +
433 + if(do_hugepages == CONFIG_BOOLEAN_YES || (do_hugepages == CONFIG_BOOLEAN_AUTO && Hugepagesize != 0 && HugePages_Total != 0)) {
434 + do_hugepages = CONFIG_BOOLEAN_YES;
435 +
436 + static RRDSET *st_mem_hugepages = NULL;
437 + static RRDDIM *rd_used = NULL, *rd_free = NULL, *rd_rsvd = NULL, *rd_surp = NULL;
438 +
439 + if(unlikely(!st_mem_hugepages)) {
440 + st_mem_hugepages = rrdset_create_localhost(
441 + "mem"
442 + , "hugepages"
443 + , NULL
444 + , "hugepages"
445 + , NULL
446 + , "HugePages Memory"
447 + , "MB"
448 + , "proc"
449 + , "meminfo"
450 + , NETDATA_CHART_PRIO_MEM_HUGEPAGES
451 + , update_every
452 + , RRDSET_TYPE_STACKED
453 + );
454 +
455 + rrdset_flag_set(st_mem_hugepages, RRDSET_FLAG_DETAIL);
456 +
457 + rd_free = rrddim_add(st_mem_hugepages, "free", NULL, Hugepagesize, 1024, RRD_ALGORITHM_ABSOLUTE);
458 + rd_used = rrddim_add(st_mem_hugepages, "used", NULL, Hugepagesize, 1024, RRD_ALGORITHM_ABSOLUTE);
459 + rd_surp = rrddim_add(st_mem_hugepages, "surplus", NULL, Hugepagesize, 1024, RRD_ALGORITHM_ABSOLUTE);
460 + rd_rsvd = rrddim_add(st_mem_hugepages, "reserved", NULL, Hugepagesize, 1024, RRD_ALGORITHM_ABSOLUTE);
461 + }
462 + else rrdset_next(st_mem_hugepages);
463 +
464 + rrddim_set_by_pointer(st_mem_hugepages, rd_used, HugePages_Total - HugePages_Free - HugePages_Rsvd);
465 + rrddim_set_by_pointer(st_mem_hugepages, rd_free, HugePages_Free);
466 + rrddim_set_by_pointer(st_mem_hugepages, rd_rsvd, HugePages_Rsvd);
467 + rrddim_set_by_pointer(st_mem_hugepages, rd_surp, HugePages_Surp);
468 +
469 + rrdset_done(st_mem_hugepages);
470 + }
471 +
472 return 0;
473 }
474