On Mon, Feb 11, 2019 at 11:22:38PM +0300, Alexey Budankov wrote:

SNIP

>  static int process_synthesized_event(struct perf_tool *tool,
>                                    union perf_event *event,
>                                    struct perf_sample *sample __maybe_unused,
> @@ -543,7 +574,8 @@ static int record__mmap_evlist(struct record *rec,
>       if (perf_evlist__mmap_ex(evlist, opts->mmap_pages,
>                                opts->auxtrace_mmap_pages,
>                                opts->auxtrace_snapshot_mode,
> -                              opts->nr_cblocks, opts->affinity) < 0) {
> +                              opts->nr_cblocks, opts->affinity,
> +                              opts->mmap_flush) < 0) {
>               if (errno == EPERM) {
>                       pr_err("Permission error mapping pages.\n"
>                              "Consider increasing "
> @@ -734,7 +766,7 @@ static void record__adjust_affinity(struct record *rec, 
> struct perf_mmap *map)
>  }
>  
>  static int record__mmap_read_evlist(struct record *rec, struct perf_evlist 
> *evlist,
> -                                 bool overwrite)
> +                                 bool overwrite, bool sync)
>  {
>       u64 bytes_written = rec->bytes_written;
>       int i;
> @@ -757,12 +789,19 @@ static int record__mmap_read_evlist(struct record *rec, 
> struct perf_evlist *evli
>               off = record__aio_get_pos(trace_fd);
>  
>       for (i = 0; i < evlist->nr_mmaps; i++) {
> +             u64 flush = MMAP_FLUSH_DEFAULT;
>               struct perf_mmap *map = &maps[i];
>  
>               if (map->base) {
>                       record__adjust_affinity(rec, map);
> +                     if (sync) {
> +                             flush = map->flush;
> +                             map->flush = MMAP_FLUSH_DEFAULT;
> +                     }
>                       if (!record__aio_enabled(rec)) {
>                               if (perf_mmap__push(map, rec, record__pushfn) 
> != 0) {
> +                                     if (sync)
> +                                             map->flush = flush;
>                                       rc = -1;
>                                       goto out;
>                               }
> @@ -775,10 +814,14 @@ static int record__mmap_read_evlist(struct record *rec, 
> struct perf_evlist *evli
>                               idx = record__aio_sync(map, false);
>                               if (perf_mmap__aio_push(map, rec, idx, 
> record__aio_pushfn, &off) != 0) {
>                                       record__aio_set_pos(trace_fd, off);
> +                                     if (sync)
> +                                             map->flush = flush;
>                                       rc = -1;
>                                       goto out;
>                               }
>                       }
> +                     if (sync)
> +                             map->flush = flush;
>               }

what's 'flush' and 'sync' for? also the above handling seems confusing,
why would you set it temporarily for default value if you let it set
by user command line option?

SNIP

> -static void perf_mmap__aio_munmap(struct perf_mmap *map __maybe_unused)
> +static void perf_mmap__aio_munmap_blocks(struct perf_mmap *map 
> __maybe_unused)
>  {
>  }
>  #endif
> @@ -444,6 +468,8 @@ int perf_mmap__mmap(struct perf_mmap *map, struct 
> mmap_params *mp, int fd, int c
>                               &mp->auxtrace_mp, map->base, fd))
>               return -1;
>  
> +     map->flush = mp->flush;
> +
>       return perf_mmap__aio_mmap(map, mp);
>  }
>  
> @@ -492,7 +518,7 @@ static int __perf_mmap__read_init(struct perf_mmap *md)
>       md->start = md->overwrite ? head : old;
>       md->end = md->overwrite ? old : head;
>  
> -     if (md->start == md->end)
> +     if ((md->end - md->start) < md->flush)
>               return -EAGAIN;

we need document and explain this change in changelog in separate patch

thanks,
jirka

Reply via email to