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