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;