diff options
author | thiagoftsm <thiagoftsm@gmail.com> | 2021-10-18 15:26:02 +0000 |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-10-18 15:26:02 +0000 |
commit | 3ef5ae53e596f110bb87ae2cf5ec90915558f8c9 (patch) | |
tree | ba668475c512787973f373e2f6b82fadfc40cbe5 /collectors/ebpf.plugin/ebpf_dcstat.c | |
parent | 00e321516624e43c07c41c5584e280bd9e9fb6de (diff) |
Fix interval usage and reduce I/O (#11662)
Diffstat (limited to 'collectors/ebpf.plugin/ebpf_dcstat.c')
-rw-r--r-- | collectors/ebpf.plugin/ebpf_dcstat.c | 97 |
1 files changed, 57 insertions, 40 deletions
diff --git a/collectors/ebpf.plugin/ebpf_dcstat.c b/collectors/ebpf.plugin/ebpf_dcstat.c index fafdf2ef7f..f62a624adf 100644 --- a/collectors/ebpf.plugin/ebpf_dcstat.c +++ b/collectors/ebpf.plugin/ebpf_dcstat.c @@ -158,7 +158,6 @@ static void ebpf_dcstat_cleanup(void *ptr) */ void ebpf_dcstat_create_apps_charts(struct ebpf_module *em, void *ptr) { - UNUSED(em); struct target *root = ptr; ebpf_create_charts_on_apps(NETDATA_DC_HIT_CHART, "Percentage of files listed inside directory cache", @@ -167,7 +166,7 @@ void ebpf_dcstat_create_apps_charts(struct ebpf_module *em, void *ptr) NETDATA_EBPF_CHART_TYPE_LINE, 20100, ebpf_algorithms[NETDATA_EBPF_ABSOLUTE_IDX], - root, NETDATA_EBPF_MODULE_NAME_DCSTAT); + root, em->update_every, NETDATA_EBPF_MODULE_NAME_DCSTAT); ebpf_create_charts_on_apps(NETDATA_DC_REFERENCE_CHART, "Count file access.", @@ -176,7 +175,7 @@ void ebpf_dcstat_create_apps_charts(struct ebpf_module *em, void *ptr) NETDATA_EBPF_CHART_TYPE_STACKED, 20101, ebpf_algorithms[NETDATA_EBPF_ABSOLUTE_IDX], - root, NETDATA_EBPF_MODULE_NAME_DCSTAT); + root, em->update_every, NETDATA_EBPF_MODULE_NAME_DCSTAT); ebpf_create_charts_on_apps(NETDATA_DC_REQUEST_NOT_CACHE_CHART, "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) NETDATA_EBPF_CHART_TYPE_STACKED, 20102, ebpf_algorithms[NETDATA_EBPF_ABSOLUTE_IDX], - root, NETDATA_EBPF_MODULE_NAME_DCSTAT); + root, em->update_every, NETDATA_EBPF_MODULE_NAME_DCSTAT); ebpf_create_charts_on_apps(NETDATA_DC_REQUEST_NOT_FOUND_CHART, "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) NETDATA_EBPF_CHART_TYPE_STACKED, 20103, ebpf_algorithms[NETDATA_EBPF_ABSOLUTE_IDX], - root, NETDATA_EBPF_MODULE_NAME_DCSTAT); + root, em->update_every, NETDATA_EBPF_MODULE_NAME_DCSTAT); } /***************************************************************** @@ -366,7 +365,7 @@ void *ebpf_dcstat_read_hash(void *ptr) ebpf_module_t *em = (ebpf_module_t *)ptr; - usec_t step = NETDATA_LATENCY_DCSTAT_SLEEP_MS * em->update_time; + usec_t step = NETDATA_LATENCY_DCSTAT_SLEEP_MS * em->update_every; while (!close_ebpf_plugin) { usec_t dt = heartbeat_next(&hb, step); (void)dt; @@ -517,15 +516,16 @@ static void dcstat_send_global(netdata_publish_dcstat_t *publish) * Create charts for cgroup/application. * * @param type the chart type. + * @param update_every value to overwrite the update frequency set by the server. */ -static void ebpf_create_specific_dc_charts(char *type) +static void ebpf_create_specific_dc_charts(char *type, int update_every) { ebpf_create_chart(type, NETDATA_DC_HIT_CHART, "Percentage of files listed inside directory cache.", EBPF_COMMON_DIMENSION_PERCENTAGE, NETDATA_DIRECTORY_CACHE_SUBMENU, NETDATA_CGROUP_DC_HIT_RATIO_CONTEXT, NETDATA_EBPF_CHART_TYPE_LINE, NETDATA_CHART_PRIO_CGROUPS_CONTAINERS + 5700, ebpf_create_global_dimension, - dcstat_counter_publish_aggregated, 1, NETDATA_EBPF_MODULE_NAME_DCSTAT); + dcstat_counter_publish_aggregated, 1, update_every, NETDATA_EBPF_MODULE_NAME_DCSTAT); ebpf_create_chart(type, NETDATA_DC_REFERENCE_CHART, "Count file access.", EBPF_COMMON_DIMENSION_FILES, NETDATA_DIRECTORY_CACHE_SUBMENU, @@ -533,7 +533,7 @@ static void ebpf_create_specific_dc_charts(char *type) NETDATA_CHART_PRIO_CGROUPS_CONTAINERS + 5701, ebpf_create_global_dimension, &dcstat_counter_publish_aggregated[NETDATA_DCSTAT_IDX_REFERENCE], 1, - NETDATA_EBPF_MODULE_NAME_DCSTAT); + update_every, NETDATA_EBPF_MODULE_NAME_DCSTAT); ebpf_create_chart(type, NETDATA_DC_REQUEST_NOT_CACHE_CHART, "Access to files that were not present inside directory cache.", @@ -542,7 +542,7 @@ static void ebpf_create_specific_dc_charts(char *type) NETDATA_CHART_PRIO_CGROUPS_CONTAINERS + 5702, ebpf_create_global_dimension, &dcstat_counter_publish_aggregated[NETDATA_DCSTAT_IDX_SLOW], 1, - NETDATA_EBPF_MODULE_NAME_DCSTAT); + update_every, NETDATA_EBPF_MODULE_NAME_DCSTAT); ebpf_create_chart(type, NETDATA_DC_REQUEST_NOT_FOUND_CHART, "Number of requests for files that were not found on filesystem.", @@ -551,7 +551,7 @@ static void ebpf_create_specific_dc_charts(char *type) NETDATA_CHART_PRIO_CGROUPS_CONTAINERS + 5703, ebpf_create_global_dimension, &dcstat_counter_publish_aggregated[NETDATA_DCSTAT_IDX_MISS], 1, - NETDATA_EBPF_MODULE_NAME_DCSTAT); + update_every, NETDATA_EBPF_MODULE_NAME_DCSTAT); } /** @@ -560,32 +560,33 @@ static void ebpf_create_specific_dc_charts(char *type) * Obsolete charts for cgroup/application. * * @param type the chart type. + * @param update_every value to overwrite the update frequency set by the server. */ -static void ebpf_obsolete_specific_dc_charts(char *type) +static void ebpf_obsolete_specific_dc_charts(char *type, int update_every) { ebpf_write_chart_obsolete(type, NETDATA_DC_HIT_CHART, "Percentage of files listed inside directory cache.", EBPF_COMMON_DIMENSION_PERCENTAGE, NETDATA_DIRECTORY_CACHE_SUBMENU, NETDATA_EBPF_CHART_TYPE_LINE, NETDATA_CGROUP_DC_HIT_RATIO_CONTEXT, - NETDATA_CHART_PRIO_CGROUPS_CONTAINERS + 5700); + NETDATA_CHART_PRIO_CGROUPS_CONTAINERS + 5700, update_every); ebpf_write_chart_obsolete(type, NETDATA_DC_REFERENCE_CHART, "Count file access.", EBPF_COMMON_DIMENSION_FILES, NETDATA_DIRECTORY_CACHE_SUBMENU, NETDATA_EBPF_CHART_TYPE_LINE, NETDATA_CGROUP_DC_REFERENCE_CONTEXT, - NETDATA_CHART_PRIO_CGROUPS_CONTAINERS + 5701); + NETDATA_CHART_PRIO_CGROUPS_CONTAINERS + 5701, update_every); ebpf_write_chart_obsolete(type, NETDATA_DC_REQUEST_NOT_CACHE_CHART, "Access to files that were not present inside directory cache.", EBPF_COMMON_DIMENSION_FILES, NETDATA_DIRECTORY_CACHE_SUBMENU, NETDATA_EBPF_CHART_TYPE_LINE, NETDATA_CGROUP_DC_NOT_CACHE_CONTEXT, - NETDATA_CHART_PRIO_CGROUPS_CONTAINERS + 5702); + NETDATA_CHART_PRIO_CGROUPS_CONTAINERS + 5702, update_every); ebpf_write_chart_obsolete(type, NETDATA_DC_REQUEST_NOT_FOUND_CHART, "Number of requests for files that were not found on filesystem.", EBPF_COMMON_DIMENSION_FILES, NETDATA_DIRECTORY_CACHE_SUBMENU, NETDATA_EBPF_CHART_TYPE_LINE, NETDATA_CGROUP_DC_NOT_FOUND_CONTEXT, - NETDATA_CHART_PRIO_CGROUPS_CONTAINERS + 5703); + NETDATA_CHART_PRIO_CGROUPS_CONTAINERS + 5703, update_every); } /** @@ -640,8 +641,10 @@ void ebpf_dc_calc_chart_values() * Create Systemd directory cache Charts * * Create charts when systemd is enabled + * + * @param update_every value to overwrite the update frequency set by the server. **/ -static void ebpf_create_systemd_dc_charts() +static void ebpf_create_systemd_dc_charts(int update_every) { ebpf_create_charts_on_systemd(NETDATA_DC_HIT_CHART, "Percentage of files listed inside directory cache.", @@ -650,7 +653,8 @@ static void ebpf_create_systemd_dc_charts() NETDATA_EBPF_CHART_TYPE_LINE, 21200, ebpf_algorithms[NETDATA_EBPF_ABSOLUTE_IDX], - NETDATA_SYSTEMD_DC_HIT_RATIO_CONTEXT, NETDATA_EBPF_MODULE_NAME_DCSTAT); + NETDATA_SYSTEMD_DC_HIT_RATIO_CONTEXT, NETDATA_EBPF_MODULE_NAME_DCSTAT, + update_every); ebpf_create_charts_on_systemd(NETDATA_DC_REFERENCE_CHART, "Count file access.", @@ -659,7 +663,8 @@ static void ebpf_create_systemd_dc_charts() NETDATA_EBPF_CHART_TYPE_LINE, 21201, ebpf_algorithms[NETDATA_EBPF_ABSOLUTE_IDX], - NETDATA_SYSTEMD_DC_REFERENCE_CONTEXT, NETDATA_EBPF_MODULE_NAME_DCSTAT); + NETDATA_SYSTEMD_DC_REFERENCE_CONTEXT, NETDATA_EBPF_MODULE_NAME_DCSTAT, + update_every); ebpf_create_charts_on_systemd(NETDATA_DC_REQUEST_NOT_CACHE_CHART, "Access to files that were not present inside directory cache.", @@ -668,7 +673,8 @@ static void ebpf_create_systemd_dc_charts() NETDATA_EBPF_CHART_TYPE_LINE, 21202, ebpf_algorithms[NETDATA_EBPF_ABSOLUTE_IDX], - NETDATA_SYSTEMD_DC_NOT_CACHE_CONTEXT, NETDATA_EBPF_MODULE_NAME_DCSTAT); + NETDATA_SYSTEMD_DC_NOT_CACHE_CONTEXT, NETDATA_EBPF_MODULE_NAME_DCSTAT, + update_every); ebpf_create_charts_on_systemd(NETDATA_DC_REQUEST_NOT_FOUND_CHART, "Number of requests for files that were not found on filesystem.", @@ -677,7 +683,8 @@ static void ebpf_create_systemd_dc_charts() NETDATA_EBPF_CHART_TYPE_LINE, 21202, ebpf_algorithms[NETDATA_EBPF_ABSOLUTE_IDX], - NETDATA_SYSTEMD_DC_NOT_FOUND_CONTEXT, NETDATA_EBPF_MODULE_NAME_DCSTAT); + NETDATA_SYSTEMD_DC_NOT_FOUND_CONTEXT, NETDATA_EBPF_MODULE_NAME_DCSTAT, + update_every); } /** @@ -776,8 +783,10 @@ static void ebpf_send_specific_dc_data(char *type, netdata_publish_dcstat_t *pdc /** * Send data to Netdata calling auxiliar functions. + * + * @param update_every value to overwrite the update frequency set by the server. */ -void ebpf_dc_send_cgroup_data() +void ebpf_dc_send_cgroup_data(int update_every) { if (!ebpf_cgroup_pids) return; @@ -790,7 +799,7 @@ void ebpf_dc_send_cgroup_data() if (has_systemd) { static int systemd_charts = 0; if (!systemd_charts) { - ebpf_create_systemd_dc_charts(); + ebpf_create_systemd_dc_charts(update_every); systemd_charts = 1; } @@ -802,7 +811,7 @@ void ebpf_dc_send_cgroup_data() continue; if (!(ect->flags & NETDATA_EBPF_CGROUP_HAS_DC_CHART) && ect->updated) { - ebpf_create_specific_dc_charts(ect->name); + ebpf_create_specific_dc_charts(ect->name, update_every); ect->flags |= NETDATA_EBPF_CGROUP_HAS_DC_CHART; } @@ -810,7 +819,7 @@ void ebpf_dc_send_cgroup_data() if (ect->updated) { ebpf_send_specific_dc_data(ect->name, &ect->publish_dc); } else { - ebpf_obsolete_specific_dc_charts(ect->name); + ebpf_obsolete_specific_dc_charts(ect->name, update_every); ect->flags &= ~NETDATA_EBPF_CGROUP_HAS_DC_CHART; } } @@ -834,27 +843,33 @@ static void dcstat_collector(ebpf_module_t *em) memset(&publish, 0, sizeof(publish)); int apps = em->apps_charts; int cgroups = em->cgroup_charts; + int update_every = em->update_every; + int counter = update_every - 1; while (!close_ebpf_plugin) { pthread_mutex_lock(&collect_data_mutex); pthread_cond_wait(&collect_data_cond_var, &collect_data_mutex); - if (apps) - read_apps_table(); + if (++counter == update_every) { + counter = 0; + if (apps) + read_apps_table(); - if (cgroups) - ebpf_update_dc_cgroup(); + if (cgroups) + ebpf_update_dc_cgroup(); - pthread_mutex_lock(&lock); + pthread_mutex_lock(&lock); - dcstat_send_global(&publish); + dcstat_send_global(&publish); - if (apps) - ebpf_dcache_send_apps_data(apps_groups_root_target); + if (apps) + ebpf_dcache_send_apps_data(apps_groups_root_target); - if (cgroups) - ebpf_dc_send_cgroup_data(); + if (cgroups) + ebpf_dc_send_cgroup_data(update_every); + + pthread_mutex_unlock(&lock); + } - pthread_mutex_unlock(&lock); pthread_mutex_unlock(&collect_data_mutex); } } @@ -869,8 +884,10 @@ static void dcstat_collector(ebpf_module_t *em) * Create filesystem charts * * Call ebpf_create_chart to create the charts for the collector. + * + * @param update_every value to overwrite the update frequency set by the server. */ -static void ebpf_create_filesystem_charts() +static void ebpf_create_filesystem_charts(int update_every) { ebpf_create_chart(NETDATA_FILESYSTEM_FAMILY, NETDATA_DC_HIT_CHART, "Percentage of files listed inside directory cache", @@ -879,7 +896,7 @@ static void ebpf_create_filesystem_charts() NETDATA_EBPF_CHART_TYPE_LINE, 21200, ebpf_create_global_dimension, - dcstat_counter_publish_aggregated, 1, NETDATA_EBPF_MODULE_NAME_DCSTAT); + dcstat_counter_publish_aggregated, 1, update_every, NETDATA_EBPF_MODULE_NAME_DCSTAT); ebpf_create_chart(NETDATA_FILESYSTEM_FAMILY, NETDATA_DC_REFERENCE_CHART, "Variables used to calculate hit ratio.", @@ -889,7 +906,7 @@ static void ebpf_create_filesystem_charts() 21201, ebpf_create_global_dimension, &dcstat_counter_publish_aggregated[NETDATA_DCSTAT_IDX_REFERENCE], 3, - NETDATA_EBPF_MODULE_NAME_DCSTAT); + update_every, NETDATA_EBPF_MODULE_NAME_DCSTAT); fflush(stdout); } @@ -962,7 +979,7 @@ void *ebpf_dcstat_thread(void *ptr) dcstat_counter_dimension_name, dcstat_counter_dimension_name, algorithms, NETDATA_DCSTAT_IDX_END); - ebpf_create_filesystem_charts(); + ebpf_create_filesystem_charts(em->update_every); pthread_mutex_unlock(&lock); dcstat_collector(em); |