diff --git a/plugins/in_tail/tail.c b/plugins/in_tail/tail.c index 6689d8a75d1..4af656f4eb3 100644 --- a/plugins/in_tail/tail.c +++ b/plugins/in_tail/tail.c @@ -705,7 +705,13 @@ static struct flb_config_map config_map[] = { 0, FLB_TRUE, offsetof(struct flb_tail_config, skip_empty_lines), "Allows to skip empty lines." }, - +#ifdef __linux__ + { + FLB_CONFIG_MAP_BOOL, "file_cache_advise", "true", + 0, FLB_TRUE, offsetof(struct flb_tail_config, file_cache_advise), + "Use posix_fadvise for file access. Advise not to use kernel file cache." + }, +#endif #ifdef FLB_HAVE_INOTIFY { FLB_CONFIG_MAP_BOOL, "inotify_watcher", "true", diff --git a/plugins/in_tail/tail_config.h b/plugins/in_tail/tail_config.h index 9629af4ecb0..dc2f6480a08 100644 --- a/plugins/in_tail/tail_config.h +++ b/plugins/in_tail/tail_config.h @@ -93,6 +93,9 @@ struct flb_tail_config { int skip_long_lines; /* skip long lines */ int skip_empty_lines; /* skip empty lines (off) */ int exit_on_eof; /* exit fluent-bit on EOF, test */ +#ifdef __linux__ + int file_cache_advise; /* Use posix_fadvise for file access */ +#endif int progress_check_interval; /* watcher interval */ int progress_check_interval_nsec; /* watcher interval */ diff --git a/plugins/in_tail/tail_file.c b/plugins/in_tail/tail_file.c index 14e0d97847d..2d5e36f834a 100644 --- a/plugins/in_tail/tail_file.c +++ b/plugins/in_tail/tail_file.c @@ -946,7 +946,13 @@ int flb_tail_file_append(char *path, struct stat *st, int mode, if (flb_tail_file_exists(st, ctx) == FLB_TRUE) { return -1; } - + + #ifdef __linux__ + if (ctx->file_cache_advise) { + flb_plg_debug(ctx->ins, "file will be read in POSIX_FADV_DONTNEED mode %s", path); + } + #endif + fd = open(path, O_RDONLY); if (fd == -1) { flb_errno(); @@ -1435,6 +1441,15 @@ int flb_tail_file_chunk(struct flb_tail_file *file) file_buffer_capacity = (file->buf_size - file->buf_len) - 1; } + #ifdef __linux__ + if (ctx->file_cache_advise) { + if (posix_fadvise(file->fd, 0, 0, POSIX_FADV_DONTNEED) == -1) { + flb_errno(); + flb_plg_error(ctx->ins, "error during posix_fadvise"); + } + } + #endif + read_size = file_buffer_capacity; if (file->decompression_context != NULL) {