Separate kern.ipc.msq module
Vladimir Kobal committed
Mar 9, 2017 at 19:09 UTC
6d80efc0fab95178dc35a1eae75286696fd8015f
3 files changed
+120
-80
src/freebsd_sysctl.c
+118
-80
@@ -1070,12 +1070,129 @@ int do_kern_ipc_shm(int update_every, usec_t dt) {
1070
return 0;
1071
}
1072
1073
+// --------------------------------------------------------------------------------------------------------------------
1074
+// kern.ipc.msq
1075
+
1076
+int do_kern_ipc_msq(int update_every, usec_t dt) {
1077
+ static int mib_msgmni[3] = {0, 0, 0}, mib_msqids[3] = {0, 0, 0};
1078
+ struct ipc_msq {
1079
+ int msgmni;
1080
+ collected_number queues;
1081
+ collected_number messages;
1082
+ collected_number usedsize;
1083
+ collected_number allocsize;
1084
+ } ipc_msq = {0, 0, 0, 0, 0};
1085
+
1086
+ if (unlikely(GETSYSCTL_SIMPLE("kern.ipc.msgmni", mib_msgmni, ipc_msq.msgmni))) {
1087
+ error("DISABLED: system.ipc_msq_queues chart");
1088
+ error("DISABLED: system.ipc_msq_messages chart");
1089
+ error("DISABLED: system.ipc_msq_size chart");
1090
+ error("DISABLED: kern.ipc.msg module");
1091
+ return 1;
1092
+ } else {
1093
+ static struct msqid_kernel *ipc_msq_data = NULL;
1094
+
1095
+ ipc_msq_data = reallocz(ipc_msq_data, sizeof(struct msqid_kernel) * ipc_msq.msgmni);
1096
+ if (unlikely(
1097
+ GETSYSCTL_WSIZE("kern.ipc.msqids", mib_msqids, ipc_msq_data, sizeof(struct msqid_kernel) * ipc_msq.msgmni))) {
1098
+ error("DISABLED: system.ipc_msq_queues chart");
1099
+ error("DISABLED: system.ipc_msq_messages chart");
1100
+ error("DISABLED: system.ipc_msq_size chart");
1101
+ error("DISABLED: kern.ipc.msg module");
1102
+ return 1;
1103
+ } else {
1104
+ int i;
1105
+
1106
+ for (i = 0; i < ipc_msq.msgmni; i++) {
1107
+ if (unlikely(ipc_msq_data[i].u.msg_qbytes != 0)) {
1108
+ ipc_msq.queues += 1;
1109
+ ipc_msq.messages += ipc_msq_data[i].u.msg_qnum;
1110
+ ipc_msq.usedsize += ipc_msq_data[i].u.msg_cbytes;
1111
+ ipc_msq.allocsize += ipc_msq_data[i].u.msg_qbytes;
1112
+ }
1113
+ }
1114
+
1115
+ // --------------------------------------------------------------------
1116
+
1117
+ static RRDSET *st_queues = NULL, *st_messages = NULL, *st_size = NULL;
1118
+ static RRDDIM *rd_queues = NULL, *rd_messages = NULL, *rd_allocated = NULL, *rd_used = NULL;
1119
+
1120
+ if (unlikely(!st_queues)) {
1121
+ st_queues = rrdset_create_localhost("system",
1122
+ "ipc_msq_queues",
1123
+ NULL,
1124
+ "ipc message queues",
1125
+ NULL,
1126
+ "Number of IPC Message Queues",
1127
+ "queues",
1128
+ 990,
1129
+ localhost->rrd_update_every,
1130
+ RRDSET_TYPE_AREA
1131
+ );
1132
+
1133
+ rd_queues = rrddim_add(st_queues, "queues", NULL, 1, 1, RRD_ALGORITHM_ABSOLUTE);
1134
+ }
1135
+ else rrdset_next(st_queues);
1136
+
1137
+ rrddim_set_by_pointer(st_queues, rd_queues, ipc_msq.queues);
1138
+ rrdset_done(st_queues);
1139
+
1140
+ // --------------------------------------------------------------------
1141
+
1142
+ if (unlikely(!st_messages)) {
1143
+ st_messages = rrdset_create_localhost("system",
1144
+ "ipc_msq_messages",
1145
+ NULL,
1146
+ "ipc message queues",
1147
+ NULL,
1148
+ "Number of Messages in IPC Message Queues",
1149
+ "messages",
1150
+ 1000,
1151
+ localhost->rrd_update_every,
1152
+ RRDSET_TYPE_AREA
1153
+ );
1154
+
1155
+ rd_messages = rrddim_add(st_messages, "messages", NULL, 1, 1, RRD_ALGORITHM_ABSOLUTE);
1156
+ }
1157
+ else rrdset_next(st_messages);
1158
+
1159
+ rrddim_set_by_pointer(st_messages, rd_messages, ipc_msq.messages);
1160
+ rrdset_done(st_messages);
1161
+
1162
+ // --------------------------------------------------------------------
1163
+
1164
+ if (unlikely(!st_size)) {
1165
+ st_size = rrdset_create_localhost("system",
1166
+ "ipc_msq_size",
1167
+ NULL,
1168
+ "ipc message queues",
1169
+ NULL,
1170
+ "Size of IPC Message Queues",
1171
+ "bytes",
1172
+ 1100,
1173
+ localhost->rrd_update_every,
1174
+ RRDSET_TYPE_LINE
1175
+ );
1176
+
1177
+ rd_allocated = rrddim_add(st_size, "allocated", NULL, 1, 1, RRD_ALGORITHM_ABSOLUTE);
1178
+ rd_used = rrddim_add(st_size, "used", NULL, 1, 1, RRD_ALGORITHM_ABSOLUTE);
1179
+ }
1180
+ else rrdset_next(st_size);
1181
+
1182
+ rrddim_set_by_pointer(st_size, rd_allocated, ipc_msq.allocsize);
1183
+ rrddim_set_by_pointer(st_size, rd_used, ipc_msq.usedsize);
1184
+ rrdset_done(st_size);
1185
+ }
1186
+ }
1187
+
1188
+ return 0;
1189
+}
1190
+
1191
// --------------------------------------------------------------------------------------------------------------------
1192
// old sources
1193
1194
int do_freebsd_sysctl_old(int update_every, usec_t dt) {
1195
static int do_disk_io = -1,
1078
- do_ipc_msg_queues = -1,
1196
do_netisr = -1, do_netisr_per_core = -1, do_bandwidth = -1,
1197
do_tcp_sockets = -1, do_tcp_packets = -1, do_tcp_errors = -1, do_tcp_handshake = -1,
1198
do_ecn = -1, do_tcpext_syscookies = -1, do_tcpext_ofo = -1, do_tcpext_connaborts = -1,
@@ -1087,7 +1204,6 @@ int do_freebsd_sysctl_old(int update_every, usec_t dt) {
1204
1205
if (unlikely(do_uptime == -1)) {
1206
do_disk_io = config_get_boolean("plugin:freebsd:sysctl", "stats for all disks", 1);
1090
- do_ipc_msg_queues = config_get_boolean("plugin:freebsd:sysctl", "ipc message queues", 1);
1207
do_netisr = config_get_boolean("plugin:freebsd:sysctl", "netisr", 1);
1208
do_netisr_per_core = config_get_boolean("plugin:freebsd:sysctl", "netisr per core", 1);
1209
do_bandwidth = config_get_boolean("plugin:freebsd:sysctl", "bandwidth", 1);
@@ -1155,16 +1271,6 @@ int do_freebsd_sysctl_old(int update_every, usec_t dt) {
1271
collected_number busy_time_ms;
1272
} prev_dstat;
1273
1158
- // NEEDED BY: do_ipc_msg_queues
1159
- struct ipc_msq {
1160
- int msgmni;
1161
- collected_number queues;
1162
- collected_number messages;
1163
- collected_number usedsize;
1164
- collected_number allocsize;
1165
- } ipc_msq = {0, 0, 0, 0, 0};
1166
- static struct msqid_kernel *ipc_msq_data = NULL;
1167
-
1274
// NEEDED BY: do_netisr, do_netisr_per_core
1275
size_t netisr_workstream_size;
1276
size_t netisr_work_size;
@@ -1402,74 +1508,6 @@ int do_freebsd_sysctl_old(int update_every, usec_t dt) {
1508
1509
// --------------------------------------------------------------------
1510
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;
1408
- error("DISABLED: system.ipc_msq_queues");
1409
- error("DISABLED: system.ipc_msq_messages");
1410
- error("DISABLED: system.ipc_msq_size");
1411
- } else {
1412
- ipc_msq_data = reallocz(ipc_msq_data, sizeof(struct msqid_kernel) * ipc_msq.msgmni);
1413
- if (unlikely(
1414
- getsysctl_by_name("kern.ipc.msqids", ipc_msq_data, sizeof(struct msqid_kernel) * ipc_msq.msgmni))) {
1415
- do_ipc_msg_queues = 0;
1416
- error("DISABLED: system.ipc_msq_queues");
1417
- error("DISABLED: system.ipc_msq_messages");
1418
- error("DISABLED: system.ipc_msq_size");
1419
- } else {
1420
- for (i = 0; i < ipc_msq.msgmni; i++) {
1421
- if (unlikely(ipc_msq_data[i].u.msg_qbytes != 0)) {
1422
- ipc_msq.queues += 1;
1423
- ipc_msq.messages += ipc_msq_data[i].u.msg_qnum;
1424
- ipc_msq.usedsize += ipc_msq_data[i].u.msg_cbytes;
1425
- ipc_msq.allocsize += ipc_msq_data[i].u.msg_qbytes;
1426
- }
1427
- }
1428
-
1429
- // --------------------------------------------------------------------
1430
-
1431
- st = rrdset_find_localhost("system.ipc_msq_queues");
1432
- if (unlikely(!st)) {
1433
- st = rrdset_create_localhost("system", "ipc_msq_queues", NULL, "ipc message queues", NULL, "Number of IPC Message Queues", "queues", 990, localhost->rrd_update_every, RRDSET_TYPE_AREA);
1434
- rrddim_add(st, "queues", NULL, 1, 1, RRD_ALGORITHM_ABSOLUTE);
1435
- }
1436
- else rrdset_next(st);
1437
-
1438
- rrddim_set(st, "queues", ipc_msq.queues);
1439
- rrdset_done(st);
1440
-
1441
- // --------------------------------------------------------------------
1442
-
1443
- st = rrdset_find_localhost("system.ipc_msq_messages");
1444
- if (unlikely(!st)) {
1445
- st = rrdset_create_localhost("system", "ipc_msq_messages", NULL, "ipc message queues", NULL, "Number of Messages in IPC Message Queues", "messages", 1000, localhost->rrd_update_every, RRDSET_TYPE_AREA);
1446
- rrddim_add(st, "messages", NULL, 1, 1, RRD_ALGORITHM_ABSOLUTE);
1447
- }
1448
- else rrdset_next(st);
1449
-
1450
- rrddim_set(st, "messages", ipc_msq.messages);
1451
- rrdset_done(st);
1452
-
1453
- // --------------------------------------------------------------------
1454
-
1455
- st = rrdset_find_localhost("system.ipc_msq_size");
1456
- if (unlikely(!st)) {
1457
- st = rrdset_create_localhost("system", "ipc_msq_size", NULL, "ipc message queues", NULL, "Size of IPC Message Queues", "bytes", 1100, localhost->rrd_update_every, RRDSET_TYPE_LINE);
1458
- rrddim_add(st, "allocated", NULL, 1, 1, RRD_ALGORITHM_ABSOLUTE);
1459
- rrddim_add(st, "used", NULL, 1, 1, RRD_ALGORITHM_ABSOLUTE);
1460
- }
1461
- else rrdset_next(st);
1462
-
1463
- rrddim_set(st, "allocated", ipc_msq.allocsize);
1464
- rrddim_set(st, "used", ipc_msq.usedsize);
1465
- rrdset_done(st);
1466
-
1467
- }
1468
- }
1469
- }
1470
-
1471
- // --------------------------------------------------------------------
1472
-
1511
if (likely(do_netisr || do_netisr_per_core)) {
1512
if (unlikely(GETSYSCTL_BY_NAME("kern.smp.cpus", ncpus))) {
1513
common_error = 1;
src/plugin_freebsd.c
+1
@@ -29,6 +29,7 @@ static struct freebsd_module {
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
+ { .name = "kern.ipc.msq", .dim = "message_queues", .enabled = 1, .func = do_kern_ipc_msq },
33
34
// CPU metrics
35
{ .name = "kern.cp_times", .dim = "cp_times", .enabled = 1, .func = do_kern_cp_times },
src/plugin_freebsd.h
+1
@@ -22,6 +22,7 @@ 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
+extern int do_kern_ipc_msq(int update_every, usec_t dt);
26
27
extern int do_freebsd_sysctl_old(int update_every, usec_t dt);
28