@cryptotaxi247 / netdata-1 / commits / 3ef5ae53e

Fix interval usage and reduce I/O (#11662)

thiagoftsm committed Oct 18, 2021 at 15:26 UTC 3ef5ae53e596f110bb87ae2cf5ec90915558f8c9
37 files changed +824 -615
collectors/ebpf.plugin/ebpf.c
+88 -69
@@ -55,7 +55,6 @@ char *ebpf_plugin_dir = PLUGINS_DIR;
55 static char *ebpf_configured_log_dir = LOG_DIR;
56
57 char *ebpf_algorithms[] = {"absolute", "incremental"};
58 -int update_every = 1;
58 static int thread_finished = 0;
59 int close_ebpf_plugin = 0;
60 struct config collector_config = { .first_section = NULL,
@@ -76,81 +75,90 @@ pthread_cond_t collect_data_cond_var;
75
76 ebpf_module_t ebpf_modules[] = {
77 { .thread_name = "process", .config_name = "process", .enabled = 0, .start_routine = ebpf_process_thread,
79 - .update_time = 1, .global_charts = 1, .apps_charts = CONFIG_BOOLEAN_NO, .cgroup_charts = CONFIG_BOOLEAN_NO,
80 - .mode = MODE_ENTRY, .optional = 0, .apps_routine = ebpf_process_create_apps_charts, .maps = NULL,
78 + .update_every = EBPF_DEFAULT_UPDATE_EVERY, .global_charts = 1, .apps_charts = CONFIG_BOOLEAN_NO,
79 + .cgroup_charts = CONFIG_BOOLEAN_NO, .mode = MODE_ENTRY, .optional = 0,
80 + .apps_routine = ebpf_process_create_apps_charts, .maps = NULL,
81 .pid_map_size = ND_EBPF_DEFAULT_PID_SIZE, .names = NULL, .cfg = &process_config,
82 .config_file = NETDATA_PROCESS_CONFIG_FILE},
83 { .thread_name = "socket", .config_name = "socket", .enabled = 0, .start_routine = ebpf_socket_thread,
84 - .update_time = 1, .global_charts = 1, .apps_charts = CONFIG_BOOLEAN_NO, .cgroup_charts = CONFIG_BOOLEAN_NO,
85 - .mode = MODE_ENTRY, .optional = 0, .apps_routine = ebpf_socket_create_apps_charts, .maps = NULL,
84 + .update_every = EBPF_DEFAULT_UPDATE_EVERY, .global_charts = 1, .apps_charts = CONFIG_BOOLEAN_NO,
85 + .cgroup_charts = CONFIG_BOOLEAN_NO, .mode = MODE_ENTRY, .optional = 0,
86 + .apps_routine = ebpf_socket_create_apps_charts, .maps = NULL,
87 .pid_map_size = ND_EBPF_DEFAULT_PID_SIZE, .names = NULL, .cfg = &socket_config,
88 .config_file = NETDATA_NETWORK_CONFIG_FILE},
89 { .thread_name = "cachestat", .config_name = "cachestat", .enabled = 0, .start_routine = ebpf_cachestat_thread,
89 - .update_time = 1, .global_charts = 1, .apps_charts = CONFIG_BOOLEAN_NO, .cgroup_charts = CONFIG_BOOLEAN_NO,
90 - .mode = MODE_ENTRY, .optional = 0, .apps_routine = ebpf_cachestat_create_apps_charts, .maps = NULL,
90 + .update_every = EBPF_DEFAULT_UPDATE_EVERY, .global_charts = 1, .apps_charts = CONFIG_BOOLEAN_NO,
91 + .cgroup_charts = CONFIG_BOOLEAN_NO, .mode = MODE_ENTRY, .optional = 0,
92 + .apps_routine = ebpf_cachestat_create_apps_charts, .maps = NULL,
93 .pid_map_size = ND_EBPF_DEFAULT_PID_SIZE, .names = NULL, .cfg = &cachestat_config,
94 .config_file = NETDATA_CACHESTAT_CONFIG_FILE},
95 { .thread_name = "sync", .config_name = "sync", .enabled = 0, .start_routine = ebpf_sync_thread,
94 - .update_time = 1, .global_charts = 1, .apps_charts = CONFIG_BOOLEAN_NO, .cgroup_charts = CONFIG_BOOLEAN_NO,
95 - .mode = MODE_ENTRY, .optional = 0, .apps_routine = NULL, .maps = NULL,
96 + .update_every = EBPF_DEFAULT_UPDATE_EVERY, .global_charts = 1, .apps_charts = CONFIG_BOOLEAN_NO,
97 + .cgroup_charts = CONFIG_BOOLEAN_NO, .mode = MODE_ENTRY, .optional = 0, .apps_routine = NULL, .maps = NULL,
98 .pid_map_size = ND_EBPF_DEFAULT_PID_SIZE, .names = NULL, .cfg = &sync_config,
99 .config_file = NETDATA_SYNC_CONFIG_FILE},
100 { .thread_name = "dc", .config_name = "dc", .enabled = 0, .start_routine = ebpf_dcstat_thread,
99 - .update_time = 1, .global_charts = 1, .apps_charts = CONFIG_BOOLEAN_NO, .cgroup_charts = CONFIG_BOOLEAN_NO,
100 - .mode = MODE_ENTRY, .optional = 0, .apps_routine = ebpf_dcstat_create_apps_charts, .maps = NULL,
101 + .update_every = EBPF_DEFAULT_UPDATE_EVERY, .global_charts = 1, .apps_charts = CONFIG_BOOLEAN_NO,
102 + .cgroup_charts = CONFIG_BOOLEAN_NO, .mode = MODE_ENTRY, .optional = 0,
103 + .apps_routine = ebpf_dcstat_create_apps_charts, .maps = NULL,
104 .pid_map_size = ND_EBPF_DEFAULT_PID_SIZE, .names = NULL, .cfg = &dcstat_config,
105 .config_file = NETDATA_DIRECTORY_DCSTAT_CONFIG_FILE},
106 { .thread_name = "swap", .config_name = "swap", .enabled = 0, .start_routine = ebpf_swap_thread,
104 - .update_time = 1, .global_charts = 1, .apps_charts = CONFIG_BOOLEAN_NO, .cgroup_charts = CONFIG_BOOLEAN_NO,
105 - .mode = MODE_ENTRY, .optional = 0, .apps_routine = ebpf_swap_create_apps_charts, .maps = NULL,
107 + .update_every = EBPF_DEFAULT_UPDATE_EVERY, .global_charts = 1, .apps_charts = CONFIG_BOOLEAN_NO,
108 + .cgroup_charts = CONFIG_BOOLEAN_NO, .mode = MODE_ENTRY, .optional = 0,
109 + .apps_routine = ebpf_swap_create_apps_charts, .maps = NULL,
110 .pid_map_size = ND_EBPF_DEFAULT_PID_SIZE, .names = NULL, .cfg = &swap_config,
111 .config_file = NETDATA_DIRECTORY_SWAP_CONFIG_FILE},
112 { .thread_name = "vfs", .config_name = "vfs", .enabled = 0, .start_routine = ebpf_vfs_thread,
109 - .update_time = 1, .global_charts = 1, .apps_charts = CONFIG_BOOLEAN_NO, .cgroup_charts = CONFIG_BOOLEAN_NO,
110 - .mode = MODE_ENTRY, .optional = 0, .apps_routine = ebpf_vfs_create_apps_charts, .maps = NULL,
113 + .update_every = EBPF_DEFAULT_UPDATE_EVERY, .global_charts = 1, .apps_charts = CONFIG_BOOLEAN_NO,
114 + .cgroup_charts = CONFIG_BOOLEAN_NO, .mode = MODE_ENTRY, .optional = 0,
115 + .apps_routine = ebpf_vfs_create_apps_charts, .maps = NULL,
116 .pid_map_size = ND_EBPF_DEFAULT_PID_SIZE, .names = NULL, .cfg = &vfs_config,
117 .config_file = NETDATA_DIRECTORY_VFS_CONFIG_FILE },
118 { .thread_name = "filesystem", .config_name = "filesystem", .enabled = 0, .start_routine = ebpf_filesystem_thread,
114 - .update_time = 1, .global_charts = 1, .apps_charts = CONFIG_BOOLEAN_NO, .cgroup_charts = CONFIG_BOOLEAN_NO,
115 - .mode = MODE_ENTRY, .optional = 0, .apps_routine = NULL, .maps = NULL,
119 + .update_every = EBPF_DEFAULT_UPDATE_EVERY, .global_charts = 1, .apps_charts = CONFIG_BOOLEAN_NO,
120 + .cgroup_charts = CONFIG_BOOLEAN_NO, .mode = MODE_ENTRY, .optional = 0, .apps_routine = NULL, .maps = NULL,
121 .pid_map_size = ND_EBPF_DEFAULT_PID_SIZE, .names = NULL, .cfg = &fs_config,
122 .config_file = NETDATA_FILESYSTEM_CONFIG_FILE},
123 { .thread_name = "disk", .config_name = "disk", .enabled = 0, .start_routine = ebpf_disk_thread,
119 - .update_time = 1, .global_charts = 1, .apps_charts = CONFIG_BOOLEAN_NO, .cgroup_charts = CONFIG_BOOLEAN_NO,
120 - .mode = MODE_ENTRY, .optional = 0, .apps_routine = NULL, .maps = NULL,
124 + .update_every = EBPF_DEFAULT_UPDATE_EVERY, .global_charts = 1, .apps_charts = CONFIG_BOOLEAN_NO,
125 + .cgroup_charts = CONFIG_BOOLEAN_NO, .mode = MODE_ENTRY, .optional = 0, .apps_routine = NULL, .maps = NULL,
126 .pid_map_size = ND_EBPF_DEFAULT_PID_SIZE, .names = NULL, .cfg = &disk_config,
127 .config_file = NETDATA_DISK_CONFIG_FILE},
128 { .thread_name = "mount", .config_name = "mount", .enabled = 0, .start_routine = ebpf_mount_thread,
124 - .update_time = 1, .global_charts = 1, .apps_charts = CONFIG_BOOLEAN_NO, .cgroup_charts = CONFIG_BOOLEAN_NO,
125 - .mode = MODE_ENTRY, .optional = 0, .apps_routine = NULL, .maps = NULL,
129 + .update_every = EBPF_DEFAULT_UPDATE_EVERY, .global_charts = 1, .apps_charts = CONFIG_BOOLEAN_NO,
130 + .cgroup_charts = CONFIG_BOOLEAN_NO, .mode = MODE_ENTRY, .optional = 0, .apps_routine = NULL, .maps = NULL,
131 .pid_map_size = ND_EBPF_DEFAULT_PID_SIZE, .names = NULL, .cfg = &mount_config,
132 .config_file = NETDATA_MOUNT_CONFIG_FILE},
133 { .thread_name = "fd", .config_name = "fd", .enabled = 0, .start_routine = ebpf_fd_thread,
129 - .update_time = 1, .global_charts = 1, .apps_charts = CONFIG_BOOLEAN_NO, .cgroup_charts = CONFIG_BOOLEAN_NO,
130 - .mode = MODE_ENTRY, .optional = 0, .apps_routine = ebpf_fd_create_apps_charts, .maps = NULL,
134 + .update_every = EBPF_DEFAULT_UPDATE_EVERY, .global_charts = 1, .apps_charts = CONFIG_BOOLEAN_NO,
135 + .cgroup_charts = CONFIG_BOOLEAN_NO, .mode = MODE_ENTRY, .optional = 0,
136 + .apps_routine = ebpf_fd_create_apps_charts, .maps = NULL,
137 .pid_map_size = ND_EBPF_DEFAULT_PID_SIZE, .names = NULL, .cfg = &fd_config,
138 .config_file = NETDATA_FD_CONFIG_FILE},
139 { .thread_name = "hardirq", .config_name = "hardirq", .enabled = 0, .start_routine = ebpf_hardirq_thread,
134 - .update_time = 1, .global_charts = 1, .apps_charts = CONFIG_BOOLEAN_NO, .cgroup_charts = CONFIG_BOOLEAN_NO,
135 - .mode = MODE_ENTRY, .optional = 0, .apps_routine = NULL, .maps = NULL,
140 + .update_every = EBPF_DEFAULT_UPDATE_EVERY, .global_charts = 1, .apps_charts = CONFIG_BOOLEAN_NO,
141 + .cgroup_charts = CONFIG_BOOLEAN_NO, .mode = MODE_ENTRY, .optional = 0, .apps_routine = NULL, .maps = NULL,
142 .pid_map_size = ND_EBPF_DEFAULT_PID_SIZE, .names = NULL, .cfg = &hardirq_config,
143 .config_file = NETDATA_HARDIRQ_CONFIG_FILE},
144 { .thread_name = "softirq", .config_name = "softirq", .enabled = 0, .start_routine = ebpf_softirq_thread,
139 - .update_time = 1, .global_charts = 1, .apps_charts = CONFIG_BOOLEAN_NO, .cgroup_charts = CONFIG_BOOLEAN_NO,
140 - .mode = MODE_ENTRY, .optional = 0, .apps_routine = NULL, .maps = NULL,
145 + .update_every = EBPF_DEFAULT_UPDATE_EVERY, .global_charts = 1, .apps_charts = CONFIG_BOOLEAN_NO,
146 + .cgroup_charts = CONFIG_BOOLEAN_NO, .mode = MODE_ENTRY, .optional = 0, .apps_routine = NULL, .maps = NULL,
147 .pid_map_size = ND_EBPF_DEFAULT_PID_SIZE, .names = NULL, .cfg = &softirq_config,
148 .config_file = NETDATA_SOFTIRQ_CONFIG_FILE},
149 { .thread_name = "oomkill", .config_name = "oomkill", .enabled = 0, .start_routine = ebpf_oomkill_thread,
144 - .update_time = 1, .global_charts = 1, .apps_charts = CONFIG_BOOLEAN_NO, .cgroup_charts = CONFIG_BOOLEAN_NO,
145 - .mode = MODE_ENTRY, .optional = 0, .apps_routine = ebpf_oomkill_create_apps_charts, .maps = NULL,
150 + .update_every = EBPF_DEFAULT_UPDATE_EVERY, .global_charts = 1, .apps_charts = CONFIG_BOOLEAN_NO,
151 + .cgroup_charts = CONFIG_BOOLEAN_NO, .mode = MODE_ENTRY, .optional = 0,
152 + .apps_routine = ebpf_oomkill_create_apps_charts, .maps = NULL,
153 .pid_map_size = ND_EBPF_DEFAULT_PID_SIZE, .names = NULL, .cfg = &oomkill_config,
154 .config_file = NETDATA_OOMKILL_CONFIG_FILE},
155 { .thread_name = "shm", .config_name = "shm", .enabled = 0, .start_routine = ebpf_shm_thread,
149 - .update_time = 1, .global_charts = 1, .apps_charts = CONFIG_BOOLEAN_NO, .cgroup_charts = CONFIG_BOOLEAN_NO,
150 - .mode = MODE_ENTRY, .optional = 0, .apps_routine = ebpf_shm_create_apps_charts, .maps = NULL,
156 + .update_every = EBPF_DEFAULT_UPDATE_EVERY, .global_charts = 1, .apps_charts = CONFIG_BOOLEAN_NO,
157 + .cgroup_charts = CONFIG_BOOLEAN_NO, .mode = MODE_ENTRY, .optional = 0,
158 + .apps_routine = ebpf_shm_create_apps_charts, .maps = NULL,
159 .pid_map_size = ND_EBPF_DEFAULT_PID_SIZE, .names = NULL, .cfg = &shm_config,
160 .config_file = NETDATA_DIRECTORY_SHM_CONFIG_FILE},
153 - { .thread_name = NULL, .enabled = 0, .start_routine = NULL, .update_time = 1,
161 + { .thread_name = NULL, .enabled = 0, .start_routine = NULL, .update_every = EBPF_DEFAULT_UPDATE_EVERY,
162 .global_charts = 0, .apps_charts = CONFIG_BOOLEAN_NO, .cgroup_charts = CONFIG_BOOLEAN_NO,
163 .mode = MODE_ENTRY, .optional = 0, .apps_routine = NULL, .maps = NULL, .pid_map_size = 0, .names = NULL,
164 .cfg = NULL, .config_name = NULL},
@@ -426,18 +434,19 @@ void write_io_chart(char *chart, char *family, char *dwrite, long long vwrite, c
434 /**
435 * Write chart cmd on standard output
436 *
429 - * @param type chart type
430 - * @param id chart id
431 - * @param title chart title
432 - * @param units units label
433 - * @param family group name used to attach the chart on dashboard
434 - * @param charttype chart type
435 - * @param context chart context
436 - * @param order chart order
437 - * @param module chart module name, this is the eBPF thread.
437 + * @param type chart type
438 + * @param id chart id
439 + * @param title chart title
440 + * @param units units label
441 + * @param family group name used to attach the chart on dashboard
442 + * @param charttype chart type
443 + * @param context chart context
444 + * @param order chart order
445 + * @param update_every update interval used by plugin
446 + * @param module chart module name, this is the eBPF thread.
447 */
448 void ebpf_write_chart_cmd(char *type, char *id, char *title, char *units, char *family,
440 - char *charttype, char *context, int order, char *module)
449 + char *charttype, char *context, int order, int update_every, char *module)
450 {
451 printf("CHART %s.%s '' '%s' '%s' '%s' '%s' '%s' %d %d '' 'ebpf.plugin' '%s'\n",
452 type,
@@ -463,9 +472,10 @@ void ebpf_write_chart_cmd(char *type, char *id, char *title, char *units, char *
472 * @param charttype chart type
473 * @param context chart context
474 * @param order chart order
475 + * @param update_every value to overwrite the update frequency set by the server.
476 */
477 void ebpf_write_chart_obsolete(char *type, char *id, char *title, char *units, char *family,
468 - char *charttype, char *context, int order)
478 + char *charttype, char *context, int order, int update_every)
479 {
480 printf("CHART %s.%s '' '%s' '%s' '%s' '%s' '%s' %d %d 'obsolete'\n",
481 type,
@@ -513,18 +523,19 @@ void ebpf_create_global_dimension(void *ptr, int end)
523 /**
524 * Call write_chart_cmd to create the charts
525 *
516 - * @param type chart type
517 - * @param id chart id
518 - * @param title chart title
519 - * @param units axis label
520 - * @param family group name used to attach the chart on dashboard
521 - * @param context chart context
522 - * @param charttype chart type
523 - * @param order order number of the specified chart
524 - * @param ncd a pointer to a function called to create dimensions
525 - * @param move a pointer for a structure that has the dimensions
526 - * @param end number of dimensions for the chart created
527 - * @param module chart module name, this is the eBPF thread.
526 + * @param type chart type
527 + * @param id chart id
528 + * @param title chart title
529 + * @param units axis label
530 + * @param family group name used to attach the chart on dashboard
531 + * @param context chart context
532 + * @param charttype chart type
533 + * @param order order number of the specified chart
534 + * @param ncd a pointer to a function called to create dimensions
535 + * @param move a pointer for a structure that has the dimensions
536 + * @param end number of dimensions for the chart created
537 + * @param update_every update interval used with chart.
538 + * @param module chart module name, this is the eBPF thread.
539 */
540 void ebpf_create_chart(char *type,
541 char *id,
@@ -537,9 +548,10 @@ void ebpf_create_chart(char *type,
548 void (*ncd)(void *, int),
549 void *move,
550 int end,
551 + int update_every,
552 char *module)
553 {
542 - ebpf_write_chart_cmd(type, id, title, units, family, charttype, context, order, module);
554 + ebpf_write_chart_cmd(type, id, title, units, family, charttype, context, order, update_every, module);
555
556 if (ncd) {
557 ncd(move, end);
@@ -557,13 +569,15 @@ void ebpf_create_chart(char *type,
569 * @param order the chart order
570 * @param algorithm the algorithm used by dimension
571 * @param root structure used to create the dimensions.
572 + * @param update_every update interval used by plugin
573 * @param module chart module name, this is the eBPF thread.
574 */
575 void ebpf_create_charts_on_apps(char *id, char *title, char *units, char *family, char *charttype, int order,
563 - char *algorithm, struct target *root, char *module)
576 + char *algorithm, struct target *root, int update_every, char *module)
577 {
578 struct target *w;
566 - ebpf_write_chart_cmd(NETDATA_APPS_FAMILY, id, title, units, family, charttype, NULL, order, module);
579 + ebpf_write_chart_cmd(NETDATA_APPS_FAMILY, id, title, units, family, charttype, NULL, order,
580 + update_every, module);
581
582 for (w = root; w; w = w->next) {
583 if (unlikely(w->exposed))
@@ -1021,13 +1035,16 @@ static inline void how_to_load(char *ptr)
1035 * Update interval
1036 *
1037 * Update default interval with value from user
1038 + *
1039 + * @param update_every value to overwrite the update frequency set by the server.
1040 */
1025 -static void ebpf_update_interval()
1041 +static void ebpf_update_interval(int update_every)
1042 {
1043 int i;
1028 - int value = (int) appconfig_get_number(&collector_config, EBPF_GLOBAL_SECTION, EBPF_CFG_UPDATE_EVERY, 1);
1044 + int value = (int) appconfig_get_number(&collector_config, EBPF_GLOBAL_SECTION, EBPF_CFG_UPDATE_EVERY,
1045 + update_every);
1046 for (i = 0; ebpf_modules[i].thread_name; i++) {
1030 - ebpf_modules[i].update_time = value;
1047 + ebpf_modules[i].update_every = value;
1048 }
1049 }
1050
@@ -1052,8 +1069,9 @@ static void ebpf_update_table_size()
1069 *
1070 * @param disable_apps variable to store information related to apps.
1071 * @param disable_cgroups variable to store information related to cgroups.
1072 + * @param update_every value to overwrite the update frequency set by the server.
1073 */
1056 -static void read_collector_values(int *disable_apps, int *disable_cgroups)
1074 +static void read_collector_values(int *disable_apps, int *disable_cgroups, int update_every)
1075 {
1076 // Read global section
1077 char *value;
@@ -1066,7 +1084,7 @@ static void read_collector_values(int *disable_apps, int *disable_cgroups)
1084
1085 how_to_load(value);
1086
1069 - ebpf_update_interval();
1087 + ebpf_update_interval(update_every);
1088
1089 ebpf_update_table_size();
1090
@@ -1228,10 +1246,11 @@ static void read_collector_values(int *disable_apps, int *disable_cgroups)
1246 * @param path the path where the file ebpf.conf is stored.
1247 * @param disable_apps variable to store the information about apps plugin status.
1248 * @param disable_cgroups variable to store the information about cgroups plugin status.
1249 + * @param update_every value to overwrite the update frequency set by the server.
1250 *
1251 * @return 0 on success and -1 otherwise.
1252 */
1234 -static int load_collector_config(char *path, int *disable_apps, int *disable_cgroups)
1253 +static int load_collector_config(char *path, int *disable_apps, int *disable_cgroups, int update_every)
1254 {
1255 char lpath[4096];
1256
@@ -1243,7 +1262,7 @@ static int load_collector_config(char *path, int *disable_apps, int *disable_cgr
1262 }
1263 }
1264
1246 - read_collector_values(disable_apps, disable_cgroups);
1265 + read_collector_values(disable_apps, disable_cgroups, update_every);
1266
1267 return 0;
1268 }
@@ -1494,15 +1513,15 @@ static void parse_args(int argc, char **argv)
1513 }
1514 }
1515
1497 - if (freq > 0) {
1498 - update_every = freq;
1516 + if (freq <= 0) {
1517 + freq = EBPF_DEFAULT_UPDATE_EVERY;
1518 }
1519
1501 - if (load_collector_config(ebpf_user_config_dir, &disable_apps, &disable_cgroups)) {
1520 + if (load_collector_config(ebpf_user_config_dir, &disable_apps, &disable_cgroups, freq)) {
1521 info(
1522 "Does not have a configuration file inside `%s/ebpf.d.conf. It will try to load stock file.",
1523 ebpf_user_config_dir);
1505 - if (load_collector_config(ebpf_stock_config_dir, &disable_apps, &disable_cgroups)) {
1524 + if (load_collector_config(ebpf_stock_config_dir, &disable_apps, &disable_cgroups, freq)) {
1525 info("Does not have a stock file. It is starting with default options.");
1526 } else {
1527 enabled = 1;
collectors/ebpf.plugin/ebpf.d.conf
+1 -1
@@ -19,7 +19,7 @@
19 ebpf load mode = entry
20 apps = yes
21 cgroups = no
22 - update every = 1
22 + update every = 5
23 pid table size = 32768
24
25 #
collectors/ebpf.plugin/ebpf.d/cachestat.conf
+2 -2
@@ -11,9 +11,9 @@
11 # The `pid table size` defines the maximum number of PIDs stored inside the application hash table.
12 #
13 # Uncomment lines to define specific options for thread.
14 -[global]
14 +#[global]
15 # ebpf load mode = entry
16 # apps = yes
17 # cgroups = no
18 - update every = 2
18 +# update every = 10
19 # pid table size = 32768
collectors/ebpf.plugin/ebpf.d/dcstat.conf
+2 -2
@@ -9,9 +9,9 @@
9 # the setting `apps` and `cgroups` to 'no'.
10 #
11 # Uncomment lines to define specific options for thread.
12 -[global]
12 +#[global]
13 # ebpf load mode = entry
14 # apps = yes
15 # cgroups = no
16 - update every = 2
16 +# update every = 10
17 # pid table size = 32768
collectors/ebpf.plugin/ebpf.d/disk.conf
+3 -3
@@ -3,7 +3,7 @@
3 # `return : In the `return` mode, the eBPF collector monitors the same kernel functions as `entry`, but also creates
4 # new charts for the return of these functions, such as errors.
5 #
6 -[global]
7 - ebpf load mode = entry
8 - update every = 2
6 +#[global]
7 +# ebpf load mode = entry
8 +# update every = 10
9
collectors/ebpf.plugin/ebpf.d/fd.conf
+2 -2
@@ -11,9 +11,9 @@
11 # The `pid table size` defines the maximum number of PIDs stored inside the hash table.
12 #
13 # Uncomment lines to define specific options for thread.
14 -[global]
14 +#[global]
15 # ebpf load mode = entry
16 # apps = yes
17 # cgroups = no
18 - update every = 1
18 +# update every = 10
19 # pid table size = 32768
collectors/ebpf.plugin/ebpf.d/filesystem.conf
+3 -3
@@ -7,9 +7,9 @@
7 # If you want to disable the integration with `apps.plugin` along with the above charts, change the setting `apps` to
8 # 'no'.
9 #
10 -[global]
11 - ebpf load mode = entry
12 - update every = 2
10 +#[global]
11 +# ebpf load mode = entry
12 +# update every = 10
13
14 # All filesystems are named as 'NAMEdist' where NAME is the filesystem name while 'dist' is a reference for distribution.
15 [filesystem]
collectors/ebpf.plugin/ebpf.d/hardirq.conf
+3 -3
@@ -3,6 +3,6 @@
3 # `return : In the `return` mode, the eBPF collector monitors the same kernel functions as `entry`, but also creates
4 # new charts for the return of these functions, such as errors.
5 #
6 -[global]
7 - ebpf load mode = entry
8 - update every = 1
6 +#[global]
7 +# ebpf load mode = entry
8 +# update every = 10
collectors/ebpf.plugin/ebpf.d/mount.conf
+3 -3
@@ -3,6 +3,6 @@
3 # `return : In the `return` mode, the eBPF collector monitors the same kernel functions as `entry`, but also creates
4 # new charts for the return of these functions, such as errors.
5 #
6 -[global]
7 - ebpf load mode = entry
8 - update every = 2
6 +#[global]
7 +# ebpf load mode = entry
8 +# update every = 1
collectors/ebpf.plugin/ebpf.d/network.conf
+1 -1
@@ -18,7 +18,7 @@
18 # ebpf load mode = entry
19 # apps = yes
20 # cgroups = no
21 - update every = 1
21 +# update every = 10
22 bandwidth table size = 16384
23 ipv4 connection table size = 16384
24 ipv6 connection table size = 16384
collectors/ebpf.plugin/ebpf.d/oomkill.conf
+3 -3
@@ -2,6 +2,6 @@
2 # `entry` : The eBPF collector only monitors calls for the functions, and does not show charts related to errors.
3 # `return : In the `return` mode, the eBPF collector monitors the same kernel functions as `entry`, but also creates
4 # new charts for the return of these functions, such as errors.
5 -[global]
6 - ebpf load mode = entry
7 - update every = 1
5 +#[global]
6 +# ebpf load mode = entry
7 +# update every = 1
collectors/ebpf.plugin/ebpf.d/process.conf
+2 -2
@@ -11,9 +11,9 @@
11 # The `pid table size` defines the maximum number of PIDs stored inside the hash table.
12 #
13 # Uncomment lines to define specific options for thread.
14 -[global]
14 +#[global]
15 # ebpf load mode = entry
16 # apps = yes
17 # cgroups = no
18 - update every = 1
18 +# update every = 10
19 # pid table size = 32768
collectors/ebpf.plugin/ebpf.d/shm.conf
+2 -2
@@ -9,11 +9,11 @@
9 # the setting `apps` and `cgroups` to 'no'.
10 #
11 # Uncomment lines to define specific options for thread.
12 -[global]
12 +#[global]
13 # ebpf load mode = entry
14 # apps = yes
15 # cgroups = no
16 - update every = 2
16 +# update every = 10
17 # pid table size = 32768
18
19 # List of monitored syscalls
collectors/ebpf.plugin/ebpf.d/softirq.conf
+3 -3
@@ -3,6 +3,6 @@
3 # `return : In the `return` mode, the eBPF collector monitors the same kernel functions as `entry`, but also creates
4 # new charts for the return of these functions, such as errors.
5 #
6 -[global]
7 - ebpf load mode = entry
8 - update every = 1
6 +#[global]
7 +# ebpf load mode = entry
8 +# update every = 10
collectors/ebpf.plugin/ebpf.d/swap.conf
+2 -2
@@ -9,9 +9,9 @@
9 # the setting `apps` and `cgroups` to 'no'.
10 #
11 # Uncomment lines to define specific options for thread.
12 -[global]
12 +#[global]
13 # ebpf load mode = entry
14 # apps = yes
15 # cgroups = no
16 - update every = 2
16 +# update every = 10
17 # pid table size = 32768
collectors/ebpf.plugin/ebpf.d/sync.conf
+2 -2
@@ -9,11 +9,11 @@
9 # the setting `apps` and `cgroups` to 'no'.
10 #
11 #
12 -[global]
12 +#[global]
13 # ebpf load mode = entry
14 # apps = yes
15 # cgroups = no
16 - update every = 2
16 +# update every = 10
17
18 # List of monitored syscalls
19 [syscalls]
collectors/ebpf.plugin/ebpf.d/vfs.conf
+2 -2
@@ -9,9 +9,9 @@
9 # the setting `apps` and `cgroups` to 'no'.
10 #
11 # Uncomment lines to define specific options for thread.
12 -[global]
12 +#[global]
13 # ebpf load mode = entry
14 # apps = yes
15 # cgroups = no
16 - update every = 1
16 +# update every = 10
17 # pid table size = 32768
collectors/ebpf.plugin/ebpf.h
+6 -2
@@ -134,6 +134,8 @@ typedef struct ebpf_tracepoint {
134 #define EBPF_SYS_CLONE_IDX 11
135 #define EBPF_MAX_MAPS 32
136
137 +#define EBPF_DEFAULT_UPDATE_EVERY 10
138 +
139 enum ebpf_algorithms_list {
140 NETDATA_EBPF_ABSOLUTE_IDX,
141 NETDATA_EBPF_INCREMENTAL_IDX
@@ -171,6 +173,7 @@ extern void ebpf_write_chart_cmd(char *type,
173 char *charttype,
174 char *context,
175 int order,
176 + int update_every,
177 char *module);
178
179 extern void ebpf_write_global_dimension(char *name, char *id, char *algorithm);
@@ -188,6 +191,7 @@ extern void ebpf_create_chart(char *type,
191 void (*ncd)(void *, int),
192 void *move,
193 int end,
194 + int update_every,
195 char *module);
196
197 extern void write_begin_chart(char *family, char *name);
@@ -209,6 +213,7 @@ extern void ebpf_create_charts_on_apps(char *name,
213 int order,
214 char *algorithm,
215 struct target *root,
216 + int update_every,
217 char *module);
218
219 extern void write_end_chart();
@@ -243,7 +248,6 @@ extern int shm_fd_ebpf_cgroup;
248 extern sem_t *shm_sem_ebpf_cgroup;
249 extern pthread_mutex_t mutex_cgroup_shm;
250 extern size_t all_pids_count;
246 -extern int update_every;
251 extern uint32_t finalized_threads;
252
253 // Socket functions and variables
@@ -255,7 +259,7 @@ extern void ebpf_one_dimension_write_charts(char *family, char *chart, char *dim
259 extern collected_number get_value_from_structure(char *basis, size_t offset);
260 extern void ebpf_update_pid_table(ebpf_local_maps_t *pid, ebpf_module_t *em);
261 extern void ebpf_write_chart_obsolete(char *type, char *id, char *title, char *units, char *family,
258 - char *charttype, char *context, int order);
262 + char *charttype, char *context, int order, int update_every);
263 extern void write_histogram_chart(char *family, char *name, const netdata_idx_t *hist, char **dimensions, uint32_t end);
264
265 #define EBPF_MAX_SYNCHRONIZATION_TIME 300
collectors/ebpf.plugin/ebpf_cachestat.c
+59 -42
@@ -325,7 +325,6 @@ static void ebpf_update_cachestat_cgroup()
325 */
326 void ebpf_cachestat_create_apps_charts(struct ebpf_module *em, void *ptr)
327 {
328 - UNUSED(em);
328 struct target *root = ptr;
329 ebpf_create_charts_on_apps(NETDATA_CACHESTAT_HIT_RATIO_CHART,
330 "The ratio is calculated dividing the Hit pages per total cache accesses without counting dirties.",
@@ -334,7 +333,7 @@ void ebpf_cachestat_create_apps_charts(struct ebpf_module *em, void *ptr)
333 NETDATA_EBPF_CHART_TYPE_LINE,
334 20090,
335 ebpf_algorithms[NETDATA_EBPF_ABSOLUTE_IDX],
337 - root, NETDATA_EBPF_MODULE_NAME_CACHESTAT);
336 + root, em->update_every, NETDATA_EBPF_MODULE_NAME_CACHESTAT);
337
338 ebpf_create_charts_on_apps(NETDATA_CACHESTAT_DIRTY_CHART,
339 "Number of pages marked as dirty. When a page is called dirty, this means that the data stored inside the page needs to be written to devices.",
@@ -343,7 +342,7 @@ void ebpf_cachestat_create_apps_charts(struct ebpf_module *em, void *ptr)
342 NETDATA_EBPF_CHART_TYPE_STACKED,
343 20091,
344 ebpf_algorithms[NETDATA_EBPF_INCREMENTAL_IDX],
346 - root, NETDATA_EBPF_MODULE_NAME_CACHESTAT);
345 + root, em->update_every, NETDATA_EBPF_MODULE_NAME_CACHESTAT);
346
347 ebpf_create_charts_on_apps(NETDATA_CACHESTAT_HIT_CHART,
348 "Number of cache access without counting dirty pages and page additions.",
@@ -352,7 +351,7 @@ void ebpf_cachestat_create_apps_charts(struct ebpf_module *em, void *ptr)
351 NETDATA_EBPF_CHART_TYPE_STACKED,
352 20092,
353 ebpf_algorithms[NETDATA_EBPF_ABSOLUTE_IDX],
355 - root, NETDATA_EBPF_MODULE_NAME_CACHESTAT);
354 + root, em->update_every, NETDATA_EBPF_MODULE_NAME_CACHESTAT);
355
356 ebpf_create_charts_on_apps(NETDATA_CACHESTAT_MISSES_CHART,
357 "Page caches added without counting dirty pages",
@@ -361,7 +360,7 @@ void ebpf_cachestat_create_apps_charts(struct ebpf_module *em, void *ptr)
360 NETDATA_EBPF_CHART_TYPE_STACKED,
361 20093,
362 ebpf_algorithms[NETDATA_EBPF_ABSOLUTE_IDX],
364 - root, NETDATA_EBPF_MODULE_NAME_CACHESTAT);
363 + root, em->update_every, NETDATA_EBPF_MODULE_NAME_CACHESTAT);
364 }
365
366 /*****************************************************************
@@ -414,7 +413,7 @@ void *ebpf_cachestat_read_hash(void *ptr)
413
414 ebpf_module_t *em = (ebpf_module_t *)ptr;
415
417 - usec_t step = NETDATA_LATENCY_CACHESTAT_SLEEP_MS * em->update_time;
416 + usec_t step = NETDATA_LATENCY_CACHESTAT_SLEEP_MS * em->update_every;
417 while (!close_ebpf_plugin) {
418 usec_t dt = heartbeat_next(&hb, step);
419 (void)dt;
@@ -594,34 +593,40 @@ void ebpf_cachestat_calc_chart_values()
593 * Create Systemd cachestat Charts
594 *
595 * Create charts when systemd is enabled
596 + *
597 + * @param update_every value to overwrite the update frequency set by the server.
598 **/
598 -static void ebpf_create_systemd_cachestat_charts()
599 +static void ebpf_create_systemd_cachestat_charts(int update_every)
600 {
601 ebpf_create_charts_on_systemd(NETDATA_CACHESTAT_HIT_RATIO_CHART,
602 "Hit is calculating using total cache added without dirties per total added because of red misses.",
603 EBPF_COMMON_DIMENSION_PERCENTAGE, NETDATA_CACHESTAT_SUBMENU,
604 NETDATA_EBPF_CHART_TYPE_LINE, 21100,
605 ebpf_algorithms[NETDATA_EBPF_ABSOLUTE_IDX],
605 - NETDATA_SYSTEMD_CACHESTAT_HIT_RATIO_CONTEXT, NETDATA_EBPF_MODULE_NAME_CACHESTAT);
606 + NETDATA_SYSTEMD_CACHESTAT_HIT_RATIO_CONTEXT, NETDATA_EBPF_MODULE_NAME_CACHESTAT,
607 + update_every);
608
609 ebpf_create_charts_on_systemd(NETDATA_CACHESTAT_DIRTY_CHART,
610 "Number of dirty pages added to the page cache.",
611 EBPF_CACHESTAT_DIMENSION_PAGE, NETDATA_CACHESTAT_SUBMENU,
612 NETDATA_EBPF_CHART_TYPE_LINE, 21101,
613 ebpf_algorithms[NETDATA_EBPF_ABSOLUTE_IDX],
612 - NETDATA_SYSTEMD_CACHESTAT_MODIFIED_CACHE_CONTEXT, NETDATA_EBPF_MODULE_NAME_CACHESTAT);
614 + NETDATA_SYSTEMD_CACHESTAT_MODIFIED_CACHE_CONTEXT, NETDATA_EBPF_MODULE_NAME_CACHESTAT,
615 + update_every);
616
617 ebpf_create_charts_on_systemd(NETDATA_CACHESTAT_HIT_CHART, "Hits are function calls that Netdata counts.",
618 EBPF_CACHESTAT_DIMENSION_HITS, NETDATA_CACHESTAT_SUBMENU,
619 NETDATA_EBPF_CHART_TYPE_LINE, 21102,
620 ebpf_algorithms[NETDATA_EBPF_ABSOLUTE_IDX],
618 - NETDATA_SYSTEMD_CACHESTAT_HIT_FILE_CONTEXT, NETDATA_EBPF_MODULE_NAME_CACHESTAT);
621 + NETDATA_SYSTEMD_CACHESTAT_HIT_FILE_CONTEXT, NETDATA_EBPF_MODULE_NAME_CACHESTAT,
622 + update_every);
623
624 ebpf_create_charts_on_systemd(NETDATA_CACHESTAT_MISSES_CHART, "Misses are function calls that Netdata counts.",
625 EBPF_CACHESTAT_DIMENSION_MISSES, NETDATA_CACHESTAT_SUBMENU,
626 NETDATA_EBPF_CHART_TYPE_LINE, 21103,
627 ebpf_algorithms[NETDATA_EBPF_ABSOLUTE_IDX],
624 - NETDATA_SYSTEMD_CACHESTAT_MISS_FILES_CONTEXT, NETDATA_EBPF_MODULE_NAME_CACHESTAT);
628 + NETDATA_SYSTEMD_CACHESTAT_MISS_FILES_CONTEXT, NETDATA_EBPF_MODULE_NAME_CACHESTAT,
629 + update_every);
630 }
631
632 /**
@@ -703,8 +708,9 @@ static void ebpf_send_specific_cachestat_data(char *type, netdata_publish_caches
708 * Create charts for cgroup/application.
709 *
710 * @param type the chart type.
711 + * @param update_every value to overwrite the update frequency set by the server.
712 */
707 -static void ebpf_create_specific_cachestat_charts(char *type)
713 +static void ebpf_create_specific_cachestat_charts(char *type, int update_every)
714 {
715 ebpf_create_chart(type, NETDATA_CACHESTAT_HIT_RATIO_CHART,
716 "Hit is calculating using total cache added without dirties per total added because of red misses.",
@@ -712,7 +718,7 @@ static void ebpf_create_specific_cachestat_charts(char *type)
718 NETDATA_CGROUP_CACHESTAT_HIT_RATIO_CONTEXT,
719 NETDATA_EBPF_CHART_TYPE_LINE, NETDATA_CHART_PRIO_CGROUPS_CONTAINERS + 5200,
720 ebpf_create_global_dimension,
715 - cachestat_counter_publish_aggregated, 1, NETDATA_EBPF_MODULE_NAME_CACHESTAT);
721 + cachestat_counter_publish_aggregated, 1, update_every, NETDATA_EBPF_MODULE_NAME_CACHESTAT);
722
723 ebpf_create_chart(type, NETDATA_CACHESTAT_DIRTY_CHART,
724 "Number of dirty pages added to the page cache.",
@@ -721,7 +727,7 @@ static void ebpf_create_specific_cachestat_charts(char *type)
727 NETDATA_EBPF_CHART_TYPE_LINE, NETDATA_CHART_PRIO_CGROUPS_CONTAINERS + 5201,
728 ebpf_create_global_dimension,
729 &cachestat_counter_publish_aggregated[NETDATA_CACHESTAT_IDX_DIRTY], 1,
724 - NETDATA_EBPF_MODULE_NAME_CACHESTAT);
730 + update_every, NETDATA_EBPF_MODULE_NAME_CACHESTAT);
731
732 ebpf_create_chart(type, NETDATA_CACHESTAT_HIT_CHART,
733 "Hits are function calls that Netdata counts.",
@@ -730,7 +736,7 @@ static void ebpf_create_specific_cachestat_charts(char *type)
736 NETDATA_EBPF_CHART_TYPE_LINE, NETDATA_CHART_PRIO_CGROUPS_CONTAINERS + 5202,
737 ebpf_create_global_dimension,
738 &cachestat_counter_publish_aggregated[NETDATA_CACHESTAT_IDX_HIT], 1,
733 - NETDATA_EBPF_MODULE_NAME_CACHESTAT);
739 + update_every, NETDATA_EBPF_MODULE_NAME_CACHESTAT);
740
741 ebpf_create_chart(type, NETDATA_CACHESTAT_MISSES_CHART,
742 "Misses are function calls that Netdata counts.",
@@ -739,7 +745,7 @@ static void ebpf_create_specific_cachestat_charts(char *type)
745 NETDATA_EBPF_CHART_TYPE_LINE, NETDATA_CHART_PRIO_CGROUPS_CONTAINERS + 5203,
746 ebpf_create_global_dimension,
747 &cachestat_counter_publish_aggregated[NETDATA_CACHESTAT_IDX_MISS], 1,
742 - NETDATA_EBPF_MODULE_NAME_CACHESTAT);
748 + update_every, NETDATA_EBPF_MODULE_NAME_CACHESTAT);
749 }
750
751 /**
@@ -748,38 +754,41 @@ static void ebpf_create_specific_cachestat_charts(char *type)
754 * Obsolete charts for cgroup/application.
755 *
756 * @param type the chart type.
757 + * @param update_every value to overwrite the update frequency set by the server.
758 */
752 -static void ebpf_obsolete_specific_cachestat_charts(char *type)
759 +static void ebpf_obsolete_specific_cachestat_charts(char *type, int update_every)
760 {
761 ebpf_write_chart_obsolete(type, NETDATA_CACHESTAT_HIT_RATIO_CHART,
762 "Hit is calculating using total cache added without dirties per total added because of red misses.",
763 EBPF_COMMON_DIMENSION_PERCENTAGE, NETDATA_CACHESTAT_SUBMENU,
764 NETDATA_EBPF_CHART_TYPE_LINE, NETDATA_CGROUP_CACHESTAT_HIT_RATIO_CONTEXT,
758 - NETDATA_CHART_PRIO_CGROUPS_CONTAINERS + 5200);
765 + NETDATA_CHART_PRIO_CGROUPS_CONTAINERS + 5200, update_every);
766
767 ebpf_write_chart_obsolete(type, NETDATA_CACHESTAT_DIRTY_CHART,
768 "Number of dirty pages added to the page cache.",
769 EBPF_CACHESTAT_DIMENSION_PAGE, NETDATA_CACHESTAT_SUBMENU,
770 NETDATA_EBPF_CHART_TYPE_LINE, NETDATA_CGROUP_CACHESTAT_MODIFIED_CACHE_CONTEXT,
764 - NETDATA_CHART_PRIO_CGROUPS_CONTAINERS + 5201);
771 + NETDATA_CHART_PRIO_CGROUPS_CONTAINERS + 5201, update_every);
772
773 ebpf_write_chart_obsolete(type, NETDATA_CACHESTAT_HIT_CHART,
774 "Hits are function calls that Netdata counts.",
775 EBPF_CACHESTAT_DIMENSION_HITS, NETDATA_CACHESTAT_SUBMENU,
776 NETDATA_EBPF_CHART_TYPE_LINE, NETDATA_CGROUP_CACHESTAT_HIT_FILES_CONTEXT,
770 - NETDATA_CHART_PRIO_CGROUPS_CONTAINERS + 5202);
777 + NETDATA_CHART_PRIO_CGROUPS_CONTAINERS + 5202, update_every);
778
779 ebpf_write_chart_obsolete(type, NETDATA_CACHESTAT_MISSES_CHART,
780 "Misses are function calls that Netdata counts.",
781 EBPF_CACHESTAT_DIMENSION_MISSES, NETDATA_CACHESTAT_SUBMENU,
782 NETDATA_EBPF_CHART_TYPE_LINE, NETDATA_CGROUP_CACHESTAT_MISS_FILES_CONTEXT,
776 - NETDATA_CHART_PRIO_CGROUPS_CONTAINERS + 5203);
783 + NETDATA_CHART_PRIO_CGROUPS_CONTAINERS + 5203, update_every);
784 }
785
786 /**
787 * Send data to Netdata calling auxiliar functions.
788 + *
789 + * @param update_every value to overwrite the update frequency set by the server.
790 */
782 -void ebpf_cachestat_send_cgroup_data()
791 +void ebpf_cachestat_send_cgroup_data(int update_every)
792 {
793 if (!ebpf_cgroup_pids)
794 return;
@@ -792,7 +801,7 @@ void ebpf_cachestat_send_cgroup_data()
801 if (has_systemd) {
802 static int systemd_charts = 0;
803 if (!systemd_charts) {
795 - ebpf_create_systemd_cachestat_charts();
804 + ebpf_create_systemd_cachestat_charts(update_every);
805 systemd_charts = 1;
806 }
807
@@ -804,7 +813,7 @@ void ebpf_cachestat_send_cgroup_data()
813 continue;
814
815 if (!(ect->flags & NETDATA_EBPF_CGROUP_HAS_CACHESTAT_CHART) && ect->updated) {
807 - ebpf_create_specific_cachestat_charts(ect->name);
816 + ebpf_create_specific_cachestat_charts(ect->name, update_every);
817 ect->flags |= NETDATA_EBPF_CGROUP_HAS_CACHESTAT_CHART;
818 }
819
@@ -812,7 +821,7 @@ void ebpf_cachestat_send_cgroup_data()
821 if (ect->updated) {
822 ebpf_send_specific_cachestat_data(ect->name, &ect->publish_cachestat);
823 } else {
815 - ebpf_obsolete_specific_cachestat_charts(ect->name);
824 + ebpf_obsolete_specific_cachestat_charts(ect->name, update_every);
825 ect->flags &= ~NETDATA_EBPF_CGROUP_HAS_CACHESTAT_CHART;
826 }
827 }
@@ -836,27 +845,33 @@ static void cachestat_collector(ebpf_module_t *em)
845 memset(&publish, 0, sizeof(publish));
846 int apps = em->apps_charts;
847 int cgroups = em->cgroup_charts;
848 + int update_every = em->update_every;
849 + int counter = update_every - 1;
850 while (!close_ebpf_plugin) {
851 pthread_mutex_lock(&collect_data_mutex);
852 pthread_cond_wait(&collect_data_cond_var, &collect_data_mutex);
853
843 - if (apps)
844 - read_apps_table();
854 + if (++counter == update_every) {
855 + counter = 0;
856 + if (apps)
857 + read_apps_table();
858
846 - if (cgroups)
847 - ebpf_update_cachestat_cgroup();
859 + if (cgroups)
860 + ebpf_update_cachestat_cgroup();
861
849 - pthread_mutex_lock(&lock);
862 + pthread_mutex_lock(&lock);
863
851 - cachestat_send_global(&publish);
864 + cachestat_send_global(&publish);
865
853 - if (apps)
854 - ebpf_cache_send_apps_data(apps_groups_root_target);
866 + if (apps)
867 + ebpf_cache_send_apps_data(apps_groups_root_target);
868
856 - if (cgroups)
857 - ebpf_cachestat_send_cgroup_data();
869 + if (cgroups)
870 + ebpf_cachestat_send_cgroup_data(update_every);
871 +
872 + pthread_mutex_unlock(&lock);
873 + }
874
859 - pthread_mutex_unlock(&lock);
875 pthread_mutex_unlock(&collect_data_mutex);
876 }
877 }
@@ -871,8 +886,10 @@ static void cachestat_collector(ebpf_module_t *em)
886 * Create global charts
887 *
888 * Call ebpf_create_chart to create the charts for the collector.
889 + *
890 + * @param em a pointer to `struct ebpf_module`
891 */
875 -static void ebpf_create_memory_charts()
892 +static void ebpf_create_memory_charts(ebpf_module_t *em)
893 {
894 ebpf_create_chart(NETDATA_EBPF_MEMORY_GROUP, NETDATA_CACHESTAT_HIT_RATIO_CHART,
895 "Hit is calculating using total cache added without dirties per total added because of red misses.",
@@ -881,7 +898,7 @@ static void ebpf_create_memory_charts()
898 NETDATA_EBPF_CHART_TYPE_LINE,
899 21100,
900 ebpf_create_global_dimension,
884 - cachestat_counter_publish_aggregated, 1, NETDATA_EBPF_MODULE_NAME_CACHESTAT);
901 + cachestat_counter_publish_aggregated, 1, em->update_every, NETDATA_EBPF_MODULE_NAME_CACHESTAT);
902
903 ebpf_create_chart(NETDATA_EBPF_MEMORY_GROUP, NETDATA_CACHESTAT_DIRTY_CHART,
904 "Number of dirty pages added to the page cache.",
@@ -891,7 +908,7 @@ static void ebpf_create_memory_charts()
908 21101,
909 ebpf_create_global_dimension,
910 &cachestat_counter_publish_aggregated[NETDATA_CACHESTAT_IDX_DIRTY], 1,
894 - NETDATA_EBPF_MODULE_NAME_CACHESTAT);
911 + em->update_every, NETDATA_EBPF_MODULE_NAME_CACHESTAT);
912
913 ebpf_create_chart(NETDATA_EBPF_MEMORY_GROUP, NETDATA_CACHESTAT_HIT_CHART,
914 "Hits are function calls that Netdata counts.",
@@ -901,7 +918,7 @@ static void ebpf_create_memory_charts()
918 21102,
919 ebpf_create_global_dimension,
920 &cachestat_counter_publish_aggregated[NETDATA_CACHESTAT_IDX_HIT], 1,
904 - NETDATA_EBPF_MODULE_NAME_CACHESTAT);
921 + em->update_every, NETDATA_EBPF_MODULE_NAME_CACHESTAT);
922
923 ebpf_create_chart(NETDATA_EBPF_MEMORY_GROUP, NETDATA_CACHESTAT_MISSES_CHART,
924 "Misses are function calls that Netdata counts.",
@@ -911,7 +928,7 @@ static void ebpf_create_memory_charts()
928 21103,
929 ebpf_create_global_dimension,
930 &cachestat_counter_publish_aggregated[NETDATA_CACHESTAT_IDX_MISS], 1,
914 - NETDATA_EBPF_MODULE_NAME_CACHESTAT);
931 + em->update_every, NETDATA_EBPF_MODULE_NAME_CACHESTAT);
932
933 fflush(stdout);
934 }
@@ -982,7 +999,7 @@ void *ebpf_cachestat_thread(void *ptr)
999 cachestat_counter_dimension_name, cachestat_counter_dimension_name,
1000 algorithms, NETDATA_CACHESTAT_END);
1001
985 - ebpf_create_memory_charts();
1002 + ebpf_create_memory_charts(em);
1003
1004 pthread_mutex_unlock(&lock);
1005
collectors/ebpf.plugin/ebpf_cgroup.c
+4 -2
@@ -332,12 +332,14 @@ void ebpf_parse_cgroup_shm_data()
332 * @param algorithm the algorithm used by dimension
333 * @param context add context for chart
334 * @param module chart module name, this is the eBPF thread.
335 + * @param update_every value to overwrite the update frequency set by the server.
336 */
337 void ebpf_create_charts_on_systemd(char *id, char *title, char *units, char *family, char *charttype, int order,
337 - char *algorithm, char *context, char *module)
338 + char *algorithm, char *context, char *module, int update_every)
339 {
340 ebpf_cgroup_target_t *w;
340 - ebpf_write_chart_cmd(NETDATA_SERVICE_FAMILY, id, title, units, family, charttype, context, order, module);
341 + ebpf_write_chart_cmd(NETDATA_SERVICE_FAMILY, id, title, units, family, charttype, context,
342 + order, update_every, module);
343
344 for (w = ebpf_cgroup_pids; w; w = w->next) {
345 if (unlikely(w->systemd) && unlikely(w->updated))
collectors/ebpf.plugin/ebpf_cgroup.h
+1 -1
@@ -65,6 +65,6 @@ extern void ebpf_parse_cgroup_shm_data();
65 extern void ebpf_close_cgroup_shm();
66 extern void ebpf_clean_cgroup_pids();
67 extern void ebpf_create_charts_on_systemd(char *id, char *title, char *units, char *family, char *charttype, int order,
68 - char *algorithm, char *context, char *module);
68 + char *algorithm, char *context, char *module, int update_every);
69
70 #endif /* NETDATA_EBPF_CGROUP_H */
collectors/ebpf.plugin/ebpf_dcstat.c
+57 -40
@@ -158,7 +158,6 @@ static void ebpf_dcstat_cleanup(void *ptr)
158 */
159 void ebpf_dcstat_create_apps_charts(struct ebpf_module *em, void *ptr)
160 {
161 - UNUSED(em);
161 struct target *root = ptr;
162 ebpf_create_charts_on_apps(NETDATA_DC_HIT_CHART,
163 "Percentage of files listed inside directory cache",
@@ -167,7 +166,7 @@ void ebpf_dcstat_create_apps_charts(struct ebpf_module *em, void *ptr)
166 NETDATA_EBPF_CHART_TYPE_LINE,
167 20100,
168 ebpf_algorithms[NETDATA_EBPF_ABSOLUTE_IDX],
170 - root, NETDATA_EBPF_MODULE_NAME_DCSTAT);
169 + root, em->update_every, NETDATA_EBPF_MODULE_NAME_DCSTAT);
170
171 ebpf_create_charts_on_apps(NETDATA_DC_REFERENCE_CHART,
172 "Count file access.",
@@ -176,7 +175,7 @@ void ebpf_dcstat_create_apps_charts(struct ebpf_module *em, void *ptr)
175 NETDATA_EBPF_CHART_TYPE_STACKED,
176 20101,
177 ebpf_algorithms[NETDATA_EBPF_ABSOLUTE_IDX],
179 - root, NETDATA_EBPF_MODULE_NAME_DCSTAT);
178 + root, em->update_every, NETDATA_EBPF_MODULE_NAME_DCSTAT);
179
180 ebpf_create_charts_on_apps(NETDATA_DC_REQUEST_NOT_CACHE_CHART,
181 "Access to files that were not present inside directory cache.",
@@ -185,7 +184,7 @@ void ebpf_dcstat_create_apps_charts(struct ebpf_module *em, void *ptr)
184 NETDATA_EBPF_CHART_TYPE_STACKED,
185 20102,
186 ebpf_algorithms[NETDATA_EBPF_ABSOLUTE_IDX],
188 - root, NETDATA_EBPF_MODULE_NAME_DCSTAT);
187 + root, em->update_every, NETDATA_EBPF_MODULE_NAME_DCSTAT);
188
189 ebpf_create_charts_on_apps(NETDATA_DC_REQUEST_NOT_FOUND_CHART,
190 "Number of requests for files that were not found on filesystem.",
@@ -194,7 +193,7 @@ void ebpf_dcstat_create_apps_charts(struct ebpf_module *em, void *ptr)
193 NETDATA_EBPF_CHART_TYPE_STACKED,
194 20103,
195 ebpf_algorithms[NETDATA_EBPF_ABSOLUTE_IDX],
197 - root, NETDATA_EBPF_MODULE_NAME_DCSTAT);
196 + root, em->update_every, NETDATA_EBPF_MODULE_NAME_DCSTAT);
197 }
198
199 /*****************************************************************
@@ -366,7 +365,7 @@ void *ebpf_dcstat_read_hash(void *ptr)
365
366 ebpf_module_t *em = (ebpf_module_t *)ptr;
367
369 - usec_t step = NETDATA_LATENCY_DCSTAT_SLEEP_MS * em->update_time;
368 + usec_t step = NETDATA_LATENCY_DCSTAT_SLEEP_MS * em->update_every;
369 while (!close_ebpf_plugin) {
370 usec_t dt = heartbeat_next(&hb, step);
371 (void)dt;
@@ -517,15 +516,16 @@ static void dcstat_send_global(netdata_publish_dcstat_t *publish)
516 * Create charts for cgroup/application.
517 *
518 * @param type the chart type.
519 + * @param update_every value to overwrite the update frequency set by the server.
520 */
521 -static void ebpf_create_specific_dc_charts(char *type)
521 +static void ebpf_create_specific_dc_charts(char *type, int update_every)
522 {
523 ebpf_create_chart(type, NETDATA_DC_HIT_CHART, "Percentage of files listed inside directory cache.",
524 EBPF_COMMON_DIMENSION_PERCENTAGE, NETDATA_DIRECTORY_CACHE_SUBMENU,
525 NETDATA_CGROUP_DC_HIT_RATIO_CONTEXT, NETDATA_EBPF_CHART_TYPE_LINE,
526 NETDATA_CHART_PRIO_CGROUPS_CONTAINERS + 5700,
527 ebpf_create_global_dimension,
528 - dcstat_counter_publish_aggregated, 1, NETDATA_EBPF_MODULE_NAME_DCSTAT);
528 + dcstat_counter_publish_aggregated, 1, update_every, NETDATA_EBPF_MODULE_NAME_DCSTAT);
529
530 ebpf_create_chart(type, NETDATA_DC_REFERENCE_CHART, "Count file access.",
531 EBPF_COMMON_DIMENSION_FILES, NETDATA_DIRECTORY_CACHE_SUBMENU,
@@ -533,7 +533,7 @@ static void ebpf_create_specific_dc_charts(char *type)
533 NETDATA_CHART_PRIO_CGROUPS_CONTAINERS + 5701,
534 ebpf_create_global_dimension,
535 &dcstat_counter_publish_aggregated[NETDATA_DCSTAT_IDX_REFERENCE], 1,
536 - NETDATA_EBPF_MODULE_NAME_DCSTAT);
536 + update_every, NETDATA_EBPF_MODULE_NAME_DCSTAT);
537
538 ebpf_create_chart(type, NETDATA_DC_REQUEST_NOT_CACHE_CHART,
539 "Access to files that were not present inside directory cache.",
@@ -542,7 +542,7 @@ static void ebpf_create_specific_dc_charts(char *type)
542 NETDATA_CHART_PRIO_CGROUPS_CONTAINERS + 5702,
543 ebpf_create_global_dimension,
544 &dcstat_counter_publish_aggregated[NETDATA_DCSTAT_IDX_SLOW], 1,
545 - NETDATA_EBPF_MODULE_NAME_DCSTAT);
545 + update_every, NETDATA_EBPF_MODULE_NAME_DCSTAT);
546
547 ebpf_create_chart(type, NETDATA_DC_REQUEST_NOT_FOUND_CHART,
548 "Number of requests for files that were not found on filesystem.",
@@ -551,7 +551,7 @@ static void ebpf_create_specific_dc_charts(char *type)
551 NETDATA_CHART_PRIO_CGROUPS_CONTAINERS + 5703,
552 ebpf_create_global_dimension,
553 &dcstat_counter_publish_aggregated[NETDATA_DCSTAT_IDX_MISS], 1,
554 - NETDATA_EBPF_MODULE_NAME_DCSTAT);
554 + update_every, NETDATA_EBPF_MODULE_NAME_DCSTAT);
555 }
556
557 /**
@@ -560,32 +560,33 @@ static void ebpf_create_specific_dc_charts(char *type)
560 * Obsolete charts for cgroup/application.
561 *
562 * @param type the chart type.
563 + * @param update_every value to overwrite the update frequency set by the server.
564 */
564 -static void ebpf_obsolete_specific_dc_charts(char *type)
565 +static void ebpf_obsolete_specific_dc_charts(char *type, int update_every)
566 {
567 ebpf_write_chart_obsolete(type, NETDATA_DC_HIT_CHART,
568 "Percentage of files listed inside directory cache.",
569 EBPF_COMMON_DIMENSION_PERCENTAGE, NETDATA_DIRECTORY_CACHE_SUBMENU,
570 NETDATA_EBPF_CHART_TYPE_LINE, NETDATA_CGROUP_DC_HIT_RATIO_CONTEXT,
570 - NETDATA_CHART_PRIO_CGROUPS_CONTAINERS + 5700);
571 + NETDATA_CHART_PRIO_CGROUPS_CONTAINERS + 5700, update_every);
572
573 ebpf_write_chart_obsolete(type, NETDATA_DC_REFERENCE_CHART,
574 "Count file access.",
575 EBPF_COMMON_DIMENSION_FILES, NETDATA_DIRECTORY_CACHE_SUBMENU,
576 NETDATA_EBPF_CHART_TYPE_LINE, NETDATA_CGROUP_DC_REFERENCE_CONTEXT,
576 - NETDATA_CHART_PRIO_CGROUPS_CONTAINERS + 5701);
577 + NETDATA_CHART_PRIO_CGROUPS_CONTAINERS + 5701, update_every);
578
579 ebpf_write_chart_obsolete(type, NETDATA_DC_REQUEST_NOT_CACHE_CHART,
580 "Access to files that were not present inside directory cache.",
581 EBPF_COMMON_DIMENSION_FILES, NETDATA_DIRECTORY_CACHE_SUBMENU,
582 NETDATA_EBPF_CHART_TYPE_LINE, NETDATA_CGROUP_DC_NOT_CACHE_CONTEXT,
582 - NETDATA_CHART_PRIO_CGROUPS_CONTAINERS + 5702);
583 + NETDATA_CHART_PRIO_CGROUPS_CONTAINERS + 5702, update_every);
584
585 ebpf_write_chart_obsolete(type, NETDATA_DC_REQUEST_NOT_FOUND_CHART,
586 "Number of requests for files that were not found on filesystem.",
587 EBPF_COMMON_DIMENSION_FILES, NETDATA_DIRECTORY_CACHE_SUBMENU,
588 NETDATA_EBPF_CHART_TYPE_LINE, NETDATA_CGROUP_DC_NOT_FOUND_CONTEXT,
588 - NETDATA_CHART_PRIO_CGROUPS_CONTAINERS + 5703);
589 + NETDATA_CHART_PRIO_CGROUPS_CONTAINERS + 5703, update_every);
590 }
591
592 /**
@@ -640,8 +641,10 @@ void ebpf_dc_calc_chart_values()
641 * Create Systemd directory cache Charts
642 *
643 * Create charts when systemd is enabled
644 + *
645 + * @param update_every value to overwrite the update frequency set by the server.
646 **/
644 -static void ebpf_create_systemd_dc_charts()
647 +static void ebpf_create_systemd_dc_charts(int update_every)
648 {
649 ebpf_create_charts_on_systemd(NETDATA_DC_HIT_CHART,
650 "Percentage of files listed inside directory cache.",
@@ -650,7 +653,8 @@ static void ebpf_create_systemd_dc_charts()
653 NETDATA_EBPF_CHART_TYPE_LINE,
654 21200,
655 ebpf_algorithms[NETDATA_EBPF_ABSOLUTE_IDX],
653 - NETDATA_SYSTEMD_DC_HIT_RATIO_CONTEXT, NETDATA_EBPF_MODULE_NAME_DCSTAT);
656 + NETDATA_SYSTEMD_DC_HIT_RATIO_CONTEXT, NETDATA_EBPF_MODULE_NAME_DCSTAT,
657 + update_every);
658
659 ebpf_create_charts_on_systemd(NETDATA_DC_REFERENCE_CHART,
660 "Count file access.",
@@ -659,7 +663,8 @@ static void ebpf_create_systemd_dc_charts()
663 NETDATA_EBPF_CHART_TYPE_LINE,
664 21201,
665 ebpf_algorithms[NETDATA_EBPF_ABSOLUTE_IDX],
662 - NETDATA_SYSTEMD_DC_REFERENCE_CONTEXT, NETDATA_EBPF_MODULE_NAME_DCSTAT);
666 + NETDATA_SYSTEMD_DC_REFERENCE_CONTEXT, NETDATA_EBPF_MODULE_NAME_DCSTAT,
667 + update_every);
668
669 ebpf_create_charts_on_systemd(NETDATA_DC_REQUEST_NOT_CACHE_CHART,
670 "Access to files that were not present inside directory cache.",
@@ -668,7 +673,8 @@ static void ebpf_create_systemd_dc_charts()
673 NETDATA_EBPF_CHART_TYPE_LINE,
674 21202,
675 ebpf_algorithms[NETDATA_EBPF_ABSOLUTE_IDX],
671 - NETDATA_SYSTEMD_DC_NOT_CACHE_CONTEXT, NETDATA_EBPF_MODULE_NAME_DCSTAT);
676 + NETDATA_SYSTEMD_DC_NOT_CACHE_CONTEXT, NETDATA_EBPF_MODULE_NAME_DCSTAT,
677 + update_every);
678
679 ebpf_create_charts_on_systemd(NETDATA_DC_REQUEST_NOT_FOUND_CHART,
680 "Number of requests for files that were not found on filesystem.",
@@ -677,7 +683,8 @@ static void ebpf_create_systemd_dc_charts()
683 NETDATA_EBPF_CHART_TYPE_LINE,
684 21202,
685 ebpf_algorithms[NETDATA_EBPF_ABSOLUTE_IDX],
680 - NETDATA_SYSTEMD_DC_NOT_FOUND_CONTEXT, NETDATA_EBPF_MODULE_NAME_DCSTAT);
686 + NETDATA_SYSTEMD_DC_NOT_FOUND_CONTEXT, NETDATA_EBPF_MODULE_NAME_DCSTAT,
687 + update_every);
688 }
689
690 /**
@@ -776,8 +783,10 @@ static void ebpf_send_specific_dc_data(char *type, netdata_publish_dcstat_t *pdc
783
784 /**
785 * Send data to Netdata calling auxiliar functions.
786 + *
787 + * @param update_every value to overwrite the update frequency set by the server.
788 */
780 -void ebpf_dc_send_cgroup_data()
789 +void ebpf_dc_send_cgroup_data(int update_every)
790 {
791 if (!ebpf_cgroup_pids)
792 return;
@@ -790,7 +799,7 @@ void ebpf_dc_send_cgroup_data()
799 if (has_systemd) {
800 static int systemd_charts = 0;
801 if (!systemd_charts) {
793 - ebpf_create_systemd_dc_charts();
802 + ebpf_create_systemd_dc_charts(update_every);
803 systemd_charts = 1;
804 }
805
@@ -802,7 +811,7 @@ void ebpf_dc_send_cgroup_data()
811 continue;
812
813 if (!(ect->flags & NETDATA_EBPF_CGROUP_HAS_DC_CHART) && ect->updated) {
805 - ebpf_create_specific_dc_charts(ect->name);
814 + ebpf_create_specific_dc_charts(ect->name, update_every);
815 ect->flags |= NETDATA_EBPF_CGROUP_HAS_DC_CHART;
816 }
817
@@ -810,7 +819,7 @@ void ebpf_dc_send_cgroup_data()
819 if (ect->updated) {
820 ebpf_send_specific_dc_data(ect->name, &ect->publish_dc);
821 } else {
813 - ebpf_obsolete_specific_dc_charts(ect->name);
822 + ebpf_obsolete_specific_dc_charts(ect->name, update_every);
823 ect->flags &= ~NETDATA_EBPF_CGROUP_HAS_DC_CHART;
824 }
825 }
@@ -834,27 +843,33 @@ static void dcstat_collector(ebpf_module_t *em)
843 memset(&publish, 0, sizeof(publish));
844 int apps = em->apps_charts;
845 int cgroups = em->cgroup_charts;
846 + int update_every = em->update_every;
847 + int counter = update_every - 1;
848 while (!close_ebpf_plugin) {
849 pthread_mutex_lock(&collect_data_mutex);
850 pthread_cond_wait(&collect_data_cond_var, &collect_data_mutex);
851
841 - if (apps)
842 - read_apps_table();
852 + if (++counter == update_every) {
853 + counter = 0;
854 + if (apps)
855 + read_apps_table();
856
844 - if (cgroups)
845 - ebpf_update_dc_cgroup();
857 + if (cgroups)
858 + ebpf_update_dc_cgroup();
859
847 - pthread_mutex_lock(&lock);
860 + pthread_mutex_lock(&lock);
861
849 - dcstat_send_global(&publish);
862 + dcstat_send_global(&publish);
863
851 - if (apps)
852 - ebpf_dcache_send_apps_data(apps_groups_root_target);
864 + if (apps)
865 + ebpf_dcache_send_apps_data(apps_groups_root_target);
866
854 - if (cgroups)
855 - ebpf_dc_send_cgroup_data();
867 + if (cgroups)
868 + ebpf_dc_send_cgroup_data(update_every);
869 +
870 + pthread_mutex_unlock(&lock);
871 + }
872
857 - pthread_mutex_unlock(&lock);
873 pthread_mutex_unlock(&collect_data_mutex);
874 }
875 }
@@ -869,8 +884,10 @@ static void dcstat_collector(ebpf_module_t *em)
884 * Create filesystem charts
885 *
886 * Call ebpf_create_chart to create the charts for the collector.
887 + *
888 + * @param update_every value to overwrite the update frequency set by the server.
889 */
873 -static void ebpf_create_filesystem_charts()
890 +static void ebpf_create_filesystem_charts(int update_every)
891 {
892 ebpf_create_chart(NETDATA_FILESYSTEM_FAMILY, NETDATA_DC_HIT_CHART,
893 "Percentage of files listed inside directory cache",
@@ -879,7 +896,7 @@ static void ebpf_create_filesystem_charts()
896 NETDATA_EBPF_CHART_TYPE_LINE,
897 21200,
898 ebpf_create_global_dimension,
882 - dcstat_counter_publish_aggregated, 1, NETDATA_EBPF_MODULE_NAME_DCSTAT);
899 + dcstat_counter_publish_aggregated, 1, update_every, NETDATA_EBPF_MODULE_NAME_DCSTAT);
900
901 ebpf_create_chart(NETDATA_FILESYSTEM_FAMILY, NETDATA_DC_REFERENCE_CHART,
902 "Variables used to calculate hit ratio.",
@@ -889,7 +906,7 @@ static void ebpf_create_filesystem_charts()
906 21201,
907 ebpf_create_global_dimension,
908 &dcstat_counter_publish_aggregated[NETDATA_DCSTAT_IDX_REFERENCE], 3,
892 - NETDATA_EBPF_MODULE_NAME_DCSTAT);
909 + update_every, NETDATA_EBPF_MODULE_NAME_DCSTAT);
910
911 fflush(stdout);
912 }
@@ -962,7 +979,7 @@ void *ebpf_dcstat_thread(void *ptr)
979 dcstat_counter_dimension_name, dcstat_counter_dimension_name,
980 algorithms, NETDATA_DCSTAT_IDX_END);
981
965 - ebpf_create_filesystem_charts();
982 + ebpf_create_filesystem_charts(em->update_every);
983 pthread_mutex_unlock(&lock);
984
985 dcstat_collector(em);
collectors/ebpf.plugin/ebpf_disk.c
+31 -21
@@ -358,12 +358,12 @@ static int read_local_disks()
358 */
359 void ebpf_update_disks(ebpf_module_t *em)
360 {
361 - static time_t update_time = 0;
361 + static time_t update_every = 0;
362 time_t curr = now_realtime_sec();
363 - if (curr < update_time)
363 + if (curr < update_every)
364 return;
365
366 - update_time = curr + 5 * em->update_time;
366 + update_every = curr + 5 * em->update_every;
367
368 (void)read_local_disks();
369 }
@@ -587,7 +587,7 @@ void *ebpf_disk_read_hash(void *ptr)
587
588 ebpf_module_t *em = (ebpf_module_t *)ptr;
589
590 - usec_t step = NETDATA_LATENCY_DISK_SLEEP_MS * em->update_time;
590 + usec_t step = NETDATA_LATENCY_DISK_SLEEP_MS * em->update_every;
591 while (!close_ebpf_plugin) {
592 usec_t dt = heartbeat_next(&hb, step);
593 (void)dt;
@@ -601,15 +601,16 @@ void *ebpf_disk_read_hash(void *ptr)
601 /**
602 * Obsolete Hard Disk charts
603 *
604 - * @param w the structure with necessary information to create the chart
605 - *
604 * Make Hard disk charts and fill chart name
605 + *
606 + * @param w the structure with necessary information to create the chart
607 + * @param update_every value to overwrite the update frequency set by the server.
608 */
608 -static void ebpf_obsolete_hd_charts(netdata_ebpf_disks_t *w)
609 +static void ebpf_obsolete_hd_charts(netdata_ebpf_disks_t *w, int update_every)
610 {
611 ebpf_write_chart_obsolete(w->histogram.name, w->family, w->histogram.title, EBPF_COMMON_DIMENSION_CALL,
612 w->family, NETDATA_EBPF_CHART_TYPE_STACKED, "disk.latency_io",
612 - w->histogram.order);
613 + w->histogram.order, update_every);
614
615 w->flags = 0;
616 }
@@ -617,11 +618,12 @@ static void ebpf_obsolete_hd_charts(netdata_ebpf_disks_t *w)
618 /**
619 * Create Hard Disk charts
620 *
620 - * @param w the structure with necessary information to create the chart
621 - *
621 * Make Hard disk charts and fill chart name
622 + *
623 + * @param w the structure with necessary information to create the chart
624 + * @param update_every value to overwrite the update frequency set by the server.
625 */
624 -static void ebpf_create_hd_charts(netdata_ebpf_disks_t *w)
626 +static void ebpf_create_hd_charts(netdata_ebpf_disks_t *w, int update_every)
627 {
628 int order = NETDATA_CHART_PRIO_DISK_LATENCY;
629 char *family = w->family;
@@ -633,7 +635,7 @@ static void ebpf_create_hd_charts(netdata_ebpf_disks_t *w)
635 ebpf_create_chart(w->histogram.name, family, "Disk latency", EBPF_COMMON_DIMENSION_CALL,
636 family, "disk.latency_io", NETDATA_EBPF_CHART_TYPE_STACKED, order,
637 ebpf_create_global_dimension, disk_publish_aggregated, NETDATA_EBPF_HIST_MAX_BINS,
636 - NETDATA_EBPF_MODULE_NAME_DISK);
638 + update_every, NETDATA_EBPF_MODULE_NAME_DISK);
639 order++;
640
641 w->flags |= NETDATA_DISK_CHART_CREATED;
@@ -647,15 +649,16 @@ static void ebpf_create_hd_charts(netdata_ebpf_disks_t *w)
649 static void ebpf_remove_pointer_from_plot_disk(ebpf_module_t *em)
650 {
651 time_t current_time = now_realtime_sec();
650 - time_t limit = 10 * em->update_time;
652 + time_t limit = 10 * em->update_every;
653 pthread_mutex_lock(&plot_mutex);
654 ebpf_publish_disk_t *move = plot_disks, *prev = plot_disks;
655 + int update_every = em->update_every;
656 while (move) {
657 netdata_ebpf_disks_t *ned = move->plot;
658 uint32_t flags = ned->flags;
659
660 if (!(flags & NETDATA_DISK_IS_HERE) && ((current_time - ned->last_update) > limit)) {
658 - ebpf_obsolete_hd_charts(ned);
661 + ebpf_obsolete_hd_charts(ned, update_every);
662 avl_t *ret = (avl_t *)avl_remove_lock(&disk_tree, (avl_t *)ned);
663 UNUSED(ret);
664 if (move == plot_disks) {
@@ -681,8 +684,10 @@ static void ebpf_remove_pointer_from_plot_disk(ebpf_module_t *em)
684 * Send Hard disk data
685 *
686 * Send hard disk information to Netdata.
687 + *
688 + * @param update_every value to overwrite the update frequency set by the server.
689 */
685 -static void ebpf_latency_send_hd_data()
690 +static void ebpf_latency_send_hd_data(int update_every)
691 {
692 pthread_mutex_lock(&plot_mutex);
693 if (!plot_disks) {
@@ -695,7 +700,7 @@ static void ebpf_latency_send_hd_data()
700 netdata_ebpf_disks_t *ned = move->plot;
701 uint32_t flags = ned->flags;
702 if (!(flags & NETDATA_DISK_CHART_CREATED)) {
698 - ebpf_create_hd_charts(ned);
703 + ebpf_create_hd_charts(ned, update_every);
704 }
705
706 if ((flags & NETDATA_DISK_CHART_CREATED)) {
@@ -722,17 +727,22 @@ static void disk_collector(ebpf_module_t *em)
727 netdata_thread_create(disk_threads.thread, disk_threads.name, NETDATA_THREAD_OPTION_JOINABLE,
728 ebpf_disk_read_hash, em);
729
725 -
730 + int update_every = em->update_every;
731 + int counter = update_every - 1;
732 read_thread_closed = 0;
733 while (!close_ebpf_plugin) {
734 pthread_mutex_lock(&collect_data_mutex);
735 pthread_cond_wait(&collect_data_cond_var, &collect_data_mutex);
736
731 - pthread_mutex_lock(&lock);
732 - ebpf_remove_pointer_from_plot_disk(em);
733 - ebpf_latency_send_hd_data();
737 + if (++counter == update_every) {
738 + counter = 0;
739 + pthread_mutex_lock(&lock);
740 + ebpf_remove_pointer_from_plot_disk(em);
741 + ebpf_latency_send_hd_data(update_every);
742 +
743 + pthread_mutex_unlock(&lock);
744 + }
745
735 - pthread_mutex_unlock(&lock);
746 pthread_mutex_unlock(&collect_data_mutex);
747
748 ebpf_update_disks(em);
collectors/ebpf.plugin/ebpf_fd.c
+36 -30
@@ -167,7 +167,7 @@ void *ebpf_fd_read_hash(void *ptr)
167 heartbeat_init(&hb);
168
169 ebpf_module_t *em = (ebpf_module_t *)ptr;
170 - usec_t step = NETDATA_FD_SLEEP_MS * em->update_time;
170 + usec_t step = NETDATA_FD_SLEEP_MS * em->update_every;
171 while (!close_ebpf_plugin) {
172 usec_t dt = heartbeat_next(&hb, step);
173 (void)dt;
@@ -417,7 +417,7 @@ static void ebpf_create_specific_fd_charts(char *type, ebpf_module_t *em)
417 NETDATA_CHART_PRIO_CGROUPS_CONTAINERS + 5400,
418 ebpf_create_global_dimension,
419 &fd_publish_aggregated[NETDATA_FD_SYSCALL_OPEN],
420 - 1, NETDATA_EBPF_MODULE_NAME_SWAP);
420 + 1, em->update_every, NETDATA_EBPF_MODULE_NAME_SWAP);
421
422 if (em->mode < MODE_ENTRY) {
423 ebpf_create_chart(type, NETDATA_SYSCALL_APPS_FILE_OPEN_ERROR, "Fails to open files",
@@ -426,7 +426,7 @@ static void ebpf_create_specific_fd_charts(char *type, ebpf_module_t *em)
426 NETDATA_CHART_PRIO_CGROUPS_CONTAINERS + 5401,
427 ebpf_create_global_dimension,
428 &fd_publish_aggregated[NETDATA_FD_SYSCALL_OPEN],
429 - 1,
429 + 1, em->update_every,
430 NETDATA_EBPF_MODULE_NAME_SWAP);
431 }
432
@@ -436,7 +436,7 @@ static void ebpf_create_specific_fd_charts(char *type, ebpf_module_t *em)
436 NETDATA_CHART_PRIO_CGROUPS_CONTAINERS + 5402,
437 ebpf_create_global_dimension,
438 &fd_publish_aggregated[NETDATA_FD_SYSCALL_CLOSE],
439 - 1, NETDATA_EBPF_MODULE_NAME_SWAP);
439 + 1, em->update_every, NETDATA_EBPF_MODULE_NAME_SWAP);
440
441 if (em->mode < MODE_ENTRY) {
442 ebpf_create_chart(type, NETDATA_SYSCALL_APPS_FILE_CLOSE_ERROR, "Fails to close files",
@@ -445,7 +445,7 @@ static void ebpf_create_specific_fd_charts(char *type, ebpf_module_t *em)
445 NETDATA_CHART_PRIO_CGROUPS_CONTAINERS + 5403,
446 ebpf_create_global_dimension,
447 &fd_publish_aggregated[NETDATA_FD_SYSCALL_CLOSE],
448 - 1,
448 + 1, em->update_every,
449 NETDATA_EBPF_MODULE_NAME_SWAP);
450 }
451 }
@@ -463,25 +463,25 @@ static void ebpf_obsolete_specific_fd_charts(char *type, ebpf_module_t *em)
463 ebpf_write_chart_obsolete(type, NETDATA_SYSCALL_APPS_FILE_OPEN, "Number of open files",
464 EBPF_COMMON_DIMENSION_CALL, NETDATA_APPS_FILE_GROUP,
465 NETDATA_EBPF_CHART_TYPE_LINE, NETDATA_CGROUP_FD_OPEN_CONTEXT,
466 - NETDATA_CHART_PRIO_CGROUPS_CONTAINERS + 5400);
466 + NETDATA_CHART_PRIO_CGROUPS_CONTAINERS + 5400, em->update_every);
467
468 if (em->mode < MODE_ENTRY) {
469 ebpf_write_chart_obsolete(type, NETDATA_SYSCALL_APPS_FILE_OPEN_ERROR, "Fails to open files",
470 EBPF_COMMON_DIMENSION_CALL, NETDATA_APPS_FILE_GROUP,
471 NETDATA_EBPF_CHART_TYPE_LINE, NETDATA_CGROUP_FD_OPEN_ERR_CONTEXT,
472 - NETDATA_CHART_PRIO_CGROUPS_CONTAINERS + 5401);
472 + NETDATA_CHART_PRIO_CGROUPS_CONTAINERS + 5401, em->update_every);
473 }
474
475 ebpf_write_chart_obsolete(type, NETDATA_SYSCALL_APPS_FILE_CLOSED, "Files closed",
476 EBPF_COMMON_DIMENSION_CALL, NETDATA_APPS_FILE_GROUP,
477 NETDATA_EBPF_CHART_TYPE_LINE, NETDATA_CGROUP_FD_CLOSE_CONTEXT,
478 - NETDATA_CHART_PRIO_CGROUPS_CONTAINERS + 5402);
478 + NETDATA_CHART_PRIO_CGROUPS_CONTAINERS + 5402, em->update_every);
479
480 if (em->mode < MODE_ENTRY) {
481 ebpf_write_chart_obsolete(type, NETDATA_SYSCALL_APPS_FILE_CLOSE_ERROR, "Fails to close files",
482 EBPF_COMMON_DIMENSION_CALL, NETDATA_APPS_FILE_GROUP,
483 NETDATA_EBPF_CHART_TYPE_LINE, NETDATA_CGROUP_FD_CLOSE_ERR_CONTEXT,
484 - NETDATA_CHART_PRIO_CGROUPS_CONTAINERS + 5403);
484 + NETDATA_CHART_PRIO_CGROUPS_CONTAINERS + 5403, em->update_every);
485 }
486 }
487
@@ -529,28 +529,28 @@ static void ebpf_create_systemd_fd_charts(ebpf_module_t *em)
529 EBPF_COMMON_DIMENSION_CALL, NETDATA_APPS_FILE_CGROUP_GROUP,
530 NETDATA_EBPF_CHART_TYPE_STACKED, 20061,
531 ebpf_algorithms[NETDATA_EBPF_INCREMENTAL_IDX], NETDATA_SYSTEMD_FD_OPEN_CONTEXT,
532 - NETDATA_EBPF_MODULE_NAME_PROCESS);
532 + NETDATA_EBPF_MODULE_NAME_PROCESS, em->update_every);
533
534 if (em->mode < MODE_ENTRY) {
535 ebpf_create_charts_on_systemd(NETDATA_SYSCALL_APPS_FILE_OPEN_ERROR, "Fails to open files",
536 EBPF_COMMON_DIMENSION_CALL, NETDATA_APPS_FILE_CGROUP_GROUP,
537 NETDATA_EBPF_CHART_TYPE_STACKED, 20062,
538 ebpf_algorithms[NETDATA_EBPF_INCREMENTAL_IDX], NETDATA_SYSTEMD_FD_OPEN_ERR_CONTEXT,
539 - NETDATA_EBPF_MODULE_NAME_PROCESS);
539 + NETDATA_EBPF_MODULE_NAME_PROCESS, em->update_every);
540 }
541
542 ebpf_create_charts_on_systemd(NETDATA_SYSCALL_APPS_FILE_CLOSED, "Files closed",
543 EBPF_COMMON_DIMENSION_CALL, NETDATA_APPS_FILE_CGROUP_GROUP,
544 NETDATA_EBPF_CHART_TYPE_STACKED, 20063,
545 ebpf_algorithms[NETDATA_EBPF_INCREMENTAL_IDX], NETDATA_SYSTEMD_FD_CLOSE_CONTEXT,
546 - NETDATA_EBPF_MODULE_NAME_PROCESS);
546 + NETDATA_EBPF_MODULE_NAME_PROCESS, em->update_every);
547
548 if (em->mode < MODE_ENTRY) {
549 ebpf_create_charts_on_systemd(NETDATA_SYSCALL_APPS_FILE_CLOSE_ERROR, "Fails to close files",
550 EBPF_COMMON_DIMENSION_CALL, NETDATA_APPS_FILE_CGROUP_GROUP,
551 NETDATA_EBPF_CHART_TYPE_STACKED, 20064,
552 ebpf_algorithms[NETDATA_EBPF_INCREMENTAL_IDX], NETDATA_SYSTEMD_FD_CLOSE_ERR_CONTEXT,
553 - NETDATA_EBPF_MODULE_NAME_PROCESS);
553 + NETDATA_EBPF_MODULE_NAME_PROCESS, em->update_every);
554 }
555 }
556
@@ -670,27 +670,33 @@ static void fd_collector(ebpf_module_t *em)
670
671 int apps = em->apps_charts;
672 int cgroups = em->cgroup_charts;
673 + int update_every = em->update_every;
674 + int counter = update_every - 1;
675 while (!close_ebpf_plugin) {
676 pthread_mutex_lock(&collect_data_mutex);
677 pthread_cond_wait(&collect_data_cond_var, &collect_data_mutex);
678
677 - if (apps)
678 - read_apps_table();
679 + if (++counter == update_every) {
680 + counter = 0;
681 + if (apps)
682 + read_apps_table();
683
680 - if (cgroups)
681 - ebpf_update_fd_cgroup();
684 + if (cgroups)
685 + ebpf_update_fd_cgroup();
686
683 - pthread_mutex_lock(&lock);
687 + pthread_mutex_lock(&lock);
688
685 - ebpf_fd_send_data(em);
689 + ebpf_fd_send_data(em);
690
687 - if (apps)
688 - ebpf_fd_send_apps_data(em, apps_groups_root_target);
691 + if (apps)
692 + ebpf_fd_send_apps_data(em, apps_groups_root_target);
693
690 - if (cgroups)
691 - ebpf_fd_send_cgroup_data(em);
694 + if (cgroups)
695 + ebpf_fd_send_cgroup_data(em);
696 +
697 + pthread_mutex_unlock(&lock);
698 + }
699
693 - pthread_mutex_unlock(&lock);
700 pthread_mutex_unlock(&collect_data_mutex);
701 }
702 }
@@ -718,7 +724,7 @@ void ebpf_fd_create_apps_charts(struct ebpf_module *em, void *ptr)
724 NETDATA_EBPF_CHART_TYPE_STACKED,
725 20061,
726 ebpf_algorithms[NETDATA_EBPF_INCREMENTAL_IDX],
721 - root, NETDATA_EBPF_MODULE_NAME_PROCESS);
727 + root, em->update_every, NETDATA_EBPF_MODULE_NAME_PROCESS);
728
729 if (em->mode < MODE_ENTRY) {
730 ebpf_create_charts_on_apps(NETDATA_SYSCALL_APPS_FILE_OPEN_ERROR,
@@ -728,7 +734,7 @@ void ebpf_fd_create_apps_charts(struct ebpf_module *em, void *ptr)
734 NETDATA_EBPF_CHART_TYPE_STACKED,
735 20062,
736 ebpf_algorithms[NETDATA_EBPF_INCREMENTAL_IDX],
731 - root, NETDATA_EBPF_MODULE_NAME_PROCESS);
737 + root, em->update_every, NETDATA_EBPF_MODULE_NAME_PROCESS);
738 }
739
740 ebpf_create_charts_on_apps(NETDATA_SYSCALL_APPS_FILE_CLOSED,
@@ -738,7 +744,7 @@ void ebpf_fd_create_apps_charts(struct ebpf_module *em, void *ptr)
744 NETDATA_EBPF_CHART_TYPE_STACKED,
745 20063,
746 ebpf_algorithms[NETDATA_EBPF_INCREMENTAL_IDX],
741 - root, NETDATA_EBPF_MODULE_NAME_PROCESS);
747 + root, em->update_every, NETDATA_EBPF_MODULE_NAME_PROCESS);
748
749 if (em->mode < MODE_ENTRY) {
750 ebpf_create_charts_on_apps(NETDATA_SYSCALL_APPS_FILE_CLOSE_ERROR,
@@ -748,7 +754,7 @@ void ebpf_fd_create_apps_charts(struct ebpf_module *em, void *ptr)
754 NETDATA_EBPF_CHART_TYPE_STACKED,
755 20064,
756 ebpf_algorithms[NETDATA_EBPF_INCREMENTAL_IDX],
751 - root, NETDATA_EBPF_MODULE_NAME_PROCESS);
757 + root, em->update_every, NETDATA_EBPF_MODULE_NAME_PROCESS);
758 }
759 }
760
@@ -772,7 +778,7 @@ static void ebpf_create_fd_global_charts(ebpf_module_t *em)
778 ebpf_create_global_dimension,
779 fd_publish_aggregated,
780 NETDATA_FD_SYSCALL_END,
775 - NETDATA_EBPF_MODULE_NAME_FD);
781 + em->update_every, NETDATA_EBPF_MODULE_NAME_FD);
782
783 if (em->mode < MODE_ENTRY) {
784 ebpf_create_chart(NETDATA_FILESYSTEM_FAMILY,
@@ -786,7 +792,7 @@ static void ebpf_create_fd_global_charts(ebpf_module_t *em)
792 ebpf_create_global_dimension,
793 fd_publish_aggregated,
794 NETDATA_FD_SYSCALL_END,
789 - NETDATA_EBPF_MODULE_NAME_FD);
795 + em->update_every, NETDATA_EBPF_MODULE_NAME_FD);
796 }
797 }
798
collectors/ebpf.plugin/ebpf_filesystem.c
+32 -20
@@ -101,8 +101,10 @@ static netdata_idx_t *filesystem_hash_values = NULL;
101 * Create Filesystem chart
102 *
103 * Create latency charts
104 + *
105 + * @param update_every value to overwrite the update frequency set by the server.
106 */
105 -static void ebpf_obsolete_fs_charts()
107 +static void ebpf_obsolete_fs_charts(int update_every)
108 {
109 int i;
110 uint32_t test = NETDATA_FILESYSTEM_FLAG_CHART_CREATED | NETDATA_FILESYSTEM_REMOVE_CHARTS;
@@ -115,20 +117,21 @@ static void ebpf_obsolete_fs_charts()
117 ebpf_write_chart_obsolete(NETDATA_FILESYSTEM_FAMILY, efp->hread.name,
118 efp->hread.title,
119 EBPF_COMMON_DIMENSION_CALL, efp->family_name,
118 - NULL, NETDATA_EBPF_CHART_TYPE_STACKED, efp->hread.order);
120 + NULL, NETDATA_EBPF_CHART_TYPE_STACKED, efp->hread.order, update_every);
121
122 ebpf_write_chart_obsolete(NETDATA_FILESYSTEM_FAMILY, efp->hwrite.name,
123 efp->hwrite.title,
124 EBPF_COMMON_DIMENSION_CALL, efp->family_name,
123 - NULL, NETDATA_EBPF_CHART_TYPE_STACKED, efp->hwrite.order);
125 + NULL, NETDATA_EBPF_CHART_TYPE_STACKED, efp->hwrite.order, update_every);
126
127 ebpf_write_chart_obsolete(NETDATA_FILESYSTEM_FAMILY, efp->hopen.name, efp->hopen.title,
128 EBPF_COMMON_DIMENSION_CALL, efp->family_name,
127 - NULL, NETDATA_EBPF_CHART_TYPE_STACKED, efp->hopen.order);
129 + NULL, NETDATA_EBPF_CHART_TYPE_STACKED, efp->hopen.order, update_every);
130
131 ebpf_write_chart_obsolete(NETDATA_FILESYSTEM_FAMILY, efp->hadditional.name, efp->hadditional.title,
132 EBPF_COMMON_DIMENSION_CALL, efp->family_name,
131 - NULL, NETDATA_EBPF_CHART_TYPE_STACKED, efp->hadditional.order);
133 + NULL, NETDATA_EBPF_CHART_TYPE_STACKED, efp->hadditional.order,
134 + update_every);
135 }
136 efp->flags = flags;
137 }
@@ -138,8 +141,10 @@ static void ebpf_obsolete_fs_charts()
141 * Create Filesystem chart
142 *
143 * Create latency charts
144 + *
145 + * @param update_every value to overwrite the update frequency set by the server.
146 */
142 -static void ebpf_create_fs_charts()
147 +static void ebpf_create_fs_charts(int update_every)
148 {
149 static int order = NETDATA_CHART_PRIO_EBPF_FILESYSTEM_CHARTS;
150 char chart_name[64], title[256], family[64];
@@ -162,7 +167,7 @@ static void ebpf_create_fs_charts()
167 EBPF_COMMON_DIMENSION_CALL, family,
168 NULL, NETDATA_EBPF_CHART_TYPE_STACKED, order, ebpf_create_global_dimension,
169 filesystem_publish_aggregated, NETDATA_EBPF_HIST_MAX_BINS,
165 - NETDATA_EBPF_MODULE_NAME_FILESYSTEM);
170 + update_every, NETDATA_EBPF_MODULE_NAME_FILESYSTEM);
171 order++;
172
173 snprintfz(title, 255, "%s latency for each write request.", efp->filesystem);
@@ -175,7 +180,7 @@ static void ebpf_create_fs_charts()
180 EBPF_COMMON_DIMENSION_CALL, family,
181 NULL, NETDATA_EBPF_CHART_TYPE_STACKED, order, ebpf_create_global_dimension,
182 filesystem_publish_aggregated, NETDATA_EBPF_HIST_MAX_BINS,
178 - NETDATA_EBPF_MODULE_NAME_FILESYSTEM);
183 + update_every, NETDATA_EBPF_MODULE_NAME_FILESYSTEM);
184 order++;
185
186 snprintfz(title, 255, "%s latency for each open request.", efp->filesystem);
@@ -188,7 +193,7 @@ static void ebpf_create_fs_charts()
193 EBPF_COMMON_DIMENSION_CALL, family,
194 NULL, NETDATA_EBPF_CHART_TYPE_STACKED, order, ebpf_create_global_dimension,
195 filesystem_publish_aggregated, NETDATA_EBPF_HIST_MAX_BINS,
191 - NETDATA_EBPF_MODULE_NAME_FILESYSTEM);
196 + update_every, NETDATA_EBPF_MODULE_NAME_FILESYSTEM);
197 order++;
198
199 char *type = (efp->flags & NETDATA_FILESYSTEM_ATTR_CHARTS) ? "attribute" : "sync";
@@ -201,7 +206,7 @@ static void ebpf_create_fs_charts()
206 EBPF_COMMON_DIMENSION_CALL, family,
207 NULL, NETDATA_EBPF_CHART_TYPE_STACKED, order, ebpf_create_global_dimension,
208 filesystem_publish_aggregated, NETDATA_EBPF_HIST_MAX_BINS,
204 - NETDATA_EBPF_MODULE_NAME_FILESYSTEM);
209 + update_every, NETDATA_EBPF_MODULE_NAME_FILESYSTEM);
210 order++;
211 efp->flags |= NETDATA_FILESYSTEM_FLAG_CHART_CREATED;
212 }
@@ -312,12 +317,12 @@ static int ebpf_read_local_partitions()
317 */
318 static int ebpf_update_partitions(ebpf_module_t *em)
319 {
315 - static time_t update_time = 0;
320 + static time_t update_every = 0;
321 time_t curr = now_realtime_sec();
317 - if (curr < update_time)
322 + if (curr < update_every)
323 return 0;
324
320 - update_time = curr + 5 * em->update_time;
325 + update_every = curr + 5 * em->update_every;
326 if (!ebpf_read_local_partitions()) {
327 em->optional = -1;
328 return -1;
@@ -505,13 +510,14 @@ void *ebpf_filesystem_read_hash(void *ptr)
510
511 heartbeat_t hb;
512 heartbeat_init(&hb);
508 - usec_t step = NETDATA_FILESYSTEM_READ_SLEEP_MS * em->update_time;
513 + usec_t step = NETDATA_FILESYSTEM_READ_SLEEP_MS * em->update_every;
514 + int update_every = em->update_every;
515 while (!close_ebpf_plugin) {
516 usec_t dt = heartbeat_next(&hb, step);
517 (void)dt;
518
519 (void) ebpf_update_partitions(em);
514 - ebpf_obsolete_fs_charts();
520 + ebpf_obsolete_fs_charts(update_every);
521
522 // No more partitions, it is not necessary to read tables
523 if (em->optional)
@@ -564,17 +570,23 @@ static void filesystem_collector(ebpf_module_t *em)
570 netdata_thread_create(filesystem_threads.thread, filesystem_threads.name,
571 NETDATA_THREAD_OPTION_JOINABLE, ebpf_filesystem_read_hash, em);
572
573 + int update_every = em->update_every;
574 + int counter = update_every - 1;
575 while (!close_ebpf_plugin || em->optional) {
576 pthread_mutex_lock(&collect_data_mutex);
577 pthread_cond_wait(&collect_data_cond_var, &collect_data_mutex);
578
571 - pthread_mutex_lock(&lock);
579 + if (++counter == update_every) {
580 + counter = 0;
581 + pthread_mutex_lock(&lock);
582
573 - ebpf_create_fs_charts();
574 - ebpf_histogram_send_data();
583 + ebpf_create_fs_charts(update_every);
584 + ebpf_histogram_send_data();
585 +
586 + pthread_mutex_unlock(&lock);
587 + }
588
589 pthread_mutex_unlock(&collect_data_mutex);
577 - pthread_mutex_unlock(&lock);
590 }
591 }
592
@@ -638,7 +650,7 @@ void *ebpf_filesystem_thread(void *ptr)
650 algorithms, NETDATA_EBPF_HIST_MAX_BINS);
651
652 pthread_mutex_lock(&lock);
641 - ebpf_create_fs_charts();
653 + ebpf_create_fs_charts(em->update_every);
654 pthread_mutex_unlock(&lock);
655
656 filesystem_collector(em);
collectors/ebpf.plugin/ebpf_hardirq.c
+18 -11
@@ -323,7 +323,7 @@ static void *hardirq_reader(void *ptr)
323
324 ebpf_module_t *em = (ebpf_module_t *)ptr;
325
326 - usec_t step = NETDATA_HARDIRQ_SLEEP_MS * em->update_time;
326 + usec_t step = NETDATA_HARDIRQ_SLEEP_MS * em->update_every;
327 while (!close_ebpf_plugin) {
328 usec_t dt = heartbeat_next(&hb, step);
329 UNUSED(dt);
@@ -336,7 +336,7 @@ static void *hardirq_reader(void *ptr)
336 return NULL;
337 }
338
339 -static void hardirq_create_charts()
339 +static void hardirq_create_charts(int update_every)
340 {
341 ebpf_create_chart(
342 NETDATA_EBPF_SYSTEM_GROUP,
@@ -347,7 +347,7 @@ static void hardirq_create_charts()
347 NULL,
348 NETDATA_EBPF_CHART_TYPE_STACKED,
349 NETDATA_CHART_PRIO_HARDIRQ_LATENCY,
350 - NULL, NULL, 0,
350 + NULL, NULL, 0, update_every,
351 NETDATA_EBPF_MODULE_NAME_HARDIRQ
352 );
353
@@ -426,23 +426,30 @@ static void hardirq_collector(ebpf_module_t *em)
426
427 // create chart and static dims.
428 pthread_mutex_lock(&lock);
429 - hardirq_create_charts();
429 + hardirq_create_charts(em->update_every);
430 hardirq_create_static_dims();
431 pthread_mutex_unlock(&lock);
432
433 // loop and read from published data until ebpf plugin is closed.
434 + int update_every = em->update_every;
435 + int counter = update_every - 1;
436 while (!close_ebpf_plugin) {
437 pthread_mutex_lock(&collect_data_mutex);
438 pthread_cond_wait(&collect_data_cond_var, &collect_data_mutex);
437 - pthread_mutex_lock(&lock);
439
439 - // write dims now for all hitherto discovered IRQs.
440 - write_begin_chart(NETDATA_EBPF_SYSTEM_GROUP, "hardirq_latency");
441 - avl_traverse_lock(&hardirq_pub, hardirq_write_dims, NULL);
442 - hardirq_write_static_dims();
443 - write_end_chart();
440 + if (++counter == update_every) {
441 + counter = 0;
442 + pthread_mutex_lock(&lock);
443 +
444 + // write dims now for all hitherto discovered IRQs.
445 + write_begin_chart(NETDATA_EBPF_SYSTEM_GROUP, "hardirq_latency");
446 + avl_traverse_lock(&hardirq_pub, hardirq_write_dims, NULL);
447 + hardirq_write_static_dims();
448 + write_end_chart();
449 +
450 + pthread_mutex_unlock(&lock);
451 + }
452
445 - pthread_mutex_unlock(&lock);
453 pthread_mutex_unlock(&collect_data_mutex);
454 }
455 }
collectors/ebpf.plugin/ebpf_mount.c
+16 -8
@@ -111,7 +111,7 @@ void *ebpf_mount_read_hash(void *ptr)
111
112 ebpf_module_t *em = (ebpf_module_t *)ptr;
113
114 - usec_t step = NETDATA_LATENCY_MOUNT_SLEEP_MS * em->update_time;
114 + usec_t step = NETDATA_LATENCY_MOUNT_SLEEP_MS * em->update_every;
115 while (!close_ebpf_plugin) {
116 usec_t dt = heartbeat_next(&hb, step);
117 (void)dt;
@@ -156,15 +156,21 @@ static void mount_collector(ebpf_module_t *em)
156 netdata_thread_create(mount_thread.thread, mount_thread.name, NETDATA_THREAD_OPTION_JOINABLE,
157 ebpf_mount_read_hash, em);
158
159 + int update_every = em->update_every;
160 + int counter = update_every - 1;
161 while (!close_ebpf_plugin) {
162 pthread_mutex_lock(&collect_data_mutex);
163 pthread_cond_wait(&collect_data_cond_var, &collect_data_mutex);
164
163 - pthread_mutex_lock(&lock);
165 + if (++counter == update_every) {
166 + counter = 0;
167 + pthread_mutex_lock(&lock);
168
165 - ebpf_mount_send_data();
169 + ebpf_mount_send_data();
170 +
171 + pthread_mutex_unlock(&lock);
172 + }
173
167 - pthread_mutex_unlock(&lock);
174 pthread_mutex_unlock(&collect_data_mutex);
175 }
176 }
@@ -179,8 +185,10 @@ static void mount_collector(ebpf_module_t *em)
185 * Create mount charts
186 *
187 * Call ebpf_create_chart to create the charts for the collector.
188 + *
189 + * @param update_every value to overwrite the update frequency set by the server.
190 */
183 -static void ebpf_create_mount_charts()
191 +static void ebpf_create_mount_charts(int update_every)
192 {
193 ebpf_create_chart(NETDATA_EBPF_MOUNT_GLOBAL_FAMILY, NETDATA_EBPF_MOUNT_CALLS,
194 "Calls to mount and umount syscalls.",
@@ -190,7 +198,7 @@ static void ebpf_create_mount_charts()
198 NETDATA_CHART_PRIO_EBPF_MOUNT_CHARTS,
199 ebpf_create_global_dimension,
200 mount_publish_aggregated, NETDATA_EBPF_MOUNT_SYSCALL,
193 - NETDATA_EBPF_MODULE_NAME_MOUNT);
201 + update_every, NETDATA_EBPF_MODULE_NAME_MOUNT);
202
203 ebpf_create_chart(NETDATA_EBPF_MOUNT_GLOBAL_FAMILY, NETDATA_EBPF_MOUNT_ERRORS,
204 "Errors to mount and umount syscalls.",
@@ -200,7 +208,7 @@ static void ebpf_create_mount_charts()
208 NETDATA_CHART_PRIO_EBPF_MOUNT_CHARTS + 1,
209 ebpf_create_global_dimension,
210 mount_publish_aggregated, NETDATA_EBPF_MOUNT_SYSCALL,
203 - NETDATA_EBPF_MODULE_NAME_MOUNT);
211 + update_every, NETDATA_EBPF_MODULE_NAME_MOUNT);
212
213 fflush(stdout);
214 }
@@ -241,7 +249,7 @@ void *ebpf_mount_thread(void *ptr)
249 algorithms, NETDATA_EBPF_MOUNT_SYSCALL);
250
251 pthread_mutex_lock(&lock);
244 - ebpf_create_mount_charts();
252 + ebpf_create_mount_charts(em->update_every);
253 pthread_mutex_unlock(&lock);
254
255 mount_collector(em);
collectors/ebpf.plugin/ebpf_oomkill.c
+34 -25
@@ -114,29 +114,32 @@ static void oomkill_write_data(int32_t *keys, uint32_t total)
114 * Create charts for cgroup/application.
115 *
116 * @param type the chart type.
117 + * @param update_every value to overwrite the update frequency set by the server.
118 */
118 -static void ebpf_create_specific_oomkill_charts(char *type)
119 +static void ebpf_create_specific_oomkill_charts(char *type, int update_every)
120 {
121 ebpf_create_chart(type, NETDATA_OOMKILL_CHART, "OOM kills. This chart is provided by eBPF plugin.",
122 EBPF_COMMON_DIMENSION_KILLS, NETDATA_EBPF_MEMORY_GROUP,
123 NULL, NETDATA_EBPF_CHART_TYPE_LINE,
124 NETDATA_CHART_PRIO_CGROUPS_CONTAINERS + 5600,
125 ebpf_create_global_dimension,
125 - &oomkill_publish_aggregated, 1, NETDATA_EBPF_MODULE_NAME_OOMKILL);
126 + &oomkill_publish_aggregated, 1, update_every, NETDATA_EBPF_MODULE_NAME_OOMKILL);
127 }
128
129 /**
130 * Create Systemd OOMkill Charts
131 *
132 * Create charts when systemd is enabled
133 + *
134 + * @param update_every value to overwrite the update frequency set by the server.
135 **/
133 -static void ebpf_create_systemd_oomkill_charts()
136 +static void ebpf_create_systemd_oomkill_charts(int update_every)
137 {
138 ebpf_create_charts_on_systemd(NETDATA_OOMKILL_CHART, "OOM kills. This chart is provided by eBPF plugin.",
139 EBPF_COMMON_DIMENSION_KILLS, NETDATA_EBPF_MEMORY_GROUP,
140 NETDATA_EBPF_CHART_TYPE_LINE, 20191,
141 ebpf_algorithms[NETDATA_EBPF_INCREMENTAL_IDX], NULL,
139 - NETDATA_EBPF_MODULE_NAME_OOMKILL);
142 + NETDATA_EBPF_MODULE_NAME_OOMKILL, update_every);
143 }
144
145 /**
@@ -185,21 +188,22 @@ static void ebpf_send_specific_oomkill_data(char *type, int value)
188 * Create charts for cgroup/application.
189 *
190 * @param type the chart type.
191 + * @param update_every value to overwrite the update frequency set by the server.
192 */
189 -static void ebpf_obsolete_specific_oomkill_charts(char *type)
193 +static void ebpf_obsolete_specific_oomkill_charts(char *type, int update_every)
194 {
195 ebpf_write_chart_obsolete(type, NETDATA_OOMKILL_CHART, "OOM kills. This chart is provided by eBPF plugin.",
196 EBPF_COMMON_DIMENSION_KILLS, NETDATA_EBPF_MEMORY_GROUP,
197 NETDATA_EBPF_CHART_TYPE_LINE, NULL,
194 - NETDATA_CHART_PRIO_CGROUPS_CONTAINERS + 5600);
198 + NETDATA_CHART_PRIO_CGROUPS_CONTAINERS + 5600, update_every);
199 }
200
201 /**
202 * Send data to Netdata calling auxiliar functions.
203 *
200 - * @param root the target list.
204 + * @param update_every value to overwrite the update frequency set by the server.
205 */
202 -void ebpf_oomkill_send_cgroup_data()
206 +void ebpf_oomkill_send_cgroup_data(int update_every)
207 {
208 if (!ebpf_cgroup_pids)
209 return;
@@ -211,7 +215,7 @@ void ebpf_oomkill_send_cgroup_data()
215 if (has_systemd) {
216 static int systemd_charts = 0;
217 if (!systemd_charts) {
214 - ebpf_create_systemd_oomkill_charts();
218 + ebpf_create_systemd_oomkill_charts(update_every);
219 systemd_charts = 1;
220 }
221 systemd_charts = ebpf_send_systemd_oomkill_charts();
@@ -222,14 +226,14 @@ void ebpf_oomkill_send_cgroup_data()
226 continue;
227
228 if (!(ect->flags & NETDATA_EBPF_CGROUP_HAS_OOMKILL_CHART) && ect->updated) {
225 - ebpf_create_specific_oomkill_charts(ect->name);
229 + ebpf_create_specific_oomkill_charts(ect->name, update_every);
230 ect->flags |= NETDATA_EBPF_CGROUP_HAS_OOMKILL_CHART;
231 }
232
233 if (ect->flags & NETDATA_EBPF_CGROUP_HAS_OOMKILL_CHART && ect->updated) {
234 ebpf_send_specific_oomkill_data(ect->name, ect->oomkill);
235 } else {
232 - ebpf_obsolete_specific_oomkill_charts(ect->name);
236 + ebpf_obsolete_specific_oomkill_charts(ect->name, update_every);
237 ect->flags &= ~NETDATA_EBPF_CGROUP_HAS_OOMKILL_CHART;
238 }
239 }
@@ -307,6 +311,8 @@ static void ebpf_update_oomkill_cgroup(int32_t *keys, uint32_t total)
311 static void oomkill_collector(ebpf_module_t *em)
312 {
313 int cgroups = em->cgroup_charts;
314 + int update_every = em->update_every;
315 + int counter = update_every - 1;
316 int32_t keys[NETDATA_OOMKILL_MAX_ENTRIES];
317 memset(keys, 0, sizeof(keys));
318
@@ -314,21 +320,26 @@ static void oomkill_collector(ebpf_module_t *em)
320 while (!close_ebpf_plugin) {
321 pthread_mutex_lock(&collect_data_mutex);
322 pthread_cond_wait(&collect_data_cond_var, &collect_data_mutex);
317 - pthread_mutex_lock(&lock);
323
319 - uint32_t count = oomkill_read_data(keys);
320 - if (cgroups && count)
321 - ebpf_update_oomkill_cgroup(keys, count);
324 + if (++counter == update_every) {
325 + counter = 0;
326 + pthread_mutex_lock(&lock);
327 +
328 + uint32_t count = oomkill_read_data(keys);
329 + if (cgroups && count)
330 + ebpf_update_oomkill_cgroup(keys, count);
331
323 - // write everything from the ebpf map.
324 - if (cgroups)
325 - ebpf_oomkill_send_cgroup_data();
332 + // write everything from the ebpf map.
333 + if (cgroups)
334 + ebpf_oomkill_send_cgroup_data(update_every);
335
327 - write_begin_chart(NETDATA_APPS_FAMILY, NETDATA_OOMKILL_CHART);
328 - oomkill_write_data(keys, count);
329 - write_end_chart();
336 + write_begin_chart(NETDATA_APPS_FAMILY, NETDATA_OOMKILL_CHART);
337 + oomkill_write_data(keys, count);
338 + write_end_chart();
339 +
340 + pthread_mutex_unlock(&lock);
341 + }
342
331 - pthread_mutex_unlock(&lock);
343 pthread_mutex_unlock(&collect_data_mutex);
344 }
345 }
@@ -342,8 +353,6 @@ static void oomkill_collector(ebpf_module_t *em)
353 */
354 void ebpf_oomkill_create_apps_charts(struct ebpf_module *em, void *ptr)
355 {
345 - UNUSED(em);
346 -
356 struct target *root = ptr;
357 ebpf_create_charts_on_apps(NETDATA_OOMKILL_CHART,
358 "OOM kills",
@@ -352,7 +361,7 @@ void ebpf_oomkill_create_apps_charts(struct ebpf_module *em, void *ptr)
361 NETDATA_EBPF_CHART_TYPE_STACKED,
362 20020,
363 ebpf_algorithms[NETDATA_EBPF_ABSOLUTE_IDX],
355 - root, NETDATA_EBPF_MODULE_NAME_OOMKILL);
364 + root, em->update_every, NETDATA_EBPF_MODULE_NAME_OOMKILL);
365 }
366
367 /**
collectors/ebpf.plugin/ebpf_process.c
+65 -49
@@ -362,9 +362,10 @@ static void ebpf_update_process_cgroup()
362 * @param axis the axis label
363 * @param web the group name used to attach the chart on dashboard
364 * @param order the order number of the specified chart
365 + * @param update_every value to overwrite the update frequency set by the server.
366 */
367 static void ebpf_process_status_chart(char *family, char *name, char *axis,
367 - char *web, char *algorithm, int order)
368 + char *web, char *algorithm, int order, int update_every)
369 {
370 printf("CHART %s.%s '' 'Process not closed' '%s' '%s' '' line %d %d '' 'ebpf.plugin' 'process'\n",
371 family,
@@ -397,7 +398,7 @@ static void ebpf_create_global_charts(ebpf_module_t *em)
398 21002,
399 ebpf_create_global_dimension,
400 &process_publish_aggregated[NETDATA_KEY_PUBLISH_PROCESS_FORK],
400 - 2, NETDATA_EBPF_MODULE_NAME_PROCESS);
401 + 2, em->update_every, NETDATA_EBPF_MODULE_NAME_PROCESS);
402
403 ebpf_create_chart(NETDATA_EBPF_SYSTEM_GROUP,
404 NETDATA_EXIT_SYSCALL,
@@ -409,14 +410,14 @@ static void ebpf_create_global_charts(ebpf_module_t *em)
410 21003,
411 ebpf_create_global_dimension,
412 &process_publish_aggregated[NETDATA_KEY_PUBLISH_PROCESS_EXIT],
412 - 2, NETDATA_EBPF_MODULE_NAME_PROCESS);
413 + 2, em->update_every, NETDATA_EBPF_MODULE_NAME_PROCESS);
414
415 ebpf_process_status_chart(NETDATA_EBPF_SYSTEM_GROUP,
416 NETDATA_PROCESS_STATUS_NAME,
417 EBPF_COMMON_DIMENSION_DIFFERENCE,
418 NETDATA_PROCESS_GROUP,
419 ebpf_algorithms[NETDATA_EBPF_ABSOLUTE_IDX],
419 - 21004);
420 + 21004, em->update_every);
421
422 if (em->mode < MODE_ENTRY) {
423 ebpf_create_chart(NETDATA_EBPF_SYSTEM_GROUP,
@@ -429,7 +430,7 @@ static void ebpf_create_global_charts(ebpf_module_t *em)
430 21005,
431 ebpf_create_global_dimension,
432 &process_publish_aggregated[NETDATA_KEY_PUBLISH_PROCESS_FORK],
432 - 2, NETDATA_EBPF_MODULE_NAME_PROCESS);
433 + 2, em->update_every, NETDATA_EBPF_MODULE_NAME_PROCESS);
434 }
435 }
436
@@ -451,7 +452,7 @@ void ebpf_process_create_apps_charts(struct ebpf_module *em, void *ptr)
452 NETDATA_EBPF_CHART_TYPE_STACKED,
453 20065,
454 ebpf_algorithms[NETDATA_EBPF_ABSOLUTE_IDX],
454 - root, NETDATA_EBPF_MODULE_NAME_PROCESS);
455 + root, em->update_every, NETDATA_EBPF_MODULE_NAME_PROCESS);
456
457 ebpf_create_charts_on_apps(NETDATA_SYSCALL_APPS_TASK_THREAD,
458 "Threads started",
@@ -460,7 +461,7 @@ void ebpf_process_create_apps_charts(struct ebpf_module *em, void *ptr)
461 NETDATA_EBPF_CHART_TYPE_STACKED,
462 20066,
463 ebpf_algorithms[NETDATA_EBPF_ABSOLUTE_IDX],
463 - root, NETDATA_EBPF_MODULE_NAME_PROCESS);
464 + root, em->update_every, NETDATA_EBPF_MODULE_NAME_PROCESS);
465
466 ebpf_create_charts_on_apps(NETDATA_SYSCALL_APPS_TASK_EXIT,
467 "Tasks starts exit process.",
@@ -469,7 +470,7 @@ void ebpf_process_create_apps_charts(struct ebpf_module *em, void *ptr)
470 NETDATA_EBPF_CHART_TYPE_STACKED,
471 20067,
472 ebpf_algorithms[NETDATA_EBPF_ABSOLUTE_IDX],
472 - root, NETDATA_EBPF_MODULE_NAME_PROCESS);
473 + root, em->update_every, NETDATA_EBPF_MODULE_NAME_PROCESS);
474
475 ebpf_create_charts_on_apps(NETDATA_SYSCALL_APPS_TASK_CLOSE,
476 "Tasks closed",
@@ -478,7 +479,7 @@ void ebpf_process_create_apps_charts(struct ebpf_module *em, void *ptr)
479 NETDATA_EBPF_CHART_TYPE_STACKED,
480 20068,
481 ebpf_algorithms[NETDATA_EBPF_ABSOLUTE_IDX],
481 - root, NETDATA_EBPF_MODULE_NAME_PROCESS);
482 + root, em->update_every, NETDATA_EBPF_MODULE_NAME_PROCESS);
483
484 if (em->mode < MODE_ENTRY) {
485 ebpf_create_charts_on_apps(NETDATA_SYSCALL_APPS_TASK_ERROR,
@@ -489,7 +490,7 @@ void ebpf_process_create_apps_charts(struct ebpf_module *em, void *ptr)
490 20069,
491 ebpf_algorithms[NETDATA_EBPF_ABSOLUTE_IDX],
492 root,
492 - NETDATA_EBPF_MODULE_NAME_PROCESS);
493 + em->update_every, NETDATA_EBPF_MODULE_NAME_PROCESS);
494 }
495 }
496
@@ -569,6 +570,9 @@ void *ebpf_cgroup_update_shm(void *ptr)
570 usec_t dt = heartbeat_next(&hb, step);
571 (void)dt;
572
573 + if (close_ebpf_plugin)
574 + break;
575 +
576 if (!shm_ebpf_cgroup.header)
577 ebpf_map_cgroup_shared_memory();
578
@@ -666,7 +670,7 @@ static void ebpf_create_specific_process_charts(char *type, ebpf_module_t *em)
670 NETDATA_CGROUP_PROCESS_CREATE_CONTEXT, NETDATA_EBPF_CHART_TYPE_LINE,
671 NETDATA_CHART_PRIO_CGROUPS_CONTAINERS + 5000,
672 ebpf_create_global_dimension, &process_publish_aggregated[NETDATA_KEY_PUBLISH_PROCESS_FORK],
669 - 1, NETDATA_EBPF_MODULE_NAME_PROCESS);
673 + 1, em->update_every, NETDATA_EBPF_MODULE_NAME_PROCESS);
674
675 ebpf_create_chart(type, NETDATA_SYSCALL_APPS_TASK_THREAD, "Threads started",
676 EBPF_COMMON_DIMENSION_CALL, NETDATA_PROCESS_CGROUP_GROUP,
@@ -674,7 +678,7 @@ static void ebpf_create_specific_process_charts(char *type, ebpf_module_t *em)
678 NETDATA_CHART_PRIO_CGROUPS_CONTAINERS + 5001,
679 ebpf_create_global_dimension,
680 &process_publish_aggregated[NETDATA_KEY_PUBLISH_PROCESS_CLONE],
677 - 1, NETDATA_EBPF_MODULE_NAME_PROCESS);
681 + 1, em->update_every, NETDATA_EBPF_MODULE_NAME_PROCESS);
682
683 ebpf_create_chart(type, NETDATA_SYSCALL_APPS_TASK_EXIT, "Tasks starts exit process.",
684 EBPF_COMMON_DIMENSION_CALL, NETDATA_PROCESS_CGROUP_GROUP,
@@ -682,7 +686,7 @@ static void ebpf_create_specific_process_charts(char *type, ebpf_module_t *em)
686 NETDATA_EBPF_CHART_TYPE_LINE, NETDATA_CHART_PRIO_CGROUPS_CONTAINERS + 5002,
687 ebpf_create_global_dimension,
688 &process_publish_aggregated[NETDATA_KEY_PUBLISH_PROCESS_EXIT],
685 - 1, NETDATA_EBPF_MODULE_NAME_PROCESS);
689 + 1, em->update_every, NETDATA_EBPF_MODULE_NAME_PROCESS);
690
691 ebpf_create_chart(type, NETDATA_SYSCALL_APPS_TASK_CLOSE, "Tasks closed",
692 EBPF_COMMON_DIMENSION_CALL, NETDATA_PROCESS_CGROUP_GROUP,
@@ -690,7 +694,7 @@ static void ebpf_create_specific_process_charts(char *type, ebpf_module_t *em)
694 NETDATA_EBPF_CHART_TYPE_LINE, NETDATA_CHART_PRIO_CGROUPS_CONTAINERS + 5003,
695 ebpf_create_global_dimension,
696 &process_publish_aggregated[NETDATA_KEY_PUBLISH_PROCESS_RELEASE_TASK],
693 - 1, NETDATA_EBPF_MODULE_NAME_PROCESS);
697 + 1, em->update_every, NETDATA_EBPF_MODULE_NAME_PROCESS);
698
699 if (em->mode < MODE_ENTRY) {
700 ebpf_create_chart(type, NETDATA_SYSCALL_APPS_TASK_ERROR, "Errors to create process or threads.",
@@ -699,7 +703,7 @@ static void ebpf_create_specific_process_charts(char *type, ebpf_module_t *em)
703 NETDATA_EBPF_CHART_TYPE_LINE, NETDATA_CHART_PRIO_CGROUPS_CONTAINERS + 5004,
704 ebpf_create_global_dimension,
705 &process_publish_aggregated[NETDATA_KEY_PUBLISH_PROCESS_EXIT],
702 - 1, NETDATA_EBPF_MODULE_NAME_PROCESS);
706 + 1, em->update_every, NETDATA_EBPF_MODULE_NAME_PROCESS);
707 }
708 }
709
@@ -715,24 +719,29 @@ static void ebpf_obsolete_specific_process_charts(char *type, ebpf_module_t *em)
719 {
720 ebpf_write_chart_obsolete(type, NETDATA_SYSCALL_APPS_TASK_PROCESS, "Process started",
721 EBPF_COMMON_DIMENSION_CALL, NETDATA_PROCESS_GROUP, NETDATA_EBPF_CHART_TYPE_LINE,
718 - NETDATA_CGROUP_PROCESS_CREATE_CONTEXT, NETDATA_CHART_PRIO_CGROUPS_CONTAINERS + 5000);
722 + NETDATA_CGROUP_PROCESS_CREATE_CONTEXT, NETDATA_CHART_PRIO_CGROUPS_CONTAINERS + 5000,
723 + em->update_every);
724
725 ebpf_write_chart_obsolete(type, NETDATA_SYSCALL_APPS_TASK_THREAD, "Threads started",
726 EBPF_COMMON_DIMENSION_CALL, NETDATA_PROCESS_GROUP, NETDATA_EBPF_CHART_TYPE_LINE,
722 - NETDATA_CGROUP_THREAD_CREATE_CONTEXT, NETDATA_CHART_PRIO_CGROUPS_CONTAINERS + 5001);
727 + NETDATA_CGROUP_THREAD_CREATE_CONTEXT, NETDATA_CHART_PRIO_CGROUPS_CONTAINERS + 5001,
728 + em->update_every);
729
730 ebpf_write_chart_obsolete(type, NETDATA_SYSCALL_APPS_TASK_EXIT,"Tasks starts exit process.",
731 EBPF_COMMON_DIMENSION_CALL, NETDATA_PROCESS_GROUP, NETDATA_EBPF_CHART_TYPE_LINE,
726 - NETDATA_CGROUP_PROCESS_EXIT_CONTEXT, NETDATA_CHART_PRIO_CGROUPS_CONTAINERS + 5003);
732 + NETDATA_CGROUP_PROCESS_EXIT_CONTEXT, NETDATA_CHART_PRIO_CGROUPS_CONTAINERS + 5002,
733 + em->update_every);
734
735 ebpf_write_chart_obsolete(type, NETDATA_SYSCALL_APPS_TASK_CLOSE,"Tasks closed",
736 EBPF_COMMON_DIMENSION_CALL, NETDATA_PROCESS_GROUP, NETDATA_EBPF_CHART_TYPE_LINE,
730 - NETDATA_CGROUP_PROCESS_CLOSE_CONTEXT, NETDATA_CHART_PRIO_CGROUPS_CONTAINERS + 5003);
737 + NETDATA_CGROUP_PROCESS_CLOSE_CONTEXT, NETDATA_CHART_PRIO_CGROUPS_CONTAINERS + 5003,
738 + em->update_every);
739
740 if (em->mode < MODE_ENTRY) {
741 ebpf_write_chart_obsolete(type, NETDATA_SYSCALL_APPS_TASK_ERROR,"Errors to create process or threads.",
742 EBPF_COMMON_DIMENSION_CALL, NETDATA_PROCESS_GROUP, NETDATA_EBPF_CHART_TYPE_LINE,
735 - NETDATA_CGROUP_PROCESS_ERROR_CONTEXT, NETDATA_CHART_PRIO_CGROUPS_CONTAINERS + 5004);
743 + NETDATA_CGROUP_PROCESS_ERROR_CONTEXT, NETDATA_CHART_PRIO_CGROUPS_CONTAINERS + 5004,
744 + em->update_every);
745 }
746 }
747
@@ -749,32 +758,32 @@ static void ebpf_create_systemd_process_charts(ebpf_module_t *em)
758 EBPF_COMMON_DIMENSION_CALL, NETDATA_APPS_PROCESS_GROUP,
759 NETDATA_EBPF_CHART_TYPE_STACKED, 20065,
760 ebpf_algorithms[NETDATA_EBPF_INCREMENTAL_IDX], NETDATA_SYSTEMD_PROCESS_CREATE_CONTEXT,
752 - NETDATA_EBPF_MODULE_NAME_PROCESS);
761 + NETDATA_EBPF_MODULE_NAME_PROCESS, em->update_every);
762
763 ebpf_create_charts_on_systemd(NETDATA_SYSCALL_APPS_TASK_THREAD, "Threads started",
764 EBPF_COMMON_DIMENSION_CALL, NETDATA_APPS_PROCESS_GROUP,
765 NETDATA_EBPF_CHART_TYPE_STACKED, 20066,
766 ebpf_algorithms[NETDATA_EBPF_INCREMENTAL_IDX], NETDATA_SYSTEMD_THREAD_CREATE_CONTEXT,
758 - NETDATA_EBPF_MODULE_NAME_PROCESS);
767 + NETDATA_EBPF_MODULE_NAME_PROCESS, em->update_every);
768
769 ebpf_create_charts_on_systemd(NETDATA_SYSCALL_APPS_TASK_CLOSE, "Tasks starts exit process.",
770 EBPF_COMMON_DIMENSION_CALL, NETDATA_APPS_PROCESS_GROUP,
771 NETDATA_EBPF_CHART_TYPE_STACKED, 20067,
772 ebpf_algorithms[NETDATA_EBPF_INCREMENTAL_IDX], NETDATA_SYSTEMD_PROCESS_EXIT_CONTEXT,
764 - NETDATA_EBPF_MODULE_NAME_PROCESS);
773 + NETDATA_EBPF_MODULE_NAME_PROCESS, em->update_every);
774
775 ebpf_create_charts_on_systemd(NETDATA_SYSCALL_APPS_TASK_EXIT, "Tasks closed",
776 EBPF_COMMON_DIMENSION_CALL, NETDATA_APPS_PROCESS_GROUP,
777 NETDATA_EBPF_CHART_TYPE_STACKED, 20068,
778 ebpf_algorithms[NETDATA_EBPF_INCREMENTAL_IDX], NETDATA_SYSTEMD_PROCESS_CLOSE_CONTEXT,
770 - NETDATA_EBPF_MODULE_NAME_PROCESS);
779 + NETDATA_EBPF_MODULE_NAME_PROCESS, em->update_every);
780
781 if (em->mode < MODE_ENTRY) {
782 ebpf_create_charts_on_systemd(NETDATA_SYSCALL_APPS_TASK_ERROR, "Errors to create process or threads.",
783 EBPF_COMMON_DIMENSION_CALL, NETDATA_APPS_PROCESS_GROUP,
784 NETDATA_EBPF_CHART_TYPE_STACKED, 20069,
785 ebpf_algorithms[NETDATA_EBPF_INCREMENTAL_IDX], NETDATA_SYSTEMD_PROCESS_ERROR_CONTEXT,
777 - NETDATA_EBPF_MODULE_NAME_PROCESS);
786 + NETDATA_EBPF_MODULE_NAME_PROCESS, em->update_every);
787 }
788 }
789
@@ -906,10 +915,9 @@ void ebpf_process_update_cgroup_algorithm()
915 /**
916 * Main loop for this collector.
917 *
909 - * @param step the number of microseconds used with heart beat
918 * @param em the structure with thread information
919 */
912 -static void process_collector(usec_t step, ebpf_module_t *em)
920 +static void process_collector(ebpf_module_t *em)
921 {
922 cgroup_thread.thread = mallocz(sizeof(netdata_thread_t));
923 cgroup_thread.start_routine = ebpf_cgroup_update_shm;
@@ -926,12 +934,12 @@ static void process_collector(usec_t step, ebpf_module_t *em)
934 ebpf_process_update_cgroup_algorithm();
935
936 int pid_fd = process_maps[NETDATA_PROCESS_PID_TABLE].map_fd;
937 + int update_every = em->update_every;
938 + int counter = update_every - 1;
939 while (!close_ebpf_plugin) {
930 - usec_t dt = heartbeat_next(&hb, step);
940 + usec_t dt = heartbeat_next(&hb, USEC_PER_SEC);
941 (void)dt;
942
933 - read_hash_global_tables();
934 -
943 pthread_mutex_lock(&collect_data_mutex);
944 cleanup_exited_pids();
945 collect_data_for_all_processes(pid_fd);
@@ -941,30 +949,38 @@ static void process_collector(usec_t step, ebpf_module_t *em)
949 pthread_cond_broadcast(&collect_data_cond_var);
950 pthread_mutex_unlock(&collect_data_mutex);
951
944 - int publish_apps = 0;
945 - if (all_pids_count > 0) {
946 - if (apps_enabled) {
947 - publish_apps = 1;
948 - ebpf_process_update_apps_data();
952 + if (++counter == update_every) {
953 + counter = 0;
954 +
955 + read_hash_global_tables();
956 +
957 + int publish_apps = 0;
958 + if (all_pids_count > 0) {
959 + if (apps_enabled) {
960 + publish_apps = 1;
961 + ebpf_process_update_apps_data();
962 + }
963 +
964 + if (cgroups) {
965 + ebpf_update_process_cgroup();
966 + }
967 }
968
951 - if (cgroups) {
952 - ebpf_update_process_cgroup();
969 + pthread_mutex_lock(&lock);
970 + if (publish_global) {
971 + ebpf_process_send_data(em);
972 }
954 - }
973
956 - pthread_mutex_lock(&lock);
957 - if (publish_global) {
958 - ebpf_process_send_data(em);
959 - }
974 + if (publish_apps) {
975 + ebpf_process_send_apps_data(apps_groups_root_target, em);
976 + }
977
961 - if (publish_apps) {
962 - ebpf_process_send_apps_data(apps_groups_root_target, em);
978 + if (cgroups) {
979 + ebpf_process_send_cgroup_data(em);
980 + }
981 + pthread_mutex_unlock(&lock);
982 }
983
965 - if (cgroups) {
966 - ebpf_process_send_cgroup_data(em);
967 - }
984 pthread_mutex_unlock(&lock);
985
986 fflush(stdout);
@@ -1026,7 +1042,7 @@ static void ebpf_process_cleanup(void *ptr)
1042
1043 heartbeat_t hb;
1044 heartbeat_init(&hb);
1029 - uint32_t tick = 50*USEC_PER_MS;
1045 + uint32_t tick = 1 * USEC_PER_SEC;
1046 while (!finalized_threads) {
1047 usec_t dt = heartbeat_next(&hb, tick);
1048 UNUSED(dt);
@@ -1213,7 +1229,7 @@ void *ebpf_process_thread(void *ptr)
1229
1230 pthread_mutex_unlock(&lock);
1231
1216 - process_collector((usec_t)(em->update_time * USEC_PER_SEC), em);
1232 + process_collector(em);
1233
1234 endprocess:
1235 wait_for_all_threads_die();
collectors/ebpf.plugin/ebpf_shm.c
+55 -39
@@ -272,7 +272,7 @@ void *ebpf_shm_read_hash(void *ptr)
272 heartbeat_init(&hb);
273
274 ebpf_module_t *em = (ebpf_module_t *)ptr;
275 - usec_t step = NETDATA_SHM_SLEEP_MS * em->update_time;
275 + usec_t step = NETDATA_SHM_SLEEP_MS * em->update_every;
276 while (!close_ebpf_plugin) {
277 usec_t dt = heartbeat_next(&hb, step);
278 (void)dt;
@@ -381,8 +381,9 @@ static void ebpf_shm_sum_cgroup_pids(netdata_publish_shm_t *shm, struct pid_on_t
381 * Create charts for cgroup/application.
382 *
383 * @param type the chart type.
384 + * @param update_every value to overwrite the update frequency set by the server.
385 */
385 -static void ebpf_create_specific_shm_charts(char *type)
386 +static void ebpf_create_specific_shm_charts(char *type, int update_every)
387 {
388 ebpf_create_chart(type, NETDATA_SHMGET_CHART,
389 "Calls to syscall <code>shmget(2)</code>.",
@@ -394,6 +395,7 @@ static void ebpf_create_specific_shm_charts(char *type)
395 ebpf_create_global_dimension,
396 &shm_publish_aggregated[NETDATA_KEY_SHMGET_CALL],
397 1,
398 + update_every,
399 NETDATA_EBPF_MODULE_NAME_SHM);
400
401 ebpf_create_chart(type, NETDATA_SHMAT_CHART,
@@ -406,6 +408,7 @@ static void ebpf_create_specific_shm_charts(char *type)
408 ebpf_create_global_dimension,
409 &shm_publish_aggregated[NETDATA_KEY_SHMAT_CALL],
410 1,
411 + update_every,
412 NETDATA_EBPF_MODULE_NAME_SHM);
413
414 ebpf_create_chart(type, NETDATA_SHMDT_CHART,
@@ -418,6 +421,7 @@ static void ebpf_create_specific_shm_charts(char *type)
421 ebpf_create_global_dimension,
422 &shm_publish_aggregated[NETDATA_KEY_SHMDT_CALL],
423 1,
424 + update_every,
425 NETDATA_EBPF_MODULE_NAME_SHM);
426
427 ebpf_create_chart(type, NETDATA_SHMCTL_CHART,
@@ -430,6 +434,7 @@ static void ebpf_create_specific_shm_charts(char *type)
434 ebpf_create_global_dimension,
435 &shm_publish_aggregated[NETDATA_KEY_SHMCTL_CALL],
436 1,
437 + update_every,
438 NETDATA_EBPF_MODULE_NAME_SHM);
439 }
440
@@ -439,44 +444,47 @@ static void ebpf_create_specific_shm_charts(char *type)
444 * Obsolete charts for cgroup/application.
445 *
446 * @param type the chart type.
447 + * @param update_every value to overwrite the update frequency set by the server.
448 */
443 -static void ebpf_obsolete_specific_shm_charts(char *type)
449 +static void ebpf_obsolete_specific_shm_charts(char *type, int update_every)
450 {
451 ebpf_write_chart_obsolete(type, NETDATA_SHMGET_CHART,
452 "Calls to syscall <code>shmget(2)</code>.",
453 EBPF_COMMON_DIMENSION_CALL,
454 NETDATA_APPS_IPC_SHM_GROUP,
455 NETDATA_EBPF_CHART_TYPE_LINE, NETDATA_CGROUP_SHM_GET_CONTEXT,
450 - NETDATA_CHART_PRIO_CGROUPS_CONTAINERS + 5800);
456 + NETDATA_CHART_PRIO_CGROUPS_CONTAINERS + 5800, update_every);
457
458 ebpf_write_chart_obsolete(type, NETDATA_SHMAT_CHART,
459 "Calls to syscall <code>shmat(2)</code>.",
460 EBPF_COMMON_DIMENSION_CALL,
461 NETDATA_APPS_IPC_SHM_GROUP,
462 NETDATA_EBPF_CHART_TYPE_LINE, NETDATA_CGROUP_SHM_AT_CONTEXT,
457 - NETDATA_CHART_PRIO_CGROUPS_CONTAINERS + 5801);
463 + NETDATA_CHART_PRIO_CGROUPS_CONTAINERS + 5801, update_every);
464
465 ebpf_write_chart_obsolete(type, NETDATA_SHMDT_CHART,
466 "Calls to syscall <code>shmdt(2)</code>.",
467 EBPF_COMMON_DIMENSION_CALL,
468 NETDATA_APPS_IPC_SHM_GROUP,
469 NETDATA_EBPF_CHART_TYPE_LINE, NETDATA_CGROUP_SHM_DT_CONTEXT,
464 - NETDATA_CHART_PRIO_CGROUPS_CONTAINERS + 5802);
470 + NETDATA_CHART_PRIO_CGROUPS_CONTAINERS + 5802, update_every);
471
472 ebpf_write_chart_obsolete(type, NETDATA_SHMCTL_CHART,
473 "Calls to syscall <code>shmctl(2)</code>.",
474 EBPF_COMMON_DIMENSION_CALL,
475 NETDATA_APPS_IPC_SHM_GROUP,
476 NETDATA_EBPF_CHART_TYPE_LINE, NETDATA_CGROUP_SHM_CTL_CONTEXT,
471 - NETDATA_CHART_PRIO_CGROUPS_CONTAINERS + 5803);
477 + NETDATA_CHART_PRIO_CGROUPS_CONTAINERS + 5803, update_every);
478 }
479
480 /**
481 * Create Systemd Swap Charts
482 *
483 * Create charts when systemd is enabled
484 + *
485 + * @param update_every value to overwrite the update frequency set by the server.
486 **/
479 -static void ebpf_create_systemd_shm_charts()
487 +static void ebpf_create_systemd_shm_charts(int update_every)
488 {
489 ebpf_create_charts_on_systemd(NETDATA_SHMGET_CHART,
490 "Calls to syscall <code>shmget(2)</code>.",
@@ -485,7 +493,7 @@ static void ebpf_create_systemd_shm_charts()
493 NETDATA_EBPF_CHART_TYPE_STACKED,
494 20191,
495 ebpf_algorithms[NETDATA_EBPF_INCREMENTAL_IDX],
488 - NETDATA_SYSTEMD_SHM_GET_CONTEXT, NETDATA_EBPF_MODULE_NAME_SHM);
496 + NETDATA_SYSTEMD_SHM_GET_CONTEXT, NETDATA_EBPF_MODULE_NAME_SHM, update_every);
497
498 ebpf_create_charts_on_systemd(NETDATA_SHMAT_CHART,
499 "Calls to syscall <code>shmat(2)</code>.",
@@ -494,7 +502,7 @@ static void ebpf_create_systemd_shm_charts()
502 NETDATA_EBPF_CHART_TYPE_STACKED,
503 20192,
504 ebpf_algorithms[NETDATA_EBPF_INCREMENTAL_IDX],
497 - NETDATA_SYSTEMD_SHM_AT_CONTEXT, NETDATA_EBPF_MODULE_NAME_SHM);
505 + NETDATA_SYSTEMD_SHM_AT_CONTEXT, NETDATA_EBPF_MODULE_NAME_SHM, update_every);
506
507 ebpf_create_charts_on_systemd(NETDATA_SHMDT_CHART,
508 "Calls to syscall <code>shmdt(2)</code>.",
@@ -503,7 +511,7 @@ static void ebpf_create_systemd_shm_charts()
511 NETDATA_EBPF_CHART_TYPE_STACKED,
512 20193,
513 ebpf_algorithms[NETDATA_EBPF_INCREMENTAL_IDX],
506 - NETDATA_SYSTEMD_SHM_DT_CONTEXT, NETDATA_EBPF_MODULE_NAME_SHM);
514 + NETDATA_SYSTEMD_SHM_DT_CONTEXT, NETDATA_EBPF_MODULE_NAME_SHM, update_every);
515
516 ebpf_create_charts_on_systemd(NETDATA_SHMCTL_CHART,
517 "Calls to syscall <code>shmctl(2)</code>.",
@@ -512,7 +520,7 @@ static void ebpf_create_systemd_shm_charts()
520 NETDATA_EBPF_CHART_TYPE_STACKED,
521 20193,
522 ebpf_algorithms[NETDATA_EBPF_INCREMENTAL_IDX],
515 - NETDATA_SYSTEMD_SHM_CTL_CONTEXT, NETDATA_EBPF_MODULE_NAME_SHM);
523 + NETDATA_SYSTEMD_SHM_CTL_CONTEXT, NETDATA_EBPF_MODULE_NAME_SHM, update_every);
524 }
525
526 /**
@@ -592,8 +600,10 @@ static void ebpf_send_specific_shm_data(char *type, netdata_publish_shm_t *value
600
601 /**
602 * Send data to Netdata calling auxiliar functions.
603 + *
604 + * @param update_every value to overwrite the update frequency set by the server.
605 */
596 -void ebpf_shm_send_cgroup_data()
606 +void ebpf_shm_send_cgroup_data(int update_every)
607 {
608 if (!ebpf_cgroup_pids)
609 return;
@@ -608,7 +618,7 @@ void ebpf_shm_send_cgroup_data()
618 if (has_systemd) {
619 static int systemd_charts = 0;
620 if (!systemd_charts) {
611 - ebpf_create_systemd_shm_charts();
621 + ebpf_create_systemd_shm_charts(update_every);
622 systemd_charts = 1;
623 }
624
@@ -620,7 +630,7 @@ void ebpf_shm_send_cgroup_data()
630 continue;
631
632 if (!(ect->flags & NETDATA_EBPF_CGROUP_HAS_SHM_CHART) && ect->updated) {
623 - ebpf_create_specific_shm_charts(ect->name);
633 + ebpf_create_specific_shm_charts(ect->name, update_every);
634 ect->flags |= NETDATA_EBPF_CGROUP_HAS_SHM_CHART;
635 }
636
@@ -628,7 +638,7 @@ void ebpf_shm_send_cgroup_data()
638 if (ect->updated) {
639 ebpf_send_specific_shm_data(ect->name, &ect->publish_shm);
640 } else {
631 - ebpf_obsolete_specific_shm_charts(ect->name);
641 + ebpf_obsolete_specific_shm_charts(ect->name, update_every);
642 ect->flags &= ~NETDATA_EBPF_CGROUP_HAS_SWAP_CHART;
643 }
644 }
@@ -655,31 +665,37 @@ static void shm_collector(ebpf_module_t *em)
665
666 int apps = em->apps_charts;
667 int cgroups = em->cgroup_charts;
668 + int update_every = em->update_every;
669 + int counter = update_every - 1;
670 while (!close_ebpf_plugin) {
671 pthread_mutex_lock(&collect_data_mutex);
672 pthread_cond_wait(&collect_data_cond_var, &collect_data_mutex);
673
662 - if (apps) {
663 - read_apps_table();
664 - }
674 + if (++counter == update_every) {
675 + counter = 0;
676 + if (apps) {
677 + read_apps_table();
678 + }
679
666 - if (cgroups) {
667 - ebpf_update_shm_cgroup();
668 - }
680 + if (cgroups) {
681 + ebpf_update_shm_cgroup();
682 + }
683
670 - pthread_mutex_lock(&lock);
684 + pthread_mutex_lock(&lock);
685
672 - shm_send_global();
686 + shm_send_global();
687
674 - if (apps) {
675 - ebpf_shm_send_apps_data(apps_groups_root_target);
676 - }
688 + if (apps) {
689 + ebpf_shm_send_apps_data(apps_groups_root_target);
690 + }
691 +
692 + if (cgroups) {
693 + ebpf_shm_send_cgroup_data(update_every);
694 + }
695
678 - if (cgroups) {
679 - ebpf_shm_send_cgroup_data();
696 + pthread_mutex_unlock(&lock);
697 }
698
682 - pthread_mutex_unlock(&lock);
699 pthread_mutex_unlock(&collect_data_mutex);
700 }
701 }
@@ -697,8 +713,6 @@ static void shm_collector(ebpf_module_t *em)
713 */
714 void ebpf_shm_create_apps_charts(struct ebpf_module *em, void *ptr)
715 {
700 - UNUSED(em);
701 -
716 struct target *root = ptr;
717 ebpf_create_charts_on_apps(NETDATA_SHMGET_CHART,
718 "Calls to syscall <code>shmget(2)</code>.",
@@ -707,7 +721,7 @@ void ebpf_shm_create_apps_charts(struct ebpf_module *em, void *ptr)
721 NETDATA_EBPF_CHART_TYPE_STACKED,
722 20191,
723 ebpf_algorithms[NETDATA_EBPF_INCREMENTAL_IDX],
710 - root, NETDATA_EBPF_MODULE_NAME_SHM);
724 + root, em->update_every, NETDATA_EBPF_MODULE_NAME_SHM);
725
726 ebpf_create_charts_on_apps(NETDATA_SHMAT_CHART,
727 "Calls to syscall <code>shmat(2)</code>.",
@@ -716,7 +730,7 @@ void ebpf_shm_create_apps_charts(struct ebpf_module *em, void *ptr)
730 NETDATA_EBPF_CHART_TYPE_STACKED,
731 20192,
732 ebpf_algorithms[NETDATA_EBPF_INCREMENTAL_IDX],
719 - root, NETDATA_EBPF_MODULE_NAME_SHM);
733 + root, em->update_every, NETDATA_EBPF_MODULE_NAME_SHM);
734
735 ebpf_create_charts_on_apps(NETDATA_SHMDT_CHART,
736 "Calls to syscall <code>shmdt(2)</code>.",
@@ -725,7 +739,7 @@ void ebpf_shm_create_apps_charts(struct ebpf_module *em, void *ptr)
739 NETDATA_EBPF_CHART_TYPE_STACKED,
740 20193,
741 ebpf_algorithms[NETDATA_EBPF_INCREMENTAL_IDX],
728 - root, NETDATA_EBPF_MODULE_NAME_SHM);
742 + root, em->update_every, NETDATA_EBPF_MODULE_NAME_SHM);
743
744 ebpf_create_charts_on_apps(NETDATA_SHMCTL_CHART,
745 "Calls to syscall <code>shmctl(2)</code>.",
@@ -734,7 +748,7 @@ void ebpf_shm_create_apps_charts(struct ebpf_module *em, void *ptr)
748 NETDATA_EBPF_CHART_TYPE_STACKED,
749 20194,
750 ebpf_algorithms[NETDATA_EBPF_INCREMENTAL_IDX],
737 - root, NETDATA_EBPF_MODULE_NAME_SHM);
751 + root, em->update_every, NETDATA_EBPF_MODULE_NAME_SHM);
752 }
753
754 /**
@@ -765,8 +779,10 @@ static void ebpf_shm_allocate_global_vectors(int apps)
779 * Create global charts
780 *
781 * Call ebpf_create_chart to create the charts for the collector.
782 + *
783 + * @param update_every value to overwrite the update frequency set by the server.
784 */
769 -static void ebpf_create_shm_charts()
785 +static void ebpf_create_shm_charts(int update_every)
786 {
787 ebpf_create_chart(
788 NETDATA_EBPF_SYSTEM_GROUP,
@@ -780,7 +796,7 @@ static void ebpf_create_shm_charts()
796 ebpf_create_global_dimension,
797 shm_publish_aggregated,
798 NETDATA_SHM_END,
783 - NETDATA_EBPF_MODULE_NAME_SHM
799 + update_every, NETDATA_EBPF_MODULE_NAME_SHM
800 );
801
802 fflush(stdout);
@@ -828,7 +844,7 @@ void *ebpf_shm_thread(void *ptr)
844 );
845
846 pthread_mutex_lock(&lock);
831 - ebpf_create_shm_charts();
847 + ebpf_create_shm_charts(em->update_every);
848 pthread_mutex_unlock(&lock);
849
850 shm_collector(em);
collectors/ebpf.plugin/ebpf_socket.c
+116 -88
@@ -466,7 +466,7 @@ static void ebpf_create_global_charts(ebpf_module_t *em)
466 21070,
467 ebpf_create_global_dimension,
468 socket_publish_aggregated,
469 - 3, NETDATA_EBPF_MODULE_NAME_SOCKET);
469 + 3, em->update_every, NETDATA_EBPF_MODULE_NAME_SOCKET);
470
471 ebpf_create_chart(NETDATA_EBPF_IP_FAMILY, NETDATA_TCP_FUNCTION_BITS,
472 "TCP bandwidth", EBPF_COMMON_DIMENSION_BITS,
@@ -476,7 +476,7 @@ static void ebpf_create_global_charts(ebpf_module_t *em)
476 21071,
477 ebpf_create_global_dimension,
478 socket_publish_aggregated,
479 - 2, NETDATA_EBPF_MODULE_NAME_SOCKET);
479 + 2, em->update_every, NETDATA_EBPF_MODULE_NAME_SOCKET);
480
481 if (em->mode < MODE_ENTRY) {
482 ebpf_create_chart(NETDATA_EBPF_IP_FAMILY,
@@ -489,7 +489,7 @@ static void ebpf_create_global_charts(ebpf_module_t *em)
489 21072,
490 ebpf_create_global_dimension,
491 socket_publish_aggregated,
492 - 2, NETDATA_EBPF_MODULE_NAME_SOCKET);
492 + 2, em->update_every, NETDATA_EBPF_MODULE_NAME_SOCKET);
493 }
494
495 ebpf_create_chart(NETDATA_EBPF_IP_FAMILY,
@@ -502,7 +502,7 @@ static void ebpf_create_global_charts(ebpf_module_t *em)
502 21073,
503 ebpf_create_global_dimension,
504 &socket_publish_aggregated[NETDATA_IDX_TCP_RETRANSMIT],
505 - 1, NETDATA_EBPF_MODULE_NAME_SOCKET);
505 + 1, em->update_every, NETDATA_EBPF_MODULE_NAME_SOCKET);
506
507 ebpf_create_chart(NETDATA_EBPF_IP_FAMILY,
508 NETDATA_UDP_FUNCTION_COUNT,
@@ -514,7 +514,7 @@ static void ebpf_create_global_charts(ebpf_module_t *em)
514 21074,
515 ebpf_create_global_dimension,
516 &socket_publish_aggregated[NETDATA_IDX_UDP_RECVBUF],
517 - 2, NETDATA_EBPF_MODULE_NAME_SOCKET);
517 + 2, em->update_every, NETDATA_EBPF_MODULE_NAME_SOCKET);
518
519 ebpf_create_chart(NETDATA_EBPF_IP_FAMILY, NETDATA_UDP_FUNCTION_BITS,
520 "UDP bandwidth", EBPF_COMMON_DIMENSION_BITS,
@@ -524,7 +524,7 @@ static void ebpf_create_global_charts(ebpf_module_t *em)
524 21075,
525 ebpf_create_global_dimension,
526 &socket_publish_aggregated[NETDATA_IDX_UDP_RECVBUF],
527 - 2, NETDATA_EBPF_MODULE_NAME_SOCKET);
527 + 2, em->update_every, NETDATA_EBPF_MODULE_NAME_SOCKET);
528
529 if (em->mode < MODE_ENTRY) {
530 ebpf_create_chart(NETDATA_EBPF_IP_FAMILY,
@@ -537,7 +537,7 @@ static void ebpf_create_global_charts(ebpf_module_t *em)
537 21076,
538 ebpf_create_global_dimension,
539 &socket_publish_aggregated[NETDATA_IDX_UDP_RECVBUF],
540 - 2, NETDATA_EBPF_MODULE_NAME_SOCKET);
540 + 2, em->update_every, NETDATA_EBPF_MODULE_NAME_SOCKET);
541 }
542 }
543
@@ -551,7 +551,6 @@ static void ebpf_create_global_charts(ebpf_module_t *em)
551 */
552 void ebpf_socket_create_apps_charts(struct ebpf_module *em, void *ptr)
553 {
554 - UNUSED(em);
554 struct target *root = ptr;;
555 ebpf_create_charts_on_apps(NETDATA_NET_APPS_BANDWIDTH_SENT,
556 "Bytes sent", EBPF_COMMON_DIMENSION_BITS,
@@ -559,7 +558,7 @@ void ebpf_socket_create_apps_charts(struct ebpf_module *em, void *ptr)
558 NETDATA_EBPF_CHART_TYPE_STACKED,
559 20080,
560 ebpf_algorithms[NETDATA_EBPF_INCREMENTAL_IDX],
562 - root, NETDATA_EBPF_MODULE_NAME_SOCKET);
561 + root, em->update_every, NETDATA_EBPF_MODULE_NAME_SOCKET);
562
563 ebpf_create_charts_on_apps(NETDATA_NET_APPS_BANDWIDTH_RECV,
564 "bytes received", EBPF_COMMON_DIMENSION_BITS,
@@ -567,7 +566,7 @@ void ebpf_socket_create_apps_charts(struct ebpf_module *em, void *ptr)
566 NETDATA_EBPF_CHART_TYPE_STACKED,
567 20081,
568 ebpf_algorithms[NETDATA_EBPF_INCREMENTAL_IDX],
570 - root, NETDATA_EBPF_MODULE_NAME_SOCKET);
569 + root, em->update_every, NETDATA_EBPF_MODULE_NAME_SOCKET);
570
571 ebpf_create_charts_on_apps(NETDATA_NET_APPS_BANDWIDTH_TCP_SEND_CALLS,
572 "Calls for tcp_sendmsg",
@@ -576,7 +575,7 @@ void ebpf_socket_create_apps_charts(struct ebpf_module *em, void *ptr)
575 NETDATA_EBPF_CHART_TYPE_STACKED,
576 20082,
577 ebpf_algorithms[NETDATA_EBPF_INCREMENTAL_IDX],
579 - root, NETDATA_EBPF_MODULE_NAME_SOCKET);
578 + root, em->update_every, NETDATA_EBPF_MODULE_NAME_SOCKET);
579
580 ebpf_create_charts_on_apps(NETDATA_NET_APPS_BANDWIDTH_TCP_RECV_CALLS,
581 "Calls for tcp_cleanup_rbuf",
@@ -585,7 +584,7 @@ void ebpf_socket_create_apps_charts(struct ebpf_module *em, void *ptr)
584 NETDATA_EBPF_CHART_TYPE_STACKED,
585 20083,
586 ebpf_algorithms[NETDATA_EBPF_INCREMENTAL_IDX],
588 - root, NETDATA_EBPF_MODULE_NAME_SOCKET);
587 + root, em->update_every, NETDATA_EBPF_MODULE_NAME_SOCKET);
588
589 ebpf_create_charts_on_apps(NETDATA_NET_APPS_BANDWIDTH_TCP_RETRANSMIT,
590 "Calls for tcp_retransmit",
@@ -594,7 +593,7 @@ void ebpf_socket_create_apps_charts(struct ebpf_module *em, void *ptr)
593 NETDATA_EBPF_CHART_TYPE_STACKED,
594 20084,
595 ebpf_algorithms[NETDATA_EBPF_INCREMENTAL_IDX],
597 - root, NETDATA_EBPF_MODULE_NAME_SOCKET);
596 + root, em->update_every, NETDATA_EBPF_MODULE_NAME_SOCKET);
597
598 ebpf_create_charts_on_apps(NETDATA_NET_APPS_BANDWIDTH_UDP_SEND_CALLS,
599 "Calls for udp_sendmsg",
@@ -603,7 +602,7 @@ void ebpf_socket_create_apps_charts(struct ebpf_module *em, void *ptr)
602 NETDATA_EBPF_CHART_TYPE_STACKED,
603 20085,
604 ebpf_algorithms[NETDATA_EBPF_INCREMENTAL_IDX],
606 - root, NETDATA_EBPF_MODULE_NAME_SOCKET);
605 + root, em->update_every, NETDATA_EBPF_MODULE_NAME_SOCKET);
606
607 ebpf_create_charts_on_apps(NETDATA_NET_APPS_BANDWIDTH_UDP_RECV_CALLS,
608 "Calls for udp_recvmsg",
@@ -612,7 +611,7 @@ void ebpf_socket_create_apps_charts(struct ebpf_module *em, void *ptr)
611 NETDATA_EBPF_CHART_TYPE_STACKED,
612 20086,
613 ebpf_algorithms[NETDATA_EBPF_INCREMENTAL_IDX],
615 - root, NETDATA_EBPF_MODULE_NAME_SOCKET);
614 + root, em->update_every, NETDATA_EBPF_MODULE_NAME_SOCKET);
615
616 socket_apps_created = 1;
617 }
@@ -622,15 +621,16 @@ void ebpf_socket_create_apps_charts(struct ebpf_module *em, void *ptr)
621 *
622 * Create common charts.
623 *
625 - * @param id the chart id
626 - * @param title the chart title
627 - * @param units the units label
628 - * @param family the group name used to attach the chart on dashboard
629 - * @param order the chart order
630 - * @param ptr the plot structure with values.
624 + * @param id chart id
625 + * @param title chart title
626 + * @param units units label
627 + * @param family group name used to attach the chart on dashboard
628 + * @param order chart order
629 + * @param update_every value to overwrite the update frequency set by the server.
630 + * @param ptr plot structure with values.
631 */
632 static void ebpf_socket_create_nv_chart(char *id, char *title, char *units,
633 - char *family, int order, netdata_vector_plot_t *ptr)
633 + char *family, int order, int update_every, netdata_vector_plot_t *ptr)
634 {
635 ebpf_write_chart_cmd(NETDATA_EBPF_FAMILY,
636 id,
@@ -640,6 +640,7 @@ static void ebpf_socket_create_nv_chart(char *id, char *title, char *units,
640 NETDATA_EBPF_CHART_TYPE_STACKED,
641 NULL,
642 order,
643 + update_every,
644 NETDATA_EBPF_MODULE_NAME_SOCKET);
645
646 uint32_t i;
@@ -665,10 +666,11 @@ static void ebpf_socket_create_nv_chart(char *id, char *title, char *units,
666 * @param units the units label
667 * @param family the group name used to attach the chart on dashboard
668 * @param order the chart order
669 + * @param update_every value to overwrite the update frequency set by the server.
670 * @param ptr the plot structure with values.
671 */
672 static void ebpf_socket_create_nv_retransmit(char *id, char *title, char *units,
671 - char *family, int order, netdata_vector_plot_t *ptr)
673 + char *family, int order, int update_every, netdata_vector_plot_t *ptr)
674 {
675 ebpf_write_chart_cmd(NETDATA_EBPF_FAMILY,
676 id,
@@ -678,6 +680,7 @@ static void ebpf_socket_create_nv_retransmit(char *id, char *title, char *units,
680 NETDATA_EBPF_CHART_TYPE_STACKED,
681 NULL,
682 order,
683 + update_every,
684 NETDATA_EBPF_MODULE_NAME_SOCKET);
685
686 uint32_t i;
@@ -697,8 +700,9 @@ static void ebpf_socket_create_nv_retransmit(char *id, char *title, char *units,
700 * Recreate the charts when new sockets are created.
701 *
702 * @param ptr a pointer for inbound or outbound vectors.
703 + * @param update_every value to overwrite the update frequency set by the server.
704 */
701 -static void ebpf_socket_create_nv_charts(netdata_vector_plot_t *ptr)
705 +static void ebpf_socket_create_nv_charts(netdata_vector_plot_t *ptr, int update_every)
706 {
707 // We do not have new sockets, so we do not need move forward
708 if (ptr->max_plot == ptr->last_plot)
@@ -711,34 +715,34 @@ static void ebpf_socket_create_nv_charts(netdata_vector_plot_t *ptr)
715 "Outbound connections (bytes).", EBPF_COMMON_DIMENSION_BYTES,
716 NETDATA_NETWORK_CONNECTIONS_GROUP,
717 21080,
714 - ptr);
718 + update_every, ptr);
719
720 ebpf_socket_create_nv_chart(NETDATA_NV_OUTBOUND_PACKETS,
721 "Outbound connections (packets)",
722 EBPF_COMMON_DIMENSION_PACKETS,
723 NETDATA_NETWORK_CONNECTIONS_GROUP,
724 21082,
721 - ptr);
725 + update_every, ptr);
726
727 ebpf_socket_create_nv_retransmit(NETDATA_NV_OUTBOUND_RETRANSMIT,
728 "Retransmitted packets",
729 EBPF_COMMON_DIMENSION_CALL,
730 NETDATA_NETWORK_CONNECTIONS_GROUP,
731 21083,
728 - ptr);
732 + update_every, ptr);
733 } else {
734 ebpf_socket_create_nv_chart(NETDATA_NV_INBOUND_BYTES,
735 "Inbound connections (bytes)", EBPF_COMMON_DIMENSION_BYTES,
736 NETDATA_NETWORK_CONNECTIONS_GROUP,
737 21084,
734 - ptr);
738 + update_every, ptr);
739
740 ebpf_socket_create_nv_chart(NETDATA_NV_INBOUND_PACKETS,
741 "Inbound connections (packets)",
742 EBPF_COMMON_DIMENSION_PACKETS,
743 NETDATA_NETWORK_CONNECTIONS_GROUP,
744 21085,
741 - ptr);
745 + update_every, ptr);
746 }
747
748 ptr->flags |= NETWORK_VIEWER_CHARTS_CREATED;
@@ -1488,7 +1492,7 @@ void *ebpf_socket_read_hash(void *ptr)
1492 read_thread_closed = 0;
1493 heartbeat_t hb;
1494 heartbeat_init(&hb);
1491 - usec_t step = NETDATA_SOCKET_READ_SLEEP_MS * em->update_time;
1495 + usec_t step = NETDATA_SOCKET_READ_SLEEP_MS * em->update_every;
1496 int fd_ipv4 = socket_maps[NETDATA_SOCKET_TABLE_IPV4].map_fd;
1497 int fd_ipv6 = socket_maps[NETDATA_SOCKET_TABLE_IPV6].map_fd;
1498 int network_connection = em->optional;
@@ -1710,8 +1714,9 @@ static void ebpf_socket_sum_cgroup_pids(ebpf_socket_publish_apps_t *socket, stru
1714 * Create charts for cgroup/application.
1715 *
1716 * @param type the chart type.
1717 + * @param update_every value to overwrite the update frequency set by the server.
1718 */
1714 -static void ebpf_create_specific_socket_charts(char *type)
1719 +static void ebpf_create_specific_socket_charts(char *type, int update_every)
1720 {
1721 ebpf_create_chart(type, NETDATA_NET_APPS_BANDWIDTH_RECV,
1722 "Bytes received",
@@ -1720,7 +1725,8 @@ static void ebpf_create_specific_socket_charts(char *type)
1725 NETDATA_EBPF_CHART_TYPE_LINE,
1726 NETDATA_CHART_PRIO_CGROUPS_CONTAINERS + 5300,
1727 ebpf_create_global_dimension,
1723 - &socket_publish_aggregated[NETDATA_IDX_TCP_CLEANUP_RBUF], 1, NETDATA_EBPF_MODULE_NAME_SWAP);
1728 + &socket_publish_aggregated[NETDATA_IDX_TCP_CLEANUP_RBUF], 1,
1729 + update_every, NETDATA_EBPF_MODULE_NAME_SWAP);
1730
1731 ebpf_create_chart(type, NETDATA_NET_APPS_BANDWIDTH_SENT,
1732 "Bytes sent",
@@ -1729,7 +1735,8 @@ static void ebpf_create_specific_socket_charts(char *type)
1735 NETDATA_EBPF_CHART_TYPE_LINE,
1736 NETDATA_CHART_PRIO_CGROUPS_CONTAINERS + 5301,
1737 ebpf_create_global_dimension,
1732 - socket_publish_aggregated, 1, NETDATA_EBPF_MODULE_NAME_SWAP);
1738 + socket_publish_aggregated, 1,
1739 + update_every, NETDATA_EBPF_MODULE_NAME_SWAP);
1740
1741 ebpf_create_chart(type, NETDATA_NET_APPS_BANDWIDTH_TCP_RECV_CALLS,
1742 "Calls to tcp_cleanup_rbuf.",
@@ -1738,7 +1745,8 @@ static void ebpf_create_specific_socket_charts(char *type)
1745 NETDATA_EBPF_CHART_TYPE_LINE,
1746 NETDATA_CHART_PRIO_CGROUPS_CONTAINERS + 5302,
1747 ebpf_create_global_dimension,
1741 - &socket_publish_aggregated[NETDATA_IDX_TCP_CLEANUP_RBUF], 1, NETDATA_EBPF_MODULE_NAME_SWAP);
1748 + &socket_publish_aggregated[NETDATA_IDX_TCP_CLEANUP_RBUF], 1,
1749 + update_every, NETDATA_EBPF_MODULE_NAME_SWAP);
1750
1751 ebpf_create_chart(type, NETDATA_NET_APPS_BANDWIDTH_TCP_SEND_CALLS,
1752 "Calls to tcp_sendmsg.",
@@ -1747,7 +1755,8 @@ static void ebpf_create_specific_socket_charts(char *type)
1755 NETDATA_EBPF_CHART_TYPE_LINE,
1756 NETDATA_CHART_PRIO_CGROUPS_CONTAINERS + 5303,
1757 ebpf_create_global_dimension,
1750 - socket_publish_aggregated, 1, NETDATA_EBPF_MODULE_NAME_SWAP);
1758 + socket_publish_aggregated, 1,
1759 + update_every, NETDATA_EBPF_MODULE_NAME_SWAP);
1760
1761 ebpf_create_chart(type, NETDATA_NET_APPS_BANDWIDTH_TCP_RETRANSMIT,
1762 "Calls to tcp_retransmit.",
@@ -1756,7 +1765,8 @@ static void ebpf_create_specific_socket_charts(char *type)
1765 NETDATA_EBPF_CHART_TYPE_LINE,
1766 NETDATA_CHART_PRIO_CGROUPS_CONTAINERS + 5304,
1767 ebpf_create_global_dimension,
1759 - &socket_publish_aggregated[NETDATA_IDX_TCP_RETRANSMIT], 1, NETDATA_EBPF_MODULE_NAME_SWAP);
1768 + &socket_publish_aggregated[NETDATA_IDX_TCP_RETRANSMIT], 1,
1769 + update_every, NETDATA_EBPF_MODULE_NAME_SWAP);
1770
1771 ebpf_create_chart(type, NETDATA_NET_APPS_BANDWIDTH_UDP_SEND_CALLS,
1772 "Calls to udp_sendmsg",
@@ -1765,7 +1775,8 @@ static void ebpf_create_specific_socket_charts(char *type)
1775 NETDATA_EBPF_CHART_TYPE_LINE,
1776 NETDATA_CHART_PRIO_CGROUPS_CONTAINERS + 5305,
1777 ebpf_create_global_dimension,
1768 - &socket_publish_aggregated[NETDATA_IDX_UDP_SENDMSG], 1, NETDATA_EBPF_MODULE_NAME_SWAP);
1778 + &socket_publish_aggregated[NETDATA_IDX_UDP_SENDMSG], 1,
1779 + update_every, NETDATA_EBPF_MODULE_NAME_SWAP);
1780
1781 ebpf_create_chart(type, NETDATA_NET_APPS_BANDWIDTH_UDP_RECV_CALLS,
1782 "Calls to udp_recvmsg",
@@ -1774,7 +1785,8 @@ static void ebpf_create_specific_socket_charts(char *type)
1785 NETDATA_EBPF_CHART_TYPE_LINE,
1786 NETDATA_CHART_PRIO_CGROUPS_CONTAINERS + 5306,
1787 ebpf_create_global_dimension,
1777 - &socket_publish_aggregated[NETDATA_IDX_UDP_RECVBUF], 1, NETDATA_EBPF_MODULE_NAME_SWAP);
1788 + &socket_publish_aggregated[NETDATA_IDX_UDP_RECVBUF], 1,
1789 + update_every, NETDATA_EBPF_MODULE_NAME_SWAP);
1790 }
1791
1792 /**
@@ -1783,43 +1795,44 @@ static void ebpf_create_specific_socket_charts(char *type)
1795 * Obsolete charts for cgroup/application.
1796 *
1797 * @param type the chart type.
1798 + * @param update_every value to overwrite the update frequency set by the server.
1799 */
1787 -static void ebpf_obsolete_specific_socket_charts(char *type)
1800 +static void ebpf_obsolete_specific_socket_charts(char *type, int update_every)
1801 {
1802 ebpf_write_chart_obsolete(type, NETDATA_NET_APPS_BANDWIDTH_RECV, "Bytes received",
1803 EBPF_COMMON_DIMENSION_CALL, NETDATA_APPS_NET_GROUP,
1804 NETDATA_EBPF_CHART_TYPE_LINE, NETDATA_SERVICES_SOCKET_BYTES_RECV_CONTEXT,
1792 - NETDATA_CHART_PRIO_CGROUPS_CONTAINERS + 5300);
1805 + NETDATA_CHART_PRIO_CGROUPS_CONTAINERS + 5300, update_every);
1806
1807 ebpf_write_chart_obsolete(type, NETDATA_NET_APPS_BANDWIDTH_SENT,"Bytes sent",
1808 EBPF_COMMON_DIMENSION_CALL, NETDATA_APPS_NET_GROUP,
1809 NETDATA_EBPF_CHART_TYPE_LINE, NETDATA_SERVICES_SOCKET_BYTES_SEND_CONTEXT,
1797 - NETDATA_CHART_PRIO_CGROUPS_CONTAINERS + 5301);
1810 + NETDATA_CHART_PRIO_CGROUPS_CONTAINERS + 5301, update_every);
1811
1812 ebpf_write_chart_obsolete(type, NETDATA_NET_APPS_BANDWIDTH_TCP_RECV_CALLS, "Calls to tcp_cleanup_rbuf.",
1813 EBPF_COMMON_DIMENSION_CALL, NETDATA_APPS_NET_GROUP,
1814 NETDATA_EBPF_CHART_TYPE_LINE, NETDATA_SERVICES_SOCKET_TCP_RECV_CONTEXT,
1802 - NETDATA_CHART_PRIO_CGROUPS_CONTAINERS + 5302);
1815 + NETDATA_CHART_PRIO_CGROUPS_CONTAINERS + 5302, update_every);
1816
1817 ebpf_write_chart_obsolete(type, NETDATA_NET_APPS_BANDWIDTH_TCP_SEND_CALLS, "Calls to tcp_sendmsg.",
1818 EBPF_COMMON_DIMENSION_CALL, NETDATA_APPS_NET_GROUP,
1819 NETDATA_EBPF_CHART_TYPE_LINE, NETDATA_SERVICES_SOCKET_TCP_SEND_CONTEXT,
1807 - NETDATA_CHART_PRIO_CGROUPS_CONTAINERS + 5303);
1820 + NETDATA_CHART_PRIO_CGROUPS_CONTAINERS + 5303, update_every);
1821
1822 ebpf_write_chart_obsolete(type, NETDATA_NET_APPS_BANDWIDTH_TCP_RETRANSMIT, "Calls to tcp_retransmit.",
1823 EBPF_COMMON_DIMENSION_CALL, NETDATA_APPS_NET_GROUP,
1824 NETDATA_EBPF_CHART_TYPE_LINE, NETDATA_SERVICES_SOCKET_TCP_RETRANSMIT_CONTEXT,
1812 - NETDATA_CHART_PRIO_CGROUPS_CONTAINERS + 5304);
1825 + NETDATA_CHART_PRIO_CGROUPS_CONTAINERS + 5304, update_every);
1826
1827 ebpf_write_chart_obsolete(type, NETDATA_NET_APPS_BANDWIDTH_UDP_SEND_CALLS, "Calls to udp_sendmsg",
1828 EBPF_COMMON_DIMENSION_CALL, NETDATA_APPS_NET_GROUP,
1829 NETDATA_EBPF_CHART_TYPE_LINE, NETDATA_SERVICES_SOCKET_UDP_SEND_CONTEXT,
1817 - NETDATA_CHART_PRIO_CGROUPS_CONTAINERS + 5305);
1830 + NETDATA_CHART_PRIO_CGROUPS_CONTAINERS + 5305, update_every);
1831
1832 ebpf_write_chart_obsolete(type, NETDATA_NET_APPS_BANDWIDTH_UDP_RECV_CALLS, "Calls to udp_recvmsg",
1833 EBPF_COMMON_DIMENSION_CALL, NETDATA_APPS_NET_GROUP, NETDATA_EBPF_CHART_TYPE_LINE,
1834 NETDATA_SERVICES_SOCKET_UDP_RECV_CONTEXT,
1822 - NETDATA_CHART_PRIO_CGROUPS_CONTAINERS + 5306);
1835 + NETDATA_CHART_PRIO_CGROUPS_CONTAINERS + 5306, update_every);
1836 }
1837
1838 /*
@@ -1872,8 +1885,10 @@ static void ebpf_send_specific_socket_data(char *type, ebpf_socket_publish_apps_
1885 * Create Systemd Socket Charts
1886 *
1887 * Create charts when systemd is enabled
1888 + *
1889 + * @param update_every value to overwrite the update frequency set by the server.
1890 **/
1876 -static void ebpf_create_systemd_socket_charts()
1891 +static void ebpf_create_systemd_socket_charts(int update_every)
1892 {
1893 ebpf_create_charts_on_systemd(NETDATA_NET_APPS_BANDWIDTH_RECV,
1894 "Bytes received", EBPF_COMMON_DIMENSION_BITS,
@@ -1881,7 +1896,8 @@ static void ebpf_create_systemd_socket_charts()
1896 NETDATA_EBPF_CHART_TYPE_STACKED,
1897 20080,
1898 ebpf_algorithms[NETDATA_EBPF_INCREMENTAL_IDX],
1884 - NETDATA_SERVICES_SOCKET_BYTES_RECV_CONTEXT, NETDATA_EBPF_MODULE_NAME_SOCKET);
1899 + NETDATA_SERVICES_SOCKET_BYTES_RECV_CONTEXT, NETDATA_EBPF_MODULE_NAME_SOCKET,
1900 + update_every);
1901
1902 ebpf_create_charts_on_systemd(NETDATA_NET_APPS_BANDWIDTH_SENT,
1903 "Bytes sent", EBPF_COMMON_DIMENSION_BITS,
@@ -1889,7 +1905,8 @@ static void ebpf_create_systemd_socket_charts()
1905 NETDATA_EBPF_CHART_TYPE_STACKED,
1906 20081,
1907 ebpf_algorithms[NETDATA_EBPF_INCREMENTAL_IDX],
1892 - NETDATA_SERVICES_SOCKET_BYTES_SEND_CONTEXT, NETDATA_EBPF_MODULE_NAME_SOCKET);
1908 + NETDATA_SERVICES_SOCKET_BYTES_SEND_CONTEXT, NETDATA_EBPF_MODULE_NAME_SOCKET,
1909 + update_every);
1910
1911 ebpf_create_charts_on_systemd(NETDATA_NET_APPS_BANDWIDTH_TCP_RECV_CALLS,
1912 "Calls to tcp_cleanup_rbuf.",
@@ -1898,7 +1915,8 @@ static void ebpf_create_systemd_socket_charts()
1915 NETDATA_EBPF_CHART_TYPE_STACKED,
1916 20082,
1917 ebpf_algorithms[NETDATA_EBPF_INCREMENTAL_IDX],
1901 - NETDATA_SERVICES_SOCKET_TCP_RECV_CONTEXT, NETDATA_EBPF_MODULE_NAME_SOCKET);
1918 + NETDATA_SERVICES_SOCKET_TCP_RECV_CONTEXT, NETDATA_EBPF_MODULE_NAME_SOCKET,
1919 + update_every);
1920
1921 ebpf_create_charts_on_systemd(NETDATA_NET_APPS_BANDWIDTH_TCP_SEND_CALLS,
1922 "Calls to tcp_sendmsg.",
@@ -1907,7 +1925,8 @@ static void ebpf_create_systemd_socket_charts()
1925 NETDATA_EBPF_CHART_TYPE_STACKED,
1926 20083,
1927 ebpf_algorithms[NETDATA_EBPF_INCREMENTAL_IDX],
1910 - NETDATA_SERVICES_SOCKET_TCP_SEND_CONTEXT, NETDATA_EBPF_MODULE_NAME_SOCKET);
1928 + NETDATA_SERVICES_SOCKET_TCP_SEND_CONTEXT, NETDATA_EBPF_MODULE_NAME_SOCKET,
1929 + update_every);
1930
1931 ebpf_create_charts_on_systemd(NETDATA_NET_APPS_BANDWIDTH_TCP_RETRANSMIT,
1932 "Calls to tcp_retransmit",
@@ -1916,7 +1935,8 @@ static void ebpf_create_systemd_socket_charts()
1935 NETDATA_EBPF_CHART_TYPE_STACKED,
1936 20084,
1937 ebpf_algorithms[NETDATA_EBPF_INCREMENTAL_IDX],
1919 - NETDATA_SERVICES_SOCKET_TCP_RETRANSMIT_CONTEXT, NETDATA_EBPF_MODULE_NAME_SOCKET);
1938 + NETDATA_SERVICES_SOCKET_TCP_RETRANSMIT_CONTEXT, NETDATA_EBPF_MODULE_NAME_SOCKET,
1939 + update_every);
1940
1941 ebpf_create_charts_on_systemd(NETDATA_NET_APPS_BANDWIDTH_UDP_SEND_CALLS,
1942 "Calls to udp_sendmsg",
@@ -1925,7 +1945,8 @@ static void ebpf_create_systemd_socket_charts()
1945 NETDATA_EBPF_CHART_TYPE_STACKED,
1946 20085,
1947 ebpf_algorithms[NETDATA_EBPF_INCREMENTAL_IDX],
1928 - NETDATA_SERVICES_SOCKET_UDP_SEND_CONTEXT, NETDATA_EBPF_MODULE_NAME_SOCKET);
1948 + NETDATA_SERVICES_SOCKET_UDP_SEND_CONTEXT, NETDATA_EBPF_MODULE_NAME_SOCKET,
1949 + update_every);
1950
1951 ebpf_create_charts_on_systemd(NETDATA_NET_APPS_BANDWIDTH_UDP_RECV_CALLS,
1952 "Calls to udp_recvmsg",
@@ -1934,7 +1955,8 @@ static void ebpf_create_systemd_socket_charts()
1955 NETDATA_EBPF_CHART_TYPE_STACKED,
1956 20086,
1957 ebpf_algorithms[NETDATA_EBPF_INCREMENTAL_IDX],
1937 - NETDATA_SERVICES_SOCKET_UDP_RECV_CONTEXT, NETDATA_EBPF_MODULE_NAME_SOCKET);
1958 + NETDATA_SERVICES_SOCKET_UDP_RECV_CONTEXT, NETDATA_EBPF_MODULE_NAME_SOCKET,
1959 + update_every);
1960 }
1961
1962 /**
@@ -2026,8 +2048,10 @@ void ebpf_socket_update_cgroup_algorithm()
2048
2049 /**
2050 * Send data to Netdata calling auxiliar functions.
2051 + *
2052 + * @param update_every value to overwrite the update frequency set by the server.
2053 */
2030 -static void ebpf_socket_send_cgroup_data()
2054 +static void ebpf_socket_send_cgroup_data(int update_every)
2055 {
2056 if (!ebpf_cgroup_pids)
2057 return;
@@ -2042,7 +2066,7 @@ static void ebpf_socket_send_cgroup_data()
2066 if (has_systemd) {
2067 static int systemd_charts = 0;
2068 if (!systemd_charts) {
2045 - ebpf_create_systemd_socket_charts();
2069 + ebpf_create_systemd_socket_charts(update_every);
2070 systemd_charts = 1;
2071 }
2072 systemd_charts = ebpf_send_systemd_socket_charts();
@@ -2053,14 +2077,14 @@ static void ebpf_socket_send_cgroup_data()
2077 continue;
2078
2079 if (!(ect->flags & NETDATA_EBPF_CGROUP_HAS_SOCKET_CHART)) {
2056 - ebpf_create_specific_socket_charts(ect->name);
2080 + ebpf_create_specific_socket_charts(ect->name, update_every);
2081 ect->flags |= NETDATA_EBPF_CGROUP_HAS_SOCKET_CHART;
2082 }
2083
2084 if (ect->flags & NETDATA_EBPF_CGROUP_HAS_SOCKET_CHART && ect->updated) {
2085 ebpf_send_specific_socket_data(ect->name, &ect->publish_socket);
2086 } else {
2063 - ebpf_obsolete_specific_socket_charts(ect->name);
2087 + ebpf_obsolete_specific_socket_charts(ect->name, update_every);
2088 ect->flags &= ~NETDATA_EBPF_CGROUP_HAS_SOCKET_CHART;
2089 }
2090 }
@@ -2102,52 +2126,56 @@ static void socket_collector(usec_t step, ebpf_module_t *em)
2126 int socket_apps_enabled = ebpf_modules[EBPF_MODULE_SOCKET_IDX].apps_charts;
2127 int socket_global_enabled = ebpf_modules[EBPF_MODULE_SOCKET_IDX].global_charts;
2128 int network_connection = em->optional;
2129 + int update_every = em->update_every;
2130 + int counter = update_every - 1;
2131 while (!close_ebpf_plugin) {
2132 pthread_mutex_lock(&collect_data_mutex);
2133 pthread_cond_wait(&collect_data_cond_var, &collect_data_mutex);
2134
2109 - if (socket_global_enabled)
2110 - read_hash_global_tables();
2135 + if (++counter == update_every) {
2136 + counter = 0;
2137 + if (socket_global_enabled)
2138 + read_hash_global_tables();
2139
2112 - if (socket_apps_enabled)
2113 - ebpf_socket_update_apps_data();
2140 + if (socket_apps_enabled)
2141 + ebpf_socket_update_apps_data();
2142
2115 - if (cgroups)
2116 - ebpf_update_socket_cgroup();
2143 + if (cgroups)
2144 + ebpf_update_socket_cgroup();
2145
2118 - calculate_nv_plot();
2146 + calculate_nv_plot();
2147
2120 - pthread_mutex_lock(&lock);
2121 - if (socket_global_enabled)
2122 - ebpf_socket_send_data(em);
2148 + pthread_mutex_lock(&lock);
2149 + if (socket_global_enabled)
2150 + ebpf_socket_send_data(em);
2151
2124 - if (socket_apps_enabled)
2125 - ebpf_socket_send_apps_data(em, apps_groups_root_target);
2152 + if (socket_apps_enabled)
2153 + ebpf_socket_send_apps_data(em, apps_groups_root_target);
2154
2127 - if (cgroups)
2128 - ebpf_socket_send_cgroup_data();
2155 + if (cgroups)
2156 + ebpf_socket_send_cgroup_data(update_every);
2157
2130 - fflush(stdout);
2131 -
2132 - if (network_connection) {
2133 - // We are calling fflush many times, because when we have a lot of dimensions
2134 - // we began to have not expected outputs and Netdata closed the plugin.
2135 - pthread_mutex_lock(&nv_mutex);
2136 - ebpf_socket_create_nv_charts(&inbound_vectors);
2158 fflush(stdout);
2138 - ebpf_socket_send_nv_data(&inbound_vectors);
2159
2140 - ebpf_socket_create_nv_charts(&outbound_vectors);
2141 - fflush(stdout);
2142 - ebpf_socket_send_nv_data(&outbound_vectors);
2143 - wait_to_plot = 0;
2144 - pthread_mutex_unlock(&nv_mutex);
2160 + if (network_connection) {
2161 + // We are calling fflush many times, because when we have a lot of dimensions
2162 + // we began to have not expected outputs and Netdata closed the plugin.
2163 + pthread_mutex_lock(&nv_mutex);
2164 + ebpf_socket_create_nv_charts(&inbound_vectors, update_every);
2165 + fflush(stdout);
2166 + ebpf_socket_send_nv_data(&inbound_vectors);
2167
2168 + ebpf_socket_create_nv_charts(&outbound_vectors, update_every);
2169 + fflush(stdout);
2170 + ebpf_socket_send_nv_data(&outbound_vectors);
2171 + wait_to_plot = 0;
2172 + pthread_mutex_unlock(&nv_mutex);
2173 +
2174 + }
2175 + pthread_mutex_unlock(&lock);
2176 }
2177
2178 pthread_mutex_unlock(&collect_data_mutex);
2149 - pthread_mutex_unlock(&lock);
2150 -
2179 }
2180 }
2181
@@ -3365,7 +3393,7 @@ void *ebpf_socket_thread(void *ptr)
3393 finalized_threads = 0;
3394 pthread_mutex_unlock(&lock);
3395
3368 - socket_collector((usec_t)(em->update_time * USEC_PER_SEC), em);
3396 + socket_collector((usec_t)(em->update_every * USEC_PER_SEC), em);
3397
3398 endsocket:
3399 netdata_thread_cleanup_pop(1);
collectors/ebpf.plugin/ebpf_softirq.c
+16 -10
@@ -138,7 +138,7 @@ static void *softirq_reader(void *ptr)
138
139 ebpf_module_t *em = (ebpf_module_t *)ptr;
140
141 - usec_t step = NETDATA_SOFTIRQ_SLEEP_MS * em->update_time;
141 + usec_t step = NETDATA_SOFTIRQ_SLEEP_MS * em->update_every;
142 while (!close_ebpf_plugin) {
143 usec_t dt = heartbeat_next(&hb, step);
144 UNUSED(dt);
@@ -150,7 +150,7 @@ static void *softirq_reader(void *ptr)
150 return NULL;
151 }
152
153 -static void softirq_create_charts()
153 +static void softirq_create_charts(int update_every)
154 {
155 ebpf_create_chart(
156 NETDATA_EBPF_SYSTEM_GROUP,
@@ -161,7 +161,7 @@ static void softirq_create_charts()
161 NULL,
162 NETDATA_EBPF_CHART_TYPE_STACKED,
163 NETDATA_CHART_PRIO_SYSTEM_SOFTIRQS+1,
164 - NULL, NULL, 0,
164 + NULL, NULL, 0, update_every,
165 NETDATA_EBPF_MODULE_NAME_SOFTIRQ
166 );
167
@@ -207,22 +207,28 @@ static void softirq_collector(ebpf_module_t *em)
207
208 // create chart and static dims.
209 pthread_mutex_lock(&lock);
210 - softirq_create_charts();
210 + softirq_create_charts(em->update_every);
211 softirq_create_dims();
212 pthread_mutex_unlock(&lock);
213
214 // loop and read from published data until ebpf plugin is closed.
215 + int update_every = em->update_every;
216 + int counter = update_every - 1;
217 while (!close_ebpf_plugin) {
218 pthread_mutex_lock(&collect_data_mutex);
219 pthread_cond_wait(&collect_data_cond_var, &collect_data_mutex);
218 - pthread_mutex_lock(&lock);
220
220 - // write dims now for all hitherto discovered IRQs.
221 - write_begin_chart(NETDATA_EBPF_SYSTEM_GROUP, "softirq_latency");
222 - softirq_write_dims();
223 - write_end_chart();
221 + if (++counter == update_every) {
222 + counter = 0;
223 + pthread_mutex_lock(&lock);
224
225 - pthread_mutex_unlock(&lock);
225 + // write dims now for all hitherto discovered IRQs.
226 + write_begin_chart(NETDATA_EBPF_SYSTEM_GROUP, "softirq_latency");
227 + softirq_write_dims();
228 + write_end_chart();
229 +
230 + pthread_mutex_unlock(&lock);
231 + }
232 pthread_mutex_unlock(&collect_data_mutex);
233 }
234 }
collectors/ebpf.plugin/ebpf_swap.c
+45 -32
@@ -258,7 +258,7 @@ void *ebpf_swap_read_hash(void *ptr)
258 heartbeat_init(&hb);
259
260 ebpf_module_t *em = (ebpf_module_t *)ptr;
261 - usec_t step = NETDATA_SWAP_SLEEP_MS * em->update_time;
261 + usec_t step = NETDATA_SWAP_SLEEP_MS * em->update_every;
262 while (!close_ebpf_plugin) {
263 usec_t dt = heartbeat_next(&hb, step);
264 (void)dt;
@@ -393,8 +393,9 @@ static int ebpf_send_systemd_swap_charts()
393 * Create charts for cgroup/application.
394 *
395 * @param type the chart type.
396 + * @param update_every value to overwrite the update frequency set by the server.
397 */
397 -static void ebpf_create_specific_swap_charts(char *type)
398 +static void ebpf_create_specific_swap_charts(char *type, int update_every)
399 {
400 ebpf_create_chart(type, NETDATA_MEM_SWAP_READ_CHART,
401 "Calls to function <code>swap_readpage</code>.",
@@ -402,7 +403,7 @@ static void ebpf_create_specific_swap_charts(char *type)
403 NETDATA_CGROUP_SWAP_READ_CONTEXT, NETDATA_EBPF_CHART_TYPE_LINE,
404 NETDATA_CHART_PRIO_CGROUPS_CONTAINERS + 5100,
405 ebpf_create_global_dimension,
405 - swap_publish_aggregated, 1, NETDATA_EBPF_MODULE_NAME_SWAP);
406 + swap_publish_aggregated, 1, update_every, NETDATA_EBPF_MODULE_NAME_SWAP);
407
408 ebpf_create_chart(type, NETDATA_MEM_SWAP_WRITE_CHART,
409 "Calls to function <code>swap_writepage</code>.",
@@ -410,7 +411,8 @@ static void ebpf_create_specific_swap_charts(char *type)
411 NETDATA_CGROUP_SWAP_WRITE_CONTEXT, NETDATA_EBPF_CHART_TYPE_LINE,
412 NETDATA_CHART_PRIO_CGROUPS_CONTAINERS + 5101,
413 ebpf_create_global_dimension,
413 - &swap_publish_aggregated[NETDATA_KEY_SWAP_WRITEPAGE_CALL], 1, NETDATA_EBPF_MODULE_NAME_SWAP);
414 + &swap_publish_aggregated[NETDATA_KEY_SWAP_WRITEPAGE_CALL], 1,
415 + update_every, NETDATA_EBPF_MODULE_NAME_SWAP);
416 }
417
418 /**
@@ -419,18 +421,19 @@ static void ebpf_create_specific_swap_charts(char *type)
421 * Create charts for cgroup/application.
422 *
423 * @param type the chart type.
424 + * @param update_every value to overwrite the update frequency set by the server.
425 */
423 -static void ebpf_obsolete_specific_swap_charts(char *type)
426 +static void ebpf_obsolete_specific_swap_charts(char *type, int update_every)
427 {
428 ebpf_write_chart_obsolete(type, NETDATA_MEM_SWAP_READ_CHART,"Calls to function <code>swap_readpage</code>.",
429 EBPF_COMMON_DIMENSION_CALL, NETDATA_SYSTEM_CGROUP_SWAP_SUBMENU,
430 NETDATA_EBPF_CHART_TYPE_LINE, NETDATA_CGROUP_SWAP_READ_CONTEXT,
428 - NETDATA_CHART_PRIO_CGROUPS_CONTAINERS + 5100);
431 + NETDATA_CHART_PRIO_CGROUPS_CONTAINERS + 5100, update_every);
432
433 ebpf_write_chart_obsolete(type, NETDATA_MEM_SWAP_WRITE_CHART, "Calls to function <code>swap_writepage</code>.",
434 EBPF_COMMON_DIMENSION_CALL, NETDATA_SYSTEM_CGROUP_SWAP_SUBMENU,
435 NETDATA_EBPF_CHART_TYPE_LINE, NETDATA_CGROUP_SWAP_WRITE_CONTEXT,
433 - NETDATA_CHART_PRIO_CGROUPS_CONTAINERS + 5101);
436 + NETDATA_CHART_PRIO_CGROUPS_CONTAINERS + 5101, update_every);
437 }
438
439 /*
@@ -456,28 +459,32 @@ static void ebpf_send_specific_swap_data(char *type, netdata_publish_swap_t *val
459 * Create Systemd Swap Charts
460 *
461 * Create charts when systemd is enabled
462 + *
463 + * @param update_every value to overwrite the update frequency set by the server.
464 **/
460 -static void ebpf_create_systemd_swap_charts()
465 +static void ebpf_create_systemd_swap_charts(int update_every)
466 {
467 ebpf_create_charts_on_systemd(NETDATA_MEM_SWAP_READ_CHART,
468 "Calls to <code>swap_readpage</code>.",
469 EBPF_COMMON_DIMENSION_CALL, NETDATA_SYSTEM_CGROUP_SWAP_SUBMENU,
470 NETDATA_EBPF_CHART_TYPE_STACKED, 20191,
471 ebpf_algorithms[NETDATA_EBPF_INCREMENTAL_IDX], NETDATA_SYSTEMD_SWAP_READ_CONTEXT,
467 - NETDATA_EBPF_MODULE_NAME_SWAP);
472 + NETDATA_EBPF_MODULE_NAME_SWAP, update_every);
473
474 ebpf_create_charts_on_systemd(NETDATA_MEM_SWAP_WRITE_CHART,
475 "Calls to function <code>swap_writepage</code>.",
476 EBPF_COMMON_DIMENSION_CALL, NETDATA_SYSTEM_CGROUP_SWAP_SUBMENU,
477 NETDATA_EBPF_CHART_TYPE_STACKED, 20192,
478 ebpf_algorithms[NETDATA_EBPF_INCREMENTAL_IDX], NETDATA_SYSTEMD_SWAP_WRITE_CONTEXT,
474 - NETDATA_EBPF_MODULE_NAME_SWAP);
479 + NETDATA_EBPF_MODULE_NAME_SWAP, update_every);
480 }
481
482 /**
483 * Send data to Netdata calling auxiliar functions.
484 + *
485 + * @param update_every value to overwrite the update frequency set by the server.
486 */
480 -void ebpf_swap_send_cgroup_data()
487 +void ebpf_swap_send_cgroup_data(int update_every)
488 {
489 if (!ebpf_cgroup_pids)
490 return;
@@ -493,7 +500,7 @@ void ebpf_swap_send_cgroup_data()
500 if (has_systemd) {
501 static int systemd_charts = 0;
502 if (!systemd_charts) {
496 - ebpf_create_systemd_swap_charts();
503 + ebpf_create_systemd_swap_charts(update_every);
504 systemd_charts = 1;
505 fflush(stdout);
506 }
@@ -506,7 +513,7 @@ void ebpf_swap_send_cgroup_data()
513 continue;
514
515 if (!(ect->flags & NETDATA_EBPF_CGROUP_HAS_SWAP_CHART) && ect->updated) {
509 - ebpf_create_specific_swap_charts(ect->name);
516 + ebpf_create_specific_swap_charts(ect->name, update_every);
517 ect->flags |= NETDATA_EBPF_CGROUP_HAS_SWAP_CHART;
518 }
519
@@ -514,7 +521,7 @@ void ebpf_swap_send_cgroup_data()
521 if (ect->updated) {
522 ebpf_send_specific_swap_data(ect->name, &ect->publish_systemd_swap);
523 } else {
517 - ebpf_obsolete_specific_swap_charts(ect->name);
524 + ebpf_obsolete_specific_swap_charts(ect->name, update_every);
525 ect->flags &= ~NETDATA_EBPF_CGROUP_HAS_SWAP_CHART;
526 }
527 }
@@ -536,27 +543,32 @@ static void swap_collector(ebpf_module_t *em)
543
544 int apps = em->apps_charts;
545 int cgroup = em->cgroup_charts;
546 + int update_every = em->update_every;
547 + int counter = update_every - 1;
548 while (!close_ebpf_plugin) {
549 pthread_mutex_lock(&collect_data_mutex);
550 pthread_cond_wait(&collect_data_cond_var, &collect_data_mutex);
551
543 - if (apps)
544 - read_apps_table();
552 + if (++counter == update_every) {
553 + counter = 0;
554 + if (apps)
555 + read_apps_table();
556
546 - if (cgroup)
547 - ebpf_update_swap_cgroup();
557 + if (cgroup)
558 + ebpf_update_swap_cgroup();
559
549 - pthread_mutex_lock(&lock);
560 + pthread_mutex_lock(&lock);
561
551 - swap_send_global();
562 + swap_send_global();
563
553 - if (apps)
554 - ebpf_swap_send_apps_data(apps_groups_root_target);
564 + if (apps)
565 + ebpf_swap_send_apps_data(apps_groups_root_target);
566
556 - if (cgroup)
557 - ebpf_swap_send_cgroup_data();
567 + if (cgroup)
568 + ebpf_swap_send_cgroup_data(update_every);
569
559 - pthread_mutex_unlock(&lock);
570 + pthread_mutex_unlock(&lock);
571 + }
572 pthread_mutex_unlock(&collect_data_mutex);
573 }
574 }
@@ -576,8 +588,6 @@ static void swap_collector(ebpf_module_t *em)
588 */
589 void ebpf_swap_create_apps_charts(struct ebpf_module *em, void *ptr)
590 {
579 - UNUSED(em);
580 -
591 struct target *root = ptr;
592 ebpf_create_charts_on_apps(NETDATA_MEM_SWAP_READ_CHART,
593 "Calls to function <code>swap_readpage</code>.",
@@ -586,7 +596,7 @@ void ebpf_swap_create_apps_charts(struct ebpf_module *em, void *ptr)
596 NETDATA_EBPF_CHART_TYPE_STACKED,
597 20191,
598 ebpf_algorithms[NETDATA_EBPF_INCREMENTAL_IDX],
589 - root, NETDATA_EBPF_MODULE_NAME_SWAP);
599 + root, em->update_every, NETDATA_EBPF_MODULE_NAME_SWAP);
600
601 ebpf_create_charts_on_apps(NETDATA_MEM_SWAP_WRITE_CHART,
602 "Calls to function <code>swap_writepage</code>.",
@@ -595,7 +605,7 @@ void ebpf_swap_create_apps_charts(struct ebpf_module *em, void *ptr)
605 NETDATA_EBPF_CHART_TYPE_STACKED,
606 20192,
607 ebpf_algorithms[NETDATA_EBPF_INCREMENTAL_IDX],
598 - root, NETDATA_EBPF_MODULE_NAME_SWAP);
608 + root, em->update_every, NETDATA_EBPF_MODULE_NAME_SWAP);
609 }
610
611 /**
@@ -628,8 +638,10 @@ static void ebpf_swap_allocate_global_vectors(int apps)
638 * Create global charts
639 *
640 * Call ebpf_create_chart to create the charts for the collector.
641 + *
642 + * @param update_every value to overwrite the update frequency set by the server.
643 */
632 -static void ebpf_create_swap_charts()
644 +static void ebpf_create_swap_charts(int update_every)
645 {
646 ebpf_create_chart(NETDATA_EBPF_SYSTEM_GROUP, NETDATA_MEM_SWAP_CHART,
647 "Calls to internal functions used to access swap.",
@@ -638,7 +650,8 @@ static void ebpf_create_swap_charts()
650 NETDATA_EBPF_CHART_TYPE_LINE,
651 202,
652 ebpf_create_global_dimension,
641 - swap_publish_aggregated, NETDATA_SWAP_END, NETDATA_EBPF_MODULE_NAME_SWAP);
653 + swap_publish_aggregated, NETDATA_SWAP_END,
654 + update_every, NETDATA_EBPF_MODULE_NAME_SWAP);
655 }
656
657 /**
@@ -674,7 +687,7 @@ void *ebpf_swap_thread(void *ptr)
687 algorithms, NETDATA_SWAP_END);
688
689 pthread_mutex_lock(&lock);
677 - ebpf_create_swap_charts();
690 + ebpf_create_swap_charts(em->update_every);
691 pthread_mutex_unlock(&lock);
692
693 swap_collector(em);
collectors/ebpf.plugin/ebpf_sync.c
+21 -11
@@ -132,7 +132,7 @@ void *ebpf_sync_read_hash(void *ptr)
132
133 heartbeat_t hb;
134 heartbeat_init(&hb);
135 - usec_t step = NETDATA_EBPF_SYNC_SLEEP_MS * em->update_time;
135 + usec_t step = NETDATA_EBPF_SYNC_SLEEP_MS * em->update_every;
136
137 while (!close_ebpf_plugin) {
138 usec_t dt = heartbeat_next(&hb, step);
@@ -210,15 +210,20 @@ static void sync_collector(ebpf_module_t *em)
210 netdata_thread_create(sync_threads.thread, sync_threads.name, NETDATA_THREAD_OPTION_JOINABLE,
211 ebpf_sync_read_hash, em);
212
213 + int update_every = em->update_every;
214 + int counter = update_every - 1;
215 while (!close_ebpf_plugin) {
216 pthread_mutex_lock(&collect_data_mutex);
217 pthread_cond_wait(&collect_data_cond_var, &collect_data_mutex);
218
217 - pthread_mutex_lock(&lock);
219 + if (++counter == update_every) {
220 + counter = 0;
221 + pthread_mutex_lock(&lock);
222
219 - sync_send_data();
223 + sync_send_data();
224
221 - pthread_mutex_unlock(&lock);
225 + pthread_mutex_unlock(&lock);
226 + }
227 pthread_mutex_unlock(&collect_data_mutex);
228 }
229 }
@@ -291,15 +296,18 @@ static void ebpf_sync_cleanup(void *ptr)
296 * @param order order number of the specified chart
297 * @param idx the first index with data.
298 * @param end the last index with data.
299 + * @param update_every value to overwrite the update frequency set by the server.
300 */
301 static void ebpf_create_sync_chart(char *id,
302 char *title,
303 int order,
304 int idx,
299 - int end)
305 + int end,
306 + int update_every)
307 {
308 ebpf_write_chart_cmd(NETDATA_EBPF_MEMORY_GROUP, id, title, EBPF_COMMON_DIMENSION_CALL,
309 NETDATA_EBPF_SYNC_SUBMENU, NETDATA_EBPF_CHART_TYPE_LINE, NULL, order,
310 + update_every,
311 NETDATA_EBPF_MODULE_NAME_SYNC);
312
313 netdata_publish_syscall_t *move = &sync_counter_publish_aggregated[idx];
@@ -317,28 +325,30 @@ static void ebpf_create_sync_chart(char *id,
325 * Create global charts
326 *
327 * Call ebpf_create_chart to create the charts for the collector.
328 + *
329 + * @param update_every value to overwrite the update frequency set by the server.
330 */
321 -static void ebpf_create_sync_charts()
331 +static void ebpf_create_sync_charts(int update_every)
332 {
333 if (local_syscalls[NETDATA_SYNC_FSYNC_IDX].enabled || local_syscalls[NETDATA_SYNC_FDATASYNC_IDX].enabled)
334 ebpf_create_sync_chart(NETDATA_EBPF_FILE_SYNC_CHART,
335 "Monitor calls for <code>fsync(2)</code> and <code>fdatasync(2)</code>.", 21300,
326 - NETDATA_SYNC_FSYNC_IDX, NETDATA_SYNC_FDATASYNC_IDX);
336 + NETDATA_SYNC_FSYNC_IDX, NETDATA_SYNC_FDATASYNC_IDX, update_every);
337
338 if (local_syscalls[NETDATA_SYNC_MSYNC_IDX].enabled)
339 ebpf_create_sync_chart(NETDATA_EBPF_MSYNC_CHART,
340 "Monitor calls for <code>msync(2)</code>.", 21301,
331 - NETDATA_SYNC_MSYNC_IDX, NETDATA_SYNC_MSYNC_IDX);
341 + NETDATA_SYNC_MSYNC_IDX, NETDATA_SYNC_MSYNC_IDX, update_every);
342
343 if (local_syscalls[NETDATA_SYNC_SYNC_IDX].enabled || local_syscalls[NETDATA_SYNC_SYNCFS_IDX].enabled)
344 ebpf_create_sync_chart(NETDATA_EBPF_SYNC_CHART,
345 "Monitor calls for <code>sync(2)</code> and <code>syncfs(2)</code>.", 21302,
336 - NETDATA_SYNC_SYNC_IDX, NETDATA_SYNC_SYNCFS_IDX);
346 + NETDATA_SYNC_SYNC_IDX, NETDATA_SYNC_SYNCFS_IDX, update_every);
347
348 if (local_syscalls[NETDATA_SYNC_SYNC_FILE_RANGE_IDX].enabled)
349 ebpf_create_sync_chart(NETDATA_EBPF_FILE_SEGMENT_CHART,
350 "Monitor calls for <code>sync_file_range(2)</code>.", 21303,
341 - NETDATA_SYNC_SYNC_FILE_RANGE_IDX, NETDATA_SYNC_SYNC_FILE_RANGE_IDX);
351 + NETDATA_SYNC_SYNC_FILE_RANGE_IDX, NETDATA_SYNC_SYNC_FILE_RANGE_IDX, update_every);
352 }
353
354 /**
@@ -389,7 +399,7 @@ void *ebpf_sync_thread(void *ptr)
399 algorithms, NETDATA_SYNC_IDX_END);
400
401 pthread_mutex_lock(&lock);
392 - ebpf_create_sync_charts();
402 + ebpf_create_sync_charts(em->update_every);
403 pthread_mutex_unlock(&lock);
404
405 sync_collector(em);
collectors/ebpf.plugin/ebpf_vfs.c
+85 -76
@@ -533,7 +533,7 @@ void *ebpf_vfs_read_hash(void *ptr)
533
534 ebpf_module_t *em = (ebpf_module_t *)ptr;
535
536 - usec_t step = NETDATA_LATENCY_VFS_SLEEP_MS * em->update_time;
536 + usec_t step = NETDATA_LATENCY_VFS_SLEEP_MS * em->update_every;
537 while (!close_ebpf_plugin) {
538 usec_t dt = heartbeat_next(&hb, step);
539 (void)dt;
@@ -627,88 +627,88 @@ static void ebpf_create_specific_vfs_charts(char *type, ebpf_module_t *em)
627 EBPF_COMMON_DIMENSION_CALL, NETDATA_VFS_CGROUP_GROUP, NETDATA_CGROUP_VFS_UNLINK_CONTEXT,
628 NETDATA_EBPF_CHART_TYPE_LINE, NETDATA_CHART_PRIO_CGROUPS_CONTAINERS + 5500,
629 ebpf_create_global_dimension, &vfs_publish_aggregated[NETDATA_KEY_PUBLISH_VFS_UNLINK],
630 - 1, NETDATA_EBPF_MODULE_NAME_SWAP);
630 + 1, em->update_every, NETDATA_EBPF_MODULE_NAME_SWAP);
631
632 ebpf_create_chart(type, NETDATA_SYSCALL_APPS_VFS_WRITE_CALLS, "Write to disk",
633 EBPF_COMMON_DIMENSION_CALL, NETDATA_VFS_CGROUP_GROUP, NETDATA_CGROUP_VFS_WRITE_CONTEXT,
634 NETDATA_EBPF_CHART_TYPE_LINE, NETDATA_CHART_PRIO_CGROUPS_CONTAINERS + 5501,
635 ebpf_create_global_dimension, &vfs_publish_aggregated[NETDATA_KEY_PUBLISH_VFS_WRITE],
636 - 1, NETDATA_EBPF_MODULE_NAME_SWAP);
636 + 1, em->update_every, NETDATA_EBPF_MODULE_NAME_SWAP);
637
638 if (em->mode < MODE_ENTRY) {
639 ebpf_create_chart(type, NETDATA_SYSCALL_APPS_VFS_WRITE_CALLS_ERROR, "Fails to write",
640 EBPF_COMMON_DIMENSION_CALL, NETDATA_VFS_CGROUP_GROUP, NETDATA_CGROUP_VFS_WRITE_ERROR_CONTEXT,
641 NETDATA_EBPF_CHART_TYPE_LINE, NETDATA_CHART_PRIO_CGROUPS_CONTAINERS + 5502,
642 ebpf_create_global_dimension, &vfs_publish_aggregated[NETDATA_KEY_PUBLISH_VFS_WRITE],
643 - 1, NETDATA_EBPF_MODULE_NAME_SWAP);
643 + 1, em->update_every, NETDATA_EBPF_MODULE_NAME_SWAP);
644 }
645
646 ebpf_create_chart(type, NETDATA_SYSCALL_APPS_VFS_READ_CALLS, "Read from disk",
647 EBPF_COMMON_DIMENSION_CALL, NETDATA_VFS_CGROUP_GROUP, NETDATA_CGROUP_VFS_READ_CONTEXT,
648 NETDATA_EBPF_CHART_TYPE_LINE, NETDATA_CHART_PRIO_CGROUPS_CONTAINERS + 5503,
649 ebpf_create_global_dimension, &vfs_publish_aggregated[NETDATA_KEY_PUBLISH_VFS_READ],
650 - 1, NETDATA_EBPF_MODULE_NAME_SWAP);
650 + 1, em->update_every, NETDATA_EBPF_MODULE_NAME_SWAP);
651
652 if (em->mode < MODE_ENTRY) {
653 ebpf_create_chart(type, NETDATA_SYSCALL_APPS_VFS_READ_CALLS_ERROR, "Fails to read",
654 EBPF_COMMON_DIMENSION_CALL, NETDATA_VFS_CGROUP_GROUP, NETDATA_CGROUP_VFS_READ_ERROR_CONTEXT,
655 NETDATA_EBPF_CHART_TYPE_LINE, NETDATA_CHART_PRIO_CGROUPS_CONTAINERS + 5504,
656 ebpf_create_global_dimension, &vfs_publish_aggregated[NETDATA_KEY_PUBLISH_VFS_READ],
657 - 1, NETDATA_EBPF_MODULE_NAME_SWAP);
657 + 1, em->update_every, NETDATA_EBPF_MODULE_NAME_SWAP);
658 }
659
660 ebpf_create_chart(type, NETDATA_SYSCALL_APPS_VFS_WRITE_BYTES, "Bytes written on disk",
661 EBPF_COMMON_DIMENSION_BYTES, NETDATA_VFS_CGROUP_GROUP, NETDATA_CGROUP_VFS_WRITE_BYTES_CONTEXT,
662 NETDATA_EBPF_CHART_TYPE_LINE, NETDATA_CHART_PRIO_CGROUPS_CONTAINERS + 5505,
663 ebpf_create_global_dimension, &vfs_publish_aggregated[NETDATA_KEY_PUBLISH_VFS_WRITE],
664 - 1, NETDATA_EBPF_MODULE_NAME_SWAP);
664 + 1, em->update_every, NETDATA_EBPF_MODULE_NAME_SWAP);
665
666 ebpf_create_chart(type, NETDATA_SYSCALL_APPS_VFS_READ_BYTES, "Bytes read from disk",
667 EBPF_COMMON_DIMENSION_BYTES, NETDATA_VFS_CGROUP_GROUP, NETDATA_CGROUP_VFS_READ_BYTES_CONTEXT,
668 NETDATA_EBPF_CHART_TYPE_LINE, NETDATA_CHART_PRIO_CGROUPS_CONTAINERS + 5506,
669 ebpf_create_global_dimension, &vfs_publish_aggregated[NETDATA_KEY_PUBLISH_VFS_READ],
670 - 1, NETDATA_EBPF_MODULE_NAME_SWAP);
670 + 1, em->update_every, NETDATA_EBPF_MODULE_NAME_SWAP);
671
672 ebpf_create_chart(type, NETDATA_SYSCALL_APPS_VFS_FSYNC, "Calls for <code>vfs_fsync</code>",
673 EBPF_COMMON_DIMENSION_CALL, NETDATA_VFS_CGROUP_GROUP, NULL,
674 NETDATA_EBPF_CHART_TYPE_LINE, NETDATA_CHART_PRIO_CGROUPS_CONTAINERS + 5507,
675 ebpf_create_global_dimension, &vfs_publish_aggregated[NETDATA_KEY_PUBLISH_VFS_FSYNC],
676 - 1, NETDATA_EBPF_MODULE_NAME_SWAP);
676 + 1, em->update_every, NETDATA_EBPF_MODULE_NAME_SWAP);
677
678 if (em->mode < MODE_ENTRY) {
679 ebpf_create_chart(type, NETDATA_SYSCALL_APPS_VFS_FSYNC_CALLS_ERROR, "Sync error",
680 EBPF_COMMON_DIMENSION_CALL, NETDATA_VFS_CGROUP_GROUP, NULL,
681 NETDATA_EBPF_CHART_TYPE_LINE, NETDATA_CHART_PRIO_CGROUPS_CONTAINERS + 5508,
682 ebpf_create_global_dimension, &vfs_publish_aggregated[NETDATA_KEY_PUBLISH_VFS_FSYNC],
683 - 1, NETDATA_EBPF_MODULE_NAME_SWAP);
683 + 1, em->update_every, NETDATA_EBPF_MODULE_NAME_SWAP);
684 }
685
686 ebpf_create_chart(type, NETDATA_SYSCALL_APPS_VFS_OPEN, "Calls for <code>vfs_open</code>",
687 EBPF_COMMON_DIMENSION_CALL, NETDATA_VFS_CGROUP_GROUP, NULL,
688 NETDATA_EBPF_CHART_TYPE_LINE, NETDATA_CHART_PRIO_CGROUPS_CONTAINERS + 5509,
689 ebpf_create_global_dimension, &vfs_publish_aggregated[NETDATA_KEY_PUBLISH_VFS_OPEN],
690 - 1, NETDATA_EBPF_MODULE_NAME_SWAP);
690 + 1, em->update_every, NETDATA_EBPF_MODULE_NAME_SWAP);
691
692 if (em->mode < MODE_ENTRY) {
693 ebpf_create_chart(type, NETDATA_SYSCALL_APPS_VFS_OPEN_CALLS_ERROR, "Open error",
694 EBPF_COMMON_DIMENSION_CALL, NETDATA_VFS_CGROUP_GROUP, NULL,
695 NETDATA_EBPF_CHART_TYPE_LINE, NETDATA_CHART_PRIO_CGROUPS_CONTAINERS + 5510,
696 ebpf_create_global_dimension, &vfs_publish_aggregated[NETDATA_KEY_PUBLISH_VFS_OPEN],
697 - 1, NETDATA_EBPF_MODULE_NAME_SWAP);
697 + 1, em->update_every, NETDATA_EBPF_MODULE_NAME_SWAP);
698 }
699
700 ebpf_create_chart(type, NETDATA_SYSCALL_APPS_VFS_CREATE, "Calls for <code>vfs_create</code>",
701 EBPF_COMMON_DIMENSION_CALL, NETDATA_VFS_CGROUP_GROUP, NULL,
702 NETDATA_EBPF_CHART_TYPE_LINE, NETDATA_CHART_PRIO_CGROUPS_CONTAINERS + 5511,
703 ebpf_create_global_dimension, &vfs_publish_aggregated[NETDATA_KEY_PUBLISH_VFS_CREATE],
704 - 1, NETDATA_EBPF_MODULE_NAME_SWAP);
704 + 1, em->update_every, NETDATA_EBPF_MODULE_NAME_SWAP);
705
706 if (em->mode < MODE_ENTRY) {
707 ebpf_create_chart(type, NETDATA_SYSCALL_APPS_VFS_CREATE_CALLS_ERROR, "Create error",
708 EBPF_COMMON_DIMENSION_CALL, NETDATA_VFS_CGROUP_GROUP, NULL,
709 NETDATA_EBPF_CHART_TYPE_LINE, NETDATA_CHART_PRIO_CGROUPS_CONTAINERS + 5512,
710 ebpf_create_global_dimension, &vfs_publish_aggregated[NETDATA_KEY_PUBLISH_VFS_CREATE],
711 - 1, NETDATA_EBPF_MODULE_NAME_SWAP);
711 + 1, em->update_every, NETDATA_EBPF_MODULE_NAME_SWAP);
712 }
713 }
714
@@ -725,76 +725,76 @@ static void ebpf_obsolete_specific_vfs_charts(char *type, ebpf_module_t *em)
725 ebpf_write_chart_obsolete(type, NETDATA_SYSCALL_APPS_FILE_DELETED, "Files deleted",
726 EBPF_COMMON_DIMENSION_CALL, NETDATA_VFS_GROUP,
727 NETDATA_EBPF_CHART_TYPE_LINE, NETDATA_CGROUP_VFS_UNLINK_CONTEXT,
728 - NETDATA_CHART_PRIO_CGROUPS_CONTAINERS + 5500);
728 + NETDATA_CHART_PRIO_CGROUPS_CONTAINERS + 5500, em->update_every);
729
730 ebpf_write_chart_obsolete(type, NETDATA_SYSCALL_APPS_VFS_WRITE_CALLS, "Write to disk",
731 EBPF_COMMON_DIMENSION_CALL, NETDATA_VFS_GROUP,
732 NETDATA_EBPF_CHART_TYPE_LINE, NETDATA_CGROUP_VFS_WRITE_CONTEXT,
733 - NETDATA_CHART_PRIO_CGROUPS_CONTAINERS + 5501);
733 + NETDATA_CHART_PRIO_CGROUPS_CONTAINERS + 5501, em->update_every);
734
735 if (em->mode < MODE_ENTRY) {
736 ebpf_write_chart_obsolete(type, NETDATA_SYSCALL_APPS_VFS_WRITE_CALLS_ERROR, "Fails to write",
737 EBPF_COMMON_DIMENSION_CALL, NETDATA_VFS_GROUP,
738 NETDATA_EBPF_CHART_TYPE_LINE, NETDATA_CGROUP_VFS_WRITE_ERROR_CONTEXT,
739 - NETDATA_CHART_PRIO_CGROUPS_CONTAINERS + 5502);
739 + NETDATA_CHART_PRIO_CGROUPS_CONTAINERS + 5502, em->update_every);
740 }
741
742 ebpf_write_chart_obsolete(type, NETDATA_SYSCALL_APPS_VFS_READ_CALLS, "Read from disk",
743 EBPF_COMMON_DIMENSION_CALL, NETDATA_VFS_GROUP,
744 NETDATA_EBPF_CHART_TYPE_LINE, NETDATA_CGROUP_VFS_READ_CONTEXT,
745 - NETDATA_CHART_PRIO_CGROUPS_CONTAINERS + 5503);
745 + NETDATA_CHART_PRIO_CGROUPS_CONTAINERS + 5503, em->update_every);
746
747 if (em->mode < MODE_ENTRY) {
748 ebpf_write_chart_obsolete(type, NETDATA_SYSCALL_APPS_VFS_READ_CALLS_ERROR, "Fails to read",
749 EBPF_COMMON_DIMENSION_CALL, NETDATA_VFS_GROUP,
750 NETDATA_EBPF_CHART_TYPE_LINE, NETDATA_CGROUP_VFS_READ_ERROR_CONTEXT,
751 - NETDATA_CHART_PRIO_CGROUPS_CONTAINERS + 5504);
751 + NETDATA_CHART_PRIO_CGROUPS_CONTAINERS + 5504, em->update_every);
752 }
753
754 ebpf_write_chart_obsolete(type, NETDATA_SYSCALL_APPS_VFS_WRITE_BYTES, "Bytes written on disk",
755 EBPF_COMMON_DIMENSION_BYTES, NETDATA_VFS_GROUP,
756 NETDATA_EBPF_CHART_TYPE_LINE, NETDATA_CGROUP_VFS_WRITE_BYTES_CONTEXT,
757 - NETDATA_CHART_PRIO_CGROUPS_CONTAINERS + 5505);
757 + NETDATA_CHART_PRIO_CGROUPS_CONTAINERS + 5505, em->update_every);
758
759 ebpf_write_chart_obsolete(type, NETDATA_SYSCALL_APPS_VFS_READ_BYTES, "Bytes read from disk",
760 EBPF_COMMON_DIMENSION_BYTES, NETDATA_VFS_GROUP,
761 NETDATA_EBPF_CHART_TYPE_LINE, NETDATA_CGROUP_VFS_READ_BYTES_CONTEXT,
762 - NETDATA_CHART_PRIO_CGROUPS_CONTAINERS + 5506);
762 + NETDATA_CHART_PRIO_CGROUPS_CONTAINERS + 5506, em->update_every);
763
764 ebpf_write_chart_obsolete(type, NETDATA_SYSCALL_APPS_VFS_FSYNC, "Calls for <code>vfs_fsync</code>",
765 EBPF_COMMON_DIMENSION_CALL, NETDATA_VFS_GROUP,
766 NETDATA_EBPF_CHART_TYPE_LINE, NULL,
767 - NETDATA_CHART_PRIO_CGROUPS_CONTAINERS + 5507);
767 + NETDATA_CHART_PRIO_CGROUPS_CONTAINERS + 5507, em->update_every);
768
769 if (em->mode < MODE_ENTRY) {
770 ebpf_write_chart_obsolete(type, NETDATA_SYSCALL_APPS_VFS_FSYNC_CALLS_ERROR, "Sync error",
771 EBPF_COMMON_DIMENSION_CALL, NETDATA_VFS_GROUP,
772 NETDATA_EBPF_CHART_TYPE_LINE, NULL,
773 - NETDATA_CHART_PRIO_CGROUPS_CONTAINERS + 5508);
773 + NETDATA_CHART_PRIO_CGROUPS_CONTAINERS + 5508, em->update_every);
774 }
775
776 ebpf_write_chart_obsolete(type, NETDATA_SYSCALL_APPS_VFS_OPEN, "Calls for <code>vfs_open</code>",
777 EBPF_COMMON_DIMENSION_CALL, NETDATA_VFS_GROUP,
778 NETDATA_EBPF_CHART_TYPE_LINE, NULL,
779 - NETDATA_CHART_PRIO_CGROUPS_CONTAINERS + 5509);
779 + NETDATA_CHART_PRIO_CGROUPS_CONTAINERS + 5509, em->update_every);
780
781 if (em->mode < MODE_ENTRY) {
782 ebpf_write_chart_obsolete(type, NETDATA_SYSCALL_APPS_VFS_OPEN_CALLS_ERROR, "Open error",
783 EBPF_COMMON_DIMENSION_CALL, NETDATA_VFS_GROUP,
784 NETDATA_EBPF_CHART_TYPE_LINE, NULL,
785 - NETDATA_CHART_PRIO_CGROUPS_CONTAINERS + 5510);
785 + NETDATA_CHART_PRIO_CGROUPS_CONTAINERS + 5510, em->update_every);
786 }
787
788 ebpf_write_chart_obsolete(type, NETDATA_SYSCALL_APPS_VFS_CREATE, "Calls for <code>vfs_create</code>",
789 EBPF_COMMON_DIMENSION_CALL, NETDATA_VFS_GROUP,
790 NETDATA_EBPF_CHART_TYPE_LINE, NULL,
791 - NETDATA_CHART_PRIO_CGROUPS_CONTAINERS + 5511);
791 + NETDATA_CHART_PRIO_CGROUPS_CONTAINERS + 5511, em->update_every);
792
793 if (em->mode < MODE_ENTRY) {
794 ebpf_write_chart_obsolete(type, NETDATA_SYSCALL_APPS_VFS_CREATE_CALLS_ERROR, "Create error",
795 EBPF_COMMON_DIMENSION_CALL, NETDATA_VFS_GROUP,
796 NETDATA_EBPF_CHART_TYPE_LINE, NULL,
797 - NETDATA_CHART_PRIO_CGROUPS_CONTAINERS + 5512);
797 + NETDATA_CHART_PRIO_CGROUPS_CONTAINERS + 5512, em->update_every);
798 }
799 }
800
@@ -896,87 +896,89 @@ static void ebpf_create_systemd_vfs_charts(ebpf_module_t *em)
896 EBPF_COMMON_DIMENSION_CALL, NETDATA_VFS_CGROUP_GROUP,
897 NETDATA_EBPF_CHART_TYPE_STACKED, 20065,
898 ebpf_algorithms[NETDATA_EBPF_INCREMENTAL_IDX], NETDATA_SYSTEMD_VFS_UNLINK_CONTEXT,
899 - NETDATA_EBPF_MODULE_NAME_VFS);
899 + NETDATA_EBPF_MODULE_NAME_VFS, em->update_every);
900
901 ebpf_create_charts_on_systemd(NETDATA_SYSCALL_APPS_VFS_WRITE_CALLS, "Write to disk",
902 EBPF_COMMON_DIMENSION_CALL, NETDATA_VFS_CGROUP_GROUP,
903 NETDATA_EBPF_CHART_TYPE_STACKED, 20066,
904 ebpf_algorithms[NETDATA_EBPF_INCREMENTAL_IDX], NETDATA_SYSTEMD_VFS_WRITE_CONTEXT,
905 - NETDATA_EBPF_MODULE_NAME_VFS);
905 + NETDATA_EBPF_MODULE_NAME_VFS, em->update_every);
906
907 if (em->mode < MODE_ENTRY) {
908 ebpf_create_charts_on_systemd(NETDATA_SYSCALL_APPS_VFS_WRITE_CALLS_ERROR, "Fails to write",
909 EBPF_COMMON_DIMENSION_CALL, NETDATA_VFS_CGROUP_GROUP,
910 NETDATA_EBPF_CHART_TYPE_STACKED, 20067,
911 ebpf_algorithms[NETDATA_EBPF_INCREMENTAL_IDX],
912 - NETDATA_SYSTEMD_VFS_WRITE_ERROR_CONTEXT, NETDATA_EBPF_MODULE_NAME_VFS);
912 + NETDATA_SYSTEMD_VFS_WRITE_ERROR_CONTEXT,
913 + NETDATA_EBPF_MODULE_NAME_VFS, em->update_every);
914 }
915
916 ebpf_create_charts_on_systemd(NETDATA_SYSCALL_APPS_VFS_READ_CALLS, "Read from disk",
917 EBPF_COMMON_DIMENSION_CALL, NETDATA_VFS_CGROUP_GROUP,
918 NETDATA_EBPF_CHART_TYPE_STACKED, 20068,
919 ebpf_algorithms[NETDATA_EBPF_INCREMENTAL_IDX], NETDATA_SYSTEMD_VFS_READ_CONTEXT,
919 - NETDATA_EBPF_MODULE_NAME_VFS);
920 + NETDATA_EBPF_MODULE_NAME_VFS, em->update_every);
921
922 if (em->mode < MODE_ENTRY) {
923 ebpf_create_charts_on_systemd(NETDATA_SYSCALL_APPS_VFS_READ_CALLS_ERROR, "Fails to read",
924 EBPF_COMMON_DIMENSION_CALL, NETDATA_VFS_CGROUP_GROUP,
925 NETDATA_EBPF_CHART_TYPE_STACKED, 20069,
926 ebpf_algorithms[NETDATA_EBPF_INCREMENTAL_IDX],
926 - NETDATA_SYSTEMD_VFS_READ_ERROR_CONTEXT, NETDATA_EBPF_MODULE_NAME_VFS);
927 + NETDATA_SYSTEMD_VFS_READ_ERROR_CONTEXT,
928 + NETDATA_EBPF_MODULE_NAME_VFS, em->update_every);
929 }
930
931 ebpf_create_charts_on_systemd(NETDATA_SYSCALL_APPS_VFS_WRITE_BYTES, "Bytes written on disk",
932 EBPF_COMMON_DIMENSION_BYTES, NETDATA_VFS_CGROUP_GROUP,
933 NETDATA_EBPF_CHART_TYPE_STACKED, 20070,
934 ebpf_algorithms[NETDATA_EBPF_INCREMENTAL_IDX], NETDATA_SYSTEMD_VFS_WRITE_BYTES_CONTEXT,
933 - NETDATA_EBPF_MODULE_NAME_VFS);
935 + NETDATA_EBPF_MODULE_NAME_VFS, em->update_every);
936
937 ebpf_create_charts_on_systemd(NETDATA_SYSCALL_APPS_VFS_READ_BYTES, "Bytes read from disk",
938 EBPF_COMMON_DIMENSION_BYTES, NETDATA_VFS_CGROUP_GROUP,
939 NETDATA_EBPF_CHART_TYPE_STACKED, 20071,
940 ebpf_algorithms[NETDATA_EBPF_INCREMENTAL_IDX], NETDATA_SYSTEMD_VFS_READ_BYTES_CONTEXT,
939 - NETDATA_EBPF_MODULE_NAME_VFS);
941 + NETDATA_EBPF_MODULE_NAME_VFS, em->update_every);
942
943 ebpf_create_charts_on_systemd(NETDATA_SYSCALL_APPS_VFS_FSYNC, "Calls to <code>vfs_fsync</code>",
944 EBPF_COMMON_DIMENSION_CALL, NETDATA_VFS_CGROUP_GROUP,
945 NETDATA_EBPF_CHART_TYPE_STACKED, 20072,
946 ebpf_algorithms[NETDATA_EBPF_INCREMENTAL_IDX], NULL,
945 - NETDATA_EBPF_MODULE_NAME_VFS);
947 + NETDATA_EBPF_MODULE_NAME_VFS, em->update_every);
948
949 if (em->mode < MODE_ENTRY) {
950 ebpf_create_charts_on_systemd(NETDATA_SYSCALL_APPS_VFS_FSYNC_CALLS_ERROR, "Sync error",
951 EBPF_COMMON_DIMENSION_CALL, NETDATA_VFS_CGROUP_GROUP,
952 NETDATA_EBPF_CHART_TYPE_STACKED, 20073,
953 ebpf_algorithms[NETDATA_EBPF_INCREMENTAL_IDX], NULL,
952 - NETDATA_EBPF_MODULE_NAME_VFS);
954 + NETDATA_EBPF_MODULE_NAME_VFS, em->update_every);
955 }
956 ebpf_create_charts_on_systemd(NETDATA_SYSCALL_APPS_VFS_OPEN, "Calls to <code>vfs_open</code>",
957 EBPF_COMMON_DIMENSION_CALL, NETDATA_VFS_CGROUP_GROUP,
958 NETDATA_EBPF_CHART_TYPE_STACKED, 20074,
959 ebpf_algorithms[NETDATA_EBPF_INCREMENTAL_IDX], NULL,
958 - NETDATA_EBPF_MODULE_NAME_VFS);
960 + NETDATA_EBPF_MODULE_NAME_VFS, em->update_every);
961
962 if (em->mode < MODE_ENTRY) {
963 ebpf_create_charts_on_systemd(NETDATA_SYSCALL_APPS_VFS_OPEN_CALLS_ERROR, "Open error",
964 EBPF_COMMON_DIMENSION_CALL, NETDATA_VFS_CGROUP_GROUP,
965 NETDATA_EBPF_CHART_TYPE_STACKED, 20075,
966 ebpf_algorithms[NETDATA_EBPF_INCREMENTAL_IDX], NULL,
965 - NETDATA_EBPF_MODULE_NAME_VFS);
967 + NETDATA_EBPF_MODULE_NAME_VFS, em->update_every);
968 }
969
970 ebpf_create_charts_on_systemd(NETDATA_SYSCALL_APPS_VFS_CREATE, "Calls to <code>vfs_create</code>",
971 EBPF_COMMON_DIMENSION_CALL, NETDATA_VFS_CGROUP_GROUP,
972 NETDATA_EBPF_CHART_TYPE_STACKED, 20076,
973 ebpf_algorithms[NETDATA_EBPF_INCREMENTAL_IDX], NULL,
972 - NETDATA_EBPF_MODULE_NAME_VFS);
974 + NETDATA_EBPF_MODULE_NAME_VFS, em->update_every);
975
976 if (em->mode < MODE_ENTRY) {
977 ebpf_create_charts_on_systemd(NETDATA_SYSCALL_APPS_VFS_CREATE_CALLS_ERROR, "Create error",
978 EBPF_COMMON_DIMENSION_CALL, NETDATA_VFS_CGROUP_GROUP,
979 NETDATA_EBPF_CHART_TYPE_STACKED, 20077,
980 ebpf_algorithms[NETDATA_EBPF_INCREMENTAL_IDX], NULL,
979 - NETDATA_EBPF_MODULE_NAME_VFS);
981 + NETDATA_EBPF_MODULE_NAME_VFS, em->update_every);
982 }
983 }
984
@@ -1184,28 +1186,33 @@ static void vfs_collector(ebpf_module_t *em)
1186
1187 int apps = em->apps_charts;
1188 int cgroups = em->cgroup_charts;
1189 + int update_every = em->update_every;
1190 + int counter = update_every - 1;
1191 while (!close_ebpf_plugin) {
1192 pthread_mutex_lock(&collect_data_mutex);
1193 pthread_cond_wait(&collect_data_cond_var, &collect_data_mutex);
1194
1191 - if (apps)
1192 - ebpf_vfs_read_apps();
1195 + if (++counter == update_every) {
1196 + counter = 0;
1197 + if (apps)
1198 + ebpf_vfs_read_apps();
1199
1194 - if (cgroups)
1195 - read_update_vfs_cgroup();
1200 + if (cgroups)
1201 + read_update_vfs_cgroup();
1202
1197 - pthread_mutex_lock(&lock);
1203 + pthread_mutex_lock(&lock);
1204
1199 - ebpf_vfs_send_data(em);
1200 - fflush(stdout);
1205 + ebpf_vfs_send_data(em);
1206 + fflush(stdout);
1207
1202 - if (apps)
1203 - ebpf_vfs_send_apps_data(em, apps_groups_root_target);
1208 + if (apps)
1209 + ebpf_vfs_send_apps_data(em, apps_groups_root_target);
1210
1205 - if (cgroups)
1206 - ebpf_vfs_send_cgroup_data(em);
1211 + if (cgroups)
1212 + ebpf_vfs_send_cgroup_data(em);
1213
1208 - pthread_mutex_unlock(&lock);
1214 + pthread_mutex_unlock(&lock);
1215 + }
1216 pthread_mutex_unlock(&collect_data_mutex);
1217 }
1218 }
@@ -1225,8 +1232,10 @@ static void vfs_collector(ebpf_module_t *em)
1232 * @param web the group name used to attach the chart on dashboard
1233 * @param order the order number of the specified chart
1234 * @param algorithm the algorithm used to make the charts.
1235 + * @param update_every value to overwrite the update frequency set by the server.
1236 */
1229 -static void ebpf_create_io_chart(char *family, char *name, char *axis, char *web, int order, int algorithm)
1237 +static void ebpf_create_io_chart(char *family, char *name, char *axis, char *web,
1238 + int order, int algorithm, int update_every)
1239 {
1240 printf("CHART %s.%s '' 'Bytes written and read' '%s' '%s' '' line %d %d '' 'ebpf.plugin' 'filesystem'\n",
1241 family,
@@ -1265,7 +1274,7 @@ static void ebpf_create_global_charts(ebpf_module_t *em)
1274 NETDATA_CHART_PRIO_FILESYSTEM_VFS_CLEAN,
1275 ebpf_create_global_dimension,
1276 &vfs_publish_aggregated[NETDATA_KEY_PUBLISH_VFS_UNLINK],
1268 - 1, NETDATA_EBPF_MODULE_NAME_VFS);
1277 + 1, em->update_every, NETDATA_EBPF_MODULE_NAME_VFS);
1278
1279 ebpf_create_chart(NETDATA_FILESYSTEM_FAMILY,
1280 NETDATA_VFS_FILE_IO_COUNT,
@@ -1277,13 +1286,13 @@ static void ebpf_create_global_charts(ebpf_module_t *em)
1286 NETDATA_CHART_PRIO_FILESYSTEM_VFS_IO_COUNT,
1287 ebpf_create_global_dimension,
1288 &vfs_publish_aggregated[NETDATA_KEY_PUBLISH_VFS_READ],
1280 - 2, NETDATA_EBPF_MODULE_NAME_VFS);
1289 + 2, em->update_every, NETDATA_EBPF_MODULE_NAME_VFS);
1290
1291 ebpf_create_io_chart(NETDATA_FILESYSTEM_FAMILY,
1292 NETDATA_VFS_IO_FILE_BYTES, EBPF_COMMON_DIMENSION_BYTES,
1293 NETDATA_VFS_GROUP,
1294 NETDATA_CHART_PRIO_FILESYSTEM_VFS_IO_BYTES,
1286 - NETDATA_EBPF_INCREMENTAL_IDX);
1295 + NETDATA_EBPF_INCREMENTAL_IDX, em->update_every);
1296
1297 if (em->mode < MODE_ENTRY) {
1298 ebpf_create_chart(NETDATA_FILESYSTEM_FAMILY,
@@ -1296,7 +1305,7 @@ static void ebpf_create_global_charts(ebpf_module_t *em)
1305 NETDATA_CHART_PRIO_FILESYSTEM_VFS_IO_EBYTES,
1306 ebpf_create_global_dimension,
1307 &vfs_publish_aggregated[NETDATA_KEY_PUBLISH_VFS_READ],
1299 - 2, NETDATA_EBPF_MODULE_NAME_VFS);
1308 + 2, em->update_every, NETDATA_EBPF_MODULE_NAME_VFS);
1309 }
1310
1311 ebpf_create_chart(NETDATA_FILESYSTEM_FAMILY,
@@ -1309,7 +1318,7 @@ static void ebpf_create_global_charts(ebpf_module_t *em)
1318 NETDATA_CHART_PRIO_FILESYSTEM_VFS_IO_FSYNC,
1319 ebpf_create_global_dimension,
1320 &vfs_publish_aggregated[NETDATA_KEY_PUBLISH_VFS_FSYNC],
1312 - 1, NETDATA_EBPF_MODULE_NAME_VFS);
1321 + 1, em->update_every, NETDATA_EBPF_MODULE_NAME_VFS);
1322
1323 if (em->mode < MODE_ENTRY) {
1324 ebpf_create_chart(NETDATA_FILESYSTEM_FAMILY,
@@ -1322,7 +1331,7 @@ static void ebpf_create_global_charts(ebpf_module_t *em)
1331 NETDATA_CHART_PRIO_FILESYSTEM_VFS_IO_EFSYNC,
1332 ebpf_create_global_dimension,
1333 &vfs_publish_aggregated[NETDATA_KEY_PUBLISH_VFS_FSYNC],
1325 - 1, NETDATA_EBPF_MODULE_NAME_VFS);
1334 + 1, em->update_every, NETDATA_EBPF_MODULE_NAME_VFS);
1335 }
1336
1337 ebpf_create_chart(NETDATA_FILESYSTEM_FAMILY,
@@ -1335,7 +1344,7 @@ static void ebpf_create_global_charts(ebpf_module_t *em)
1344 NETDATA_CHART_PRIO_FILESYSTEM_VFS_IO_OPEN,
1345 ebpf_create_global_dimension,
1346 &vfs_publish_aggregated[NETDATA_KEY_PUBLISH_VFS_OPEN],
1338 - 1, NETDATA_EBPF_MODULE_NAME_VFS);
1347 + 1, em->update_every, NETDATA_EBPF_MODULE_NAME_VFS);
1348
1349 if (em->mode < MODE_ENTRY) {
1350 ebpf_create_chart(NETDATA_FILESYSTEM_FAMILY,
@@ -1348,7 +1357,7 @@ static void ebpf_create_global_charts(ebpf_module_t *em)
1357 NETDATA_CHART_PRIO_FILESYSTEM_VFS_IO_EOPEN,
1358 ebpf_create_global_dimension,
1359 &vfs_publish_aggregated[NETDATA_KEY_PUBLISH_VFS_OPEN],
1351 - 1, NETDATA_EBPF_MODULE_NAME_VFS);
1360 + 1, em->update_every, NETDATA_EBPF_MODULE_NAME_VFS);
1361 }
1362
1363 ebpf_create_chart(NETDATA_FILESYSTEM_FAMILY,
@@ -1361,7 +1370,7 @@ static void ebpf_create_global_charts(ebpf_module_t *em)
1370 NETDATA_CHART_PRIO_FILESYSTEM_VFS_IO_CREATE,
1371 ebpf_create_global_dimension,
1372 &vfs_publish_aggregated[NETDATA_KEY_PUBLISH_VFS_CREATE],
1364 - 1, NETDATA_EBPF_MODULE_NAME_VFS);
1373 + 1, em->update_every, NETDATA_EBPF_MODULE_NAME_VFS);
1374
1375 if (em->mode < MODE_ENTRY) {
1376 ebpf_create_chart(NETDATA_FILESYSTEM_FAMILY,
@@ -1374,7 +1383,7 @@ static void ebpf_create_global_charts(ebpf_module_t *em)
1383 NETDATA_CHART_PRIO_FILESYSTEM_VFS_IO_ECREATE,
1384 ebpf_create_global_dimension,
1385 &vfs_publish_aggregated[NETDATA_KEY_PUBLISH_VFS_CREATE],
1377 - 1, NETDATA_EBPF_MODULE_NAME_VFS);
1386 + 1, em->update_every, NETDATA_EBPF_MODULE_NAME_VFS);
1387 }
1388 }
1389
@@ -1397,7 +1406,7 @@ void ebpf_vfs_create_apps_charts(struct ebpf_module *em, void *ptr)
1406 NETDATA_EBPF_CHART_TYPE_STACKED,
1407 20065,
1408 ebpf_algorithms[NETDATA_EBPF_INCREMENTAL_IDX],
1400 - root, NETDATA_EBPF_MODULE_NAME_VFS);
1409 + root, em->update_every, NETDATA_EBPF_MODULE_NAME_VFS);
1410
1411 ebpf_create_charts_on_apps(NETDATA_SYSCALL_APPS_VFS_WRITE_CALLS,
1412 "Write to disk",
@@ -1406,7 +1415,7 @@ void ebpf_vfs_create_apps_charts(struct ebpf_module *em, void *ptr)
1415 NETDATA_EBPF_CHART_TYPE_STACKED,
1416 20066,
1417 ebpf_algorithms[NETDATA_EBPF_INCREMENTAL_IDX],
1409 - apps_groups_root_target, NETDATA_EBPF_MODULE_NAME_VFS);
1418 + root, em->update_every, NETDATA_EBPF_MODULE_NAME_VFS);
1419
1420 if (em->mode < MODE_ENTRY) {
1421 ebpf_create_charts_on_apps(NETDATA_SYSCALL_APPS_VFS_WRITE_CALLS_ERROR,
@@ -1416,7 +1425,7 @@ void ebpf_vfs_create_apps_charts(struct ebpf_module *em, void *ptr)
1425 NETDATA_EBPF_CHART_TYPE_STACKED,
1426 20067,
1427 ebpf_algorithms[NETDATA_EBPF_INCREMENTAL_IDX],
1419 - root, NETDATA_EBPF_MODULE_NAME_VFS);
1428 + root, em->update_every, NETDATA_EBPF_MODULE_NAME_VFS);
1429 }
1430
1431 ebpf_create_charts_on_apps(NETDATA_SYSCALL_APPS_VFS_READ_CALLS,
@@ -1426,7 +1435,7 @@ void ebpf_vfs_create_apps_charts(struct ebpf_module *em, void *ptr)
1435 NETDATA_EBPF_CHART_TYPE_STACKED,
1436 20068,
1437 ebpf_algorithms[NETDATA_EBPF_INCREMENTAL_IDX],
1429 - root, NETDATA_EBPF_MODULE_NAME_VFS);
1438 + root, em->update_every, NETDATA_EBPF_MODULE_NAME_VFS);
1439
1440 if (em->mode < MODE_ENTRY) {
1441 ebpf_create_charts_on_apps(NETDATA_SYSCALL_APPS_VFS_READ_CALLS_ERROR,
@@ -1436,7 +1445,7 @@ void ebpf_vfs_create_apps_charts(struct ebpf_module *em, void *ptr)
1445 NETDATA_EBPF_CHART_TYPE_STACKED,
1446 20069,
1447 ebpf_algorithms[NETDATA_EBPF_INCREMENTAL_IDX],
1439 - root, NETDATA_EBPF_MODULE_NAME_VFS);
1448 + root, em->update_every, NETDATA_EBPF_MODULE_NAME_VFS);
1449 }
1450
1451 ebpf_create_charts_on_apps(NETDATA_SYSCALL_APPS_VFS_WRITE_BYTES,
@@ -1445,7 +1454,7 @@ void ebpf_vfs_create_apps_charts(struct ebpf_module *em, void *ptr)
1454 NETDATA_EBPF_CHART_TYPE_STACKED,
1455 20070,
1456 ebpf_algorithms[NETDATA_EBPF_INCREMENTAL_IDX],
1448 - root, NETDATA_EBPF_MODULE_NAME_VFS);
1457 + root, em->update_every, NETDATA_EBPF_MODULE_NAME_VFS);
1458
1459 ebpf_create_charts_on_apps(NETDATA_SYSCALL_APPS_VFS_READ_BYTES,
1460 "Bytes read from disk", EBPF_COMMON_DIMENSION_BYTES,
@@ -1453,7 +1462,7 @@ void ebpf_vfs_create_apps_charts(struct ebpf_module *em, void *ptr)
1462 NETDATA_EBPF_CHART_TYPE_STACKED,
1463 20071,
1464 ebpf_algorithms[NETDATA_EBPF_INCREMENTAL_IDX],
1456 - root, NETDATA_EBPF_MODULE_NAME_VFS);
1465 + root, em->update_every, NETDATA_EBPF_MODULE_NAME_VFS);
1466
1467 ebpf_create_charts_on_apps(NETDATA_SYSCALL_APPS_VFS_FSYNC,
1468 "Calls for <code>vfs_fsync</code>", EBPF_COMMON_DIMENSION_CALL,
@@ -1461,7 +1470,7 @@ void ebpf_vfs_create_apps_charts(struct ebpf_module *em, void *ptr)
1470 NETDATA_EBPF_CHART_TYPE_STACKED,
1471 20072,
1472 ebpf_algorithms[NETDATA_EBPF_INCREMENTAL_IDX],
1464 - root, NETDATA_EBPF_MODULE_NAME_VFS);
1473 + root, em->update_every, NETDATA_EBPF_MODULE_NAME_VFS);
1474
1475 if (em->mode < MODE_ENTRY) {
1476 ebpf_create_charts_on_apps(NETDATA_SYSCALL_APPS_VFS_FSYNC_CALLS_ERROR,
@@ -1471,7 +1480,7 @@ void ebpf_vfs_create_apps_charts(struct ebpf_module *em, void *ptr)
1480 NETDATA_EBPF_CHART_TYPE_STACKED,
1481 20073,
1482 ebpf_algorithms[NETDATA_EBPF_INCREMENTAL_IDX],
1474 - root, NETDATA_EBPF_MODULE_NAME_VFS);
1483 + root, em->update_every, NETDATA_EBPF_MODULE_NAME_VFS);
1484 }
1485
1486 ebpf_create_charts_on_apps(NETDATA_SYSCALL_APPS_VFS_OPEN,
@@ -1480,7 +1489,7 @@ void ebpf_vfs_create_apps_charts(struct ebpf_module *em, void *ptr)
1489 NETDATA_EBPF_CHART_TYPE_STACKED,
1490 20074,
1491 ebpf_algorithms[NETDATA_EBPF_INCREMENTAL_IDX],
1483 - root, NETDATA_EBPF_MODULE_NAME_VFS);
1492 + root, em->update_every, NETDATA_EBPF_MODULE_NAME_VFS);
1493
1494 if (em->mode < MODE_ENTRY) {
1495 ebpf_create_charts_on_apps(NETDATA_SYSCALL_APPS_VFS_OPEN_CALLS_ERROR,
@@ -1490,7 +1499,7 @@ void ebpf_vfs_create_apps_charts(struct ebpf_module *em, void *ptr)
1499 NETDATA_EBPF_CHART_TYPE_STACKED,
1500 20075,
1501 ebpf_algorithms[NETDATA_EBPF_INCREMENTAL_IDX],
1493 - root, NETDATA_EBPF_MODULE_NAME_VFS);
1502 + root, em->update_every, NETDATA_EBPF_MODULE_NAME_VFS);
1503 }
1504
1505 ebpf_create_charts_on_apps(NETDATA_SYSCALL_APPS_VFS_CREATE,
@@ -1499,7 +1508,7 @@ void ebpf_vfs_create_apps_charts(struct ebpf_module *em, void *ptr)
1508 NETDATA_EBPF_CHART_TYPE_STACKED,
1509 20076,
1510 ebpf_algorithms[NETDATA_EBPF_INCREMENTAL_IDX],
1502 - root, NETDATA_EBPF_MODULE_NAME_VFS);
1511 + root, em->update_every, NETDATA_EBPF_MODULE_NAME_VFS);
1512
1513 if (em->mode < MODE_ENTRY) {
1514 ebpf_create_charts_on_apps(NETDATA_SYSCALL_APPS_VFS_CREATE_CALLS_ERROR,
@@ -1509,7 +1518,7 @@ void ebpf_vfs_create_apps_charts(struct ebpf_module *em, void *ptr)
1518 NETDATA_EBPF_CHART_TYPE_STACKED,
1519 20077,
1520 ebpf_algorithms[NETDATA_EBPF_INCREMENTAL_IDX],
1512 - root, NETDATA_EBPF_MODULE_NAME_VFS);
1521 + root, em->update_every, NETDATA_EBPF_MODULE_NAME_VFS);
1522 }
1523 }
1524
libnetdata/ebpf/ebpf.c
+2 -2
@@ -568,8 +568,8 @@ void ebpf_update_module_using_config(ebpf_module_t *modules)
568 char *mode = appconfig_get(modules->cfg, EBPF_GLOBAL_SECTION, EBPF_CFG_LOAD_MODE, default_value);
569 modules->mode = ebpf_select_mode(mode);
570
571 - modules->update_time = (int)appconfig_get_number(modules->cfg, EBPF_GLOBAL_SECTION,
572 - EBPF_CFG_UPDATE_EVERY, modules->update_time);
571 + modules->update_every = (int)appconfig_get_number(modules->cfg, EBPF_GLOBAL_SECTION,
572 + EBPF_CFG_UPDATE_EVERY, modules->update_every);
573
574 modules->apps_charts = appconfig_get_boolean(modules->cfg, EBPF_GLOBAL_SECTION, EBPF_CFG_APPLICATION,
575 modules->apps_charts);
libnetdata/ebpf/ebpf.h
+1 -1
@@ -153,7 +153,7 @@ typedef struct ebpf_module {
153 const char *config_name;
154 int enabled;
155 void *(*start_routine)(void *);
156 - int update_time;
156 + int update_every;
157 int global_charts;
158 int apps_charts;
159 int cgroup_charts;