Separate kern.ipc.shm module
Vladimir Kobal committed
Mar 9, 2017 at 18:51 UTC
afb65dc134513bdc9220d332d534f8f53cedf434
3 files changed
+91
-59
src/freebsd_sysctl.c
+89
-59
@@ -982,12 +982,100 @@ int do_kern_ipc_sem(int update_every, usec_t dt) {
982
return 0;
983
}
984
985
+// --------------------------------------------------------------------------------------------------------------------
986
+// kern.ipc.shm
987
+
988
+int do_kern_ipc_shm(int update_every, usec_t dt) {
989
+ static int mib_shmmni[3] = {0, 0, 0}, mib_shmsegs[3] = {0, 0, 0};
990
+ struct ipc_shm {
991
+ u_long shmmni;
992
+ collected_number segs;
993
+ collected_number segsize;
994
+ } ipc_shm = {0, 0, 0};
995
+
996
+ if (unlikely(GETSYSCTL_SIMPLE("kern.ipc.shmmni", mib_shmmni, ipc_shm.shmmni))) {
997
+ error("DISABLED: system.ipc_shared_mem_segs chart");
998
+ error("DISABLED: system.ipc_shared_mem_size chart");
999
+ error("DISABLED: kern.ipc.shmmodule");
1000
+ return 1;
1001
+ } else {
1002
+ static struct shmid_kernel *ipc_shm_data = NULL;
1003
+
1004
+ ipc_shm_data = reallocz(ipc_shm_data, sizeof(struct shmid_kernel) * ipc_shm.shmmni);
1005
+ if (unlikely(
1006
+ GETSYSCTL_WSIZE("kern.ipc.shmsegs", mib_shmsegs, ipc_shm_data, sizeof(struct shmid_kernel) * ipc_shm.shmmni))) {
1007
+ error("DISABLED: system.ipc_shared_mem_segs chart");
1008
+ error("DISABLED: system.ipc_shared_mem_size chart");
1009
+ error("DISABLED: kern.ipc.shmmodule");
1010
+ return 1;
1011
+ } else {
1012
+ int i;
1013
+
1014
+ for (i = 0; i < ipc_shm.shmmni; i++) {
1015
+ if (unlikely(ipc_shm_data[i].u.shm_perm.mode & 0x0800)) {
1016
+ ipc_shm.segs += 1;
1017
+ ipc_shm.segsize += ipc_shm_data[i].u.shm_segsz;
1018
+ }
1019
+ }
1020
+
1021
+ // --------------------------------------------------------------------
1022
+
1023
+ static RRDSET *st_segs = NULL, *st_size = NULL;
1024
+ static RRDDIM *rd_segments = NULL, *rd_allocated = NULL;
1025
+
1026
+ if (unlikely(!st_segs)) {
1027
+ st_segs = rrdset_create_localhost("system",
1028
+ "ipc_shared_mem_segs",
1029
+ NULL,
1030
+ "ipc shared memory",
1031
+ NULL,
1032
+ "IPC Shared Memory Segments",
1033
+ "segments",
1034
+ 1000,
1035
+ localhost->rrd_update_every,
1036
+ RRDSET_TYPE_AREA
1037
+ );
1038
+
1039
+ rd_segments = rrddim_add(st_segs, "segments", NULL, 1, 1, RRD_ALGORITHM_ABSOLUTE);
1040
+ }
1041
+ else rrdset_next(st_segs);
1042
+
1043
+ rrddim_set_by_pointer(st_segs, rd_segments, ipc_shm.segs);
1044
+ rrdset_done(st_segs);
1045
+
1046
+ // --------------------------------------------------------------------
1047
+
1048
+ if (unlikely(!st_size)) {
1049
+ st_size = rrdset_create_localhost("system",
1050
+ "ipc_shared_mem_size",
1051
+ NULL,
1052
+ "ipc shared memory",
1053
+ NULL,
1054
+ "IPC Shared Memory Segments Size",
1055
+ "kilobytes",
1056
+ 1000,
1057
+ localhost->rrd_update_every,
1058
+ RRDSET_TYPE_AREA
1059
+ );
1060
+
1061
+ rd_allocated = rrddim_add(st_size, "allocated", NULL, 1, KILO_FACTOR, RRD_ALGORITHM_ABSOLUTE);
1062
+ }
1063
+ else rrdset_next(st_size);
1064
+
1065
+ rrddim_set_by_pointer(st_size, rd_allocated, ipc_shm.segsize);
1066
+ rrdset_done(st_size);
1067
+ }
1068
+ }
1069
+
1070
+ return 0;
1071
+}
1072
+
1073
// --------------------------------------------------------------------------------------------------------------------
1074
// old sources
1075
1076
int do_freebsd_sysctl_old(int update_every, usec_t dt) {
1077
static int do_disk_io = -1,
990
- do_ipc_shared_mem = -1, do_ipc_msg_queues = -1,
1078
+ do_ipc_msg_queues = -1,
1079
do_netisr = -1, do_netisr_per_core = -1, do_bandwidth = -1,
1080
do_tcp_sockets = -1, do_tcp_packets = -1, do_tcp_errors = -1, do_tcp_handshake = -1,
1081
do_ecn = -1, do_tcpext_syscookies = -1, do_tcpext_ofo = -1, do_tcpext_connaborts = -1,
@@ -999,7 +1087,6 @@ int do_freebsd_sysctl_old(int update_every, usec_t dt) {
1087
1088
if (unlikely(do_uptime == -1)) {
1089
do_disk_io = config_get_boolean("plugin:freebsd:sysctl", "stats for all disks", 1);
1002
- do_ipc_shared_mem = config_get_boolean("plugin:freebsd:sysctl", "ipc shared memory", 1);
1090
do_ipc_msg_queues = config_get_boolean("plugin:freebsd:sysctl", "ipc message queues", 1);
1091
do_netisr = config_get_boolean("plugin:freebsd:sysctl", "netisr", 1);
1092
do_netisr_per_core = config_get_boolean("plugin:freebsd:sysctl", "netisr per core", 1);
@@ -1068,14 +1155,6 @@ int do_freebsd_sysctl_old(int update_every, usec_t dt) {
1155
collected_number busy_time_ms;
1156
} prev_dstat;
1157
1071
- // NEEDED BY: do_ipc_shared_mem
1072
- struct ipc_shm {
1073
- u_long shmmni;
1074
- collected_number segs;
1075
- collected_number segsize;
1076
- } ipc_shm = {0, 0, 0};
1077
- static struct shmid_kernel *ipc_shm_data = NULL;
1078
-
1158
// NEEDED BY: do_ipc_msg_queues
1159
struct ipc_msq {
1160
int msgmni;
@@ -1323,55 +1402,6 @@ int do_freebsd_sysctl_old(int update_every, usec_t dt) {
1402
1403
// --------------------------------------------------------------------
1404
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;
1329
- error("DISABLED: system.ipc_shared_mem_segs");
1330
- error("DISABLED: system.ipc_shared_mem_size");
1331
- } else {
1332
- ipc_shm_data = reallocz(ipc_shm_data, sizeof(struct shmid_kernel) * ipc_shm.shmmni);
1333
- if (unlikely(
1334
- getsysctl_by_name("kern.ipc.shmsegs", ipc_shm_data, sizeof(struct shmid_kernel) * ipc_shm.shmmni))) {
1335
- do_ipc_shared_mem = 0;
1336
- error("DISABLED: system.ipc_shared_mem_segs");
1337
- error("DISABLED: system.ipc_shared_mem_size");
1338
- } else {
1339
- for (i = 0; i < ipc_shm.shmmni; i++) {
1340
- if (unlikely(ipc_shm_data[i].u.shm_perm.mode & 0x0800)) {
1341
- ipc_shm.segs += 1;
1342
- ipc_shm.segsize += ipc_shm_data[i].u.shm_segsz;
1343
- }
1344
- }
1345
-
1346
- // --------------------------------------------------------------------
1347
-
1348
- st = rrdset_find_localhost("system.ipc_shared_mem_segs");
1349
- if (unlikely(!st)) {
1350
- st = rrdset_create_localhost("system", "ipc_shared_mem_segs", NULL, "ipc shared memory", NULL, "IPC Shared Memory Segments", "segments", 1000, localhost->rrd_update_every, RRDSET_TYPE_AREA);
1351
- rrddim_add(st, "segments", NULL, 1, 1, RRD_ALGORITHM_ABSOLUTE);
1352
- }
1353
- else rrdset_next(st);
1354
-
1355
- rrddim_set(st, "segments", ipc_shm.segs);
1356
- rrdset_done(st);
1357
-
1358
- // --------------------------------------------------------------------
1359
-
1360
- st = rrdset_find_localhost("system.ipc_shared_mem_size");
1361
- if (unlikely(!st)) {
1362
- st = rrdset_create_localhost("system", "ipc_shared_mem_size", NULL, "ipc shared memory", NULL, "IPC Shared Memory Segments Size", "kilobytes", 1000, localhost->rrd_update_every, RRDSET_TYPE_AREA);
1363
- rrddim_add(st, "allocated", NULL, 1, 1024, RRD_ALGORITHM_ABSOLUTE);
1364
- }
1365
- else rrdset_next(st);
1366
-
1367
- rrddim_set(st, "allocated", ipc_shm.segsize);
1368
- rrdset_done(st);
1369
- }
1370
- }
1371
- }
1372
-
1373
- // --------------------------------------------------------------------
1374
-
1405
if (likely(do_ipc_msg_queues)) {
1406
if (unlikely(GETSYSCTL_BY_NAME("kern.ipc.msgmni", ipc_msq.msgmni))) {
1407
do_ipc_msg_queues = 0;
src/plugin_freebsd.c
+1
@@ -28,6 +28,7 @@ static struct freebsd_module {
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
+ { .name = "kern.ipc.shm", .dim = "shared_memory", .enabled = 1, .func = do_kern_ipc_shm },
32
33
// CPU metrics
34
{ .name = "kern.cp_times", .dim = "cp_times", .enabled = 1, .func = do_kern_cp_times },
src/plugin_freebsd.h
+1
@@ -21,6 +21,7 @@ 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
+extern int do_kern_ipc_shm(int update_every, usec_t dt);
25
26
extern int do_freebsd_sysctl_old(int update_every, usec_t dt);
27