@cryptotaxi247 / netdata-1 / commits / d322b1338

Modify PID monitoring (ebpf.plugin) (#13397)

thiagoftsm committed Aug 12, 2022 at 13:15 UTC d322b13381d3c8f2f4032f5ae645119710f22477
18 files changed +194 -79
collectors/ebpf.plugin/ebpf.c
+47 -45
@@ -35,132 +35,134 @@ pthread_cond_t collect_data_cond_var;
35 ebpf_module_t ebpf_modules[] = {
36 { .thread_name = "process", .config_name = "process", .enabled = 0, .start_routine = ebpf_process_thread,
37 .update_every = EBPF_DEFAULT_UPDATE_EVERY, .global_charts = 1, .apps_charts = NETDATA_EBPF_APPS_FLAG_NO,
38 - .cgroup_charts = CONFIG_BOOLEAN_NO, .mode = MODE_ENTRY, .optional = 0,
38 + .apps_level = NETDATA_APPS_LEVEL_REAL_PARENT, .cgroup_charts = CONFIG_BOOLEAN_NO, .mode = MODE_ENTRY, .optional = 0,
39 .apps_routine = ebpf_process_create_apps_charts, .maps = NULL,
40 .pid_map_size = ND_EBPF_DEFAULT_PID_SIZE, .names = NULL, .cfg = &process_config,
41 .config_file = NETDATA_PROCESS_CONFIG_FILE,
42 - .kernels = NETDATA_V3_10 | NETDATA_V4_14 | NETDATA_V4_16 | NETDATA_V4_18 | NETDATA_V5_4 | NETDATA_V5_10,
42 + .kernels = NETDATA_V3_10 | NETDATA_V4_14 | NETDATA_V4_16 | NETDATA_V4_18 | NETDATA_V5_4 | NETDATA_V5_10 |
43 + NETDATA_V5_14,
44 .load = EBPF_LOAD_LEGACY, .targets = NULL, .probe_links = NULL, .objects = NULL},
45 { .thread_name = "socket", .config_name = "socket", .enabled = 0, .start_routine = ebpf_socket_thread,
46 .update_every = EBPF_DEFAULT_UPDATE_EVERY, .global_charts = 1, .apps_charts = NETDATA_EBPF_APPS_FLAG_NO,
46 - .cgroup_charts = CONFIG_BOOLEAN_NO, .mode = MODE_ENTRY, .optional = 0,
47 + .apps_level = NETDATA_APPS_NOT_SET, .cgroup_charts = CONFIG_BOOLEAN_NO, .mode = MODE_ENTRY, .optional = 0,
48 .apps_routine = ebpf_socket_create_apps_charts, .maps = NULL,
49 .pid_map_size = ND_EBPF_DEFAULT_PID_SIZE, .names = NULL, .cfg = &socket_config,
50 .config_file = NETDATA_NETWORK_CONFIG_FILE,
50 - .kernels = NETDATA_V3_10 | NETDATA_V4_14 | NETDATA_V4_16 | NETDATA_V4_18 | NETDATA_V5_4,
51 + .kernels = NETDATA_V3_10 | NETDATA_V4_14 | NETDATA_V4_16 | NETDATA_V4_18 | NETDATA_V5_4 | NETDATA_V5_14,
52 .load = EBPF_LOAD_LEGACY, .targets = socket_targets, .probe_links = NULL, .objects = NULL},
53 { .thread_name = "cachestat", .config_name = "cachestat", .enabled = 0, .start_routine = ebpf_cachestat_thread,
54 .update_every = EBPF_DEFAULT_UPDATE_EVERY, .global_charts = 1, .apps_charts = NETDATA_EBPF_APPS_FLAG_NO,
54 - .cgroup_charts = CONFIG_BOOLEAN_NO, .mode = MODE_ENTRY, .optional = 0,
55 - .apps_routine = ebpf_cachestat_create_apps_charts, .maps = NULL,
55 + .apps_level = NETDATA_APPS_LEVEL_REAL_PARENT, .cgroup_charts = CONFIG_BOOLEAN_NO, .mode = MODE_ENTRY, .optional = 0,
56 + .apps_routine = ebpf_cachestat_create_apps_charts, .maps = cachestat_maps,
57 .pid_map_size = ND_EBPF_DEFAULT_PID_SIZE, .names = NULL, .cfg = &cachestat_config,
58 .config_file = NETDATA_CACHESTAT_CONFIG_FILE,
58 - .kernels = NETDATA_V3_10 | NETDATA_V4_14 | NETDATA_V4_16 | NETDATA_V4_18| NETDATA_V5_4 | NETDATA_V5_15 |
59 - NETDATA_V5_16,
59 + .kernels = NETDATA_V3_10 | NETDATA_V4_14 | NETDATA_V4_16 | NETDATA_V4_18|
60 + NETDATA_V5_4 | NETDATA_V5_14 | NETDATA_V5_15 | NETDATA_V5_16,
61 .load = EBPF_LOAD_LEGACY, .targets = cachestat_targets, .probe_links = NULL, .objects = NULL},
62 { .thread_name = "sync", .config_name = "sync", .enabled = 0, .start_routine = ebpf_sync_thread,
63 .update_every = EBPF_DEFAULT_UPDATE_EVERY, .global_charts = 1, .apps_charts = NETDATA_EBPF_APPS_FLAG_NO,
63 - .cgroup_charts = CONFIG_BOOLEAN_NO, .mode = MODE_ENTRY, .optional = 0, .apps_routine = NULL, .maps = NULL,
64 - .pid_map_size = ND_EBPF_DEFAULT_PID_SIZE, .names = NULL, .cfg = &sync_config,
64 + .apps_level = NETDATA_APPS_NOT_SET, .cgroup_charts = CONFIG_BOOLEAN_NO, .mode = MODE_ENTRY, .optional = 0,
65 + .apps_routine = NULL, .maps = NULL, .pid_map_size = ND_EBPF_DEFAULT_PID_SIZE, .names = NULL, .cfg = &sync_config,
66 .config_file = NETDATA_SYNC_CONFIG_FILE,
67 // All syscalls have the same kernels
67 - .kernels = NETDATA_V3_10 | NETDATA_V4_14 | NETDATA_V4_16 | NETDATA_V4_18 | NETDATA_V5_4,
68 + .kernels = NETDATA_V3_10 | NETDATA_V4_14 | NETDATA_V4_16 | NETDATA_V4_18 | NETDATA_V5_4 | NETDATA_V5_14,
69 .load = EBPF_LOAD_LEGACY, .targets = sync_targets, .probe_links = NULL, .objects = NULL},
70 { .thread_name = "dc", .config_name = "dc", .enabled = 0, .start_routine = ebpf_dcstat_thread,
71 .update_every = EBPF_DEFAULT_UPDATE_EVERY, .global_charts = 1, .apps_charts = NETDATA_EBPF_APPS_FLAG_NO,
71 - .cgroup_charts = CONFIG_BOOLEAN_NO, .mode = MODE_ENTRY, .optional = 0,
72 - .apps_routine = ebpf_dcstat_create_apps_charts, .maps = NULL,
72 + .apps_level = NETDATA_APPS_LEVEL_REAL_PARENT, .cgroup_charts = CONFIG_BOOLEAN_NO, .mode = MODE_ENTRY, .optional = 0,
73 + .apps_routine = ebpf_dcstat_create_apps_charts, .maps = dcstat_maps,
74 .pid_map_size = ND_EBPF_DEFAULT_PID_SIZE, .names = NULL, .cfg = &dcstat_config,
75 .config_file = NETDATA_DIRECTORY_DCSTAT_CONFIG_FILE,
75 - .kernels = NETDATA_V3_10 | NETDATA_V4_14 | NETDATA_V4_16 | NETDATA_V4_18 | NETDATA_V5_4,
76 + .kernels = NETDATA_V3_10 | NETDATA_V4_14 | NETDATA_V4_16 | NETDATA_V4_18 | NETDATA_V5_4 | NETDATA_V5_14,
77 .load = EBPF_LOAD_LEGACY, .targets = dc_targets, .probe_links = NULL, .objects = NULL},
78 { .thread_name = "swap", .config_name = "swap", .enabled = 0, .start_routine = ebpf_swap_thread,
79 .update_every = EBPF_DEFAULT_UPDATE_EVERY, .global_charts = 1, .apps_charts = NETDATA_EBPF_APPS_FLAG_NO,
79 - .cgroup_charts = CONFIG_BOOLEAN_NO, .mode = MODE_ENTRY, .optional = 0,
80 + .apps_level = NETDATA_APPS_NOT_SET, .cgroup_charts = CONFIG_BOOLEAN_NO, .mode = MODE_ENTRY, .optional = 0,
81 .apps_routine = ebpf_swap_create_apps_charts, .maps = NULL,
82 .pid_map_size = ND_EBPF_DEFAULT_PID_SIZE, .names = NULL, .cfg = &swap_config,
83 .config_file = NETDATA_DIRECTORY_SWAP_CONFIG_FILE,
83 - .kernels = NETDATA_V3_10 | NETDATA_V4_14 | NETDATA_V4_16 | NETDATA_V4_18 | NETDATA_V5_4,
84 + .kernels = NETDATA_V3_10 | NETDATA_V4_14 | NETDATA_V4_16 | NETDATA_V4_18 | NETDATA_V5_4 | NETDATA_V5_14,
85 .load = EBPF_LOAD_LEGACY, .targets = swap_targets, .probe_links = NULL, .objects = NULL},
86 { .thread_name = "vfs", .config_name = "vfs", .enabled = 0, .start_routine = ebpf_vfs_thread,
87 .update_every = EBPF_DEFAULT_UPDATE_EVERY, .global_charts = 1, .apps_charts = NETDATA_EBPF_APPS_FLAG_NO,
87 - .cgroup_charts = CONFIG_BOOLEAN_NO, .mode = MODE_ENTRY, .optional = 0,
88 + .apps_level = NETDATA_APPS_NOT_SET, .cgroup_charts = CONFIG_BOOLEAN_NO, .mode = MODE_ENTRY, .optional = 0,
89 .apps_routine = ebpf_vfs_create_apps_charts, .maps = NULL,
90 .pid_map_size = ND_EBPF_DEFAULT_PID_SIZE, .names = NULL, .cfg = &vfs_config,
91 .config_file = NETDATA_DIRECTORY_VFS_CONFIG_FILE,
91 - .kernels = NETDATA_V3_10 | NETDATA_V4_14 | NETDATA_V4_16 | NETDATA_V4_18 | NETDATA_V5_4,
92 + .kernels = NETDATA_V3_10 | NETDATA_V4_14 | NETDATA_V4_16 | NETDATA_V4_18 | NETDATA_V5_4 | NETDATA_V5_14,
93 .load = EBPF_LOAD_LEGACY, .targets = NULL, .probe_links = NULL, .objects = NULL},
94 { .thread_name = "filesystem", .config_name = "filesystem", .enabled = 0, .start_routine = ebpf_filesystem_thread,
95 .update_every = EBPF_DEFAULT_UPDATE_EVERY, .global_charts = 1, .apps_charts = NETDATA_EBPF_APPS_FLAG_NO,
95 - .cgroup_charts = CONFIG_BOOLEAN_NO, .mode = MODE_ENTRY, .optional = 0, .apps_routine = NULL, .maps = NULL,
96 - .pid_map_size = ND_EBPF_DEFAULT_PID_SIZE, .names = NULL, .cfg = &fs_config,
96 + .apps_level = NETDATA_APPS_NOT_SET, .cgroup_charts = CONFIG_BOOLEAN_NO, .mode = MODE_ENTRY, .optional = 0,
97 + .apps_routine = NULL, .maps = NULL, .pid_map_size = ND_EBPF_DEFAULT_PID_SIZE, .names = NULL, .cfg = &fs_config,
98 .config_file = NETDATA_FILESYSTEM_CONFIG_FILE,
99 //We are setting kernels as zero, because we load eBPF programs according the kernel running.
100 .kernels = 0, .load = EBPF_LOAD_LEGACY, .targets = NULL, .probe_links = NULL, .objects = NULL },
101 { .thread_name = "disk", .config_name = "disk", .enabled = 0, .start_routine = ebpf_disk_thread,
102 .update_every = EBPF_DEFAULT_UPDATE_EVERY, .global_charts = 1, .apps_charts = NETDATA_EBPF_APPS_FLAG_NO,
102 - .cgroup_charts = CONFIG_BOOLEAN_NO, .mode = MODE_ENTRY, .optional = 0, .apps_routine = NULL, .maps = NULL,
103 - .pid_map_size = ND_EBPF_DEFAULT_PID_SIZE, .names = NULL, .cfg = &disk_config,
103 + .apps_level = NETDATA_APPS_NOT_SET, .cgroup_charts = CONFIG_BOOLEAN_NO, .mode = MODE_ENTRY, .optional = 0,
104 + .apps_routine = NULL, .maps = NULL, .pid_map_size = ND_EBPF_DEFAULT_PID_SIZE, .names = NULL, .cfg = &disk_config,
105 .config_file = NETDATA_DISK_CONFIG_FILE,
105 - .kernels = NETDATA_V3_10 | NETDATA_V4_14 | NETDATA_V4_16 | NETDATA_V4_18 | NETDATA_V5_4,
106 + .kernels = NETDATA_V3_10 | NETDATA_V4_14 | NETDATA_V4_16 | NETDATA_V4_18 | NETDATA_V5_4 | NETDATA_V5_14,
107 .load = EBPF_LOAD_LEGACY, .targets = NULL, .probe_links = NULL, .objects = NULL},
108 { .thread_name = "mount", .config_name = "mount", .enabled = 0, .start_routine = ebpf_mount_thread,
109 .update_every = EBPF_DEFAULT_UPDATE_EVERY, .global_charts = 1, .apps_charts = NETDATA_EBPF_APPS_FLAG_NO,
109 - .cgroup_charts = CONFIG_BOOLEAN_NO, .mode = MODE_ENTRY, .optional = 0, .apps_routine = NULL, .maps = NULL,
110 - .pid_map_size = ND_EBPF_DEFAULT_PID_SIZE, .names = NULL, .cfg = &mount_config,
110 + .apps_level = NETDATA_APPS_NOT_SET, .cgroup_charts = CONFIG_BOOLEAN_NO, .mode = MODE_ENTRY, .optional = 0,
111 + .apps_routine = NULL, .maps = NULL, .pid_map_size = ND_EBPF_DEFAULT_PID_SIZE, .names = NULL, .cfg = &mount_config,
112 .config_file = NETDATA_MOUNT_CONFIG_FILE,
112 - .kernels = NETDATA_V3_10 | NETDATA_V4_14 | NETDATA_V4_16 | NETDATA_V4_18 | NETDATA_V5_4,
113 + .kernels = NETDATA_V3_10 | NETDATA_V4_14 | NETDATA_V4_16 | NETDATA_V4_18 | NETDATA_V5_4 | NETDATA_V5_14,
114 .load = EBPF_LOAD_LEGACY, .targets = mount_targets, .probe_links = NULL, .objects = NULL},
115 { .thread_name = "fd", .config_name = "fd", .enabled = 0, .start_routine = ebpf_fd_thread,
116 .update_every = EBPF_DEFAULT_UPDATE_EVERY, .global_charts = 1, .apps_charts = NETDATA_EBPF_APPS_FLAG_NO,
116 - .cgroup_charts = CONFIG_BOOLEAN_NO, .mode = MODE_ENTRY, .optional = 0,
117 + .apps_level = NETDATA_APPS_NOT_SET, .cgroup_charts = CONFIG_BOOLEAN_NO, .mode = MODE_ENTRY, .optional = 0,
118 .apps_routine = ebpf_fd_create_apps_charts, .maps = NULL,
119 .pid_map_size = ND_EBPF_DEFAULT_PID_SIZE, .names = NULL, .cfg = &fd_config,
120 .config_file = NETDATA_FD_CONFIG_FILE,
120 - .kernels = NETDATA_V3_10 | NETDATA_V4_14 | NETDATA_V4_16 | NETDATA_V4_18 | NETDATA_V5_4 | NETDATA_V5_11,
121 + .kernels = NETDATA_V3_10 | NETDATA_V4_14 | NETDATA_V4_16 | NETDATA_V4_18 | NETDATA_V5_4 | NETDATA_V5_11 |
122 + NETDATA_V5_14,
123 .load = EBPF_LOAD_LEGACY, .targets = NULL, .probe_links = NULL, .objects = NULL},
124 { .thread_name = "hardirq", .config_name = "hardirq", .enabled = 0, .start_routine = ebpf_hardirq_thread,
125 .update_every = EBPF_DEFAULT_UPDATE_EVERY, .global_charts = 1, .apps_charts = NETDATA_EBPF_APPS_FLAG_NO,
124 - .cgroup_charts = CONFIG_BOOLEAN_NO, .mode = MODE_ENTRY, .optional = 0, .apps_routine = NULL, .maps = NULL,
125 - .pid_map_size = ND_EBPF_DEFAULT_PID_SIZE, .names = NULL, .cfg = &hardirq_config,
126 + .apps_level = NETDATA_APPS_NOT_SET, .cgroup_charts = CONFIG_BOOLEAN_NO, .mode = MODE_ENTRY, .optional = 0,
127 + .apps_routine = NULL, .maps = NULL, .pid_map_size = ND_EBPF_DEFAULT_PID_SIZE, .names = NULL, .cfg = &hardirq_config,
128 .config_file = NETDATA_HARDIRQ_CONFIG_FILE,
127 - .kernels = NETDATA_V3_10 | NETDATA_V4_14 | NETDATA_V4_16 | NETDATA_V4_18 | NETDATA_V5_4,
129 + .kernels = NETDATA_V3_10 | NETDATA_V4_14 | NETDATA_V4_16 | NETDATA_V4_18 | NETDATA_V5_4 | NETDATA_V5_14,
130 .load = EBPF_LOAD_LEGACY, .targets = NULL, .probe_links = NULL, .objects = NULL},
131 { .thread_name = "softirq", .config_name = "softirq", .enabled = 0, .start_routine = ebpf_softirq_thread,
132 .update_every = EBPF_DEFAULT_UPDATE_EVERY, .global_charts = 1, .apps_charts = NETDATA_EBPF_APPS_FLAG_NO,
131 - .cgroup_charts = CONFIG_BOOLEAN_NO, .mode = MODE_ENTRY, .optional = 0, .apps_routine = NULL, .maps = NULL,
132 - .pid_map_size = ND_EBPF_DEFAULT_PID_SIZE, .names = NULL, .cfg = &softirq_config,
133 + .apps_level = NETDATA_APPS_NOT_SET, .cgroup_charts = CONFIG_BOOLEAN_NO, .mode = MODE_ENTRY, .optional = 0,
134 + .apps_routine = NULL, .maps = NULL, .pid_map_size = ND_EBPF_DEFAULT_PID_SIZE, .names = NULL, .cfg = &softirq_config,
135 .config_file = NETDATA_SOFTIRQ_CONFIG_FILE,
134 - .kernels = NETDATA_V3_10 | NETDATA_V4_14 | NETDATA_V4_16 | NETDATA_V4_18 | NETDATA_V5_4,
136 + .kernels = NETDATA_V3_10 | NETDATA_V4_14 | NETDATA_V4_16 | NETDATA_V4_18 | NETDATA_V5_4 | NETDATA_V5_14,
137 .load = EBPF_LOAD_LEGACY, .targets = NULL, .probe_links = NULL, .objects = NULL},
138 { .thread_name = "oomkill", .config_name = "oomkill", .enabled = 0, .start_routine = ebpf_oomkill_thread,
139 .update_every = EBPF_DEFAULT_UPDATE_EVERY, .global_charts = 1, .apps_charts = NETDATA_EBPF_APPS_FLAG_NO,
138 - .cgroup_charts = CONFIG_BOOLEAN_NO, .mode = MODE_ENTRY, .optional = 0,
140 + .apps_level = NETDATA_APPS_NOT_SET, .cgroup_charts = CONFIG_BOOLEAN_NO, .mode = MODE_ENTRY, .optional = 0,
141 .apps_routine = ebpf_oomkill_create_apps_charts, .maps = NULL,
142 .pid_map_size = ND_EBPF_DEFAULT_PID_SIZE, .names = NULL, .cfg = &oomkill_config,
143 .config_file = NETDATA_OOMKILL_CONFIG_FILE,
142 - .kernels = NETDATA_V3_10 | NETDATA_V4_14 | NETDATA_V4_16 | NETDATA_V4_18 | NETDATA_V5_4,
144 + .kernels = NETDATA_V3_10 | NETDATA_V4_14 | NETDATA_V4_16 | NETDATA_V4_18 | NETDATA_V5_4 | NETDATA_V5_14,
145 .load = EBPF_LOAD_LEGACY, .targets = NULL, .probe_links = NULL, .objects = NULL},
146 { .thread_name = "shm", .config_name = "shm", .enabled = 0, .start_routine = ebpf_shm_thread,
147 .update_every = EBPF_DEFAULT_UPDATE_EVERY, .global_charts = 1, .apps_charts = NETDATA_EBPF_APPS_FLAG_NO,
146 - .cgroup_charts = CONFIG_BOOLEAN_NO, .mode = MODE_ENTRY, .optional = 0,
148 + .apps_level = NETDATA_APPS_NOT_SET, .cgroup_charts = CONFIG_BOOLEAN_NO, .mode = MODE_ENTRY, .optional = 0,
149 .apps_routine = ebpf_shm_create_apps_charts, .maps = NULL,
150 .pid_map_size = ND_EBPF_DEFAULT_PID_SIZE, .names = NULL, .cfg = &shm_config,
151 .config_file = NETDATA_DIRECTORY_SHM_CONFIG_FILE,
150 - .kernels = NETDATA_V3_10 | NETDATA_V4_14 | NETDATA_V4_16 | NETDATA_V4_18 | NETDATA_V5_4,
152 + .kernels = NETDATA_V3_10 | NETDATA_V4_14 | NETDATA_V4_16 | NETDATA_V4_18 | NETDATA_V5_4 | NETDATA_V5_14,
153 .load = EBPF_LOAD_LEGACY, .targets = shm_targets, .probe_links = NULL, .objects = NULL},
154 { .thread_name = "mdflush", .config_name = "mdflush", .enabled = 0, .start_routine = ebpf_mdflush_thread,
155 .update_every = EBPF_DEFAULT_UPDATE_EVERY, .global_charts = 1, .apps_charts = NETDATA_EBPF_APPS_FLAG_NO,
154 - .cgroup_charts = CONFIG_BOOLEAN_NO, .mode = MODE_ENTRY, .optional = 0, .apps_routine = NULL, .maps = NULL,
155 - .pid_map_size = ND_EBPF_DEFAULT_PID_SIZE, .names = NULL, .cfg = &mdflush_config,
156 + .apps_level = NETDATA_APPS_NOT_SET, .cgroup_charts = CONFIG_BOOLEAN_NO, .mode = MODE_ENTRY, .optional = 0,
157 + .apps_routine = NULL, .maps = NULL, .pid_map_size = ND_EBPF_DEFAULT_PID_SIZE, .names = NULL, .cfg = &mdflush_config,
158 .config_file = NETDATA_DIRECTORY_MDFLUSH_CONFIG_FILE,
157 - .kernels = NETDATA_V3_10 | NETDATA_V4_14 | NETDATA_V4_16 | NETDATA_V4_18 | NETDATA_V5_4,
159 + .kernels = NETDATA_V3_10 | NETDATA_V4_14 | NETDATA_V4_16 | NETDATA_V4_18 | NETDATA_V5_4 | NETDATA_V5_14,
160 .load = EBPF_LOAD_LEGACY, .targets = NULL, .probe_links = NULL, .objects = NULL},
161 { .thread_name = NULL, .enabled = 0, .start_routine = NULL, .update_every = EBPF_DEFAULT_UPDATE_EVERY,
160 - .global_charts = 0, .apps_charts = NETDATA_EBPF_APPS_FLAG_NO, .cgroup_charts = CONFIG_BOOLEAN_NO,
161 - .mode = MODE_ENTRY, .optional = 0, .apps_routine = NULL, .maps = NULL, .pid_map_size = 0, .names = NULL,
162 - .cfg = NULL, .config_name = NULL, .kernels = 0, .load = EBPF_LOAD_LEGACY, .targets = NULL, .probe_links = NULL,
163 - .objects = NULL},
162 + .global_charts = 0, .apps_charts = NETDATA_EBPF_APPS_FLAG_NO, .apps_level = NETDATA_APPS_NOT_SET,
163 + .cgroup_charts = CONFIG_BOOLEAN_NO, .mode = MODE_ENTRY, .optional = 0, .apps_routine = NULL, .maps = NULL,
164 + .pid_map_size = 0, .names = NULL, .cfg = NULL, .config_name = NULL, .kernels = 0, .load = EBPF_LOAD_LEGACY,
165 + .targets = NULL, .probe_links = NULL, .objects = NULL},
166 };
167
168 struct netdata_static_thread ebpf_threads[] = {
collectors/ebpf.plugin/ebpf.d/cachestat.conf
+6
@@ -19,6 +19,11 @@
19 # `trampoline`: This is the default mode used by the eBPF collector, due the small overhead added to host.
20 # `probe` : This is the same as legacy code.
21 #
22 +# The `collect pid` option defines the PID stored inside hash tables and accepts the following options:
23 +# `real parent`: Only stores real parent inside PID
24 +# `parent` : Only stores parent PID.
25 +# `all` : Stores all PIDs used by software. This is the most expensive option.
26 +#
27 # Uncomment lines to define specific options for thread.
28 [global]
29 # ebpf load mode = entry
@@ -28,3 +33,4 @@
33 # pid table size = 32768
34 ebpf type format = auto
35 ebpf co-re tracing = trampoline
36 + collect pid = real parent
collectors/ebpf.plugin/ebpf.d/dcstat.conf
+6
@@ -17,6 +17,11 @@
17 # `trampoline`: This is the default mode used by the eBPF collector, due the small overhead added to host.
18 # `probe` : This is the same as legacy code.
19 #
20 +# The `collect pid` option defines the PID stored inside hash tables and accepts the following options:
21 +# `real parent`: Only stores real parent inside PID
22 +# `parent` : Only stores parent PID.
23 +# `all` : Stores all PIDs used by software. This is the most expensive option.
24 +#
25 # Uncomment lines to define specific options for thread.
26 [global]
27 # ebpf load mode = entry
@@ -26,3 +31,4 @@
31 # pid table size = 32768
32 ebpf type format = auto
33 ebpf co-re tracing = trampoline
34 + collect pid = real parent
collectors/ebpf.plugin/ebpf.d/process.conf
+6
@@ -9,6 +9,11 @@
9 # the setting `apps` and `cgroups` to 'no'.
10 #
11 # The `pid table size` defines the maximum number of PIDs stored inside the hash table.
12 +#
13 +# The `collect pid` option defines the PID stored inside hash tables and accepts the following options:
14 +# `real parent`: Only stores real parent inside PID
15 +# `parent` : Only stores parent PID.
16 +# `all` : Stores all PIDs used by software. This is the most expensive option.
17 #
18 # Uncomment lines to define specific options for thread.
19 #[global]
@@ -17,3 +22,4 @@
22 # cgroups = no
23 # update every = 10
24 # pid table size = 32768
25 +# collect pid = real parent
collectors/ebpf.plugin/ebpf_cachestat.c
+3 -3
@@ -19,7 +19,7 @@ struct netdata_static_thread cachestat_threads = {"CACHESTAT KERNEL",
19 NULL, NULL, 1, NULL,
20 NULL, NULL};
21
22 -static ebpf_local_maps_t cachestat_maps[] = {{.name = "cstat_global", .internal_input = NETDATA_CACHESTAT_END,
22 +ebpf_local_maps_t cachestat_maps[] = {{.name = "cstat_global", .internal_input = NETDATA_CACHESTAT_END,
23 .user_input = 0, .type = NETDATA_EBPF_MAP_STATIC,
24 .map_fd = ND_EBPF_MAP_FD_NOT_INITIALIZED},
25 {.name = "cstat_pid", .internal_input = ND_EBPF_DEFAULT_PID_SIZE,
@@ -266,13 +266,13 @@ static inline int ebpf_cachestat_load_and_attach(struct cachestat_bpf *obj, ebpf
266 ebpf_cachestat_disable_specific_probe(obj);
267 }
268
269 + ebpf_cachestat_adjust_map_size(obj, em);
270 +
271 int ret = cachestat_bpf__load(obj);
272 if (ret) {
273 return ret;
274 }
275
274 - ebpf_cachestat_adjust_map_size(obj, em);
275 -
276 ret = (test == EBPF_LOAD_TRAMPOLINE) ? cachestat_bpf__attach(obj) : ebpf_cachestat_attach_probe(obj);
277 if (!ret) {
278 ebpf_cachestat_set_hash_tables(obj);
collectors/ebpf.plugin/ebpf_cachestat.h
+1
@@ -85,5 +85,6 @@ extern void *ebpf_cachestat_thread(void *ptr);
85
86 extern struct config cachestat_config;
87 extern netdata_ebpf_targets_t cachestat_targets[];
88 +extern ebpf_local_maps_t cachestat_maps[];
89
90 #endif // NETDATA_EBPF_CACHESTAT_H
collectors/ebpf.plugin/ebpf_dcstat.c
+3 -3
@@ -24,7 +24,7 @@ struct netdata_static_thread dcstat_threads = {"DCSTAT KERNEL",
24 NULL, NULL};
25 static enum ebpf_threads_status ebpf_dcstat_exited = NETDATA_THREAD_EBPF_RUNNING;
26
27 -static ebpf_local_maps_t dcstat_maps[] = {{.name = "dcstat_global", .internal_input = NETDATA_DIRECTORY_CACHE_END,
27 +ebpf_local_maps_t dcstat_maps[] = {{.name = "dcstat_global", .internal_input = NETDATA_DIRECTORY_CACHE_END,
28 .user_input = 0, .type = NETDATA_EBPF_MAP_STATIC,
29 .map_fd = ND_EBPF_MAP_FD_NOT_INITIALIZED},
30 {.name = "dcstat_pid", .internal_input = ND_EBPF_DEFAULT_PID_SIZE,
@@ -200,13 +200,13 @@ static inline int ebpf_dc_load_and_attach(struct dc_bpf *obj, ebpf_module_t *em)
200 ebpf_dc_disable_trampoline(obj);
201 }
202
203 + ebpf_dc_adjust_map_size(obj, em);
204 +
205 int ret = dc_bpf__load(obj);
206 if (ret) {
207 return ret;
208 }
209
208 - ebpf_dc_adjust_map_size(obj, em);
209 -
210 ret = (test == EBPF_LOAD_TRAMPOLINE) ? dc_bpf__attach(obj) : ebpf_dc_attach_probes(obj);
211 if (!ret) {
212 ebpf_dc_set_hash_tables(obj);
collectors/ebpf.plugin/ebpf_dcstat.h
+1
@@ -79,5 +79,6 @@ extern void *ebpf_dcstat_thread(void *ptr);
79 extern void ebpf_dcstat_create_apps_charts(struct ebpf_module *em, void *ptr);
80 extern struct config dcstat_config;
81 extern netdata_ebpf_targets_t dc_targets[];
82 +extern ebpf_local_maps_t dcstat_maps[];
83
84 #endif // NETDATA_EBPF_DCSTAT_H
libnetdata/ebpf/ebpf.c
+88 -16
@@ -279,7 +279,8 @@ static char *ebpf_select_kernel_name(uint32_t selector)
279 {
280 static char *kernel_names[] = { NETDATA_IDX_STR_V3_10, NETDATA_IDX_STR_V4_14, NETDATA_IDX_STR_V4_16,
281 NETDATA_IDX_STR_V4_18, NETDATA_IDX_STR_V5_4, NETDATA_IDX_STR_V5_10,
282 - NETDATA_IDX_STR_V5_11, NETDATA_IDX_STR_V5_15, NETDATA_IDX_STR_V5_16
282 + NETDATA_IDX_STR_V5_11, NETDATA_IDX_STR_V5_14, NETDATA_IDX_STR_V5_15,
283 + NETDATA_IDX_STR_V5_16
284 };
285
286 return kernel_names[selector];
@@ -298,7 +299,9 @@ static char *ebpf_select_kernel_name(uint32_t selector)
299 static int ebpf_select_max_index(int is_rhf, uint32_t kver)
300 {
301 if (is_rhf > 0) { // Is Red Hat family
301 - if (kver >= NETDATA_EBPF_KERNEL_4_11)
302 + if (kver >= NETDATA_EBPF_KERNEL_5_14)
303 + return NETDATA_IDX_V5_14;
304 + else if (kver >= NETDATA_EBPF_KERNEL_4_11)
305 return NETDATA_IDX_V4_18;
306 } else { // Kernels from kernel.org
307 if (kver >= NETDATA_EBPF_KERNEL_5_16)
@@ -334,6 +337,9 @@ static uint32_t ebpf_select_index(uint32_t kernels, int is_rhf, uint32_t kver)
337 uint32_t start = ebpf_select_max_index(is_rhf, kver);
338 uint32_t idx;
339
340 + if (is_rhf == -1)
341 + kernels &= ~NETDATA_V5_14;
342 +
343 for (idx = start; idx; idx--) {
344 if (kernels & 1 << idx)
345 break;
@@ -465,24 +471,40 @@ void ebpf_update_pid_table(ebpf_local_maps_t *pid, ebpf_module_t *em)
471 */
472 void ebpf_update_map_size(struct bpf_map *map, ebpf_local_maps_t *lmap, ebpf_module_t *em, const char *map_name)
473 {
474 + uint32_t define_size = 0;
475 uint32_t apps_type = NETDATA_EBPF_MAP_PID | NETDATA_EBPF_MAP_RESIZABLE;
476 if (lmap->user_input && lmap->user_input != lmap->internal_input) {
477 + define_size = lmap->internal_input;
478 #ifdef NETDATA_INTERNAL_CHECKS
479 info("Changing map %s from size %u to %u ", map_name, lmap->internal_input, lmap->user_input);
472 -#endif
473 -#ifdef LIBBPF_MAJOR_VERSION
474 - bpf_map__set_max_entries(map, lmap->user_input);
475 -#else
476 - bpf_map__resize(map, lmap->user_input);
480 #endif
481 } else if (((lmap->type & apps_type) == apps_type) && (!em->apps_charts) && (!em->cgroup_charts)) {
482 lmap->user_input = ND_EBPF_DEFAULT_MIN_PID;
483 + } else if (((em->apps_charts) || (em->cgroup_charts)) && (em->apps_level != NETDATA_APPS_NOT_SET)) {
484 + switch (em->apps_level) {
485 + case NETDATA_APPS_LEVEL_ALL: {
486 + define_size = lmap->user_input;
487 + break;
488 + }
489 + case NETDATA_APPS_LEVEL_PARENT: {
490 + define_size = ND_EBPF_DEFAULT_PID_SIZE / 2;
491 + break;
492 + }
493 + case NETDATA_APPS_LEVEL_REAL_PARENT:
494 + default: {
495 + define_size = ND_EBPF_DEFAULT_PID_SIZE / 3;
496 + }
497 + }
498 + }
499 +
500 + if (!define_size)
501 + return;
502 +
503 #ifdef LIBBPF_MAJOR_VERSION
481 - bpf_map__set_max_entries(map, lmap->user_input);
504 + bpf_map__set_max_entries(map, define_size);
505 #else
483 - bpf_map__resize(map, lmap->user_input);
506 + bpf_map__resize(map, define_size);
507 #endif
485 - }
508 }
509
510 /**
@@ -607,11 +629,18 @@ static void ebpf_update_maps(ebpf_module_t *em, struct bpf_object *obj)
629 */
630 void ebpf_update_controller(int fd, ebpf_module_t *em)
631 {
610 - uint32_t key = NETDATA_CONTROLLER_APPS_ENABLED;
611 - uint32_t value = (em->apps_charts & NETDATA_EBPF_APPS_FLAG_YES) | em->cgroup_charts;
612 - int ret = bpf_map_update_elem(fd, &key, &value, 0);
613 - if (ret)
614 - error("Add key(%u) for controller table failed.", key);
632 + uint32_t values[NETDATA_CONTROLLER_END] = {
633 + (em->apps_charts & NETDATA_EBPF_APPS_FLAG_YES) | em->cgroup_charts,
634 + em->apps_level
635 + };
636 + uint32_t key;
637 + uint32_t end = (em->apps_level != NETDATA_APPS_NOT_SET) ? NETDATA_CONTROLLER_END : NETDATA_CONTROLLER_APPS_LEVEL;
638 +
639 + for (key = NETDATA_CONTROLLER_APPS_ENABLED; key < end; key++) {
640 + int ret = bpf_map_update_elem(fd, &key, &values[key], 0);
641 + if (ret)
642 + error("Add key(%u) for controller table failed.", key);
643 + }
644 }
645
646 /**
@@ -805,6 +834,44 @@ static char *ebpf_convert_load_mode_to_string(netdata_ebpf_load_mode_t mode)
834 return EBPF_CFG_DEFAULT_PROGRAM;
835 }
836
837 +/**
838 + * Convert collect pid to string
839 + *
840 + * @param level value that will select the string
841 + *
842 + * @return It returns the string associated to level.
843 + */
844 +static char *ebpf_convert_collect_pid_to_string(netdata_apps_level_t level)
845 +{
846 + if (level == NETDATA_APPS_LEVEL_REAL_PARENT)
847 + return EBPF_CFG_PID_REAL_PARENT;
848 + else if (level == NETDATA_APPS_LEVEL_PARENT)
849 + return EBPF_CFG_PID_PARENT;
850 + else if (level == NETDATA_APPS_LEVEL_ALL)
851 + return EBPF_CFG_PID_ALL;
852 +
853 + return EBPF_CFG_PID_ALL;
854 +}
855 +
856 +/**
857 + * Convert string to apps level
858 + *
859 + * @param str the argument read from config files
860 + *
861 + * @return it returns the level associated to the string or default when it is a wrong value
862 + */
863 +netdata_apps_level_t ebpf_convert_string_to_apps_level(char *str)
864 +{
865 + if (!strcasecmp(str, EBPF_CFG_PID_REAL_PARENT))
866 + return NETDATA_APPS_LEVEL_REAL_PARENT;
867 + else if (!strcasecmp(str, EBPF_CFG_PID_PARENT))
868 + return NETDATA_APPS_LEVEL_PARENT;
869 + else if (!strcasecmp(str, EBPF_CFG_PID_ALL))
870 + return NETDATA_APPS_LEVEL_ALL;
871 +
872 + return NETDATA_APPS_NOT_SET;
873 +}
874 +
875 /**
876 * CO-RE type
877 *
@@ -984,6 +1051,10 @@ void ebpf_update_module_using_config(ebpf_module_t *modules)
1051 value = appconfig_get(modules->cfg, EBPF_GLOBAL_SECTION, EBPF_CFG_CORE_ATTACH, EBPF_CFG_ATTACH_TRAMPOLINE);
1052 netdata_ebpf_program_loaded_t fill_lm = ebpf_convert_core_type(value, modules->mode);
1053 ebpf_update_target_with_conf(modules, fill_lm);
1054 +
1055 + value = ebpf_convert_collect_pid_to_string(modules->apps_level);
1056 + value = appconfig_get(modules->cfg, EBPF_GLOBAL_SECTION, EBPF_CFG_COLLECT_PID, value);
1057 + modules->apps_level = ebpf_convert_string_to_apps_level(value);
1058 }
1059
1060 /**
@@ -1282,4 +1353,5 @@ void ebpf_select_host_prefix(char *output, size_t length, char *syscall, int kve
1353 char *prefix = (arch == 32) ? "__ia32" : "__x64";
1354 snprintfz(output, length, "%s_sys_%s", prefix, syscall);
1355 }
1285 -}
\ No newline at end of file
1356 +}
1357 +
libnetdata/ebpf/ebpf.h
+23 -2
@@ -26,6 +26,11 @@
26 #define EBPF_CFG_CORE_PROGRAM "CO-RE"
27 #define EBPF_CFG_LEGACY_PROGRAM "legacy"
28
29 +#define EBPF_CFG_COLLECT_PID "collect pid"
30 +#define EBPF_CFG_PID_REAL_PARENT "real parent"
31 +#define EBPF_CFG_PID_PARENT "parent"
32 +#define EBPF_CFG_PID_ALL "all"
33 +
34 #define EBPF_CFG_CORE_ATTACH "ebpf co-re tracing"
35 #define EBPF_CFG_ATTACH_TRAMPOLINE "trampoline"
36 #define EBPF_CFG_ATTACH_TRACEPOINT "tracepoint"
@@ -76,6 +81,7 @@ enum netdata_ebpf_kernel_versions {
81 NETDATA_EBPF_KERNEL_5_0 = 327680, // 327680 = 5 * 65536 + 0 * 256
82 NETDATA_EBPF_KERNEL_5_10 = 330240, // 330240 = 5 * 65536 + 10 * 256
83 NETDATA_EBPF_KERNEL_5_11 = 330496, // 330240 = 5 * 65536 + 11 * 256
84 + NETDATA_EBPF_KERNEL_5_14 = 331264, // 331264 = 5 * 65536 + 14 * 256
85 NETDATA_EBPF_KERNEL_5_15 = 331520, // 331520 = 5 * 65536 + 15 * 256
86 NETDATA_EBPF_KERNEL_5_16 = 331776 // 331776 = 5 * 65536 + 16 * 256
87 };
@@ -88,8 +94,9 @@ enum netdata_kernel_flag {
94 NETDATA_V5_4 = 1 << 4,
95 NETDATA_V5_10 = 1 << 5,
96 NETDATA_V5_11 = 1 << 6,
91 - NETDATA_V5_15 = 1 << 7,
92 - NETDATA_V5_16 = 1 << 8
97 + NETDATA_V5_14 = 1 << 7,
98 + NETDATA_V5_15 = 1 << 8,
99 + NETDATA_V5_16 = 1 << 9
100 };
101
102 enum netdata_kernel_idx {
@@ -100,6 +107,7 @@ enum netdata_kernel_idx {
107 NETDATA_IDX_V5_4 ,
108 NETDATA_IDX_V5_10,
109 NETDATA_IDX_V5_11,
110 + NETDATA_IDX_V5_14,
111 NETDATA_IDX_V5_15,
112 NETDATA_IDX_V5_16
113 };
@@ -111,6 +119,7 @@ enum netdata_kernel_idx {
119 #define NETDATA_IDX_STR_V5_4 "5.4"
120 #define NETDATA_IDX_STR_V5_10 "5.10"
121 #define NETDATA_IDX_STR_V5_11 "5.11"
122 +#define NETDATA_IDX_STR_V5_14 "5.14"
123 #define NETDATA_IDX_STR_V5_15 "5.15"
124 #define NETDATA_IDX_STR_V5_16 "5.16"
125
@@ -161,10 +170,21 @@ enum netdata_ebpf_map_type {
170
171 enum netdata_controller {
172 NETDATA_CONTROLLER_APPS_ENABLED,
173 + NETDATA_CONTROLLER_APPS_LEVEL,
174
175 NETDATA_CONTROLLER_END
176 };
177
178 +// Control how Netdata will monitor PIDs (apps and cgroups)
179 +typedef enum netdata_apps_level {
180 + NETDATA_APPS_LEVEL_REAL_PARENT,
181 + NETDATA_APPS_LEVEL_PARENT,
182 + NETDATA_APPS_LEVEL_ALL,
183 +
184 + // Present only in user ring
185 + NETDATA_APPS_NOT_SET
186 +} netdata_apps_level_t;
187 +
188 typedef struct ebpf_local_maps {
189 char *name;
190 uint32_t internal_input;
@@ -227,6 +247,7 @@ typedef struct ebpf_module {
247 int update_every;
248 int global_charts;
249 netdata_apps_integration_flags_t apps_charts;
250 + netdata_apps_level_t apps_level;
251 int cgroup_charts;
252 netdata_run_mode_t mode;
253 uint32_t thread_id;
packaging/current_libbpf.checksums
+1 -1
@@ -1 +1 @@
1 -8909385c347848b5994d9daa33be12e35ffc529ba0e01b5c944e0216bf78f79b v0.8.0_netdata.tar.gz
1 +1b4708f22af0e38ec29f01c9948ec2d436e8e06781ad6ad4a231ef62352a4736 v0.8.1_netdata.tar.gz
packaging/current_libbpf.version
+1 -1
@@ -1 +1 @@
1 -0.8.0_netdata
1 +0.8.1_netdata
packaging/ebpf-co-re.checksums
+1 -1
@@ -1 +1 @@
1 -9181063ec4a40f1b2ce5d7ac702eb9de233d127c6e21aac8a3d3f7c185502726 netdata-ebpf-co-re-glibc-v0.9.3.3.tar.xz
1 +26e6244242bb744adf2ff8640e267d54931d28fdd8150a967f9acedbd569a47b netdata-ebpf-co-re-glibc-v0.9.4.1.tar.xz
packaging/ebpf-co-re.version
+1 -1
@@ -1 +1 @@
1 -v0.9.3.3
1 +v0.9.4.1
packaging/ebpf.checksums
+3 -3
@@ -1,3 +1,3 @@
1 -cee483b29e1fd3125d635d03f9266d267eab1ba13e02c99afcf6a84bdcb729f4 ./netdata-kernel-collector-glibc-v0.9.3.tar.xz
2 -33aeae2cf7e9c0967c62f262bf6c6c44db49dc5dbb6d3a16e8bfde4433779069 ./netdata-kernel-collector-musl-v0.9.3.tar.xz
3 -9eba23184be7c9b29d22271e439e3fac517d32d500bd796c4e21f653b6f4d337 ./netdata-kernel-collector-static-v0.9.3.tar.xz
1 +49a4ab9eae3c519e6869ea414e63ea765d40ea41fb4c2cc8802a96a94a47ff74 ./netdata-kernel-collector-glibc-v0.9.4.tar.xz
2 +2284eb53ff61de823800585f993f13707d24ccd4d335b8bb39bbbd43b47cde75 ./netdata-kernel-collector-musl-v0.9.4.tar.xz
3 +46663fab8e5a279e8f2d4b76400f0e27552929ef6dee92a3ed81608250a1198b ./netdata-kernel-collector-static-v0.9.4.tar.xz
packaging/ebpf.version
+1 -1
@@ -1 +1 @@
1 -v0.9.3
1 +v0.9.4
packaging/libbpf.checksums
+1 -1
@@ -1 +1 @@
1 -8909385c347848b5994d9daa33be12e35ffc529ba0e01b5c944e0216bf78f79b v0.8.0_netdata.tar.gz
1 +1b4708f22af0e38ec29f01c9948ec2d436e8e06781ad6ad4a231ef62352a4736 v0.8.1_netdata.tar.gz
packaging/libbpf.version
+1 -1
@@ -1 +1 @@
1 -0.8.0_netdata
1 +0.8.1_netdata