perf top: Do not use overwrite mode by default
authorArnaldo Carvalho de Melo <acme@redhat.com>
Mon, 29 Oct 2018 12:47:00 +0000 (09:47 -0300)
committerArnaldo Carvalho de Melo <acme@redhat.com>
Wed, 31 Oct 2018 12:57:31 +0000 (09:57 -0300)
Enabling --overwrite mode allows us to to use just the most recent
records, which helps in high core count machines such as Knights
Landing/Mill, but right now is being disabled by default as the pausing
used in this technique is leading to loss of metadata events such as
PERF_RECORD_MMAP which makes 'perf top' unable to resolve samples,
leading to lots of unknown samples appearing on the UI.

Enabling this may be useful if you are in such machines and profiling a
workload that doesn't creates short lived threads and/or doesn't uses
many executable mmap operations.

Work is being planed to solve this situation, till then, this will
remain disabled by default.

Reported-by: David Miller <davem@davemloft.net>
Acked-by: Kan Liang <kan.liang@intel.com>
Link: https://lkml.kernel.org/r/4f84468f-37d9-cf1b-12c1-514ef74b6a48@linux.intel.com
Cc: Adrian Hunter <adrian.hunter@intel.com>
Cc: David Ahern <dsahern@gmail.com>
Cc: Jiri Olsa <jolsa@kernel.org>
Cc: Namhyung Kim <namhyung@kernel.org>
Cc: Wang Nan <wangnan0@huawei.com>
Fixes: ebebbf082357 ("perf top: Switch default mode to overwrite mode")
Link: https://lkml.kernel.org/n/tip-ehvf77vi1si9409r7p4wx788@git.kernel.org
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
tools/perf/Documentation/perf-top.txt
tools/perf/builtin-top.c

index d4be6061fe1c1f67a991fd8ebccb33ef5da49265..808b664343c9f5faa9a07d5327945926d844c7cb 100644 (file)
@@ -243,9 +243,14 @@ Default is to monitor all CPUS.
        Enable hierarchy output.
 
 --overwrite::
-       This is the default, but for investigating problems with it or any other strange
-       behaviour like lots of unknown samples, we may want to disable this mode by using
-       --no-overwrite.
+       Enable this to use just the most recent records, which helps in high core count
+       machines such as Knights Landing/Mill, but right now is disabled by default as
+       the pausing used in this technique is leading to loss of metadata events such
+       as PERF_RECORD_MMAP which makes 'perf top' unable to resolve samples, leading
+       to lots of unknown samples appearing on the UI. Enable this if you are in such
+       machines and profiling a workload that doesn't creates short lived threads and/or
+       doesn't uses many executable mmap operations. Work is being planed to solve
+       this situation, till then, this will remain disabled by default.
 
 --force::
        Don't do ownership validation.
index 214fad747b041068b53712886bc37ec80eb1dd8b..8e29e0cc862638b0213b7c3d28ce27cffbc651b2 100644 (file)
@@ -1257,7 +1257,14 @@ int cmd_top(int argc, const char **argv)
                                .uses_mmap   = true,
                        },
                        .proc_map_timeout    = 500,
-                       .overwrite      = 1,
+                       /*
+                        * FIXME: This will lose PERF_RECORD_MMAP and other metadata
+                        * when we pause, fix that and reenable. Probably using a
+                        * separate evlist with a dummy event, i.e. a non-overwrite
+                        * ring buffer just for metadata events, while PERF_RECORD_SAMPLE
+                        * stays in overwrite mode. -acme
+                        * */
+                       .overwrite      = 0,
                },
                .max_stack           = sysctl__max_stack(),
                .annotation_opts     = annotation__default_options,
@@ -1373,7 +1380,7 @@ int cmd_top(int argc, const char **argv)
        OPT_BOOLEAN(0, "hierarchy", &symbol_conf.report_hierarchy,
                    "Show entries in a hierarchy"),
        OPT_BOOLEAN(0, "overwrite", &top.record_opts.overwrite,
-                   "Use a backward ring buffer, default: yes"),
+                   "Use a backward ring buffer, default: no"),
        OPT_BOOLEAN(0, "force", &symbol_conf.force, "don't complain, do it"),
        OPT_UINTEGER(0, "num-thread-synthesize", &top.nr_threads_synthesize,
                        "number of thread to run event synthesize"),