summaryrefslogtreecommitdiffstats
path: root/collectors/ebpf.plugin/ebpf_dcstat.c
diff options
context:
space:
mode:
authorthiagoftsm <thiagoftsm@gmail.com>2021-10-18 15:26:02 +0000
committerGitHub <noreply@github.com>2021-10-18 15:26:02 +0000
commit3ef5ae53e596f110bb87ae2cf5ec90915558f8c9 (patch)
treeba668475c512787973f373e2f6b82fadfc40cbe5 /collectors/ebpf.plugin/ebpf_dcstat.c
parent00e321516624e43c07c41c5584e280bd9e9fb6de (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.c97
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);