summaryrefslogtreecommitdiffstats
path: root/collectors/ebpf.plugin/ebpf_cachestat.c
diff options
context:
space:
mode:
authorthiagoftsm <thiagoftsm@gmail.com>2022-08-23 12:44:47 +0000
committerGitHub <noreply@github.com>2022-08-23 12:44:47 +0000
commit575986a692003638f09c975da847062637b915f4 (patch)
treee66dc73a7992953edcfdd1c9c442ec6ca5b14b1a /collectors/ebpf.plugin/ebpf_cachestat.c
parent711e6fc5e75eb12455054116eea159b8ac83d7a9 (diff)
Improve PID monitoring (step 2) (#13530)
Diffstat (limited to 'collectors/ebpf.plugin/ebpf_cachestat.c')
-rw-r--r--collectors/ebpf.plugin/ebpf_cachestat.c31
1 files changed, 30 insertions, 1 deletions
diff --git a/collectors/ebpf.plugin/ebpf_cachestat.c b/collectors/ebpf.plugin/ebpf_cachestat.c
index 57c424e53c..76b0385a50 100644
--- a/collectors/ebpf.plugin/ebpf_cachestat.c
+++ b/collectors/ebpf.plugin/ebpf_cachestat.c
@@ -67,6 +67,7 @@ static void ebpf_cachestat_disable_probe(struct cachestat_bpf *obj)
bpf_program__set_autoload(obj->progs.netdata_set_page_dirty_kprobe, false);
bpf_program__set_autoload(obj->progs.netdata_account_page_dirtied_kprobe, false);
bpf_program__set_autoload(obj->progs.netdata_mark_buffer_dirty_kprobe, false);
+ bpf_program__set_autoload(obj->progs.netdata_release_task_kprobe, false);
}
/*
@@ -105,6 +106,7 @@ static void ebpf_cachestat_disable_trampoline(struct cachestat_bpf *obj)
bpf_program__set_autoload(obj->progs.netdata_set_page_dirty_fentry, false);
bpf_program__set_autoload(obj->progs.netdata_account_page_dirtied_fentry, false);
bpf_program__set_autoload(obj->progs.netdata_mark_buffer_dirty_fentry, false);
+ bpf_program__set_autoload(obj->progs.netdata_release_task_fentry, false);
}
/*
@@ -156,6 +158,9 @@ static inline void netdata_set_trampoline_target(struct cachestat_bpf *obj)
bpf_program__set_attach_target(obj->progs.netdata_mark_buffer_dirty_fentry, 0,
cachestat_targets[NETDATA_KEY_CALLS_MARK_BUFFER_DIRTY].name);
+
+ bpf_program__set_attach_target(obj->progs.netdata_release_task_fentry, 0,
+ EBPF_COMMON_FNCT_CLEAN_UP);
}
/**
@@ -210,6 +215,13 @@ static int ebpf_cachestat_attach_probe(struct cachestat_bpf *obj)
if (ret)
return -1;
+ obj->links.netdata_release_task_kprobe = bpf_program__attach_kprobe(obj->progs.netdata_release_task_kprobe,
+ false,
+ EBPF_COMMON_FNCT_CLEAN_UP);
+ ret = libbpf_get_error(obj->links.netdata_release_task_kprobe);
+ if (ret)
+ return -1;
+
return 0;
}
@@ -242,6 +254,19 @@ static void ebpf_cachestat_set_hash_tables(struct cachestat_bpf *obj)
}
/**
+ * Disable Release Task
+ *
+ * Disable release task when apps is not enabled.
+ *
+ * @param obj is the main structure for bpf objects.
+ */
+static void ebpf_cachestat_disable_release_task(struct cachestat_bpf *obj)
+{
+ bpf_program__set_autoload(obj->progs.netdata_release_task_kprobe, false);
+ bpf_program__set_autoload(obj->progs.netdata_release_task_fentry, false);
+}
+
+/**
* Load and attach
*
* Load and attach the eBPF code in kernel.
@@ -268,6 +293,9 @@ static inline int ebpf_cachestat_load_and_attach(struct cachestat_bpf *obj, ebpf
ebpf_cachestat_adjust_map_size(obj, em);
+ if (!em->apps_charts && !em->cgroup_charts)
+ ebpf_cachestat_disable_release_task(obj);
+
int ret = cachestat_bpf__load(obj);
if (ret) {
return ret;
@@ -1227,7 +1255,8 @@ static void ebpf_cachestat_set_internal_value()
static int ebpf_cachestat_load_bpf(ebpf_module_t *em)
{
int ret = 0;
- if (em->load == EBPF_LOAD_LEGACY) {
+ ebpf_adjust_apps_cgroup(em, em->targets[NETDATA_KEY_CALLS_ADD_TO_PAGE_CACHE_LRU].mode);
+ if (em->load & EBPF_LOAD_LEGACY) {
em->probe_links = ebpf_load_program(ebpf_plugin_dir, em, running_on_kernel, isrh, &em->objects);
if (!em->probe_links) {
ret = -1;