@cryptotaxi247 / netdata-1 / commits / 3cb82d494

Add IPC shared memory stats to FreeBSD plugin

Vladimir Kobal committed Dec 11, 2016 at 23:37 UTC 3cb82d49473578d2292a7b07c09910d8c8c276a1
1 file changed +58 -1
src/freebsd_sysctl.c
+58 -1
@@ -9,6 +9,7 @@
9 // NEEDED BY: struct ipc_sem_data
10 #define _KERNEL
11 #include <sys/sem.h>
12 +#include <sys/shm.h>
13 #undef _KERNEL
14 // NEEDED BY: do_disk_io
15 #define RRD_TYPE_DISK "disk"
@@ -21,7 +22,7 @@ int do_freebsd_sysctl(int update_every, usec_t dt) {
22
23 static int do_cpu = -1, do_cpu_cores = -1, do_interrupts = -1, do_context = -1, do_forks = -1, do_processes = -1,
24 do_loadavg = -1, do_all_processes = -1, do_disk_io = -1, do_swap = -1, do_ram = -1, do_swapio = -1,
24 - do_pgfaults = -1, do_committed = -1, do_ipc_semaphores = -1;
25 + do_pgfaults = -1, do_committed = -1, do_ipc_semaphores = -1, do_ipc_shared_mem = -1;
26
27 if (unlikely(do_cpu == -1)) {
28 do_cpu = config_get_boolean("plugin:freebsd:sysctl", "cpu utilization", 1);
@@ -39,6 +40,7 @@ int do_freebsd_sysctl(int update_every, usec_t dt) {
40 do_pgfaults = config_get_boolean("plugin:freebsd:sysctl", "memory page faults", 1);
41 do_committed = config_get_boolean("plugin:freebsd:sysctl", "committed memory", 1);
42 do_ipc_semaphores = config_get_boolean("plugin:freebsd:sysctl", "ipc semaphores", 1);
43 + do_ipc_shared_mem = config_get_boolean("plugin:freebsd:sysctl", "ipc shared memory", 1);
44 }
45
46 RRDSET *st;
@@ -113,6 +115,13 @@ int do_freebsd_sysctl(int update_every, usec_t dt) {
115 } ipc_sem = {0, 0, 0};
116 static struct semid_kernel *ipc_sem_data = NULL;
117
118 + // NEEDED BY: do_ipc_shared_mem
119 + struct ipc_shm {
120 + u_long shmmni;
121 + collected_number segs;
122 + collected_number segsize;
123 + } ipc_shm = {0, 0, 0};
124 + static struct shmid_kernel *ipc_shm_data = NULL;
125
126 // --------------------------------------------------------------------
127
@@ -728,5 +737,53 @@ int do_freebsd_sysctl(int update_every, usec_t dt) {
737 }
738 }
739
740 + // --------------------------------------------------------------------
741 +
742 + if (likely(do_ipc_shared_mem)) {
743 + if (unlikely(GETSYSCTL("kern.ipc.shmmni", ipc_shm.shmmni))) {
744 + do_ipc_shared_mem = 0;
745 + error("DISABLED: system.ipc_shared_mem_segs");
746 + error("DISABLED: system.ipc_shared_mem_size");
747 + } else {
748 + ipc_shm_data = reallocz(ipc_shm_data, sizeof(struct shmid_kernel) * ipc_shm.shmmni);
749 + if (unlikely(getsysctl("kern.ipc.shmsegs", ipc_shm_data, sizeof(struct shmid_kernel) * ipc_shm.shmmni))) {
750 + do_ipc_shared_mem = 0;
751 + error("DISABLED: system.ipc_shared_mem_segs");
752 + error("DISABLED: system.ipc_shared_mem_size");;
753 + } else {
754 + for (i = 0; i < ipc_shm.shmmni; i++) {
755 + if (unlikely(ipc_shm_data[i].u.shm_perm.mode & 0x0800)) {
756 + ipc_shm.segs += 1;
757 + ipc_shm.segsize += ipc_shm_data[i].u.shm_segsz;
758 + }
759 + }
760 +
761 + // --------------------------------------------------------------------
762 +
763 + st = rrdset_find("system.ipc_shared_mem_segs");
764 + if (unlikely(!st)) {
765 + st = rrdset_create("system", "ipc_shared_mem_segs", NULL, "ipc shared memory", NULL, "IPC Shared Memory Segments", "segments", 1000, rrd_update_every, RRDSET_TYPE_AREA);
766 + rrddim_add(st, "segments", NULL, 1, 1, RRDDIM_ABSOLUTE);
767 + }
768 + else rrdset_next(st);
769 +
770 + rrddim_set(st, "segments", ipc_shm.segs);
771 + rrdset_done(st);
772 +
773 + // --------------------------------------------------------------------
774 +
775 + st = rrdset_find("system.ipc_shared_mem_size");
776 + if (unlikely(!st)) {
777 + st = rrdset_create("system", "ipc_shared_mem_size", NULL, "ipc shared memory", NULL, "IPC Shared Memory Segments Size", "kilobytes", 1000, rrd_update_every, RRDSET_TYPE_AREA);
778 + rrddim_add(st, "allocated", NULL, 1, 1024, RRDDIM_ABSOLUTE);
779 + }
780 + else rrdset_next(st);
781 +
782 + rrddim_set(st, "allocated", ipc_shm.segsize);
783 + rrdset_done(st);
784 + }
785 + }
786 + }
787 +
788 return 0;
789 }