diff options
Diffstat (limited to '')
-rw-r--r-- | src/collectors/ebpf.plugin/ebpf_oomkill.c (renamed from collectors/ebpf.plugin/ebpf_oomkill.c) | 71 |
1 files changed, 45 insertions, 26 deletions
diff --git a/collectors/ebpf.plugin/ebpf_oomkill.c b/src/collectors/ebpf.plugin/ebpf_oomkill.c index 2c34650c3..e7604a2db 100644 --- a/collectors/ebpf.plugin/ebpf_oomkill.c +++ b/src/collectors/ebpf.plugin/ebpf_oomkill.c @@ -53,11 +53,11 @@ static void ebpf_create_specific_oomkill_charts(char *type, int update_every); * * @param em a pointer to `struct ebpf_module` */ -static void ebpf_obsolete_oomkill_services(ebpf_module_t *em) +static void ebpf_obsolete_oomkill_services(ebpf_module_t *em, char *id) { ebpf_write_chart_obsolete(NETDATA_SERVICE_FAMILY, + id, NETDATA_OOMKILL_CHART, - "", "OOM kills. This chart is provided by eBPF plugin.", EBPF_COMMON_DIMENSION_KILLS, NETDATA_EBPF_MEMORY_GROUP, @@ -78,12 +78,13 @@ static inline void ebpf_obsolete_oomkill_cgroup_charts(ebpf_module_t *em) { pthread_mutex_lock(&mutex_cgroup_shm); - ebpf_obsolete_oomkill_services(em); - ebpf_cgroup_target_t *ect; for (ect = ebpf_cgroup_pids; ect ; ect = ect->next) { - if (ect->systemd) + if (ect->systemd) { + ebpf_obsolete_oomkill_services(em, ect->name); + continue; + } ebpf_create_specific_oomkill_charts(ect->name, em->update_every); } @@ -101,6 +102,7 @@ static void ebpf_obsolete_oomkill_apps(ebpf_module_t *em) { struct ebpf_target *w; int update_every = em->update_every; + pthread_mutex_lock(&collect_data_mutex); for (w = apps_groups_root_target; w; w = w->next) { if (unlikely(!(w->charts_created & (1<<EBPF_MODULE_OOMKILL_IDX)))) continue; @@ -118,6 +120,7 @@ static void ebpf_obsolete_oomkill_apps(ebpf_module_t *em) w->charts_created &= ~(1<<EBPF_MODULE_OOMKILL_IDX); } + pthread_mutex_unlock(&collect_data_mutex); } /** @@ -231,11 +234,33 @@ static void ebpf_create_specific_oomkill_charts(char *type, int update_every) **/ static void ebpf_create_systemd_oomkill_charts(int update_every) { - ebpf_create_charts_on_systemd(NETDATA_OOMKILL_CHART, "OOM kills. This chart is provided by eBPF plugin.", - EBPF_COMMON_DIMENSION_KILLS, NETDATA_EBPF_MEMORY_GROUP, - NETDATA_EBPF_CHART_TYPE_LINE, 20191, - ebpf_algorithms[NETDATA_EBPF_INCREMENTAL_IDX], NULL, - NETDATA_EBPF_MODULE_NAME_OOMKILL, update_every); + static ebpf_systemd_args_t data_oom = { + .title = "OOM kills. This chart is provided by eBPF plugin.", + .units = EBPF_COMMON_DIMENSION_KILLS, + .family = NETDATA_EBPF_MEMORY_GROUP, + .charttype = NETDATA_EBPF_CHART_TYPE_STACKED, + .order = 20191, + .algorithm = EBPF_CHART_ALGORITHM_INCREMENTAL, + .context = NETDATA_EBPF_MODULE_NAME_OOMKILL, + .module = NETDATA_EBPF_MODULE_NAME_SWAP, + .update_every = 0, + .suffix = NETDATA_OOMKILL_CHART, + .dimension = "oom" + }; + + if (!data_oom.update_every) + data_oom.update_every = update_every; + + ebpf_cgroup_target_t *w; + for (w = ebpf_cgroup_pids; w ; w = w->next) { + if (unlikely(!w->systemd || w->flags & NETDATA_EBPF_SERVICES_HAS_OOMKILL_CHART)) + continue; + + data_oom.id = w->name; + ebpf_create_charts_on_systemd(&data_oom); + + w->flags |= NETDATA_EBPF_SERVICES_HAS_OOMKILL_CHART; + } } /** @@ -246,14 +271,15 @@ static void ebpf_create_systemd_oomkill_charts(int update_every) static void ebpf_send_systemd_oomkill_charts() { ebpf_cgroup_target_t *ect; - ebpf_write_begin_chart(NETDATA_SERVICE_FAMILY, NETDATA_OOMKILL_CHART, ""); for (ect = ebpf_cgroup_pids; ect ; ect = ect->next) { - if (unlikely(ect->systemd) && unlikely(ect->updated)) { - write_chart_dimension(ect->name, (long long) ect->oomkill); - ect->oomkill = 0; + if (unlikely(!(ect->flags & NETDATA_EBPF_SERVICES_HAS_OOMKILL_CHART)) ) { + continue; } + ebpf_write_begin_chart(NETDATA_SERVICE_FAMILY, ect->name, NETDATA_OOMKILL_CHART); + write_chart_dimension("oom", (long long) ect->oomkill); + ect->oomkill = 0; + ebpf_write_end_chart(); } - ebpf_write_end_chart(); } /* @@ -294,14 +320,10 @@ static void ebpf_obsolete_specific_oomkill_charts(char *type, int update_every) */ void ebpf_oomkill_send_cgroup_data(int update_every) { - if (!ebpf_cgroup_pids) - return; - pthread_mutex_lock(&mutex_cgroup_shm); ebpf_cgroup_target_t *ect; - int has_systemd = shm_ebpf_cgroup.header->systemd_enabled; - if (has_systemd) { + if (shm_ebpf_cgroup.header->systemd_enabled) { if (send_cgroup_chart) { ebpf_create_systemd_oomkill_charts(update_every); } @@ -443,26 +465,23 @@ static void oomkill_collector(ebpf_module_t *em) counter = 0; uint32_t count = oomkill_read_data(keys); - if (!count) { - running_time = ebpf_update_oomkill_period(running_time, em); - } stats[NETDATA_CONTROLLER_PID_TABLE_ADD] += (uint64_t) count; stats[NETDATA_CONTROLLER_PID_TABLE_DEL] += (uint64_t) count; - pthread_mutex_lock(&collect_data_mutex); pthread_mutex_lock(&lock); - if (cgroups && count) { + if (cgroups && shm_ebpf_cgroup.header && ebpf_cgroup_pids) { ebpf_update_oomkill_cgroup(keys, count); // write everything from the ebpf map. ebpf_oomkill_send_cgroup_data(update_every); } if (em->apps_charts & NETDATA_EBPF_APPS_FLAG_CHART_CREATED) { + pthread_mutex_lock(&collect_data_mutex); oomkill_write_data(keys, count); + pthread_mutex_unlock(&collect_data_mutex); } pthread_mutex_unlock(&lock); - pthread_mutex_unlock(&collect_data_mutex); running_time = ebpf_update_oomkill_period(running_time, em); } |