@cryptotaxi247 / netdata-1 / commits / eafc0f045

cgroups: collect pids/pids.current (#16369)

* cgroups collect pids/pids.current * change dim name

Ilya Mashchenko committed Nov 9, 2023 at 15:23 UTC eafc0f045c7bd9667e23b34e108282938fb10eea
5 files changed +166 -36
collectors/cgroups.plugin/cgroup-charts.c
+40
@@ -1484,3 +1484,43 @@ void update_io_full_pressure_stall_time_chart(struct cgroup *cg) {
1484 rrddim_set_by_pointer(chart, pcs->total_time.rdtotal, (collected_number)(pcs->total_time.value_total));
1485 rrdset_done(chart);
1486 }
1487 +
1488 +void update_pids_current_chart(struct cgroup *cg) {
1489 + RRDSET *chart = cg->st_pids;
1490 +
1491 + if (unlikely(!cg->st_pids)) {
1492 + char *title;
1493 + char *context;
1494 + int prio;
1495 + if (is_cgroup_systemd_service(cg)) {
1496 + title = "Systemd Services Number of Processes";
1497 + context = "systemd.service.pids.current";
1498 + prio = NETDATA_CHART_PRIO_CGROUPS_SYSTEMD + 70;
1499 + } else {
1500 + title = "Number of processes";
1501 + context = k8s_is_kubepod(cg) ? "k8s.cgroup.pids_current" : "cgroup.pids_current";
1502 + prio = cgroup_containers_chart_priority + 2150;
1503 + }
1504 +
1505 + char buff[RRD_ID_LENGTH_MAX + 1];
1506 + chart = cg->st_pids = rrdset_create_localhost(
1507 + cgroup_chart_type(buff, cg),
1508 + "pids_current",
1509 + NULL,
1510 + "pids",
1511 + context,
1512 + title,
1513 + "pids",
1514 + PLUGIN_CGROUPS_NAME,
1515 + is_cgroup_systemd_service(cg) ? PLUGIN_CGROUPS_MODULE_SYSTEMD_NAME : PLUGIN_CGROUPS_MODULE_CGROUPS_NAME,
1516 + prio,
1517 + cgroup_update_every,
1518 + RRDSET_TYPE_LINE);
1519 +
1520 + rrdset_update_rrdlabels(chart, cg->chart_labels);
1521 + cg->st_pids_rd_pids_current = rrddim_add(chart, "pids", NULL, 1, 1, RRD_ALGORITHM_ABSOLUTE);
1522 + }
1523 +
1524 + rrddim_set_by_pointer(chart, cg->st_pids_rd_pids_current, (collected_number)cg->pids.pids_current);
1525 + rrdset_done(chart);
1526 +}
collectors/cgroups.plugin/cgroup-discovery.c
+18
@@ -75,6 +75,7 @@ static inline void cgroup_free(struct cgroup *cg) {
75 if(cg->st_throttle_serviced_ops) rrdset_is_obsolete___safe_from_collector_thread(cg->st_throttle_serviced_ops);
76 if(cg->st_queued_ops) rrdset_is_obsolete___safe_from_collector_thread(cg->st_queued_ops);
77 if(cg->st_merged_ops) rrdset_is_obsolete___safe_from_collector_thread(cg->st_merged_ops);
78 + if(cg->st_pids) rrdset_is_obsolete___safe_from_collector_thread(cg->st_pids);
79
80 freez(cg->filename_cpuset_cpus);
81 freez(cg->filename_cpu_cfs_period);
@@ -105,6 +106,7 @@ static inline void cgroup_free(struct cgroup *cg) {
106
107 freez(cg->io_merged.filename);
108 freez(cg->io_queued.filename);
109 + freez(cg->pids.pids_current_filename);
110
111 free_pressure(&cg->cpu_pressure);
112 free_pressure(&cg->io_pressure);
@@ -598,6 +600,14 @@ static inline void discovery_update_filenames_cgroup_v1(struct cgroup *cg) {
600 }
601 }
602 }
603 +
604 + // Pids
605 + if (unlikely(!cg->pids.pids_current_filename)) {
606 + snprintfz(filename, FILENAME_MAX, "%s%s/pids.current", cgroup_pids_base, cg->id);
607 + if (likely(stat(filename, &buf) != -1)) {
608 + cg->pids.pids_current_filename = strdupz(filename);
609 + }
610 + }
611 }
612
613 static inline void discovery_update_filenames_cgroup_v2(struct cgroup *cg) {
@@ -713,6 +723,14 @@ static inline void discovery_update_filenames_cgroup_v2(struct cgroup *cg) {
723 cg->irq_pressure.full.enabled = cgroup_enable_pressure_irq_full;
724 }
725 }
726 +
727 + // Pids
728 + if (unlikely(!cg->pids.pids_current_filename)) {
729 + snprintfz(filename, FILENAME_MAX, "%s%s/pids.current", cgroup_unified_base, cg->id);
730 + if (likely(stat(filename, &buf) != -1)) {
731 + cg->pids.pids_current_filename = strdupz(filename);
732 + }
733 + }
734 }
735
736 static inline void discovery_update_filenames_all_cgroups() {
collectors/cgroups.plugin/cgroup-internals.h
+21 -5
@@ -25,6 +25,12 @@ struct blkio {
25 */
26 };
27
28 +struct pids {
29 + char *pids_current_filename;
30 + int pids_current_updated;
31 + unsigned long long pids_current;
32 +};
33 +
34 // https://www.kernel.org/doc/Documentation/cgroup-v1/memory.txt
35 struct memory {
36 ARL_BASE *arl_base;
@@ -218,6 +224,8 @@ struct cgroup {
224 struct blkio io_merged; // operations
225 struct blkio io_queued; // operations
226
227 + struct pids pids;
228 +
229 struct cgroup_network_interface *interfaces;
230
231 struct pressure cpu_pressure;
@@ -225,7 +233,7 @@ struct cgroup {
233 struct pressure memory_pressure;
234 struct pressure irq_pressure;
235
228 - // per cgroup charts
236 + // Cpu
237 RRDSET *st_cpu;
238 RRDDIM *st_cpu_rd_user;
239 RRDDIM *st_cpu_rd_system;
@@ -236,6 +244,7 @@ struct cgroup {
244 RRDSET *st_cpu_throttled_time;
245 RRDSET *st_cpu_shares;
246
247 + // Memory
248 RRDSET *st_mem;
249 RRDDIM *st_mem_rd_ram;
250 RRDDIM *st_mem_rd_swap;
@@ -248,6 +257,7 @@ struct cgroup {
257 RRDSET *st_mem_usage_limit;
258 RRDSET *st_mem_failcnt;
259
260 + // Blkio
261 RRDSET *st_io;
262 RRDDIM *st_io_rd_read;
263 RRDDIM *st_io_rd_written;
@@ -263,6 +273,10 @@ struct cgroup {
273 RRDSET *st_queued_ops;
274 RRDSET *st_merged_ops;
275
276 + // Pids
277 + RRDSET *st_pids;
278 + RRDDIM *st_pids_rd_pids_current;
279 +
280 // per cgroup chart variables
281 char *filename_cpuset_cpus;
282 unsigned long long cpuset_cpus;
@@ -307,10 +321,6 @@ extern uv_mutex_t cgroup_root_mutex;
321
322 void cgroup_discovery_worker(void *ptr);
323
310 -
311 -
312 -
313 -
324 extern int is_inside_k8s;
325 extern long system_page_size;
326 extern int cgroup_enable_cpuacct_stat;
@@ -350,6 +360,7 @@ extern char *cgroup_cpuacct_base;
360 extern char *cgroup_cpuset_base;
361 extern char *cgroup_blkio_base;
362 extern char *cgroup_memory_base;
363 +extern char *cgroup_pids_base;
364 extern char *cgroup_devices_base;
365 extern char *cgroup_unified_base;
366 extern int cgroup_root_count;
@@ -478,18 +489,23 @@ void update_throttle_io_serviced_ops_chart(struct cgroup *cg);
489 void update_io_queued_ops_chart(struct cgroup *cg);
490 void update_io_merged_ops_chart(struct cgroup *cg);
491
492 +void update_pids_current_chart(struct cgroup *cg);
493 +
494 void update_cpu_some_pressure_chart(struct cgroup *cg);
495 void update_cpu_some_pressure_stall_time_chart(struct cgroup *cg);
496 void update_cpu_full_pressure_chart(struct cgroup *cg);
497 void update_cpu_full_pressure_stall_time_chart(struct cgroup *cg);
498 +
499 void update_mem_some_pressure_chart(struct cgroup *cg);
500 void update_mem_some_pressure_stall_time_chart(struct cgroup *cg);
501 void update_mem_full_pressure_chart(struct cgroup *cg);
502 void update_mem_full_pressure_stall_time_chart(struct cgroup *cg);
503 +
504 void update_irq_some_pressure_chart(struct cgroup *cg);
505 void update_irq_some_pressure_stall_time_chart(struct cgroup *cg);
506 void update_irq_full_pressure_chart(struct cgroup *cg);
507 void update_irq_full_pressure_stall_time_chart(struct cgroup *cg);
508 +
509 void update_io_some_pressure_chart(struct cgroup *cg);
510 void update_io_some_pressure_stall_time_chart(struct cgroup *cg);
511 void update_io_full_pressure_chart(struct cgroup *cg);
collectors/cgroups.plugin/cgroup-top.c
+24 -1
@@ -115,6 +115,7 @@ int cgroup_function_cgroup_top(BUFFER *wb, int timeout __maybe_unused, const cha
115 buffer_json_member_add_string(wb, "help", RRDFUNCTIONS_CGTOP_HELP);
116 buffer_json_member_add_array(wb, "data");
117
118 + double max_pids = 0.0;
119 double max_cpu = 0.0;
120 double max_ram = 0.0;
121 double max_disk_io_read = 0.0;
@@ -139,6 +140,8 @@ int cgroup_function_cgroup_top(BUFFER *wb, int timeout __maybe_unused, const cha
140 else
141 buffer_json_add_array_item_string(wb, "cgroup"); // Kind
142
143 + double pids_current = rrddim_get_last_stored_value(cg->st_pids_rd_pids_current, &max_pids, 1.0);
144 +
145 double cpu = NAN;
146 if (cg->st_cpu_rd_user && cg->st_cpu_rd_system) {
147 cpu = cg->st_cpu_rd_user->collector.last_stored_value + cg->st_cpu_rd_system->collector.last_stored_value;
@@ -152,7 +155,6 @@ int cgroup_function_cgroup_top(BUFFER *wb, int timeout __maybe_unused, const cha
155 rd = cg->st_throttle_io_rd_written ? cg->st_throttle_io_rd_written : cg->st_io_rd_written;
156 double disk_io_written = rrddim_get_last_stored_value(rd, &max_disk_io_written, 1024.0);
157
155 -
158 NETDATA_DOUBLE received, sent;
159 cgroup_netdev_get_bandwidth(cg, &received, &sent);
160 if (!isnan(received) && !isnan(sent)) {
@@ -162,6 +164,7 @@ int cgroup_function_cgroup_top(BUFFER *wb, int timeout __maybe_unused, const cha
164 max_net_sent = MAX(max_net_sent, sent);
165 }
166
167 + buffer_json_add_array_item_double(wb, pids_current);
168 buffer_json_add_array_item_double(wb, cpu);
169 buffer_json_add_array_item_double(wb, ram);
170 buffer_json_add_array_item_double(wb, disk_io_read);
@@ -195,6 +198,14 @@ int cgroup_function_cgroup_top(BUFFER *wb, int timeout __maybe_unused, const cha
198 RRDF_FIELD_OPTS_VISIBLE,
199 NULL);
200
201 + // PIDs
202 + buffer_rrdf_table_add_field(wb, field_id++, "PIDs", "Number of Processes Currently in the CGROUP",
203 + RRDF_FIELD_TYPE_INTEGER, RRDF_FIELD_VISUAL_VALUE, RRDF_FIELD_TRANSFORM_NUMBER,
204 + 0, "pids", max_pids, RRDF_FIELD_SORT_DESCENDING, NULL,
205 + RRDF_FIELD_SUMMARY_SUM, RRDF_FIELD_FILTER_NONE,
206 + RRDF_FIELD_OPTS_VISIBLE,
207 + NULL);
208 +
209 // CPU
210 buffer_rrdf_table_add_field(wb, field_id++, "CPU", "CPU Usage",
211 RRDF_FIELD_TYPE_BAR_WITH_INTEGER, RRDF_FIELD_VISUAL_BAR, RRDF_FIELD_TRANSFORM_NUMBER,
@@ -349,6 +360,7 @@ int cgroup_function_systemd_top(BUFFER *wb, int timeout __maybe_unused, const ch
360 buffer_json_member_add_string(wb, "help", RRDFUNCTIONS_CGTOP_HELP);
361 buffer_json_member_add_array(wb, "data");
362
363 + double max_pids = 0.0;
364 double max_cpu = 0.0;
365 double max_ram = 0.0;
366 double max_disk_io_read = 0.0;
@@ -366,6 +378,8 @@ int cgroup_function_systemd_top(BUFFER *wb, int timeout __maybe_unused, const ch
378
379 buffer_json_add_array_item_string(wb, cg->name);
380
381 + double pids_current = rrddim_get_last_stored_value(cg->st_pids_rd_pids_current, &max_pids, 1.0);
382 +
383 double cpu = NAN;
384 if (cg->st_cpu_rd_user && cg->st_cpu_rd_system) {
385 cpu = cg->st_cpu_rd_user->collector.last_stored_value + cg->st_cpu_rd_system->collector.last_stored_value;
@@ -379,6 +393,7 @@ int cgroup_function_systemd_top(BUFFER *wb, int timeout __maybe_unused, const ch
393 rd = cg->st_throttle_io_rd_written ? cg->st_throttle_io_rd_written : cg->st_io_rd_written;
394 double disk_io_written = rrddim_get_last_stored_value(rd, &max_disk_io_written, 1024.0);
395
396 + buffer_json_add_array_item_double(wb, pids_current);
397 buffer_json_add_array_item_double(wb, cpu);
398 buffer_json_add_array_item_double(wb, ram);
399 buffer_json_add_array_item_double(wb, disk_io_read);
@@ -402,6 +417,14 @@ int cgroup_function_systemd_top(BUFFER *wb, int timeout __maybe_unused, const ch
417 RRDF_FIELD_OPTS_VISIBLE | RRDF_FIELD_OPTS_UNIQUE_KEY | RRDF_FIELD_OPTS_STICKY | RRDF_FIELD_OPTS_FULL_WIDTH,
418 NULL);
419
420 + // PIDs
421 + buffer_rrdf_table_add_field(wb, field_id++, "PIDs", "Number of Processes Currently in the CGROUP",
422 + RRDF_FIELD_TYPE_INTEGER, RRDF_FIELD_VISUAL_VALUE, RRDF_FIELD_TRANSFORM_NUMBER,
423 + 0, "pids", max_pids, RRDF_FIELD_SORT_DESCENDING, NULL,
424 + RRDF_FIELD_SUMMARY_SUM, RRDF_FIELD_FILTER_NONE,
425 + RRDF_FIELD_OPTS_VISIBLE,
426 + NULL);
427 +
428 // CPU
429 buffer_rrdf_table_add_field(wb, field_id++, "CPU", "CPU Usage",
430 RRDF_FIELD_TYPE_BAR_WITH_INTEGER, RRDF_FIELD_VISUAL_BAR, RRDF_FIELD_TRANSFORM_NUMBER,
collectors/cgroups.plugin/sys_fs_cgroup.c
+63 -30
@@ -50,6 +50,7 @@ char *cgroup_cpuset_base = NULL;
50 char *cgroup_blkio_base = NULL;
51 char *cgroup_memory_base = NULL;
52 char *cgroup_devices_base = NULL;
53 +char *cgroup_pids_base = NULL;
54 char *cgroup_unified_base = NULL;
55 int cgroup_root_count = 0;
56 int cgroup_root_max = 1000;
@@ -310,54 +311,70 @@ void read_cgroup_plugin_configuration() {
311 cgroup_enable_pressure_memory_full = CONFIG_BOOLEAN_NO;
312
313 mi = mountinfo_find_by_filesystem_super_option(root, "cgroup", "cpuacct");
313 - if(!mi) mi = mountinfo_find_by_filesystem_mount_source(root, "cgroup", "cpuacct");
314 - if(!mi) {
314 + if (!mi)
315 + mi = mountinfo_find_by_filesystem_mount_source(root, "cgroup", "cpuacct");
316 + if (!mi) {
317 collector_error("CGROUP: cannot find cpuacct mountinfo. Assuming default: /sys/fs/cgroup/cpuacct");
318 s = "/sys/fs/cgroup/cpuacct";
317 - }
318 - else s = mi->mount_point;
319 + } else
320 + s = mi->mount_point;
321 set_cgroup_base_path(filename, s);
322 cgroup_cpuacct_base = config_get("plugin:cgroups", "path to /sys/fs/cgroup/cpuacct", filename);
323
324 mi = mountinfo_find_by_filesystem_super_option(root, "cgroup", "cpuset");
323 - if(!mi) mi = mountinfo_find_by_filesystem_mount_source(root, "cgroup", "cpuset");
324 - if(!mi) {
325 + if (!mi)
326 + mi = mountinfo_find_by_filesystem_mount_source(root, "cgroup", "cpuset");
327 + if (!mi) {
328 collector_error("CGROUP: cannot find cpuset mountinfo. Assuming default: /sys/fs/cgroup/cpuset");
329 s = "/sys/fs/cgroup/cpuset";
327 - }
328 - else s = mi->mount_point;
330 + } else
331 + s = mi->mount_point;
332 set_cgroup_base_path(filename, s);
333 cgroup_cpuset_base = config_get("plugin:cgroups", "path to /sys/fs/cgroup/cpuset", filename);
334
335 mi = mountinfo_find_by_filesystem_super_option(root, "cgroup", "blkio");
333 - if(!mi) mi = mountinfo_find_by_filesystem_mount_source(root, "cgroup", "blkio");
334 - if(!mi) {
336 + if (!mi)
337 + mi = mountinfo_find_by_filesystem_mount_source(root, "cgroup", "blkio");
338 + if (!mi) {
339 collector_error("CGROUP: cannot find blkio mountinfo. Assuming default: /sys/fs/cgroup/blkio");
340 s = "/sys/fs/cgroup/blkio";
337 - }
338 - else s = mi->mount_point;
341 + } else
342 + s = mi->mount_point;
343 set_cgroup_base_path(filename, s);
344 cgroup_blkio_base = config_get("plugin:cgroups", "path to /sys/fs/cgroup/blkio", filename);
345
346 mi = mountinfo_find_by_filesystem_super_option(root, "cgroup", "memory");
343 - if(!mi) mi = mountinfo_find_by_filesystem_mount_source(root, "cgroup", "memory");
344 - if(!mi) {
347 + if (!mi)
348 + mi = mountinfo_find_by_filesystem_mount_source(root, "cgroup", "memory");
349 + if (!mi) {
350 collector_error("CGROUP: cannot find memory mountinfo. Assuming default: /sys/fs/cgroup/memory");
351 s = "/sys/fs/cgroup/memory";
347 - }
348 - else s = mi->mount_point;
352 + } else
353 + s = mi->mount_point;
354 set_cgroup_base_path(filename, s);
355 cgroup_memory_base = config_get("plugin:cgroups", "path to /sys/fs/cgroup/memory", filename);
356
357 mi = mountinfo_find_by_filesystem_super_option(root, "cgroup", "devices");
353 - if(!mi) mi = mountinfo_find_by_filesystem_mount_source(root, "cgroup", "devices");
354 - if(!mi) {
358 + if (!mi)
359 + mi = mountinfo_find_by_filesystem_mount_source(root, "cgroup", "devices");
360 + if (!mi) {
361 collector_error("CGROUP: cannot find devices mountinfo. Assuming default: /sys/fs/cgroup/devices");
362 s = "/sys/fs/cgroup/devices";
357 - }
358 - else s = mi->mount_point;
363 + } else
364 + s = mi->mount_point;
365 set_cgroup_base_path(filename, s);
366 cgroup_devices_base = config_get("plugin:cgroups", "path to /sys/fs/cgroup/devices", filename);
367 +
368 + mi = mountinfo_find_by_filesystem_super_option(root, "cgroup", "pids");
369 + if (!mi)
370 + mi = mountinfo_find_by_filesystem_mount_source(root, "cgroup", "pids");
371 + if (!mi) {
372 + collector_error("CGROUP: cannot find pids mountinfo. Assuming default: /sys/fs/cgroup/pids");
373 + s = "/sys/fs/cgroup/pids";
374 + } else
375 + s = mi->mount_point;
376 + set_cgroup_base_path(filename, s);
377 + cgroup_pids_base = config_get("plugin:cgroups", "path to /sys/fs/cgroup/pids", filename);
378 }
379 else {
380 //cgroup_enable_cpuacct_stat =
@@ -377,22 +394,19 @@ void read_cgroup_plugin_configuration() {
394 cgroup_used_memory = CONFIG_BOOLEAN_NO; //unified cgroups use different values
395
396 //TODO: can there be more than 1 cgroup2 mount point?
380 - mi = mountinfo_find_by_filesystem_super_option(root, "cgroup2", "rw"); //there is no cgroup2 specific super option - for now use 'rw' option
381 - if(mi)
382 - netdata_log_debug(D_CGROUP, "found unified cgroup root using super options, with path: '%s'", mi->mount_point);
383 - if(!mi) {
397 + //there is no cgroup2 specific super option - for now use 'rw' option
398 + mi = mountinfo_find_by_filesystem_super_option(root, "cgroup2", "rw");
399 + if (!mi) {
400 mi = mountinfo_find_by_filesystem_mount_source(root, "cgroup2", "cgroup");
385 - if(mi)
386 - netdata_log_debug(D_CGROUP, "found unified cgroup root using mountsource info, with path: '%s'", mi->mount_point);
401 }
388 - if(!mi) {
402 + if (!mi) {
403 collector_error("CGROUP: cannot find cgroup2 mountinfo. Assuming default: /sys/fs/cgroup");
404 s = "/sys/fs/cgroup";
391 - }
392 - else s = mi->mount_point;
405 + } else
406 + s = mi->mount_point;
407 +
408 set_cgroup_base_path(filename, s);
409 cgroup_unified_base = config_get("plugin:cgroups", "path to unified cgroups", filename);
395 - netdata_log_debug(D_CGROUP, "using cgroup root: '%s'", cgroup_unified_base);
410 }
411
412 cgroup_root_max = (int)config_get_number("plugin:cgroups", "max cgroups to allow", cgroup_root_max);
@@ -1146,6 +1160,15 @@ memory_next:
1160 }
1161 }
1162
1163 +static void cgroup_read_pids_current(struct pids *pids) {
1164 + pids->pids_current_updated = 0;
1165 +
1166 + if (unlikely(!pids->pids_current_filename))
1167 + return;
1168 +
1169 + pids->pids_current_updated = !read_single_signed_number_file(pids->pids_current_filename, &pids->pids_current);
1170 +}
1171 +
1172 static inline void read_cgroup(struct cgroup *cg) {
1173 netdata_log_debug(D_CGROUP, "reading metrics for cgroups '%s'", cg->id);
1174 if(!(cg->options & CGROUP_OPTIONS_IS_UNIFIED)) {
@@ -1160,6 +1183,7 @@ static inline void read_cgroup(struct cgroup *cg) {
1183 cgroup_read_blkio(&cg->throttle_io_serviced);
1184 cgroup_read_blkio(&cg->io_merged);
1185 cgroup_read_blkio(&cg->io_queued);
1186 + cgroup_read_pids_current(&cg->pids);
1187 }
1188 else {
1189 //TODO: io_service_bytes and io_serviced use same file merge into 1 function
@@ -1172,6 +1196,7 @@ static inline void read_cgroup(struct cgroup *cg) {
1196 cgroup2_read_pressure(&cg->memory_pressure);
1197 cgroup2_read_pressure(&cg->irq_pressure);
1198 cgroup_read_memory(&cg->memory, 1);
1199 + cgroup_read_pids_current(&cg->pids);
1200 }
1201 }
1202
@@ -1347,6 +1372,10 @@ void update_cgroup_systemd_services_charts() {
1372 update_io_merged_ops_chart(cg);
1373 }
1374
1375 + if (likely(cg->pids.pids_current_updated)) {
1376 + update_pids_current_chart(cg);
1377 + }
1378 +
1379 cg->function_ready = true;
1380 }
1381 }
@@ -1485,6 +1514,10 @@ void update_cgroup_charts() {
1514 update_io_merged_ops_chart(cg);
1515 }
1516
1517 + if (likely(cg->pids.pids_current_updated)) {
1518 + update_pids_current_chart(cg);
1519 + }
1520 +
1521 if (cg->options & CGROUP_OPTIONS_IS_UNIFIED) {
1522 if (likely(cg->cpu_pressure.updated)) {
1523 if (cg->cpu_pressure.some.enabled) {