@cryptotaxi247 / netdata-1 / commits / fe9c8658d

Separate kern.ipc.sem module

Vladimir Kobal committed Mar 9, 2017 at 18:29 UTC fe9c8658d197536fe52088c371738ebb1d37dc04
3 files changed +90 -61
src/freebsd_sysctl.c
+88 -61
@@ -895,12 +895,99 @@ int do_vm_stats_sys_v_pgfaults(int update_every, usec_t dt) {
895 return 0;
896 }
897
898 +// --------------------------------------------------------------------------------------------------------------------
899 +// kern.ipc.sem
900 +
901 +int do_kern_ipc_sem(int update_every, usec_t dt) {
902 + static int mib_semmni[3] = {0, 0, 0}, mib_sema[3] = {0, 0, 0};
903 + struct ipc_sem {
904 + int semmni;
905 + collected_number sets;
906 + collected_number semaphores;
907 + } ipc_sem = {0, 0, 0};
908 +
909 + if (unlikely(GETSYSCTL_SIMPLE("kern.ipc.semmni", mib_semmni, ipc_sem.semmni))) {
910 + error("DISABLED: system.ipc_semaphores chart");
911 + error("DISABLED: system.ipc_semaphore_arrays chart");
912 + error("DISABLED: kern.ipc.sem module");
913 + return 1;
914 + } else {
915 + static struct semid_kernel *ipc_sem_data = NULL;
916 +
917 + ipc_sem_data = reallocz(ipc_sem_data, sizeof(struct semid_kernel) * ipc_sem.semmni);
918 + if (unlikely(GETSYSCTL_WSIZE("kern.ipc.sema", mib_sema, ipc_sem_data, sizeof(struct semid_kernel) * ipc_sem.semmni))) {
919 + error("DISABLED: system.ipc_semaphores chart");
920 + error("DISABLED: system.ipc_semaphore_arrays chart");
921 + error("DISABLED: kern.ipc.sem module");
922 + return 1;
923 + } else {
924 + int i;
925 +
926 + for (i = 0; i < ipc_sem.semmni; i++) {
927 + if (unlikely(ipc_sem_data[i].u.sem_perm.mode & SEM_ALLOC)) {
928 + ipc_sem.sets += 1;
929 + ipc_sem.semaphores += ipc_sem_data[i].u.sem_nsems;
930 + }
931 + }
932 +
933 + // --------------------------------------------------------------------
934 +
935 + static RRDSET *st_semaphores = NULL, *st_semaphore_arrays = NULL;
936 + static RRDDIM *rd_semaphores = NULL, *rd_semaphore_arrays = NULL;
937 +
938 + if (unlikely(!st_semaphores)) {
939 + st_semaphores = rrdset_create_localhost("system",
940 + "ipc_semaphores",
941 + NULL,
942 + "ipc semaphores",
943 + NULL,
944 + "IPC Semaphores",
945 + "semaphores",
946 + 1000,
947 + localhost->rrd_update_every,
948 + RRDSET_TYPE_AREA
949 + );
950 +
951 + rd_semaphores = rrddim_add(st_semaphores, "semaphores", NULL, 1, 1, RRD_ALGORITHM_ABSOLUTE);
952 + }
953 + else rrdset_next(st_semaphores);
954 +
955 + rrddim_set_by_pointer(st_semaphores, rd_semaphores, ipc_sem.semaphores);
956 + rrdset_done(st_semaphores);
957 +
958 + // --------------------------------------------------------------------
959 +
960 + if (unlikely(!st_semaphore_arrays)) {
961 + st_semaphore_arrays = rrdset_create_localhost("system",
962 + "ipc_semaphore_arrays",
963 + NULL,
964 + "ipc semaphores",
965 + NULL,
966 + "IPC Semaphore Arrays",
967 + "arrays",
968 + 1000,
969 + localhost->rrd_update_every,
970 + RRDSET_TYPE_AREA
971 + );
972 +
973 + rd_semaphore_arrays = rrddim_add(st_semaphore_arrays, "arrays", NULL, 1, 1, RRD_ALGORITHM_ABSOLUTE);
974 + }
975 + else rrdset_next(st_semaphore_arrays);
976 +
977 + rrddim_set_by_pointer(st_semaphore_arrays, rd_semaphore_arrays, ipc_sem.sets);
978 + rrdset_done(st_semaphore_arrays);
979 + }
980 + }
981 +
982 + return 0;
983 +}
984 +
985 // --------------------------------------------------------------------------------------------------------------------
986 // old sources
987
988 int do_freebsd_sysctl_old(int update_every, usec_t dt) {
989 static int do_disk_io = -1,
903 - do_ipc_semaphores = -1, do_ipc_shared_mem = -1, do_ipc_msg_queues = -1,
990 + do_ipc_shared_mem = -1, do_ipc_msg_queues = -1,
991 do_netisr = -1, do_netisr_per_core = -1, do_bandwidth = -1,
992 do_tcp_sockets = -1, do_tcp_packets = -1, do_tcp_errors = -1, do_tcp_handshake = -1,
993 do_ecn = -1, do_tcpext_syscookies = -1, do_tcpext_ofo = -1, do_tcpext_connaborts = -1,
@@ -912,7 +999,6 @@ int do_freebsd_sysctl_old(int update_every, usec_t dt) {
999
1000 if (unlikely(do_uptime == -1)) {
1001 do_disk_io = config_get_boolean("plugin:freebsd:sysctl", "stats for all disks", 1);
915 - do_ipc_semaphores = config_get_boolean("plugin:freebsd:sysctl", "ipc semaphores", 1);
1002 do_ipc_shared_mem = config_get_boolean("plugin:freebsd:sysctl", "ipc shared memory", 1);
1003 do_ipc_msg_queues = config_get_boolean("plugin:freebsd:sysctl", "ipc message queues", 1);
1004 do_netisr = config_get_boolean("plugin:freebsd:sysctl", "netisr", 1);
@@ -982,17 +1068,6 @@ int do_freebsd_sysctl_old(int update_every, usec_t dt) {
1068 collected_number busy_time_ms;
1069 } prev_dstat;
1070
985 - // NEEDED BY: do_swapio, do_ram
986 - struct vmmeter vmmeter_data;
987 -
988 - // NEEDED BY: do_ipc_semaphores
989 - struct ipc_sem {
990 - int semmni;
991 - collected_number sets;
992 - collected_number semaphores;
993 - } ipc_sem = {0, 0, 0};
994 - static struct semid_kernel *ipc_sem_data = NULL;
995 -
1071 // NEEDED BY: do_ipc_shared_mem
1072 struct ipc_shm {
1073 u_long shmmni;
@@ -1248,54 +1323,6 @@ int do_freebsd_sysctl_old(int update_every, usec_t dt) {
1323
1324 // --------------------------------------------------------------------
1325
1251 - if (likely(do_ipc_semaphores)) {
1252 - if (unlikely(GETSYSCTL_BY_NAME("kern.ipc.semmni", ipc_sem.semmni))) {
1253 - do_ipc_semaphores = 0;
1254 - error("DISABLED: system.ipc_semaphores");
1255 - error("DISABLED: system.ipc_semaphore_arrays");
1256 - } else {
1257 - ipc_sem_data = reallocz(ipc_sem_data, sizeof(struct semid_kernel) * ipc_sem.semmni);
1258 - if (unlikely(getsysctl_by_name("kern.ipc.sema", ipc_sem_data, sizeof(struct semid_kernel) * ipc_sem.semmni))) {
1259 - do_ipc_semaphores = 0;
1260 - error("DISABLED: system.ipc_semaphores");
1261 - error("DISABLED: system.ipc_semaphore_arrays");
1262 - } else {
1263 - for (i = 0; i < ipc_sem.semmni; i++) {
1264 - if (unlikely(ipc_sem_data[i].u.sem_perm.mode & SEM_ALLOC)) {
1265 - ipc_sem.sets += 1;
1266 - ipc_sem.semaphores += ipc_sem_data[i].u.sem_nsems;
1267 - }
1268 - }
1269 -
1270 - // --------------------------------------------------------------------
1271 -
1272 - st = rrdset_find_localhost("system.ipc_semaphores");
1273 - if (unlikely(!st)) {
1274 - st = rrdset_create_localhost("system", "ipc_semaphores", NULL, "ipc semaphores", NULL, "IPC Semaphores", "semaphores", 1000, localhost->rrd_update_every, RRDSET_TYPE_AREA);
1275 - rrddim_add(st, "semaphores", NULL, 1, 1, RRD_ALGORITHM_ABSOLUTE);
1276 - }
1277 - else rrdset_next(st);
1278 -
1279 - rrddim_set(st, "semaphores", ipc_sem.semaphores);
1280 - rrdset_done(st);
1281 -
1282 - // --------------------------------------------------------------------
1283 -
1284 - st = rrdset_find_localhost("system.ipc_semaphore_arrays");
1285 - if (unlikely(!st)) {
1286 - st = rrdset_create_localhost("system", "ipc_semaphore_arrays", NULL, "ipc semaphores", NULL, "IPC Semaphore Arrays", "arrays", 1000, localhost->rrd_update_every, RRDSET_TYPE_AREA);
1287 - rrddim_add(st, "arrays", NULL, 1, 1, RRD_ALGORITHM_ABSOLUTE);
1288 - }
1289 - else rrdset_next(st);
1290 -
1291 - rrddim_set(st, "arrays", ipc_sem.sets);
1292 - rrdset_done(st);
1293 - }
1294 - }
1295 - }
1296 -
1297 - // --------------------------------------------------------------------
1298 -
1326 if (likely(do_ipc_shared_mem)) {
1327 if (unlikely(GETSYSCTL_BY_NAME("kern.ipc.shmmni", ipc_shm.shmmni))) {
1328 do_ipc_shared_mem = 0;
src/plugin_freebsd.c
+1
@@ -27,6 +27,7 @@ static struct freebsd_module {
27 { .name = "vm.swap_info", .dim = "swap", .enabled = 1, .func = do_vm_swap_info },
28 { .name = "system.ram", .dim = "system_ram", .enabled = 1, .func = do_system_ram },
29 { .name = "vm.stats.vm.v_swappgs", .dim = "swap_io", .enabled = 1, .func = do_vm_stats_sys_v_swappgs },
30 + { .name = "kern.ipc.sem", .dim = "semaphores", .enabled = 1, .func = do_kern_ipc_sem },
31
32 // CPU metrics
33 { .name = "kern.cp_times", .dim = "cp_times", .enabled = 1, .func = do_kern_cp_times },
src/plugin_freebsd.h
+1
@@ -20,6 +20,7 @@ extern int do_vm_swap_info(int update_every, usec_t dt);
20 extern int do_system_ram(int update_every, usec_t dt);
21 extern int do_vm_stats_sys_v_swappgs(int update_every, usec_t dt);
22 extern int do_vm_stats_sys_v_pgfaults(int update_every, usec_t dt);
23 +extern int do_kern_ipc_sem(int update_every, usec_t dt);
24
25 extern int do_freebsd_sysctl_old(int update_every, usec_t dt);
26