summaryrefslogtreecommitdiffstats
path: root/collectors/cgroups.plugin/sys_fs_cgroup.c
diff options
context:
space:
mode:
Diffstat (limited to 'collectors/cgroups.plugin/sys_fs_cgroup.c')
-rw-r--r--collectors/cgroups.plugin/sys_fs_cgroup.c377
1 files changed, 117 insertions, 260 deletions
diff --git a/collectors/cgroups.plugin/sys_fs_cgroup.c b/collectors/cgroups.plugin/sys_fs_cgroup.c
index 330562173..8f7548286 100644
--- a/collectors/cgroups.plugin/sys_fs_cgroup.c
+++ b/collectors/cgroups.plugin/sys_fs_cgroup.c
@@ -37,6 +37,8 @@
// ----------------------------------------------------------------------------
// cgroup globals
+static char cgroup_chart_id_prefix[] = "cgroup_";
+
static int is_inside_k8s = 0;
static long system_page_size = 4096; // system will be queried via sysconf() in configuration()
@@ -151,14 +153,15 @@ static enum cgroups_systemd_setting cgroups_detect_systemd(const char *exec)
char buf[MAXSIZE_PROC_CMDLINE];
char *begin, *end;
- FILE *f = mypopen(exec, &command_pid);
+ FILE *fp_child_input;
+ FILE *fp_child_output = netdata_popen(exec, &command_pid, &fp_child_input);
- if (!f)
+ if (!fp_child_output)
return retval;
fd_set rfds;
struct timeval timeout;
- int fd = fileno(f);
+ int fd = fileno(fp_child_output);
int ret = -1;
FD_ZERO(&rfds);
@@ -175,7 +178,7 @@ static enum cgroups_systemd_setting cgroups_detect_systemd(const char *exec)
} else if (ret == 0) {
info("Cannot get the output of \"%s\" within %"PRId64" seconds", exec, (int64_t)timeout.tv_sec);
} else {
- while (fgets(buf, MAXSIZE_PROC_CMDLINE, f) != NULL) {
+ while (fgets(buf, MAXSIZE_PROC_CMDLINE, fp_child_output) != NULL) {
if ((begin = strstr(buf, SYSTEMD_HIERARCHY_STRING))) {
end = begin = begin + strlen(SYSTEMD_HIERARCHY_STRING);
if (!*begin)
@@ -194,7 +197,7 @@ static enum cgroups_systemd_setting cgroups_detect_systemd(const char *exec)
}
}
- if (mypclose(f, command_pid))
+ if (netdata_pclose(fp_child_input, fp_child_output, command_pid))
return SYSTEMD_CGROUP_ERR;
return retval;
@@ -208,18 +211,19 @@ static enum cgroups_type cgroups_try_detect_version()
int cgroups2_available = 0;
// 1. check if cgroups2 available on system at all
- FILE *f = mypopen("grep cgroup /proc/filesystems", &command_pid);
- if (!f) {
+ FILE *fp_child_input;
+ FILE *fp_child_output = netdata_popen("grep cgroup /proc/filesystems", &command_pid, &fp_child_input);
+ if (!fp_child_output) {
error("popen failed");
return CGROUPS_AUTODETECT_FAIL;
}
- while (fgets(buf, MAXSIZE_PROC_CMDLINE, f) != NULL) {
+ while (fgets(buf, MAXSIZE_PROC_CMDLINE, fp_child_output) != NULL) {
if (strstr(buf, "cgroup2")) {
cgroups2_available = 1;
break;
}
}
- if(mypclose(f, command_pid))
+ if(netdata_pclose(fp_child_input, fp_child_output, command_pid))
return CGROUPS_AUTODETECT_FAIL;
if(!cgroups2_available)
@@ -252,19 +256,19 @@ static enum cgroups_type cgroups_try_detect_version()
// 4. if we are unified as on Fedora (default cgroups2 only mode)
// check kernel command line flag that can override that setting
- f = fopen("/proc/cmdline", "r");
- if (!f) {
+ FILE *fp = fopen("/proc/cmdline", "r");
+ if (!fp) {
error("Error reading kernel boot commandline parameters");
return CGROUPS_AUTODETECT_FAIL;
}
- if (!fgets(buf, MAXSIZE_PROC_CMDLINE, f)) {
+ if (!fgets(buf, MAXSIZE_PROC_CMDLINE, fp)) {
error("couldn't read all cmdline params into buffer");
- fclose(f);
+ fclose(fp);
return CGROUPS_AUTODETECT_FAIL;
}
- fclose(f);
+ fclose(fp);
if (strstr(buf, "systemd.unified_cgroup_hierarchy=0")) {
info("cgroups v2 (unified cgroups) is available but are disabled on this system.");
@@ -855,16 +859,16 @@ struct cgroup {
char *filename_cpu_cfs_quota;
unsigned long long cpu_cfs_quota;
- RRDSETVAR *chart_var_cpu_limit;
+ const RRDSETVAR_ACQUIRED *chart_var_cpu_limit;
NETDATA_DOUBLE prev_cpu_usage;
char *filename_memory_limit;
unsigned long long memory_limit;
- RRDSETVAR *chart_var_memory_limit;
+ const RRDSETVAR_ACQUIRED *chart_var_memory_limit;
char *filename_memoryswap_limit;
unsigned long long memoryswap_limit;
- RRDSETVAR *chart_var_memoryswap_limit;
+ const RRDSETVAR_ACQUIRED *chart_var_memoryswap_limit;
// services
RRDDIM *rd_cpu;
@@ -1443,7 +1447,6 @@ static inline void cgroup2_read_pressure(struct pressure *res) {
return;
}
-
res->some.share_time.value10 = strtod(procfile_lineword(ff, 0, 2), NULL);
res->some.share_time.value60 = strtod(procfile_lineword(ff, 0, 4), NULL);
res->some.share_time.value300 = strtod(procfile_lineword(ff, 0, 6), NULL);
@@ -1663,16 +1666,16 @@ static inline void read_cgroup_network_interfaces(struct cgroup *cg) {
}
debug(D_CGROUP, "executing cgroup_identifier %s --cgroup '%s' for cgroup '%s'", cgroups_network_interface_script, cgroup_identifier, cg->id);
- FILE *fp;
- (void)mypopen_raw_default_flags_and_environment(&cgroup_pid, &fp, cgroups_network_interface_script, "--cgroup", cgroup_identifier);
- if(!fp) {
+ FILE *fp_child_input, *fp_child_output;
+ (void)netdata_popen_raw_default_flags_and_environment(&cgroup_pid, &fp_child_input, &fp_child_output, cgroups_network_interface_script, "--cgroup", cgroup_identifier);
+ if(!fp_child_output) {
error("CGROUP: cannot popen(%s --cgroup \"%s\", \"r\").", cgroups_network_interface_script, cgroup_identifier);
return;
}
char *s;
char buffer[CGROUP_NETWORK_INTERFACE_MAX_LINE + 1];
- while((s = fgets(buffer, CGROUP_NETWORK_INTERFACE_MAX_LINE, fp))) {
+ while((s = fgets(buffer, CGROUP_NETWORK_INTERFACE_MAX_LINE, fp_child_output))) {
trim(s);
if(*s && *s != '\n') {
@@ -1707,7 +1710,7 @@ static inline void read_cgroup_network_interfaces(struct cgroup *cg) {
}
}
- mypclose(fp, cgroup_pid);
+ netdata_pclose(fp_child_input, fp_child_output, cgroup_pid);
// debug(D_CGROUP, "closed cgroup_identifier for cgroup '%s'", cg->id);
}
@@ -1869,9 +1872,9 @@ static inline void discovery_rename_cgroup(struct cgroup *cg) {
debug(D_CGROUP, "executing command %s \"%s\" for cgroup '%s'", cgroups_rename_script, cg->intermediate_id, cg->chart_id);
pid_t cgroup_pid;
- FILE *fp;
- (void)mypopen_raw_default_flags_and_environment(&cgroup_pid, &fp, cgroups_rename_script, cg->id, cg->intermediate_id);
- if (!fp) {
+ FILE *fp_child_input, *fp_child_output;
+ (void)netdata_popen_raw_default_flags_and_environment(&cgroup_pid, &fp_child_input, &fp_child_output, cgroups_rename_script, cg->id, cg->intermediate_id);
+ if (!fp_child_output) {
error("CGROUP: cannot popen(%s \"%s\", \"r\").", cgroups_rename_script, cg->intermediate_id);
cg->pending_renames = 0;
cg->processed = 1;
@@ -1879,8 +1882,8 @@ static inline void discovery_rename_cgroup(struct cgroup *cg) {
}
char buffer[CGROUP_CHARTID_LINE_MAX + 1];
- char *new_name = fgets(buffer, CGROUP_CHARTID_LINE_MAX, fp);
- int exit_code = mypclose(fp, cgroup_pid);
+ char *new_name = fgets(buffer, CGROUP_CHARTID_LINE_MAX, fp_child_output);
+ int exit_code = netdata_pclose(fp_child_input, fp_child_output, cgroup_pid);
switch (exit_code) {
case 0:
@@ -2682,7 +2685,7 @@ static inline void discovery_process_cgroup(struct cgroup *cg) {
cg->processed = 1;
- if (strlen(cg->chart_id) >= RRD_ID_LENGTH_MAX) {
+ if ((strlen(cg->chart_id) + strlen(cgroup_chart_id_prefix)) >= RRD_ID_LENGTH_MAX) {
info("cgroup '%s' (chart id '%s') disabled because chart_id exceeds the limit (RRD_ID_LENGTH_MAX)", cg->id, cg->chart_id);
return;
}
@@ -2843,57 +2846,45 @@ void update_systemd_services_charts(
// create the charts
- if(likely(do_cpu)) {
- if(unlikely(!st_cpu)) {
- char title[CHART_TITLE_MAX + 1];
- snprintfz(title, CHART_TITLE_MAX, "Systemd Services CPU utilization (100%% = 1 core)");
-
- st_cpu = rrdset_create_localhost(
- "services"
- , "cpu"
- , NULL
- , "cpu"
- , "services.cpu"
- , title
- , "percentage"
- , PLUGIN_CGROUPS_NAME
- , PLUGIN_CGROUPS_MODULE_SYSTEMD_NAME
- , NETDATA_CHART_PRIO_CGROUPS_SYSTEMD
- , update_every
- , RRDSET_TYPE_STACKED
- );
-
- }
- else
- rrdset_next(st_cpu);
+ if (unlikely(do_cpu && !st_cpu)) {
+ char title[CHART_TITLE_MAX + 1];
+ snprintfz(title, CHART_TITLE_MAX, "Systemd Services CPU utilization (100%% = 1 core)");
+
+ st_cpu = rrdset_create_localhost(
+ "services"
+ , "cpu"
+ , NULL
+ , "cpu"
+ , "services.cpu"
+ , title
+ , "percentage"
+ , PLUGIN_CGROUPS_NAME
+ , PLUGIN_CGROUPS_MODULE_SYSTEMD_NAME
+ , NETDATA_CHART_PRIO_CGROUPS_SYSTEMD
+ , update_every
+ , RRDSET_TYPE_STACKED
+ );
}
- if(likely(do_mem_usage)) {
- if(unlikely(!st_mem_usage)) {
-
- st_mem_usage = rrdset_create_localhost(
- "services"
- , "mem_usage"
- , NULL
- , "mem"
- , "services.mem_usage"
- , "Systemd Services Used Memory"
- , "MiB"
- , PLUGIN_CGROUPS_NAME
- , PLUGIN_CGROUPS_MODULE_SYSTEMD_NAME
- , NETDATA_CHART_PRIO_CGROUPS_SYSTEMD + 10
- , update_every
- , RRDSET_TYPE_STACKED
- );
-
- }
- else
- rrdset_next(st_mem_usage);
+ if (unlikely(do_mem_usage && !st_mem_usage)) {
+ st_mem_usage = rrdset_create_localhost(
+ "services"
+ , "mem_usage"
+ , NULL
+ , "mem"
+ , "services.mem_usage"
+ , "Systemd Services Used Memory"
+ , "MiB"
+ , PLUGIN_CGROUPS_NAME
+ , PLUGIN_CGROUPS_MODULE_SYSTEMD_NAME
+ , NETDATA_CHART_PRIO_CGROUPS_SYSTEMD + 10
+ , update_every
+ , RRDSET_TYPE_STACKED
+ );
}
if(likely(do_mem_detailed)) {
if(unlikely(!st_mem_detailed_rss)) {
-
st_mem_detailed_rss = rrdset_create_localhost(
"services"
, "mem_rss"
@@ -2908,13 +2899,9 @@ void update_systemd_services_charts(
, update_every
, RRDSET_TYPE_STACKED
);
-
}
- else
- rrdset_next(st_mem_detailed_rss);
if(unlikely(!st_mem_detailed_mapped)) {
-
st_mem_detailed_mapped = rrdset_create_localhost(
"services"
, "mem_mapped"
@@ -2929,13 +2916,9 @@ void update_systemd_services_charts(
, update_every
, RRDSET_TYPE_STACKED
);
-
}
- else
- rrdset_next(st_mem_detailed_mapped);
if(unlikely(!st_mem_detailed_cache)) {
-
st_mem_detailed_cache = rrdset_create_localhost(
"services"
, "mem_cache"
@@ -2950,13 +2933,9 @@ void update_systemd_services_charts(
, update_every
, RRDSET_TYPE_STACKED
);
-
}
- else
- rrdset_next(st_mem_detailed_cache);
if(unlikely(!st_mem_detailed_writeback)) {
-
st_mem_detailed_writeback = rrdset_create_localhost(
"services"
, "mem_writeback"
@@ -2973,11 +2952,8 @@ void update_systemd_services_charts(
);
}
- else
- rrdset_next(st_mem_detailed_writeback);
if(unlikely(!st_mem_detailed_pgfault)) {
-
st_mem_detailed_pgfault = rrdset_create_localhost(
"services"
, "mem_pgfault"
@@ -2993,11 +2969,8 @@ void update_systemd_services_charts(
, RRDSET_TYPE_STACKED
);
}
- else
- rrdset_next(st_mem_detailed_pgfault);
if(unlikely(!st_mem_detailed_pgmajfault)) {
-
st_mem_detailed_pgmajfault = rrdset_create_localhost(
"services"
, "mem_pgmajfault"
@@ -3012,13 +2985,9 @@ void update_systemd_services_charts(
, update_every
, RRDSET_TYPE_STACKED
);
-
}
- else
- rrdset_next(st_mem_detailed_pgmajfault);
if(unlikely(!st_mem_detailed_pgpgin)) {
-
st_mem_detailed_pgpgin = rrdset_create_localhost(
"services"
, "mem_pgpgin"
@@ -3035,11 +3004,8 @@ void update_systemd_services_charts(
);
}
- else
- rrdset_next(st_mem_detailed_pgpgin);
if(unlikely(!st_mem_detailed_pgpgout)) {
-
st_mem_detailed_pgpgout = rrdset_create_localhost(
"services"
, "mem_pgpgout"
@@ -3054,61 +3020,45 @@ void update_systemd_services_charts(
, update_every
, RRDSET_TYPE_STACKED
);
-
}
- else
- rrdset_next(st_mem_detailed_pgpgout);
}
- if(likely(do_mem_failcnt)) {
- if(unlikely(!st_mem_failcnt)) {
-
- st_mem_failcnt = rrdset_create_localhost(
- "services"
- , "mem_failcnt"
- , NULL
- , "mem"
- , "services.mem_failcnt"
- , "Systemd Services Memory Limit Failures"
- , "failures"
- , PLUGIN_CGROUPS_NAME
- , PLUGIN_CGROUPS_MODULE_SYSTEMD_NAME
- , NETDATA_CHART_PRIO_CGROUPS_SYSTEMD + 110
- , update_every
- , RRDSET_TYPE_STACKED
- );
-
- }
- else
- rrdset_next(st_mem_failcnt);
+ if(unlikely(do_mem_failcnt && !st_mem_failcnt)) {
+ st_mem_failcnt = rrdset_create_localhost(
+ "services"
+ , "mem_failcnt"
+ , NULL
+ , "mem"
+ , "services.mem_failcnt"
+ , "Systemd Services Memory Limit Failures"
+ , "failures"
+ , PLUGIN_CGROUPS_NAME
+ , PLUGIN_CGROUPS_MODULE_SYSTEMD_NAME
+ , NETDATA_CHART_PRIO_CGROUPS_SYSTEMD + 110
+ , update_every
+ , RRDSET_TYPE_STACKED
+ );
}
- if(likely(do_swap_usage)) {
- if(unlikely(!st_swap_usage)) {
-
- st_swap_usage = rrdset_create_localhost(
- "services"
- , "swap_usage"
- , NULL
- , "swap"
- , "services.swap_usage"
- , "Systemd Services Swap Memory Used"
- , "MiB"
- , PLUGIN_CGROUPS_NAME
- , PLUGIN_CGROUPS_MODULE_SYSTEMD_NAME
- , NETDATA_CHART_PRIO_CGROUPS_SYSTEMD + 100
- , update_every
- , RRDSET_TYPE_STACKED
- );
-
- }
- else
- rrdset_next(st_swap_usage);
+ if (do_swap_usage && !st_swap_usage) {
+ st_swap_usage = rrdset_create_localhost(
+ "services"
+ , "swap_usage"
+ , NULL
+ , "swap"
+ , "services.swap_usage"
+ , "Systemd Services Swap Memory Used"
+ , "MiB"
+ , PLUGIN_CGROUPS_NAME
+ , PLUGIN_CGROUPS_MODULE_SYSTEMD_NAME
+ , NETDATA_CHART_PRIO_CGROUPS_SYSTEMD + 100
+ , update_every
+ , RRDSET_TYPE_STACKED
+ );
}
if(likely(do_io)) {
if(unlikely(!st_io_read)) {
-
st_io_read = rrdset_create_localhost(
"services"
, "io_read"
@@ -3123,13 +3073,9 @@ void update_systemd_services_charts(
, update_every
, RRDSET_TYPE_STACKED
);
-
}
- else
- rrdset_next(st_io_read);
if(unlikely(!st_io_write)) {
-
st_io_write = rrdset_create_localhost(
"services"
, "io_write"
@@ -3144,15 +3090,11 @@ void update_systemd_services_charts(
, update_every
, RRDSET_TYPE_STACKED
);
-
}
- else
- rrdset_next(st_io_write);
}
if(likely(do_io_ops)) {
if(unlikely(!st_io_serviced_read)) {
-
st_io_serviced_read = rrdset_create_localhost(
"services"
, "io_ops_read"
@@ -3167,13 +3109,9 @@ void update_systemd_services_charts(
, update_every
, RRDSET_TYPE_STACKED
);
-
}
- else
- rrdset_next(st_io_serviced_read);
if(unlikely(!st_io_serviced_write)) {
-
st_io_serviced_write = rrdset_create_localhost(
"services"
, "io_ops_write"
@@ -3188,10 +3126,7 @@ void update_systemd_services_charts(
, update_every
, RRDSET_TYPE_STACKED
);
-
}
- else
- rrdset_next(st_io_serviced_write);
}
if(likely(do_throttle_io)) {
@@ -3213,11 +3148,8 @@ void update_systemd_services_charts(
);
}
- else
- rrdset_next(st_throttle_io_read);
if(unlikely(!st_throttle_io_write)) {
-
st_throttle_io_write = rrdset_create_localhost(
"services"
, "throttle_io_write"
@@ -3232,15 +3164,11 @@ void update_systemd_services_charts(
, update_every
, RRDSET_TYPE_STACKED
);
-
}
- else
- rrdset_next(st_throttle_io_write);
}
if(likely(do_throttle_ops)) {
if(unlikely(!st_throttle_ops_read)) {
-
st_throttle_ops_read = rrdset_create_localhost(
"services"
, "throttle_io_ops_read"
@@ -3255,13 +3183,9 @@ void update_systemd_services_charts(
, update_every
, RRDSET_TYPE_STACKED
);
-
}
- else
- rrdset_next(st_throttle_ops_read);
if(unlikely(!st_throttle_ops_write)) {
-
st_throttle_ops_write = rrdset_create_localhost(
"services"
, "throttle_io_ops_write"
@@ -3276,15 +3200,11 @@ void update_systemd_services_charts(
, update_every
, RRDSET_TYPE_STACKED
);
-
}
- else
- rrdset_next(st_throttle_ops_write);
}
if(likely(do_queued_ops)) {
if(unlikely(!st_queued_ops_read)) {
-
st_queued_ops_read = rrdset_create_localhost(
"services"
, "queued_io_ops_read"
@@ -3299,10 +3219,7 @@ void update_systemd_services_charts(
, update_every
, RRDSET_TYPE_STACKED
);
-
}
- else
- rrdset_next(st_queued_ops_read);
if(unlikely(!st_queued_ops_write)) {
@@ -3320,15 +3237,11 @@ void update_systemd_services_charts(
, update_every
, RRDSET_TYPE_STACKED
);
-
}
- else
- rrdset_next(st_queued_ops_write);
}
if(likely(do_merged_ops)) {
if(unlikely(!st_merged_ops_read)) {
-
st_merged_ops_read = rrdset_create_localhost(
"services"
, "merged_io_ops_read"
@@ -3343,13 +3256,9 @@ void update_systemd_services_charts(
, update_every
, RRDSET_TYPE_STACKED
);
-
}
- else
- rrdset_next(st_merged_ops_read);
if(unlikely(!st_merged_ops_write)) {
-
st_merged_ops_write = rrdset_create_localhost(
"services"
, "merged_io_ops_write"
@@ -3364,10 +3273,7 @@ void update_systemd_services_charts(
, update_every
, RRDSET_TYPE_STACKED
);
-
}
- else
- rrdset_next(st_merged_ops_write);
}
// update the values
@@ -3595,7 +3501,7 @@ static inline char *cgroup_chart_type(char *buffer, const char *id, size_t len)
if(id[0] == '\0' || (id[0] == '/' && id[1] == '\0'))
strncpy(buffer, "cgroup_root", len);
else
- snprintfz(buffer, len, "cgroup_%s", id);
+ snprintfz(buffer, len, "%s%s", cgroup_chart_id_prefix, id);
netdata_fix_chart_id(buffer);
return buffer;
@@ -3706,10 +3612,10 @@ cpu_limits2_err:
}
}
-static inline int update_memory_limits(char **filename, RRDSETVAR **chart_var, unsigned long long *value, const char *chart_var_name, struct cgroup *cg) {
+static inline int update_memory_limits(char **filename, const RRDSETVAR_ACQUIRED **chart_var, unsigned long long *value, const char *chart_var_name, struct cgroup *cg) {
if(*filename) {
if(unlikely(!*chart_var)) {
- *chart_var = rrdsetvar_custom_chart_variable_create(cg->st_mem_usage, chart_var_name);
+ *chart_var = rrdsetvar_custom_chart_variable_add_and_acquire(cg->st_mem_usage, chart_var_name);
if(!*chart_var) {
error("Cannot create cgroup %s chart variable '%s'. Will not update its limit anymore.", cg->id, chart_var_name);
freez(*filename);
@@ -3725,7 +3631,7 @@ static inline int update_memory_limits(char **filename, RRDSETVAR **chart_var, u
*filename = NULL;
}
else {
- rrdsetvar_custom_chart_variable_set(*chart_var, (NETDATA_DOUBLE)(*value / (1024 * 1024)));
+ rrdsetvar_custom_chart_variable_set(cg->st_mem_usage, *chart_var, (NETDATA_DOUBLE)(*value / (1024 * 1024)));
return 1;
}
} else {
@@ -3740,11 +3646,11 @@ static inline int update_memory_limits(char **filename, RRDSETVAR **chart_var, u
char *s = "max\n\0";
if(strcmp(s, buffer) == 0){
*value = UINT64_MAX;
- rrdsetvar_custom_chart_variable_set(*chart_var, (NETDATA_DOUBLE)(*value / (1024 * 1024)));
+ rrdsetvar_custom_chart_variable_set(cg->st_mem_usage, *chart_var, (NETDATA_DOUBLE)(*value / (1024 * 1024)));
return 1;
}
*value = str2ull(buffer);
- rrdsetvar_custom_chart_variable_set(*chart_var, (NETDATA_DOUBLE)(*value / (1024 * 1024)));
+ rrdsetvar_custom_chart_variable_set(cg->st_mem_usage, *chart_var, (NETDATA_DOUBLE)(*value / (1024 * 1024)));
return 1;
}
}
@@ -3824,8 +3730,6 @@ void update_cgroup_charts(int update_every) {
rrddim_add(cg->st_cpu, "system", NULL, 100, 1000000, RRD_ALGORITHM_INCREMENTAL);
}
}
- else
- rrdset_next(cg->st_cpu);
rrddim_set(cg->st_cpu, "user", cg->cpuacct_stat.user);
rrddim_set(cg->st_cpu, "system", cg->cpuacct_stat.system);
@@ -3841,7 +3745,7 @@ void update_cgroup_charts(int update_every) {
}
if(unlikely(!cg->chart_var_cpu_limit)) {
- cg->chart_var_cpu_limit = rrdsetvar_custom_chart_variable_create(cg->st_cpu, "cpu_limit");
+ cg->chart_var_cpu_limit = rrdsetvar_custom_chart_variable_add_and_acquire(cg->st_cpu, "cpu_limit");
if(!cg->chart_var_cpu_limit) {
error("Cannot create cgroup %s chart variable 'cpu_limit'. Will not update its limit anymore.", cg->id);
if(cg->filename_cpuset_cpus) freez(cg->filename_cpuset_cpus);
@@ -3866,8 +3770,6 @@ void update_cgroup_charts(int update_every) {
value = (NETDATA_DOUBLE)cg->cpuset_cpus * 100;
}
if(likely(value)) {
- rrdsetvar_custom_chart_variable_set(cg->chart_var_cpu_limit, value);
-
if(unlikely(!cg->st_cpu_limit)) {
snprintfz(title, CHART_TITLE_MAX, "CPU Usage within the limits");
@@ -3894,8 +3796,6 @@ void update_cgroup_charts(int update_every) {
rrddim_add(cg->st_cpu_limit, "used", NULL, 1, 1000000, RRD_ALGORITHM_ABSOLUTE);
cg->prev_cpu_usage = (NETDATA_DOUBLE)(cg->cpuacct_stat.user + cg->cpuacct_stat.system) * 100;
}
- else
- rrdset_next(cg->st_cpu_limit);
NETDATA_DOUBLE cpu_usage = 0;
cpu_usage = (NETDATA_DOUBLE)(cg->cpuacct_stat.user + cg->cpuacct_stat.system) * 100;
@@ -3907,14 +3807,15 @@ void update_cgroup_charts(int update_every) {
cg->prev_cpu_usage = cpu_usage;
+ rrdsetvar_custom_chart_variable_set(cg->st_cpu, cg->chart_var_cpu_limit, value);
rrdset_done(cg->st_cpu_limit);
}
else {
- rrdsetvar_custom_chart_variable_set(cg->chart_var_cpu_limit, NAN);
if(unlikely(cg->st_cpu_limit)) {
rrdset_is_obsolete(cg->st_cpu_limit);
cg->st_cpu_limit = NULL;
}
+ rrdsetvar_custom_chart_variable_set(cg->st_cpu, cg->chart_var_cpu_limit, NAN);
}
}
}
@@ -3942,7 +3843,6 @@ void update_cgroup_charts(int update_every) {
rrdset_update_rrdlabels(cg->st_cpu_nr_throttled, cg->chart_labels);
rrddim_add(cg->st_cpu_nr_throttled, "throttled", NULL, 1, 1, RRD_ALGORITHM_ABSOLUTE);
} else {
- rrdset_next(cg->st_cpu_nr_throttled);
rrddim_set(cg->st_cpu_nr_throttled, "throttled", cg->cpuacct_cpu_throttling.nr_throttled_perc);
rrdset_done(cg->st_cpu_nr_throttled);
}
@@ -3968,7 +3868,6 @@ void update_cgroup_charts(int update_every) {
rrdset_update_rrdlabels(cg->st_cpu_throttled_time, cg->chart_labels);
rrddim_add(cg->st_cpu_throttled_time, "duration", NULL, 1, 1000000, RRD_ALGORITHM_INCREMENTAL);
} else {
- rrdset_next(cg->st_cpu_throttled_time);
rrddim_set(cg->st_cpu_throttled_time, "duration", cg->cpuacct_cpu_throttling.throttled_time);
rrdset_done(cg->st_cpu_throttled_time);
}
@@ -3996,7 +3895,6 @@ void update_cgroup_charts(int update_every) {
rrdset_update_rrdlabels(cg->st_cpu_shares, cg->chart_labels);
rrddim_add(cg->st_cpu_shares, "shares", NULL, 1, 1, RRD_ALGORITHM_ABSOLUTE);
} else {
- rrdset_next(cg->st_cpu_shares);
rrddim_set(cg->st_cpu_shares, "shares", cg->cpuacct_cpu_shares.shares);
rrdset_done(cg->st_cpu_shares);
}
@@ -4031,8 +3929,6 @@ void update_cgroup_charts(int update_every) {
rrddim_add(cg->st_cpu_per_core, id, NULL, 100, 1000000000, RRD_ALGORITHM_INCREMENTAL);
}
}
- else
- rrdset_next(cg->st_cpu_per_core);
for(i = 0; i < cg->cpuacct_usage.cpus ;i++) {
snprintfz(id, RRD_ID_LENGTH_MAX, "cpu%u", i);
@@ -4080,8 +3976,6 @@ void update_cgroup_charts(int update_every) {
rrddim_add(cg->st_mem, "file", NULL, 1, 1024 * 1024, RRD_ALGORITHM_ABSOLUTE);
}
}
- else
- rrdset_next(cg->st_mem);
if(!(cg->options & CGROUP_OPTIONS_IS_UNIFIED)) {
rrddim_set(cg->st_mem, "cache", cg->memory.total_cache);
@@ -4127,8 +4021,6 @@ void update_cgroup_charts(int update_every) {
rrddim_add(cg->st_writeback, "writeback", NULL, 1, 1024 * 1024, RRD_ALGORITHM_ABSOLUTE);
}
- else
- rrdset_next(cg->st_writeback);
if(cg->memory.detailed_has_dirty)
rrddim_set(cg->st_writeback, "dirty", cg->memory.total_dirty);
@@ -4160,8 +4052,6 @@ void update_cgroup_charts(int update_every) {
rrddim_add(cg->st_mem_activity, "pgpgin", "in", system_page_size, 1024 * 1024, RRD_ALGORITHM_INCREMENTAL);
rrddim_add(cg->st_mem_activity, "pgpgout", "out", -system_page_size, 1024 * 1024, RRD_ALGORITHM_INCREMENTAL);
}
- else
- rrdset_next(cg->st_mem_activity);
rrddim_set(cg->st_mem_activity, "pgpgin", cg->memory.total_pgpgin);
rrddim_set(cg->st_mem_activity, "pgpgout", cg->memory.total_pgpgout);
@@ -4191,8 +4081,6 @@ void update_cgroup_charts(int update_every) {
rrddim_add(cg->st_pgfaults, "pgfault", NULL, system_page_size, 1024 * 1024, RRD_ALGORITHM_INCREMENTAL);
rrddim_add(cg->st_pgfaults, "pgmajfault", "swap", -system_page_size, 1024 * 1024, RRD_ALGORITHM_INCREMENTAL);
}
- else
- rrdset_next(cg->st_pgfaults);
rrddim_set(cg->st_pgfaults, "pgfault", cg->memory.total_pgfault);
rrddim_set(cg->st_pgfaults, "pgmajfault", cg->memory.total_pgmajfault);
@@ -4223,8 +4111,6 @@ void update_cgroup_charts(int update_every) {
rrddim_add(cg->st_mem_usage, "ram", NULL, 1, 1024 * 1024, RRD_ALGORITHM_ABSOLUTE);
rrddim_add(cg->st_mem_usage, "swap", NULL, 1, 1024 * 1024, RRD_ALGORITHM_ABSOLUTE);
}
- else
- rrdset_next(cg->st_mem_usage);
rrddim_set(cg->st_mem_usage, "ram", cg->memory.usage_in_bytes);
if(!(cg->options & CGROUP_OPTIONS_IS_UNIFIED)) {
@@ -4290,8 +4176,6 @@ void update_cgroup_charts(int update_every) {
rrddim_add(cg->st_mem_usage_limit, "available", NULL, 1, 1024 * 1024, RRD_ALGORITHM_ABSOLUTE);
rrddim_add(cg->st_mem_usage_limit, "used", NULL, 1, 1024 * 1024, RRD_ALGORITHM_ABSOLUTE);
}
- else
- rrdset_next(cg->st_mem_usage_limit);
rrdset_isnot_obsolete(cg->st_mem_usage_limit);
@@ -4320,8 +4204,7 @@ void update_cgroup_charts(int update_every) {
rrdset_update_rrdlabels(cg->st_mem_utilization, cg->chart_labels);
rrddim_add(cg->st_mem_utilization, "utilization", NULL, 1, 1, RRD_ALGORITHM_ABSOLUTE);
- } else
- rrdset_next(cg->st_mem_utilization);
+ }
if (memory_limit) {
rrdset_isnot_obsolete(cg->st_mem_utilization);
@@ -4370,8 +4253,6 @@ void update_cgroup_charts(int update_every) {
rrddim_add(cg->st_mem_failcnt, "failures", NULL, 1, 1, RRD_ALGORITHM_INCREMENTAL);
}
- else
- rrdset_next(cg->st_mem_failcnt);
rrddim_set(cg->st_mem_failcnt, "failures", cg->memory.failcnt);
rrdset_done(cg->st_mem_failcnt);
@@ -4401,8 +4282,6 @@ void update_cgroup_charts(int update_every) {
rrddim_add(cg->st_io, "read", NULL, 1, 1024, RRD_ALGORITHM_INCREMENTAL);
rrddim_add(cg->st_io, "write", NULL, -1, 1024, RRD_ALGORITHM_INCREMENTAL);
}
- else
- rrdset_next(cg->st_io);
rrddim_set(cg->st_io, "read", cg->io_service_bytes.Read);
rrddim_set(cg->st_io, "write", cg->io_service_bytes.Write);
@@ -4433,8 +4312,6 @@ void update_cgroup_charts(int update_every) {
rrddim_add(cg->st_serviced_ops, "read", NULL, 1, 1, RRD_ALGORITHM_INCREMENTAL);
rrddim_add(cg->st_serviced_ops, "write", NULL, -1, 1, RRD_ALGORITHM_INCREMENTAL);
}
- else
- rrdset_next(cg->st_serviced_ops);
rrddim_set(cg->st_serviced_ops, "read", cg->io_serviced.Read);
rrddim_set(cg->st_serviced_ops, "write", cg->io_serviced.Write);
@@ -4465,8 +4342,6 @@ void update_cgroup_charts(int update_every) {
rrddim_add(cg->st_throttle_io, "read", NULL, 1, 1024, RRD_ALGORITHM_INCREMENTAL);
rrddim_add(cg->st_throttle_io, "write", NULL, -1, 1024, RRD_ALGORITHM_INCREMENTAL);
}
- else
- rrdset_next(cg->st_throttle_io);
rrddim_set(cg->st_throttle_io, "read", cg->throttle_io_service_bytes.Read);
rrddim_set(cg->st_throttle_io, "write", cg->throttle_io_service_bytes.Write);
@@ -4497,8 +4372,6 @@ void update_cgroup_charts(int update_every) {
rrddim_add(cg->st_throttle_serviced_ops, "read", NULL, 1, 1, RRD_ALGORITHM_INCREMENTAL);
rrddim_add(cg->st_throttle_serviced_ops, "write", NULL, -1, 1, RRD_ALGORITHM_INCREMENTAL);
}
- else
- rrdset_next(cg->st_throttle_serviced_ops);
rrddim_set(cg->st_throttle_serviced_ops, "read", cg->throttle_io_serviced.Read);
rrddim_set(cg->st_throttle_serviced_ops, "write", cg->throttle_io_serviced.Write);
@@ -4529,8 +4402,6 @@ void update_cgroup_charts(int update_every) {
rrddim_add(cg->st_queued_ops, "read", NULL, 1, 1, RRD_ALGORITHM_ABSOLUTE);
rrddim_add(cg->st_queued_ops, "write", NULL, -1, 1, RRD_ALGORITHM_ABSOLUTE);
}
- else
- rrdset_next(cg->st_queued_ops);
rrddim_set(cg->st_queued_ops, "read", cg->io_queued.Read);
rrddim_set(cg->st_queued_ops, "write", cg->io_queued.Write);
@@ -4561,8 +4432,6 @@ void update_cgroup_charts(int update_every) {
rrddim_add(cg->st_merged_ops, "read", NULL, 1, 1024, RRD_ALGORITHM_INCREMENTAL);
rrddim_add(cg->st_merged_ops, "write", NULL, -1, 1024, RRD_ALGORITHM_INCREMENTAL);
}
- else
- rrdset_next(cg->st_merged_ops);
rrddim_set(cg->st_merged_ops, "read", cg->io_merged.Read);
rrddim_set(cg->st_merged_ops, "write", cg->io_merged.Write);
@@ -4597,9 +4466,8 @@ void update_cgroup_charts(int update_every) {
pcs->share_time.rd10 = rrddim_add(chart, "some 10", NULL, 1, 100, RRD_ALGORITHM_ABSOLUTE);
pcs->share_time.rd60 = rrddim_add(chart, "some 60", NULL, 1, 100, RRD_ALGORITHM_ABSOLUTE);
pcs->share_time.rd300 = rrddim_add(chart, "some 300", NULL, 1, 100, RRD_ALGORITHM_ABSOLUTE);
- } else {
- rrdset_next(pcs->share_time.st);
}
+
if (unlikely(!pcs->total_time.st)) {
RRDSET *chart;
snprintfz(title, CHART_TITLE_MAX, "CPU some pressure stall time");
@@ -4619,9 +4487,8 @@ void update_cgroup_charts(int update_every) {
);
rrdset_update_rrdlabels(chart = pcs->total_time.st, cg->chart_labels);
pcs->total_time.rdtotal = rrddim_add(chart, "time", NULL, 1, 1, RRD_ALGORITHM_INCREMENTAL);
- } else {
- rrdset_next(pcs->total_time.st);
}
+
update_pressure_charts(pcs);
}
if (likely(res->updated && res->full.enabled)) {
@@ -4649,9 +4516,8 @@ void update_cgroup_charts(int update_every) {
pcs->share_time.rd10 = rrddim_add(chart, "full 10", NULL, 1, 100, RRD_ALGORITHM_ABSOLUTE);
pcs->share_time.rd60 = rrddim_add(chart, "full 60", NULL, 1, 100, RRD_ALGORITHM_ABSOLUTE);
pcs->share_time.rd300 = rrddim_add(chart, "full 300", NULL, 1, 100, RRD_ALGORITHM_ABSOLUTE);
- } else {
- rrdset_next(pcs->share_time.st);
}
+
if (unlikely(!pcs->total_time.st)) {
RRDSET *chart;
snprintfz(title, CHART_TITLE_MAX, "CPU full pressure stall time");
@@ -4671,9 +4537,8 @@ void update_cgroup_charts(int update_every) {
);
rrdset_update_rrdlabels(chart = pcs->total_time.st, cg->chart_labels);
pcs->total_time.rdtotal = rrddim_add(chart, "time", NULL, 1, 1, RRD_ALGORITHM_INCREMENTAL);
- } else {
- rrdset_next(pcs->total_time.st);
}
+
update_pressure_charts(pcs);
}
@@ -4704,9 +4569,8 @@ void update_cgroup_charts(int update_every) {
pcs->share_time.rd10 = rrddim_add(chart, "some 10", NULL, 1, 100, RRD_ALGORITHM_ABSOLUTE);
pcs->share_time.rd60 = rrddim_add(chart, "some 60", NULL, 1, 100, RRD_ALGORITHM_ABSOLUTE);
pcs->share_time.rd300 = rrddim_add(chart, "some 300", NULL, 1, 100, RRD_ALGORITHM_ABSOLUTE);
- } else {
- rrdset_next(pcs->share_time.st);
}
+
if (unlikely(!pcs->total_time.st)) {
RRDSET *chart;
snprintfz(title, CHART_TITLE_MAX, "Memory some pressure stall time");
@@ -4726,9 +4590,8 @@ void update_cgroup_charts(int update_every) {
);
rrdset_update_rrdlabels(chart = pcs->total_time.st, cg->chart_labels);
pcs->total_time.rdtotal = rrddim_add(chart, "time", NULL, 1, 1, RRD_ALGORITHM_INCREMENTAL);
- } else {
- rrdset_next(pcs->total_time.st);
}
+
update_pressure_charts(pcs);
}
@@ -4759,9 +4622,8 @@ void update_cgroup_charts(int update_every) {
pcs->share_time.rd10 = rrddim_add(chart, "full 10", NULL, 1, 100, RRD_ALGORITHM_ABSOLUTE);
pcs->share_time.rd60 = rrddim_add(chart, "full 60", NULL, 1, 100, RRD_ALGORITHM_ABSOLUTE);
pcs->share_time.rd300 = rrddim_add(chart, "full 300", NULL, 1, 100, RRD_ALGORITHM_ABSOLUTE);
- } else {
- rrdset_next(pcs->share_time.st);
}
+
if (unlikely(!pcs->total_time.st)) {
RRDSET *chart;
snprintfz(title, CHART_TITLE_MAX, "Memory full pressure stall time");
@@ -4781,9 +4643,8 @@ void update_cgroup_charts(int update_every) {
);
rrdset_update_rrdlabels(chart = pcs->total_time.st, cg->chart_labels);
pcs->total_time.rdtotal = rrddim_add(chart, "time", NULL, 1, 1, RRD_ALGORITHM_INCREMENTAL);
- } else {
- rrdset_next(pcs->total_time.st);
}
+
update_pressure_charts(pcs);
}
@@ -4814,9 +4675,8 @@ void update_cgroup_charts(int update_every) {
pcs->share_time.rd10 = rrddim_add(chart, "some 10", NULL, 1, 100, RRD_ALGORITHM_ABSOLUTE);
pcs->share_time.rd60 = rrddim_add(chart, "some 60", NULL, 1, 100, RRD_ALGORITHM_ABSOLUTE);
pcs->share_time.rd300 = rrddim_add(chart, "some 300", NULL, 1, 100, RRD_ALGORITHM_ABSOLUTE);
- } else {
- rrdset_next(pcs->share_time.st);
}
+
if (unlikely(!pcs->total_time.st)) {
RRDSET *chart;
snprintfz(title, CHART_TITLE_MAX, "I/O some pressure stall time");
@@ -4836,9 +4696,8 @@ void update_cgroup_charts(int update_every) {
);
rrdset_update_rrdlabels(chart = pcs->total_time.st, cg->chart_labels);
pcs->total_time.rdtotal = rrddim_add(chart, "time", NULL, 1, 1, RRD_ALGORITHM_INCREMENTAL);
- } else {
- rrdset_next(pcs->total_time.st);
}
+
update_pressure_charts(pcs);
}
@@ -4867,9 +4726,8 @@ void update_cgroup_charts(int update_every) {
pcs->share_time.rd10 = rrddim_add(chart, "full 10", NULL, 1, 100, RRD_ALGORITHM_ABSOLUTE);
pcs->share_time.rd60 = rrddim_add(chart, "full 60", NULL, 1, 100, RRD_ALGORITHM_ABSOLUTE);
pcs->share_time.rd300 = rrddim_add(chart, "full 300", NULL, 1, 100, RRD_ALGORITHM_ABSOLUTE);
- } else {
- rrdset_next(pcs->share_time.st);
}
+
if (unlikely(!pcs->total_time.st)) {
RRDSET *chart;
snprintfz(title, CHART_TITLE_MAX, "I/O full pressure stall time");
@@ -4889,9 +4747,8 @@ void update_cgroup_charts(int update_every) {
);
rrdset_update_rrdlabels(chart = pcs->total_time.st, cg->chart_labels);
pcs->total_time.rdtotal = rrddim_add(chart, "time", NULL, 1, 1, RRD_ALGORITHM_INCREMENTAL);
- } else {
- rrdset_next(pcs->total_time.st);
}
+
update_pressure_charts(pcs);
}
}