@cryptotaxi247 / netdata-1 / commits / 6d80efc0f

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