* [PATCH 0/7] perf tools: Clarify overwrite and backward, bugfix
@ 2017-11-13 1:38 Wang Nan
2017-11-13 1:38 ` [PATCH 1/7] perf mmap: Fix perf backward recording Wang Nan
` (7 more replies)
0 siblings, 8 replies; 21+ messages in thread
From: Wang Nan @ 2017-11-13 1:38 UTC (permalink / raw)
To: linux-kernel, kan.liang, acme, jolsa, namhyung; +Cc: Wang Nan
Based on previous discussion, perf needs to support only two types
of ringbuffer: read-write + forward, readonly + backward. This patchset
completly removes the concept of 'overwrite' from code level, controls
mapping permission using write_backward instead.
Wang Nan (7):
perf mmap: Fix perf backward recording
perf tests: Set evlist of test__backward_ring_buffer() to !overwrite
perf tests: Set evlist of test__sw_clock_freq() to !overwrite
perf tests: Set evlist of test__basic_mmap() to !overwrite
perf tests: Set evlist of test__task_exit() to !overwrite
perf tools: Remove 'overwrite' concept from code level
perf tools: Remove prot field in mmap param
tools/perf/arch/x86/tests/perf-time-to-tsc.c | 2 +-
tools/perf/builtin-kvm.c | 2 +-
tools/perf/builtin-record.c | 4 ++--
tools/perf/builtin-top.c | 2 +-
tools/perf/builtin-trace.c | 2 +-
tools/perf/tests/backward-ring-buffer.c | 2 +-
tools/perf/tests/bpf.c | 2 +-
tools/perf/tests/code-reading.c | 2 +-
tools/perf/tests/keep-tracking.c | 2 +-
tools/perf/tests/mmap-basic.c | 2 +-
tools/perf/tests/openat-syscall-tp-fields.c | 2 +-
tools/perf/tests/perf-record.c | 2 +-
tools/perf/tests/sw-clock.c | 2 +-
tools/perf/tests/switch-tracking.c | 2 +-
tools/perf/tests/task-exit.c | 2 +-
tools/perf/util/evlist.c | 21 ++++++++++-----------
tools/perf/util/evlist.h | 6 ++----
tools/perf/util/mmap.c | 10 +++++-----
tools/perf/util/mmap.h | 6 +++---
tools/perf/util/python.c | 10 +++++-----
20 files changed, 41 insertions(+), 44 deletions(-)
--
2.10.1
^ permalink raw reply [flat|nested] 21+ messages in thread* [PATCH 1/7] perf mmap: Fix perf backward recording 2017-11-13 1:38 [PATCH 0/7] perf tools: Clarify overwrite and backward, bugfix Wang Nan @ 2017-11-13 1:38 ` Wang Nan 2017-11-13 1:38 ` [PATCH 2/7] perf tests: Set evlist of test__backward_ring_buffer() to !overwrite Wang Nan ` (6 subsequent siblings) 7 siblings, 0 replies; 21+ messages in thread From: Wang Nan @ 2017-11-13 1:38 UTC (permalink / raw) To: linux-kernel, kan.liang, acme, jolsa, namhyung; +Cc: Wang Nan perf record backward recording doesn't work as we expected: it never overwrite when ring buffer full. Test: (Run a busy printing task background like this: while True: print 123 send SIGUSR2 to perf to capture snapshot.) # ./perf record --overwrite -e raw_syscalls:sys_enter -e raw_syscalls:sys_exit --exclude-perf -a --switch-output [ perf record: dump data: Woken up 1 times ] [ perf record: Dump perf.data.2017110101520743 ] [ perf record: dump data: Woken up 1 times ] [ perf record: Dump perf.data.2017110101521251 ] [ perf record: dump data: Woken up 1 times ] [ perf record: Dump perf.data.2017110101521692 ] ^C[ perf record: Woken up 1 times to write data ] [ perf record: Dump perf.data.2017110101521936 ] [ perf record: Captured and wrote 0.826 MB perf.data.<timestamp> ] # ./perf script -i ./perf.data.2017110101520743 | head -n3 perf 2717 [000] 12449.310785: raw_syscalls:sys_enter: NR 16 (5, 2400, 0, 59, 100, 0) perf 2717 [000] 12449.310790: raw_syscalls:sys_enter: NR 7 (4112340, 2, ffffffff, 3df, 100, 0) python 2545 [000] 12449.310800: raw_syscalls:sys_exit: NR 1 = 4 # ./perf script -i ./perf.data.2017110101521251 | head -n3 perf 2717 [000] 12449.310785: raw_syscalls:sys_enter: NR 16 (5, 2400, 0, 59, 100, 0) perf 2717 [000] 12449.310790: raw_syscalls:sys_enter: NR 7 (4112340, 2, ffffffff, 3df, 100, 0) python 2545 [000] 12449.310800: raw_syscalls:sys_exit: NR 1 = 4 # ./perf script -i ./perf.data.2017110101521692 | head -n3 perf 2717 [000] 12449.310785: raw_syscalls:sys_enter: NR 16 (5, 2400, 0, 59, 100, 0) perf 2717 [000] 12449.310790: raw_syscalls:sys_enter: NR 7 (4112340, 2, ffffffff, 3df, 100, 0) python 2545 [000] 12449.310800: raw_syscalls:sys_exit: NR 1 = 4 Timestamps are never change, but my background task is a dead loop, can easily overwhelme the ring buffer. This patch fix it by force unsetting PROT_WRITE for backward ring buffer, so all backward ring buffer become overwrite ring buffer. Test result: # ./perf record --overwrite -e raw_syscalls:sys_enter -e raw_syscalls:sys_exit --exclude-perf -a --switch-output [ perf record: dump data: Woken up 1 times ] [ perf record: Dump perf.data.2017110101285323 ] [ perf record: dump data: Woken up 1 times ] [ perf record: Dump perf.data.2017110101290053 ] [ perf record: dump data: Woken up 1 times ] [ perf record: Dump perf.data.2017110101290446 ] ^C[ perf record: Woken up 1 times to write data ] [ perf record: Dump perf.data.2017110101290837 ] [ perf record: Captured and wrote 0.826 MB perf.data.<timestamp> ] # ./perf script -i ./perf.data.2017110101285323 | head -n3 python 2545 [000] 11064.268083: raw_syscalls:sys_exit: NR 1 = 4 python 2545 [000] 11064.268084: raw_syscalls:sys_enter: NR 1 (1, 12cc330, 4, 7fc237280370, 7fc2373d0700, 2c7b0) python 2545 [000] 11064.268086: raw_syscalls:sys_exit: NR 1 = 4 # ./perf script -i ./perf.data.2017110101290 | head -n3 failed to open ./perf.data.2017110101290: No such file or directory # ./perf script -i ./perf.data.2017110101290053 | head -n3 python 2545 [000] 11071.564062: raw_syscalls:sys_enter: NR 1 (1, 12cc330, 4, 7fc237280370, 7fc2373d0700, 2c7b0) python 2545 [000] 11071.564064: raw_syscalls:sys_exit: NR 1 = 4 python 2545 [000] 11071.564066: raw_syscalls:sys_enter: NR 1 (1, 12cc330, 4, 7fc237280370, 7fc2373d0700, 2c7b0) # ./perf script -i ./perf.data.2017110101290 | head -n3 perf.data.2017110101290053 perf.data.2017110101290446 perf.data.2017110101290837 # ./perf script -i ./perf.data.2017110101290446 | head -n3 sshd 1321 [000] 11075.499473: raw_syscalls:sys_exit: NR 14 = 0 sshd 1321 [000] 11075.499474: raw_syscalls:sys_enter: NR 14 (2, 7ffe98899490, 0, 8, 0, 3000) sshd 1321 [000] 11075.499474: raw_syscalls:sys_exit: NR 14 = 0 # ./perf script -i ./perf.data.2017110101290837 | head -n3 python 2545 [000] 11079.280844: raw_syscalls:sys_exit: NR 1 = 4 python 2545 [000] 11079.280847: raw_syscalls:sys_enter: NR 1 (1, 12cc330, 4, 7fc237280370, 7fc2373d0700, 2c7b0) python 2545 [000] 11079.280850: raw_syscalls:sys_exit: NR 1 = 4 Signed-off-by: Wang Nan <wangnan0@huawei.com> --- tools/perf/util/evlist.c | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/tools/perf/util/evlist.c b/tools/perf/util/evlist.c index c6c891e..4c5daba 100644 --- a/tools/perf/util/evlist.c +++ b/tools/perf/util/evlist.c @@ -799,22 +799,28 @@ perf_evlist__should_poll(struct perf_evlist *evlist __maybe_unused, } static int perf_evlist__mmap_per_evsel(struct perf_evlist *evlist, int idx, - struct mmap_params *mp, int cpu_idx, + struct mmap_params *_mp, int cpu_idx, int thread, int *_output, int *_output_backward) { struct perf_evsel *evsel; int revent; int evlist_cpu = cpu_map__cpu(evlist->cpus, cpu_idx); + struct mmap_params *mp; evlist__for_each_entry(evlist, evsel) { struct perf_mmap *maps = evlist->mmap; + struct mmap_params rdonly_mp; int *output = _output; int fd; int cpu; + mp = _mp; if (evsel->attr.write_backward) { output = _output_backward; maps = evlist->backward_mmap; + rdonly_mp = *_mp; + rdonly_mp.prot &= ~PROT_WRITE; + mp = &rdonly_mp; if (!maps) { maps = perf_evlist__alloc_mmap(evlist); -- 2.10.1 ^ permalink raw reply related [flat|nested] 21+ messages in thread
* [PATCH 2/7] perf tests: Set evlist of test__backward_ring_buffer() to !overwrite 2017-11-13 1:38 [PATCH 0/7] perf tools: Clarify overwrite and backward, bugfix Wang Nan 2017-11-13 1:38 ` [PATCH 1/7] perf mmap: Fix perf backward recording Wang Nan @ 2017-11-13 1:38 ` Wang Nan 2017-11-13 18:30 ` Arnaldo Carvalho de Melo 2017-11-18 8:30 ` [tip:perf/core] " tip-bot for Wang Nan 2017-11-13 1:38 ` [PATCH 3/7] perf tests: Set evlist of test__sw_clock_freq() " Wang Nan ` (5 subsequent siblings) 7 siblings, 2 replies; 21+ messages in thread From: Wang Nan @ 2017-11-13 1:38 UTC (permalink / raw) To: linux-kernel, kan.liang, acme, jolsa, namhyung; +Cc: Wang Nan Setting overwrite in perf_evlist__mmap() is meaningless because the event in this evlist is already have 'overwrite' postfix and goes to backward ring buffer automatically. Pass 'false' to perf_evlist__mmap() to make it similar to others. Signed-off-by: Wang Nan <wangnan0@huawei.com> --- tools/perf/tests/backward-ring-buffer.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tools/perf/tests/backward-ring-buffer.c b/tools/perf/tests/backward-ring-buffer.c index d233ad3..992c917 100644 --- a/tools/perf/tests/backward-ring-buffer.c +++ b/tools/perf/tests/backward-ring-buffer.c @@ -58,7 +58,7 @@ static int do_test(struct perf_evlist *evlist, int mmap_pages, int err; char sbuf[STRERR_BUFSIZE]; - err = perf_evlist__mmap(evlist, mmap_pages, true); + err = perf_evlist__mmap(evlist, mmap_pages, false); if (err < 0) { pr_debug("perf_evlist__mmap: %s\n", str_error_r(errno, sbuf, sizeof(sbuf))); -- 2.10.1 ^ permalink raw reply related [flat|nested] 21+ messages in thread
* Re: [PATCH 2/7] perf tests: Set evlist of test__backward_ring_buffer() to !overwrite 2017-11-13 1:38 ` [PATCH 2/7] perf tests: Set evlist of test__backward_ring_buffer() to !overwrite Wang Nan @ 2017-11-13 18:30 ` Arnaldo Carvalho de Melo 2017-11-18 8:30 ` [tip:perf/core] " tip-bot for Wang Nan 1 sibling, 0 replies; 21+ messages in thread From: Arnaldo Carvalho de Melo @ 2017-11-13 18:30 UTC (permalink / raw) To: Wang Nan; +Cc: linux-kernel, kan.liang, jolsa, namhyung Em Mon, Nov 13, 2017 at 01:38:04AM +0000, Wang Nan escreveu: > Setting overwrite in perf_evlist__mmap() is meaningless because the > event in this evlist is already have 'overwrite' postfix and goes to > backward ring buffer automatically. Pass 'false' to perf_evlist__mmap() > to make it similar to others. applied > Signed-off-by: Wang Nan <wangnan0@huawei.com> > --- > tools/perf/tests/backward-ring-buffer.c | 2 +- > 1 file changed, 1 insertion(+), 1 deletion(-) > > diff --git a/tools/perf/tests/backward-ring-buffer.c b/tools/perf/tests/backward-ring-buffer.c > index d233ad3..992c917 100644 > --- a/tools/perf/tests/backward-ring-buffer.c > +++ b/tools/perf/tests/backward-ring-buffer.c > @@ -58,7 +58,7 @@ static int do_test(struct perf_evlist *evlist, int mmap_pages, > int err; > char sbuf[STRERR_BUFSIZE]; > > - err = perf_evlist__mmap(evlist, mmap_pages, true); > + err = perf_evlist__mmap(evlist, mmap_pages, false); > if (err < 0) { > pr_debug("perf_evlist__mmap: %s\n", > str_error_r(errno, sbuf, sizeof(sbuf))); > -- > 2.10.1 ^ permalink raw reply [flat|nested] 21+ messages in thread
* [tip:perf/core] perf tests: Set evlist of test__backward_ring_buffer() to !overwrite 2017-11-13 1:38 ` [PATCH 2/7] perf tests: Set evlist of test__backward_ring_buffer() to !overwrite Wang Nan 2017-11-13 18:30 ` Arnaldo Carvalho de Melo @ 2017-11-18 8:30 ` tip-bot for Wang Nan 1 sibling, 0 replies; 21+ messages in thread From: tip-bot for Wang Nan @ 2017-11-18 8:30 UTC (permalink / raw) To: linux-tip-commits Cc: acme, jolsa, tglx, mingo, hpa, linux-kernel, kan.liang, wangnan0, namhyung Commit-ID: d492326f160e44e08fcf132a63163b36dd8e8839 Gitweb: https://git.kernel.org/tip/d492326f160e44e08fcf132a63163b36dd8e8839 Author: Wang Nan <wangnan0@huawei.com> AuthorDate: Mon, 13 Nov 2017 01:38:04 +0000 Committer: Arnaldo Carvalho de Melo <acme@redhat.com> CommitDate: Thu, 16 Nov 2017 14:49:57 -0300 perf tests: Set evlist of test__backward_ring_buffer() to !overwrite Setting overwrite in perf_evlist__mmap() is meaningless because the event in this evlist is already have 'overwrite' postfix and goes to backward ring buffer automatically. Pass 'false' to perf_evlist__mmap() to make it similar to others. Signed-off-by: Wang Nan <wangnan0@huawei.com> Cc: Jiri Olsa <jolsa@redhat.com> Cc: Kan Liang <kan.liang@intel.com> Cc: Namhyung Kim <namhyung@kernel.org> Link: http://lkml.kernel.org/r/20171113013809.212417-3-wangnan0@huawei.com Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com> --- tools/perf/tests/backward-ring-buffer.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tools/perf/tests/backward-ring-buffer.c b/tools/perf/tests/backward-ring-buffer.c index 71b9a0b..43a8c6a 100644 --- a/tools/perf/tests/backward-ring-buffer.c +++ b/tools/perf/tests/backward-ring-buffer.c @@ -59,7 +59,7 @@ static int do_test(struct perf_evlist *evlist, int mmap_pages, int err; char sbuf[STRERR_BUFSIZE]; - err = perf_evlist__mmap(evlist, mmap_pages, true); + err = perf_evlist__mmap(evlist, mmap_pages, false); if (err < 0) { pr_debug("perf_evlist__mmap: %s\n", str_error_r(errno, sbuf, sizeof(sbuf))); ^ permalink raw reply related [flat|nested] 21+ messages in thread
* [PATCH 3/7] perf tests: Set evlist of test__sw_clock_freq() to !overwrite 2017-11-13 1:38 [PATCH 0/7] perf tools: Clarify overwrite and backward, bugfix Wang Nan 2017-11-13 1:38 ` [PATCH 1/7] perf mmap: Fix perf backward recording Wang Nan 2017-11-13 1:38 ` [PATCH 2/7] perf tests: Set evlist of test__backward_ring_buffer() to !overwrite Wang Nan @ 2017-11-13 1:38 ` Wang Nan 2017-11-13 18:31 ` Arnaldo Carvalho de Melo 2017-11-18 8:30 ` [tip:perf/core] " tip-bot for Wang Nan 2017-11-13 1:38 ` [PATCH 4/7] perf tests: Set evlist of test__basic_mmap() " Wang Nan ` (4 subsequent siblings) 7 siblings, 2 replies; 21+ messages in thread From: Wang Nan @ 2017-11-13 1:38 UTC (permalink / raw) To: linux-kernel, kan.liang, acme, jolsa, namhyung; +Cc: Wang Nan Unsetting overwrite when calling perf_evlist__mmap is harmless. This commit passes false to it, makes following commits eliminate the overwrite argument easier. Signed-off-by: Wang Nan <wangnan0@huawei.com> --- tools/perf/tests/sw-clock.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tools/perf/tests/sw-clock.c b/tools/perf/tests/sw-clock.c index d88511f..c468e6c 100644 --- a/tools/perf/tests/sw-clock.c +++ b/tools/perf/tests/sw-clock.c @@ -77,7 +77,7 @@ static int __test__sw_clock_freq(enum perf_sw_ids clock_id) goto out_delete_evlist; } - err = perf_evlist__mmap(evlist, 128, true); + err = perf_evlist__mmap(evlist, 128, false); if (err < 0) { pr_debug("failed to mmap event: %d (%s)\n", errno, str_error_r(errno, sbuf, sizeof(sbuf))); -- 2.10.1 ^ permalink raw reply related [flat|nested] 21+ messages in thread
* Re: [PATCH 3/7] perf tests: Set evlist of test__sw_clock_freq() to !overwrite 2017-11-13 1:38 ` [PATCH 3/7] perf tests: Set evlist of test__sw_clock_freq() " Wang Nan @ 2017-11-13 18:31 ` Arnaldo Carvalho de Melo 2017-11-18 8:30 ` [tip:perf/core] " tip-bot for Wang Nan 1 sibling, 0 replies; 21+ messages in thread From: Arnaldo Carvalho de Melo @ 2017-11-13 18:31 UTC (permalink / raw) To: Wang Nan; +Cc: linux-kernel, kan.liang, jolsa, namhyung Em Mon, Nov 13, 2017 at 01:38:05AM +0000, Wang Nan escreveu: > Unsetting overwrite when calling perf_evlist__mmap is harmless. This commit > passes false to it, makes following commits eliminate the overwrite argument > easier. applied > Signed-off-by: Wang Nan <wangnan0@huawei.com> > --- > tools/perf/tests/sw-clock.c | 2 +- > 1 file changed, 1 insertion(+), 1 deletion(-) > > diff --git a/tools/perf/tests/sw-clock.c b/tools/perf/tests/sw-clock.c > index d88511f..c468e6c 100644 > --- a/tools/perf/tests/sw-clock.c > +++ b/tools/perf/tests/sw-clock.c > @@ -77,7 +77,7 @@ static int __test__sw_clock_freq(enum perf_sw_ids clock_id) > goto out_delete_evlist; > } > > - err = perf_evlist__mmap(evlist, 128, true); > + err = perf_evlist__mmap(evlist, 128, false); > if (err < 0) { > pr_debug("failed to mmap event: %d (%s)\n", errno, > str_error_r(errno, sbuf, sizeof(sbuf))); > -- > 2.10.1 ^ permalink raw reply [flat|nested] 21+ messages in thread
* [tip:perf/core] perf tests: Set evlist of test__sw_clock_freq() to !overwrite 2017-11-13 1:38 ` [PATCH 3/7] perf tests: Set evlist of test__sw_clock_freq() " Wang Nan 2017-11-13 18:31 ` Arnaldo Carvalho de Melo @ 2017-11-18 8:30 ` tip-bot for Wang Nan 1 sibling, 0 replies; 21+ messages in thread From: tip-bot for Wang Nan @ 2017-11-18 8:30 UTC (permalink / raw) To: linux-tip-commits Cc: mingo, kan.liang, wangnan0, hpa, tglx, acme, namhyung, jolsa, linux-kernel Commit-ID: 677b0601768881934f658bebb1713c3c843893fa Gitweb: https://git.kernel.org/tip/677b0601768881934f658bebb1713c3c843893fa Author: Wang Nan <wangnan0@huawei.com> AuthorDate: Mon, 13 Nov 2017 01:38:05 +0000 Committer: Arnaldo Carvalho de Melo <acme@redhat.com> CommitDate: Thu, 16 Nov 2017 14:49:57 -0300 perf tests: Set evlist of test__sw_clock_freq() to !overwrite Unsetting overwrite when calling perf_evlist__mmap is harmless. This commit passes false to it, makes following commits eliminate the overwrite argument easier. Signed-off-by: Wang Nan <wangnan0@huawei.com> Cc: Jiri Olsa <jolsa@redhat.com> Cc: Kan Liang <kan.liang@intel.com> Cc: Namhyung Kim <namhyung@kernel.org> Link: http://lkml.kernel.org/r/20171113013809.212417-4-wangnan0@huawei.com Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com> --- tools/perf/tests/sw-clock.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tools/perf/tests/sw-clock.c b/tools/perf/tests/sw-clock.c index 725a196..c6937ed 100644 --- a/tools/perf/tests/sw-clock.c +++ b/tools/perf/tests/sw-clock.c @@ -78,7 +78,7 @@ static int __test__sw_clock_freq(enum perf_sw_ids clock_id) goto out_delete_evlist; } - err = perf_evlist__mmap(evlist, 128, true); + err = perf_evlist__mmap(evlist, 128, false); if (err < 0) { pr_debug("failed to mmap event: %d (%s)\n", errno, str_error_r(errno, sbuf, sizeof(sbuf))); ^ permalink raw reply related [flat|nested] 21+ messages in thread
* [PATCH 4/7] perf tests: Set evlist of test__basic_mmap() to !overwrite 2017-11-13 1:38 [PATCH 0/7] perf tools: Clarify overwrite and backward, bugfix Wang Nan ` (2 preceding siblings ...) 2017-11-13 1:38 ` [PATCH 3/7] perf tests: Set evlist of test__sw_clock_freq() " Wang Nan @ 2017-11-13 1:38 ` Wang Nan 2017-11-13 18:31 ` Arnaldo Carvalho de Melo 2017-11-18 8:31 ` [tip:perf/core] " tip-bot for Wang Nan 2017-11-13 1:38 ` [PATCH 5/7] perf tests: Set evlist of test__task_exit() " Wang Nan ` (3 subsequent siblings) 7 siblings, 2 replies; 21+ messages in thread From: Wang Nan @ 2017-11-13 1:38 UTC (permalink / raw) To: linux-kernel, kan.liang, acme, jolsa, namhyung; +Cc: Wang Nan In this test, a large ring buffer is required so all events can feed into, so overwrite or not is meaningless. Change to !overwrite so following commits can remove this argument. Signed-off-by: Wang Nan <wangnan0@huawei.com> --- tools/perf/tests/mmap-basic.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tools/perf/tests/mmap-basic.c b/tools/perf/tests/mmap-basic.c index bc8a70e..667d696 100644 --- a/tools/perf/tests/mmap-basic.c +++ b/tools/perf/tests/mmap-basic.c @@ -93,7 +93,7 @@ int test__basic_mmap(struct test *test __maybe_unused, int subtest __maybe_unuse expected_nr_events[i] = 1 + rand() % 127; } - if (perf_evlist__mmap(evlist, 128, true) < 0) { + if (perf_evlist__mmap(evlist, 128, false) < 0) { pr_debug("failed to mmap events: %d (%s)\n", errno, str_error_r(errno, sbuf, sizeof(sbuf))); goto out_delete_evlist; -- 2.10.1 ^ permalink raw reply related [flat|nested] 21+ messages in thread
* Re: [PATCH 4/7] perf tests: Set evlist of test__basic_mmap() to !overwrite 2017-11-13 1:38 ` [PATCH 4/7] perf tests: Set evlist of test__basic_mmap() " Wang Nan @ 2017-11-13 18:31 ` Arnaldo Carvalho de Melo 2017-11-18 8:31 ` [tip:perf/core] " tip-bot for Wang Nan 1 sibling, 0 replies; 21+ messages in thread From: Arnaldo Carvalho de Melo @ 2017-11-13 18:31 UTC (permalink / raw) To: Wang Nan; +Cc: linux-kernel, kan.liang, jolsa, namhyung Em Mon, Nov 13, 2017 at 01:38:06AM +0000, Wang Nan escreveu: > In this test, a large ring buffer is required so all events can feed into, > so overwrite or not is meaningless. > > Change to !overwrite so following commits can remove this argument. applied > Signed-off-by: Wang Nan <wangnan0@huawei.com> > --- > tools/perf/tests/mmap-basic.c | 2 +- > 1 file changed, 1 insertion(+), 1 deletion(-) > > diff --git a/tools/perf/tests/mmap-basic.c b/tools/perf/tests/mmap-basic.c > index bc8a70e..667d696 100644 > --- a/tools/perf/tests/mmap-basic.c > +++ b/tools/perf/tests/mmap-basic.c > @@ -93,7 +93,7 @@ int test__basic_mmap(struct test *test __maybe_unused, int subtest __maybe_unuse > expected_nr_events[i] = 1 + rand() % 127; > } > > - if (perf_evlist__mmap(evlist, 128, true) < 0) { > + if (perf_evlist__mmap(evlist, 128, false) < 0) { > pr_debug("failed to mmap events: %d (%s)\n", errno, > str_error_r(errno, sbuf, sizeof(sbuf))); > goto out_delete_evlist; > -- > 2.10.1 ^ permalink raw reply [flat|nested] 21+ messages in thread
* [tip:perf/core] perf tests: Set evlist of test__basic_mmap() to !overwrite 2017-11-13 1:38 ` [PATCH 4/7] perf tests: Set evlist of test__basic_mmap() " Wang Nan 2017-11-13 18:31 ` Arnaldo Carvalho de Melo @ 2017-11-18 8:31 ` tip-bot for Wang Nan 1 sibling, 0 replies; 21+ messages in thread From: tip-bot for Wang Nan @ 2017-11-18 8:31 UTC (permalink / raw) To: linux-tip-commits Cc: jolsa, acme, hpa, kan.liang, wangnan0, linux-kernel, mingo, namhyung, tglx Commit-ID: 301d724aa19add1c0cf3ec8cad0d10151d30393f Gitweb: https://git.kernel.org/tip/301d724aa19add1c0cf3ec8cad0d10151d30393f Author: Wang Nan <wangnan0@huawei.com> AuthorDate: Mon, 13 Nov 2017 01:38:06 +0000 Committer: Arnaldo Carvalho de Melo <acme@redhat.com> CommitDate: Thu, 16 Nov 2017 14:49:58 -0300 perf tests: Set evlist of test__basic_mmap() to !overwrite In this test, a large ring buffer is required so all events can feed into, so overwrite or not is meaningless. Change to !overwrite so following commits can remove this argument. Signed-off-by: Wang Nan <wangnan0@huawei.com> Cc: Jiri Olsa <jolsa@redhat.com> Cc: Kan Liang <kan.liang@intel.com> Cc: Namhyung Kim <namhyung@kernel.org> Link: http://lkml.kernel.org/r/20171113013809.212417-5-wangnan0@huawei.com Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com> --- tools/perf/tests/mmap-basic.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tools/perf/tests/mmap-basic.c b/tools/perf/tests/mmap-basic.c index 5a8bf31..91f10d6 100644 --- a/tools/perf/tests/mmap-basic.c +++ b/tools/perf/tests/mmap-basic.c @@ -94,7 +94,7 @@ int test__basic_mmap(struct test *test __maybe_unused, int subtest __maybe_unuse expected_nr_events[i] = 1 + rand() % 127; } - if (perf_evlist__mmap(evlist, 128, true) < 0) { + if (perf_evlist__mmap(evlist, 128, false) < 0) { pr_debug("failed to mmap events: %d (%s)\n", errno, str_error_r(errno, sbuf, sizeof(sbuf))); goto out_delete_evlist; ^ permalink raw reply related [flat|nested] 21+ messages in thread
* [PATCH 5/7] perf tests: Set evlist of test__task_exit() to !overwrite 2017-11-13 1:38 [PATCH 0/7] perf tools: Clarify overwrite and backward, bugfix Wang Nan ` (3 preceding siblings ...) 2017-11-13 1:38 ` [PATCH 4/7] perf tests: Set evlist of test__basic_mmap() " Wang Nan @ 2017-11-13 1:38 ` Wang Nan 2017-11-13 18:32 ` Arnaldo Carvalho de Melo 2017-11-18 8:31 ` [tip:perf/core] " tip-bot for Wang Nan 2017-11-13 1:38 ` [PATCH 6/7] perf tools: Remove 'overwrite' concept from code level Wang Nan ` (2 subsequent siblings) 7 siblings, 2 replies; 21+ messages in thread From: Wang Nan @ 2017-11-13 1:38 UTC (permalink / raw) To: linux-kernel, kan.liang, acme, jolsa, namhyung; +Cc: Wang Nan Changing ringbuffer to !overwrite in this task is harmless because this test uses a very low frequency (1) and using a very simple program (true). There should have only 3 events in the whole test. Overwriting is impossible to happen. Signed-off-by: Wang Nan <wangnan0@huawei.com> --- tools/perf/tests/task-exit.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tools/perf/tests/task-exit.c b/tools/perf/tests/task-exit.c index f0881d0..4fb6609 100644 --- a/tools/perf/tests/task-exit.c +++ b/tools/perf/tests/task-exit.c @@ -96,7 +96,7 @@ int test__task_exit(struct test *test __maybe_unused, int subtest __maybe_unused goto out_delete_evlist; } - if (perf_evlist__mmap(evlist, 128, true) < 0) { + if (perf_evlist__mmap(evlist, 128, false) < 0) { pr_debug("failed to mmap events: %d (%s)\n", errno, str_error_r(errno, sbuf, sizeof(sbuf))); goto out_delete_evlist; -- 2.10.1 ^ permalink raw reply related [flat|nested] 21+ messages in thread
* Re: [PATCH 5/7] perf tests: Set evlist of test__task_exit() to !overwrite 2017-11-13 1:38 ` [PATCH 5/7] perf tests: Set evlist of test__task_exit() " Wang Nan @ 2017-11-13 18:32 ` Arnaldo Carvalho de Melo 2017-11-18 8:31 ` [tip:perf/core] " tip-bot for Wang Nan 1 sibling, 0 replies; 21+ messages in thread From: Arnaldo Carvalho de Melo @ 2017-11-13 18:32 UTC (permalink / raw) To: Wang Nan; +Cc: linux-kernel, kan.liang, jolsa, namhyung Em Mon, Nov 13, 2017 at 01:38:07AM +0000, Wang Nan escreveu: > Changing ringbuffer to !overwrite in this task is harmless because > this test uses a very low frequency (1) and using a very simple > program (true). There should have only 3 events in the whole test. > Overwriting is impossible to happen. applied > Signed-off-by: Wang Nan <wangnan0@huawei.com> > --- > tools/perf/tests/task-exit.c | 2 +- > 1 file changed, 1 insertion(+), 1 deletion(-) > > diff --git a/tools/perf/tests/task-exit.c b/tools/perf/tests/task-exit.c > index f0881d0..4fb6609 100644 > --- a/tools/perf/tests/task-exit.c > +++ b/tools/perf/tests/task-exit.c > @@ -96,7 +96,7 @@ int test__task_exit(struct test *test __maybe_unused, int subtest __maybe_unused > goto out_delete_evlist; > } > > - if (perf_evlist__mmap(evlist, 128, true) < 0) { > + if (perf_evlist__mmap(evlist, 128, false) < 0) { > pr_debug("failed to mmap events: %d (%s)\n", errno, > str_error_r(errno, sbuf, sizeof(sbuf))); > goto out_delete_evlist; > -- > 2.10.1 ^ permalink raw reply [flat|nested] 21+ messages in thread
* [tip:perf/core] perf tests: Set evlist of test__task_exit() to !overwrite 2017-11-13 1:38 ` [PATCH 5/7] perf tests: Set evlist of test__task_exit() " Wang Nan 2017-11-13 18:32 ` Arnaldo Carvalho de Melo @ 2017-11-18 8:31 ` tip-bot for Wang Nan 1 sibling, 0 replies; 21+ messages in thread From: tip-bot for Wang Nan @ 2017-11-18 8:31 UTC (permalink / raw) To: linux-tip-commits Cc: acme, mingo, linux-kernel, wangnan0, kan.liang, namhyung, hpa, jolsa, tglx Commit-ID: a0e3dd79cdd8ad838cbcefeff530a15193f8336e Gitweb: https://git.kernel.org/tip/a0e3dd79cdd8ad838cbcefeff530a15193f8336e Author: Wang Nan <wangnan0@huawei.com> AuthorDate: Mon, 13 Nov 2017 01:38:07 +0000 Committer: Arnaldo Carvalho de Melo <acme@redhat.com> CommitDate: Thu, 16 Nov 2017 14:49:58 -0300 perf tests: Set evlist of test__task_exit() to !overwrite Changing ringbuffer to !overwrite in this task is harmless because this test uses a very low frequency (1) and using a very simple program (true). There should have only 3 events in the whole test. Overwriting is impossible to happen. Signed-off-by: Wang Nan <wangnan0@huawei.com> Cc: Jiri Olsa <jolsa@redhat.com> Cc: Kan Liang <kan.liang@intel.com> Cc: Namhyung Kim <namhyung@kernel.org> Link: http://lkml.kernel.org/r/20171113013809.212417-6-wangnan0@huawei.com Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com> --- tools/perf/tests/task-exit.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tools/perf/tests/task-exit.c b/tools/perf/tests/task-exit.c index bc4a734..98c0984 100644 --- a/tools/perf/tests/task-exit.c +++ b/tools/perf/tests/task-exit.c @@ -97,7 +97,7 @@ int test__task_exit(struct test *test __maybe_unused, int subtest __maybe_unused goto out_delete_evlist; } - if (perf_evlist__mmap(evlist, 128, true) < 0) { + if (perf_evlist__mmap(evlist, 128, false) < 0) { pr_debug("failed to mmap events: %d (%s)\n", errno, str_error_r(errno, sbuf, sizeof(sbuf))); goto out_delete_evlist; ^ permalink raw reply related [flat|nested] 21+ messages in thread
* [PATCH 6/7] perf tools: Remove 'overwrite' concept from code level 2017-11-13 1:38 [PATCH 0/7] perf tools: Clarify overwrite and backward, bugfix Wang Nan ` (4 preceding siblings ...) 2017-11-13 1:38 ` [PATCH 5/7] perf tests: Set evlist of test__task_exit() " Wang Nan @ 2017-11-13 1:38 ` Wang Nan 2017-11-13 11:52 ` Jiri Olsa 2017-11-13 15:07 ` Liang, Kan 2017-11-13 1:38 ` [PATCH 7/7] perf tools: Remove prot field in mmap param Wang Nan 2017-11-13 14:49 ` [PATCH 0/7] perf tools: Clarify overwrite and backward, bugfix Liang, Kan 7 siblings, 2 replies; 21+ messages in thread From: Wang Nan @ 2017-11-13 1:38 UTC (permalink / raw) To: linux-kernel, kan.liang, acme, jolsa, namhyung; +Cc: Wang Nan Since all 'overwrite' usage are cleaned and no one really use a readonly main ringbuffer, remove 'overwrite' from function arguments and evlist. The concept of 'overwrite' and 'write_backward' are cleanner than before: 1. In code level, there's no 'overwrite' concept. Each evlist has two ringbuffer groups. One is read-write/forward, another is readonly/backward. Don't support read-write/backward and readonly/forward. 2. In user interface, we keep '--overwrite' and translate it into write_backward in each event. Signed-off-by: Wang Nan <wangnan0@huawei.com> --- tools/perf/arch/x86/tests/perf-time-to-tsc.c | 2 +- tools/perf/builtin-kvm.c | 2 +- tools/perf/builtin-record.c | 4 ++-- tools/perf/builtin-top.c | 2 +- tools/perf/builtin-trace.c | 2 +- tools/perf/tests/backward-ring-buffer.c | 2 +- tools/perf/tests/bpf.c | 2 +- tools/perf/tests/code-reading.c | 2 +- tools/perf/tests/keep-tracking.c | 2 +- tools/perf/tests/mmap-basic.c | 2 +- tools/perf/tests/openat-syscall-tp-fields.c | 2 +- tools/perf/tests/perf-record.c | 2 +- tools/perf/tests/sw-clock.c | 2 +- tools/perf/tests/switch-tracking.c | 2 +- tools/perf/tests/task-exit.c | 2 +- tools/perf/util/evlist.c | 14 ++++++-------- tools/perf/util/evlist.h | 6 ++---- tools/perf/util/mmap.c | 6 +++--- tools/perf/util/mmap.h | 2 +- tools/perf/util/python.c | 10 +++++----- 20 files changed, 33 insertions(+), 37 deletions(-) diff --git a/tools/perf/arch/x86/tests/perf-time-to-tsc.c b/tools/perf/arch/x86/tests/perf-time-to-tsc.c index 5dd7efb..c7ea843 100644 --- a/tools/perf/arch/x86/tests/perf-time-to-tsc.c +++ b/tools/perf/arch/x86/tests/perf-time-to-tsc.c @@ -83,7 +83,7 @@ int test__perf_time_to_tsc(struct test *test __maybe_unused, int subtest __maybe CHECK__(perf_evlist__open(evlist)); - CHECK__(perf_evlist__mmap(evlist, UINT_MAX, false)); + CHECK__(perf_evlist__mmap(evlist, UINT_MAX)); pc = evlist->mmap[0].base; ret = perf_read_tsc_conversion(pc, &tc); diff --git a/tools/perf/builtin-kvm.c b/tools/perf/builtin-kvm.c index 0af4c09..e3e2a80 100644 --- a/tools/perf/builtin-kvm.c +++ b/tools/perf/builtin-kvm.c @@ -1043,7 +1043,7 @@ static int kvm_live_open_events(struct perf_kvm_stat *kvm) goto out; } - if (perf_evlist__mmap(evlist, kvm->opts.mmap_pages, false) < 0) { + if (perf_evlist__mmap(evlist, kvm->opts.mmap_pages) < 0) { ui__error("Failed to mmap the events: %s\n", str_error_r(errno, sbuf, sizeof(sbuf))); perf_evlist__close(evlist); diff --git a/tools/perf/builtin-record.c b/tools/perf/builtin-record.c index f4d9fc5..b3ef33f 100644 --- a/tools/perf/builtin-record.c +++ b/tools/perf/builtin-record.c @@ -300,7 +300,7 @@ static int record__mmap_evlist(struct record *rec, struct record_opts *opts = &rec->opts; char msg[512]; - if (perf_evlist__mmap_ex(evlist, opts->mmap_pages, false, + if (perf_evlist__mmap_ex(evlist, opts->mmap_pages, opts->auxtrace_mmap_pages, opts->auxtrace_snapshot_mode) < 0) { if (errno == EPERM) { @@ -481,7 +481,7 @@ static int record__mmap_read_evlist(struct record *rec, struct perf_evlist *evli struct auxtrace_mmap *mm = &maps[i].auxtrace_mmap; if (maps[i].base) { - if (perf_mmap__push(&maps[i], evlist->overwrite, backward, rec, record__pushfn) != 0) { + if (perf_mmap__push(&maps[i], backward, rec, record__pushfn) != 0) { rc = -1; goto out; } diff --git a/tools/perf/builtin-top.c b/tools/perf/builtin-top.c index 477a869..83d2ae2 100644 --- a/tools/perf/builtin-top.c +++ b/tools/perf/builtin-top.c @@ -902,7 +902,7 @@ static int perf_top__start_counters(struct perf_top *top) } } - if (perf_evlist__mmap(evlist, opts->mmap_pages, false) < 0) { + if (perf_evlist__mmap(evlist, opts->mmap_pages) < 0) { ui__error("Failed to mmap with %d (%s)\n", errno, str_error_r(errno, msg, sizeof(msg))); goto out_err; diff --git a/tools/perf/builtin-trace.c b/tools/perf/builtin-trace.c index c373f9a..c3f2f98 100644 --- a/tools/perf/builtin-trace.c +++ b/tools/perf/builtin-trace.c @@ -2404,7 +2404,7 @@ static int trace__run(struct trace *trace, int argc, const char **argv) if (err < 0) goto out_error_apply_filters; - err = perf_evlist__mmap(evlist, trace->opts.mmap_pages, false); + err = perf_evlist__mmap(evlist, trace->opts.mmap_pages); if (err < 0) goto out_error_mmap; diff --git a/tools/perf/tests/backward-ring-buffer.c b/tools/perf/tests/backward-ring-buffer.c index 992c917..bdebcf9 100644 --- a/tools/perf/tests/backward-ring-buffer.c +++ b/tools/perf/tests/backward-ring-buffer.c @@ -58,7 +58,7 @@ static int do_test(struct perf_evlist *evlist, int mmap_pages, int err; char sbuf[STRERR_BUFSIZE]; - err = perf_evlist__mmap(evlist, mmap_pages, false); + err = perf_evlist__mmap(evlist, mmap_pages); if (err < 0) { pr_debug("perf_evlist__mmap: %s\n", str_error_r(errno, sbuf, sizeof(sbuf))); diff --git a/tools/perf/tests/bpf.c b/tools/perf/tests/bpf.c index 34c22cd..c433dd3 100644 --- a/tools/perf/tests/bpf.c +++ b/tools/perf/tests/bpf.c @@ -167,7 +167,7 @@ static int do_test(struct bpf_object *obj, int (*func)(void), goto out_delete_evlist; } - err = perf_evlist__mmap(evlist, opts.mmap_pages, false); + err = perf_evlist__mmap(evlist, opts.mmap_pages); if (err < 0) { pr_debug("perf_evlist__mmap: %s\n", str_error_r(errno, sbuf, sizeof(sbuf))); diff --git a/tools/perf/tests/code-reading.c b/tools/perf/tests/code-reading.c index 466a462..b6c813e 100644 --- a/tools/perf/tests/code-reading.c +++ b/tools/perf/tests/code-reading.c @@ -638,7 +638,7 @@ static int do_test_code_reading(bool try_kcore) break; } - ret = perf_evlist__mmap(evlist, UINT_MAX, false); + ret = perf_evlist__mmap(evlist, UINT_MAX); if (ret < 0) { pr_debug("perf_evlist__mmap failed\n"); goto out_put; diff --git a/tools/perf/tests/keep-tracking.c b/tools/perf/tests/keep-tracking.c index 7394286..b282916 100644 --- a/tools/perf/tests/keep-tracking.c +++ b/tools/perf/tests/keep-tracking.c @@ -94,7 +94,7 @@ int test__keep_tracking(struct test *test __maybe_unused, int subtest __maybe_un goto out_err; } - CHECK__(perf_evlist__mmap(evlist, UINT_MAX, false)); + CHECK__(perf_evlist__mmap(evlist, UINT_MAX)); /* * First, test that a 'comm' event can be found when the event is diff --git a/tools/perf/tests/mmap-basic.c b/tools/perf/tests/mmap-basic.c index 667d696..f43d862 100644 --- a/tools/perf/tests/mmap-basic.c +++ b/tools/perf/tests/mmap-basic.c @@ -93,7 +93,7 @@ int test__basic_mmap(struct test *test __maybe_unused, int subtest __maybe_unuse expected_nr_events[i] = 1 + rand() % 127; } - if (perf_evlist__mmap(evlist, 128, false) < 0) { + if (perf_evlist__mmap(evlist, 128) < 0) { pr_debug("failed to mmap events: %d (%s)\n", errno, str_error_r(errno, sbuf, sizeof(sbuf))); goto out_delete_evlist; diff --git a/tools/perf/tests/openat-syscall-tp-fields.c b/tools/perf/tests/openat-syscall-tp-fields.c index b6ee1c4..f68d818 100644 --- a/tools/perf/tests/openat-syscall-tp-fields.c +++ b/tools/perf/tests/openat-syscall-tp-fields.c @@ -63,7 +63,7 @@ int test__syscall_openat_tp_fields(struct test *test __maybe_unused, int subtest goto out_delete_evlist; } - err = perf_evlist__mmap(evlist, UINT_MAX, false); + err = perf_evlist__mmap(evlist, UINT_MAX); if (err < 0) { pr_debug("perf_evlist__mmap: %s\n", str_error_r(errno, sbuf, sizeof(sbuf))); diff --git a/tools/perf/tests/perf-record.c b/tools/perf/tests/perf-record.c index 19b6500..f9fbd8b 100644 --- a/tools/perf/tests/perf-record.c +++ b/tools/perf/tests/perf-record.c @@ -140,7 +140,7 @@ int test__PERF_RECORD(struct test *test __maybe_unused, int subtest __maybe_unus * fds in the same CPU to be injected in the same mmap ring buffer * (using ioctl(PERF_EVENT_IOC_SET_OUTPUT)). */ - err = perf_evlist__mmap(evlist, opts.mmap_pages, false); + err = perf_evlist__mmap(evlist, opts.mmap_pages); if (err < 0) { pr_debug("perf_evlist__mmap: %s\n", str_error_r(errno, sbuf, sizeof(sbuf))); diff --git a/tools/perf/tests/sw-clock.c b/tools/perf/tests/sw-clock.c index c468e6c..fd01b24 100644 --- a/tools/perf/tests/sw-clock.c +++ b/tools/perf/tests/sw-clock.c @@ -77,7 +77,7 @@ static int __test__sw_clock_freq(enum perf_sw_ids clock_id) goto out_delete_evlist; } - err = perf_evlist__mmap(evlist, 128, false); + err = perf_evlist__mmap(evlist, 128); if (err < 0) { pr_debug("failed to mmap event: %d (%s)\n", errno, str_error_r(errno, sbuf, sizeof(sbuf))); diff --git a/tools/perf/tests/switch-tracking.c b/tools/perf/tests/switch-tracking.c index 2acd785..9fee2a0 100644 --- a/tools/perf/tests/switch-tracking.c +++ b/tools/perf/tests/switch-tracking.c @@ -448,7 +448,7 @@ int test__switch_tracking(struct test *test __maybe_unused, int subtest __maybe_ goto out; } - err = perf_evlist__mmap(evlist, UINT_MAX, false); + err = perf_evlist__mmap(evlist, UINT_MAX); if (err) { pr_debug("perf_evlist__mmap failed!\n"); goto out_err; diff --git a/tools/perf/tests/task-exit.c b/tools/perf/tests/task-exit.c index 4fb6609..4ba5a27 100644 --- a/tools/perf/tests/task-exit.c +++ b/tools/perf/tests/task-exit.c @@ -96,7 +96,7 @@ int test__task_exit(struct test *test __maybe_unused, int subtest __maybe_unused goto out_delete_evlist; } - if (perf_evlist__mmap(evlist, 128, false) < 0) { + if (perf_evlist__mmap(evlist, 128) < 0) { pr_debug("failed to mmap events: %d (%s)\n", errno, str_error_r(errno, sbuf, sizeof(sbuf))); goto out_delete_evlist; diff --git a/tools/perf/util/evlist.c b/tools/perf/util/evlist.c index 4c5daba..4948d3d 100644 --- a/tools/perf/util/evlist.c +++ b/tools/perf/util/evlist.c @@ -711,7 +711,7 @@ union perf_event *perf_evlist__mmap_read_forward(struct perf_evlist *evlist, int * No need for read-write ring buffer: kernel stop outputting when * it hit md->prev (perf_mmap__consume()). */ - return perf_mmap__read_forward(md, evlist->overwrite); + return perf_mmap__read_forward(md, false); } union perf_event *perf_evlist__mmap_read_backward(struct perf_evlist *evlist, int idx) @@ -738,7 +738,7 @@ void perf_evlist__mmap_read_catchup(struct perf_evlist *evlist, int idx) void perf_evlist__mmap_consume(struct perf_evlist *evlist, int idx) { - perf_mmap__consume(&evlist->mmap[idx], evlist->overwrite); + perf_mmap__consume(&evlist->mmap[idx], false); } static void perf_evlist__munmap_nofree(struct perf_evlist *evlist) @@ -1058,14 +1058,14 @@ int perf_evlist__parse_mmap_pages(const struct option *opt, const char *str, * Return: %0 on success, negative error code otherwise. */ int perf_evlist__mmap_ex(struct perf_evlist *evlist, unsigned int pages, - bool overwrite, unsigned int auxtrace_pages, + unsigned int auxtrace_pages, bool auxtrace_overwrite) { struct perf_evsel *evsel; const struct cpu_map *cpus = evlist->cpus; const struct thread_map *threads = evlist->threads; struct mmap_params mp = { - .prot = PROT_READ | (overwrite ? 0 : PROT_WRITE), + .prot = PROT_READ | PROT_WRITE, }; if (!evlist->mmap) @@ -1076,7 +1076,6 @@ int perf_evlist__mmap_ex(struct perf_evlist *evlist, unsigned int pages, if (evlist->pollfd.entries == NULL && perf_evlist__alloc_pollfd(evlist) < 0) return -ENOMEM; - evlist->overwrite = overwrite; evlist->mmap_len = perf_evlist__mmap_size(pages); pr_debug("mmap size %zuB\n", evlist->mmap_len); mp.mask = evlist->mmap_len - page_size - 1; @@ -1097,10 +1096,9 @@ int perf_evlist__mmap_ex(struct perf_evlist *evlist, unsigned int pages, return perf_evlist__mmap_per_cpu(evlist, &mp); } -int perf_evlist__mmap(struct perf_evlist *evlist, unsigned int pages, - bool overwrite) +int perf_evlist__mmap(struct perf_evlist *evlist, unsigned int pages) { - return perf_evlist__mmap_ex(evlist, pages, overwrite, 0, false); + return perf_evlist__mmap_ex(evlist, pages, 0, false); } int perf_evlist__create_maps(struct perf_evlist *evlist, struct target *target) diff --git a/tools/perf/util/evlist.h b/tools/perf/util/evlist.h index 8c433e9..1dd3291 100644 --- a/tools/perf/util/evlist.h +++ b/tools/perf/util/evlist.h @@ -30,7 +30,6 @@ struct perf_evlist { int nr_entries; int nr_groups; int nr_mmaps; - bool overwrite; bool enabled; bool has_user_cpus; size_t mmap_len; @@ -168,10 +167,9 @@ int perf_evlist__parse_mmap_pages(const struct option *opt, unsigned long perf_event_mlock_kb_in_pages(void); int perf_evlist__mmap_ex(struct perf_evlist *evlist, unsigned int pages, - bool overwrite, unsigned int auxtrace_pages, + unsigned int auxtrace_pages, bool auxtrace_overwrite); -int perf_evlist__mmap(struct perf_evlist *evlist, unsigned int pages, - bool overwrite); +int perf_evlist__mmap(struct perf_evlist *evlist, unsigned int pages); void perf_evlist__munmap(struct perf_evlist *evlist); size_t perf_evlist__mmap_size(unsigned long pages); diff --git a/tools/perf/util/mmap.c b/tools/perf/util/mmap.c index 9fe5f9c..703ed41 100644 --- a/tools/perf/util/mmap.c +++ b/tools/perf/util/mmap.c @@ -299,7 +299,7 @@ static int rb_find_range(void *data, int mask, u64 head, u64 old, return backward_rb_find_range(data, mask, head, start, end); } -int perf_mmap__push(struct perf_mmap *md, bool overwrite, bool backward, +int perf_mmap__push(struct perf_mmap *md, bool backward, void *to, int push(void *to, void *buf, size_t size)) { u64 head = perf_mmap__read_head(md); @@ -321,7 +321,7 @@ int perf_mmap__push(struct perf_mmap *md, bool overwrite, bool backward, WARN_ONCE(1, "failed to keep up with mmap data. (warn only once)\n"); md->prev = head; - perf_mmap__consume(md, overwrite || backward); + perf_mmap__consume(md, backward); return 0; } @@ -346,7 +346,7 @@ int perf_mmap__push(struct perf_mmap *md, bool overwrite, bool backward, } md->prev = head; - perf_mmap__consume(md, overwrite || backward); + perf_mmap__consume(md, backward); out: return rc; } diff --git a/tools/perf/util/mmap.h b/tools/perf/util/mmap.h index efd78b8..2c3d291 100644 --- a/tools/perf/util/mmap.h +++ b/tools/perf/util/mmap.h @@ -89,7 +89,7 @@ static inline void perf_mmap__write_tail(struct perf_mmap *md, u64 tail) union perf_event *perf_mmap__read_forward(struct perf_mmap *map, bool check_messup); union perf_event *perf_mmap__read_backward(struct perf_mmap *map); -int perf_mmap__push(struct perf_mmap *md, bool overwrite, bool backward, +int perf_mmap__push(struct perf_mmap *md, bool backward, void *to, int push(void *to, void *buf, size_t size)); size_t perf_mmap__mmap_len(struct perf_mmap *map); diff --git a/tools/perf/util/python.c b/tools/perf/util/python.c index c129e99..ece33b4 100644 --- a/tools/perf/util/python.c +++ b/tools/perf/util/python.c @@ -856,14 +856,14 @@ static PyObject *pyrf_evlist__mmap(struct pyrf_evlist *pevlist, PyObject *args, PyObject *kwargs) { struct perf_evlist *evlist = &pevlist->evlist; - static char *kwlist[] = { "pages", "overwrite", NULL }; - int pages = 128, overwrite = false; + static char *kwlist[] = { "pages", NULL }; + int pages = 128; - if (!PyArg_ParseTupleAndKeywords(args, kwargs, "|ii", kwlist, - &pages, &overwrite)) + if (!PyArg_ParseTupleAndKeywords(args, kwargs, "|i", kwlist, + &pages)) return NULL; - if (perf_evlist__mmap(evlist, pages, overwrite) < 0) { + if (perf_evlist__mmap(evlist, pages) < 0) { PyErr_SetFromErrno(PyExc_OSError); return NULL; } -- 2.10.1 ^ permalink raw reply related [flat|nested] 21+ messages in thread
* Re: [PATCH 6/7] perf tools: Remove 'overwrite' concept from code level 2017-11-13 1:38 ` [PATCH 6/7] perf tools: Remove 'overwrite' concept from code level Wang Nan @ 2017-11-13 11:52 ` Jiri Olsa 2017-11-13 15:07 ` Liang, Kan 1 sibling, 0 replies; 21+ messages in thread From: Jiri Olsa @ 2017-11-13 11:52 UTC (permalink / raw) To: Wang Nan; +Cc: linux-kernel, kan.liang, acme, namhyung On Mon, Nov 13, 2017 at 01:38:08AM +0000, Wang Nan wrote: SNIP > size_t perf_mmap__mmap_len(struct perf_mmap *map); > diff --git a/tools/perf/util/python.c b/tools/perf/util/python.c > index c129e99..ece33b4 100644 > --- a/tools/perf/util/python.c > +++ b/tools/perf/util/python.c > @@ -856,14 +856,14 @@ static PyObject *pyrf_evlist__mmap(struct pyrf_evlist *pevlist, > PyObject *args, PyObject *kwargs) > { > struct perf_evlist *evlist = &pevlist->evlist; > - static char *kwlist[] = { "pages", "overwrite", NULL }; unlikely, but there might be already some users of this.. I think the best would be to keep the "overwrite" here and don't use it.. maybe warn or update docs, if there's any ;-) jirka > - int pages = 128, overwrite = false; > + static char *kwlist[] = { "pages", NULL }; > + int pages = 128; > > - if (!PyArg_ParseTupleAndKeywords(args, kwargs, "|ii", kwlist, > - &pages, &overwrite)) > + if (!PyArg_ParseTupleAndKeywords(args, kwargs, "|i", kwlist, > + &pages)) > return NULL; > > - if (perf_evlist__mmap(evlist, pages, overwrite) < 0) { > + if (perf_evlist__mmap(evlist, pages) < 0) { > PyErr_SetFromErrno(PyExc_OSError); > return NULL; > } > -- > 2.10.1 > ^ permalink raw reply [flat|nested] 21+ messages in thread
* RE: [PATCH 6/7] perf tools: Remove 'overwrite' concept from code level 2017-11-13 1:38 ` [PATCH 6/7] perf tools: Remove 'overwrite' concept from code level Wang Nan 2017-11-13 11:52 ` Jiri Olsa @ 2017-11-13 15:07 ` Liang, Kan 1 sibling, 0 replies; 21+ messages in thread From: Liang, Kan @ 2017-11-13 15:07 UTC (permalink / raw) To: Wang Nan, linux-kernel@vger.kernel.org, acme@kernel.org, jolsa@redhat.com, namhyung@kernel.org > Since all 'overwrite' usage are cleaned and no one really use a readonly main > ringbuffer, remove 'overwrite' from function arguments and evlist. The > concept > of 'overwrite' and 'write_backward' are cleanner than before: > > 1. In code level, there's no 'overwrite' concept. Each evlist has two > ringbuffer groups. One is read-write/forward, another is > readonly/backward. > Don't support read-write/backward and readonly/forward. > > 2. In user interface, we keep '--overwrite' and translate it into > write_backward > in each event. > > Signed-off-by: Wang Nan <wangnan0@huawei.com> > --- > tools/perf/arch/x86/tests/perf-time-to-tsc.c | 2 +- > tools/perf/builtin-kvm.c | 2 +- > tools/perf/builtin-record.c | 4 ++-- > tools/perf/builtin-top.c | 2 +- > tools/perf/builtin-trace.c | 2 +- > tools/perf/tests/backward-ring-buffer.c | 2 +- > tools/perf/tests/bpf.c | 2 +- > tools/perf/tests/code-reading.c | 2 +- > tools/perf/tests/keep-tracking.c | 2 +- > tools/perf/tests/mmap-basic.c | 2 +- > tools/perf/tests/openat-syscall-tp-fields.c | 2 +- > tools/perf/tests/perf-record.c | 2 +- > tools/perf/tests/sw-clock.c | 2 +- > tools/perf/tests/switch-tracking.c | 2 +- > tools/perf/tests/task-exit.c | 2 +- > tools/perf/util/evlist.c | 14 ++++++-------- > tools/perf/util/evlist.h | 6 ++---- > tools/perf/util/mmap.c | 6 +++--- > tools/perf/util/mmap.h | 2 +- > tools/perf/util/python.c | 10 +++++----- > 20 files changed, 33 insertions(+), 37 deletions(-) > > diff --git a/tools/perf/arch/x86/tests/perf-time-to-tsc.c > b/tools/perf/arch/x86/tests/perf-time-to-tsc.c > index 5dd7efb..c7ea843 100644 > --- a/tools/perf/arch/x86/tests/perf-time-to-tsc.c > +++ b/tools/perf/arch/x86/tests/perf-time-to-tsc.c > @@ -83,7 +83,7 @@ int test__perf_time_to_tsc(struct test *test > __maybe_unused, int subtest __maybe > > CHECK__(perf_evlist__open(evlist)); > > - CHECK__(perf_evlist__mmap(evlist, UINT_MAX, false)); > + CHECK__(perf_evlist__mmap(evlist, UINT_MAX)); > > pc = evlist->mmap[0].base; > ret = perf_read_tsc_conversion(pc, &tc); > diff --git a/tools/perf/builtin-kvm.c b/tools/perf/builtin-kvm.c > index 0af4c09..e3e2a80 100644 > --- a/tools/perf/builtin-kvm.c > +++ b/tools/perf/builtin-kvm.c > @@ -1043,7 +1043,7 @@ static int kvm_live_open_events(struct > perf_kvm_stat *kvm) > goto out; > } > > - if (perf_evlist__mmap(evlist, kvm->opts.mmap_pages, false) < 0) { > + if (perf_evlist__mmap(evlist, kvm->opts.mmap_pages) < 0) { > ui__error("Failed to mmap the events: %s\n", > str_error_r(errno, sbuf, sizeof(sbuf))); > perf_evlist__close(evlist); > diff --git a/tools/perf/builtin-record.c b/tools/perf/builtin-record.c > index f4d9fc5..b3ef33f 100644 > --- a/tools/perf/builtin-record.c > +++ b/tools/perf/builtin-record.c > @@ -300,7 +300,7 @@ static int record__mmap_evlist(struct record *rec, > struct record_opts *opts = &rec->opts; > char msg[512]; > > - if (perf_evlist__mmap_ex(evlist, opts->mmap_pages, false, > + if (perf_evlist__mmap_ex(evlist, opts->mmap_pages, > opts->auxtrace_mmap_pages, > opts->auxtrace_snapshot_mode) < 0) { > if (errno == EPERM) { > @@ -481,7 +481,7 @@ static int record__mmap_read_evlist(struct record > *rec, struct perf_evlist *evli > struct auxtrace_mmap *mm = &maps[i].auxtrace_mmap; > > if (maps[i].base) { > - if (perf_mmap__push(&maps[i], evlist->overwrite, > backward, rec, record__pushfn) != 0) { > + if (perf_mmap__push(&maps[i], backward, rec, > record__pushfn) != 0) { > rc = -1; > goto out; > } > diff --git a/tools/perf/builtin-top.c b/tools/perf/builtin-top.c > index 477a869..83d2ae2 100644 > --- a/tools/perf/builtin-top.c > +++ b/tools/perf/builtin-top.c > @@ -902,7 +902,7 @@ static int perf_top__start_counters(struct perf_top > *top) > } > } > > - if (perf_evlist__mmap(evlist, opts->mmap_pages, false) < 0) { > + if (perf_evlist__mmap(evlist, opts->mmap_pages) < 0) { > ui__error("Failed to mmap with %d (%s)\n", > errno, str_error_r(errno, msg, sizeof(msg))); > goto out_err; > diff --git a/tools/perf/builtin-trace.c b/tools/perf/builtin-trace.c > index c373f9a..c3f2f98 100644 > --- a/tools/perf/builtin-trace.c > +++ b/tools/perf/builtin-trace.c > @@ -2404,7 +2404,7 @@ static int trace__run(struct trace *trace, int argc, > const char **argv) > if (err < 0) > goto out_error_apply_filters; > > - err = perf_evlist__mmap(evlist, trace->opts.mmap_pages, false); > + err = perf_evlist__mmap(evlist, trace->opts.mmap_pages); > if (err < 0) > goto out_error_mmap; > > diff --git a/tools/perf/tests/backward-ring-buffer.c > b/tools/perf/tests/backward-ring-buffer.c > index 992c917..bdebcf9 100644 > --- a/tools/perf/tests/backward-ring-buffer.c > +++ b/tools/perf/tests/backward-ring-buffer.c > @@ -58,7 +58,7 @@ static int do_test(struct perf_evlist *evlist, int > mmap_pages, > int err; > char sbuf[STRERR_BUFSIZE]; > > - err = perf_evlist__mmap(evlist, mmap_pages, false); > + err = perf_evlist__mmap(evlist, mmap_pages); > if (err < 0) { > pr_debug("perf_evlist__mmap: %s\n", > str_error_r(errno, sbuf, sizeof(sbuf))); > diff --git a/tools/perf/tests/bpf.c b/tools/perf/tests/bpf.c > index 34c22cd..c433dd3 100644 > --- a/tools/perf/tests/bpf.c > +++ b/tools/perf/tests/bpf.c > @@ -167,7 +167,7 @@ static int do_test(struct bpf_object *obj, int > (*func)(void), > goto out_delete_evlist; > } > > - err = perf_evlist__mmap(evlist, opts.mmap_pages, false); > + err = perf_evlist__mmap(evlist, opts.mmap_pages); > if (err < 0) { > pr_debug("perf_evlist__mmap: %s\n", > str_error_r(errno, sbuf, sizeof(sbuf))); > diff --git a/tools/perf/tests/code-reading.c b/tools/perf/tests/code-reading.c > index 466a462..b6c813e 100644 > --- a/tools/perf/tests/code-reading.c > +++ b/tools/perf/tests/code-reading.c > @@ -638,7 +638,7 @@ static int do_test_code_reading(bool try_kcore) > break; > } > > - ret = perf_evlist__mmap(evlist, UINT_MAX, false); > + ret = perf_evlist__mmap(evlist, UINT_MAX); > if (ret < 0) { > pr_debug("perf_evlist__mmap failed\n"); > goto out_put; > diff --git a/tools/perf/tests/keep-tracking.c b/tools/perf/tests/keep-tracking.c > index 7394286..b282916 100644 > --- a/tools/perf/tests/keep-tracking.c > +++ b/tools/perf/tests/keep-tracking.c > @@ -94,7 +94,7 @@ int test__keep_tracking(struct test *test > __maybe_unused, int subtest __maybe_un > goto out_err; > } > > - CHECK__(perf_evlist__mmap(evlist, UINT_MAX, false)); > + CHECK__(perf_evlist__mmap(evlist, UINT_MAX)); > > /* > * First, test that a 'comm' event can be found when the event is > diff --git a/tools/perf/tests/mmap-basic.c b/tools/perf/tests/mmap-basic.c > index 667d696..f43d862 100644 > --- a/tools/perf/tests/mmap-basic.c > +++ b/tools/perf/tests/mmap-basic.c > @@ -93,7 +93,7 @@ int test__basic_mmap(struct test *test > __maybe_unused, int subtest __maybe_unuse > expected_nr_events[i] = 1 + rand() % 127; > } > > - if (perf_evlist__mmap(evlist, 128, false) < 0) { > + if (perf_evlist__mmap(evlist, 128) < 0) { > pr_debug("failed to mmap events: %d (%s)\n", errno, > str_error_r(errno, sbuf, sizeof(sbuf))); > goto out_delete_evlist; > diff --git a/tools/perf/tests/openat-syscall-tp-fields.c > b/tools/perf/tests/openat-syscall-tp-fields.c > index b6ee1c4..f68d818 100644 > --- a/tools/perf/tests/openat-syscall-tp-fields.c > +++ b/tools/perf/tests/openat-syscall-tp-fields.c > @@ -63,7 +63,7 @@ int test__syscall_openat_tp_fields(struct test *test > __maybe_unused, int subtest > goto out_delete_evlist; > } > > - err = perf_evlist__mmap(evlist, UINT_MAX, false); > + err = perf_evlist__mmap(evlist, UINT_MAX); > if (err < 0) { > pr_debug("perf_evlist__mmap: %s\n", > str_error_r(errno, sbuf, sizeof(sbuf))); > diff --git a/tools/perf/tests/perf-record.c b/tools/perf/tests/perf-record.c > index 19b6500..f9fbd8b 100644 > --- a/tools/perf/tests/perf-record.c > +++ b/tools/perf/tests/perf-record.c > @@ -140,7 +140,7 @@ int test__PERF_RECORD(struct test *test > __maybe_unused, int subtest __maybe_unus > * fds in the same CPU to be injected in the same mmap ring buffer > * (using ioctl(PERF_EVENT_IOC_SET_OUTPUT)). > */ > - err = perf_evlist__mmap(evlist, opts.mmap_pages, false); > + err = perf_evlist__mmap(evlist, opts.mmap_pages); > if (err < 0) { > pr_debug("perf_evlist__mmap: %s\n", > str_error_r(errno, sbuf, sizeof(sbuf))); > diff --git a/tools/perf/tests/sw-clock.c b/tools/perf/tests/sw-clock.c > index c468e6c..fd01b24 100644 > --- a/tools/perf/tests/sw-clock.c > +++ b/tools/perf/tests/sw-clock.c > @@ -77,7 +77,7 @@ static int __test__sw_clock_freq(enum perf_sw_ids > clock_id) > goto out_delete_evlist; > } > > - err = perf_evlist__mmap(evlist, 128, false); > + err = perf_evlist__mmap(evlist, 128); > if (err < 0) { > pr_debug("failed to mmap event: %d (%s)\n", errno, > str_error_r(errno, sbuf, sizeof(sbuf))); > diff --git a/tools/perf/tests/switch-tracking.c b/tools/perf/tests/switch- > tracking.c > index 2acd785..9fee2a0 100644 > --- a/tools/perf/tests/switch-tracking.c > +++ b/tools/perf/tests/switch-tracking.c > @@ -448,7 +448,7 @@ int test__switch_tracking(struct test *test > __maybe_unused, int subtest __maybe_ > goto out; > } > > - err = perf_evlist__mmap(evlist, UINT_MAX, false); > + err = perf_evlist__mmap(evlist, UINT_MAX); > if (err) { > pr_debug("perf_evlist__mmap failed!\n"); > goto out_err; > diff --git a/tools/perf/tests/task-exit.c b/tools/perf/tests/task-exit.c > index 4fb6609..4ba5a27 100644 > --- a/tools/perf/tests/task-exit.c > +++ b/tools/perf/tests/task-exit.c > @@ -96,7 +96,7 @@ int test__task_exit(struct test *test __maybe_unused, > int subtest __maybe_unused > goto out_delete_evlist; > } > > - if (perf_evlist__mmap(evlist, 128, false) < 0) { > + if (perf_evlist__mmap(evlist, 128) < 0) { > pr_debug("failed to mmap events: %d (%s)\n", errno, > str_error_r(errno, sbuf, sizeof(sbuf))); > goto out_delete_evlist; > diff --git a/tools/perf/util/evlist.c b/tools/perf/util/evlist.c > index 4c5daba..4948d3d 100644 > --- a/tools/perf/util/evlist.c > +++ b/tools/perf/util/evlist.c > @@ -711,7 +711,7 @@ union perf_event > *perf_evlist__mmap_read_forward(struct perf_evlist *evlist, int > * No need for read-write ring buffer: kernel stop outputting when > * it hit md->prev (perf_mmap__consume()). > */ > - return perf_mmap__read_forward(md, evlist->overwrite); > + return perf_mmap__read_forward(md, false); If we remove the 'overwrite' in forward, I think 'check_messup' is useless. It's better to remove it as well. > } > > union perf_event *perf_evlist__mmap_read_backward(struct perf_evlist > *evlist, int idx) > @@ -738,7 +738,7 @@ void perf_evlist__mmap_read_catchup(struct > perf_evlist *evlist, int idx) > > void perf_evlist__mmap_consume(struct perf_evlist *evlist, int idx) > { > - perf_mmap__consume(&evlist->mmap[idx], evlist->overwrite); > + perf_mmap__consume(&evlist->mmap[idx], false); I think we still need to remove 'overwrite' in the implementation of perf_mmap__consume. There are too many generic functions are changed in this patch. I think it's better to split into several patches. It's better to have one generic function changed in one patch. Thanks, Kan > } > > static void perf_evlist__munmap_nofree(struct perf_evlist *evlist) > @@ -1058,14 +1058,14 @@ int perf_evlist__parse_mmap_pages(const > struct option *opt, const char *str, > * Return: %0 on success, negative error code otherwise. > */ > int perf_evlist__mmap_ex(struct perf_evlist *evlist, unsigned int pages, > - bool overwrite, unsigned int auxtrace_pages, > + unsigned int auxtrace_pages, > bool auxtrace_overwrite) > { > struct perf_evsel *evsel; > const struct cpu_map *cpus = evlist->cpus; > const struct thread_map *threads = evlist->threads; > struct mmap_params mp = { > - .prot = PROT_READ | (overwrite ? 0 : PROT_WRITE), > + .prot = PROT_READ | PROT_WRITE, > }; > > if (!evlist->mmap) > @@ -1076,7 +1076,6 @@ int perf_evlist__mmap_ex(struct perf_evlist *evlist, > unsigned int pages, > if (evlist->pollfd.entries == NULL && perf_evlist__alloc_pollfd(evlist) < > 0) > return -ENOMEM; > > - evlist->overwrite = overwrite; > evlist->mmap_len = perf_evlist__mmap_size(pages); > pr_debug("mmap size %zuB\n", evlist->mmap_len); > mp.mask = evlist->mmap_len - page_size - 1; > @@ -1097,10 +1096,9 @@ int perf_evlist__mmap_ex(struct perf_evlist > *evlist, unsigned int pages, > return perf_evlist__mmap_per_cpu(evlist, &mp); > } > > -int perf_evlist__mmap(struct perf_evlist *evlist, unsigned int pages, > - bool overwrite) > +int perf_evlist__mmap(struct perf_evlist *evlist, unsigned int pages) > { > - return perf_evlist__mmap_ex(evlist, pages, overwrite, 0, false); > + return perf_evlist__mmap_ex(evlist, pages, 0, false); > } > > int perf_evlist__create_maps(struct perf_evlist *evlist, struct target *target) > diff --git a/tools/perf/util/evlist.h b/tools/perf/util/evlist.h > index 8c433e9..1dd3291 100644 > --- a/tools/perf/util/evlist.h > +++ b/tools/perf/util/evlist.h > @@ -30,7 +30,6 @@ struct perf_evlist { > int nr_entries; > int nr_groups; > int nr_mmaps; > - bool overwrite; > bool enabled; > bool has_user_cpus; > size_t mmap_len; > @@ -168,10 +167,9 @@ int perf_evlist__parse_mmap_pages(const struct > option *opt, > unsigned long perf_event_mlock_kb_in_pages(void); > > int perf_evlist__mmap_ex(struct perf_evlist *evlist, unsigned int pages, > - bool overwrite, unsigned int auxtrace_pages, > + unsigned int auxtrace_pages, > bool auxtrace_overwrite); > -int perf_evlist__mmap(struct perf_evlist *evlist, unsigned int pages, > - bool overwrite); > +int perf_evlist__mmap(struct perf_evlist *evlist, unsigned int pages); > void perf_evlist__munmap(struct perf_evlist *evlist); > > size_t perf_evlist__mmap_size(unsigned long pages); > diff --git a/tools/perf/util/mmap.c b/tools/perf/util/mmap.c > index 9fe5f9c..703ed41 100644 > --- a/tools/perf/util/mmap.c > +++ b/tools/perf/util/mmap.c > @@ -299,7 +299,7 @@ static int rb_find_range(void *data, int mask, u64 > head, u64 old, > return backward_rb_find_range(data, mask, head, start, end); > } > > -int perf_mmap__push(struct perf_mmap *md, bool overwrite, bool > backward, > +int perf_mmap__push(struct perf_mmap *md, bool backward, > void *to, int push(void *to, void *buf, size_t size)) > { > u64 head = perf_mmap__read_head(md); > @@ -321,7 +321,7 @@ int perf_mmap__push(struct perf_mmap *md, bool > overwrite, bool backward, > WARN_ONCE(1, "failed to keep up with mmap data. (warn > only once)\n"); > > md->prev = head; > - perf_mmap__consume(md, overwrite || backward); > + perf_mmap__consume(md, backward); > return 0; > } > > @@ -346,7 +346,7 @@ int perf_mmap__push(struct perf_mmap *md, bool > overwrite, bool backward, > } > > md->prev = head; > - perf_mmap__consume(md, overwrite || backward); > + perf_mmap__consume(md, backward); > out: > return rc; > } > diff --git a/tools/perf/util/mmap.h b/tools/perf/util/mmap.h > index efd78b8..2c3d291 100644 > --- a/tools/perf/util/mmap.h > +++ b/tools/perf/util/mmap.h > @@ -89,7 +89,7 @@ static inline void perf_mmap__write_tail(struct > perf_mmap *md, u64 tail) > union perf_event *perf_mmap__read_forward(struct perf_mmap *map, > bool check_messup); > union perf_event *perf_mmap__read_backward(struct perf_mmap *map); > > -int perf_mmap__push(struct perf_mmap *md, bool overwrite, bool > backward, > +int perf_mmap__push(struct perf_mmap *md, bool backward, > void *to, int push(void *to, void *buf, size_t size)); > > size_t perf_mmap__mmap_len(struct perf_mmap *map); > diff --git a/tools/perf/util/python.c b/tools/perf/util/python.c > index c129e99..ece33b4 100644 > --- a/tools/perf/util/python.c > +++ b/tools/perf/util/python.c > @@ -856,14 +856,14 @@ static PyObject *pyrf_evlist__mmap(struct > pyrf_evlist *pevlist, > PyObject *args, PyObject *kwargs) > { > struct perf_evlist *evlist = &pevlist->evlist; > - static char *kwlist[] = { "pages", "overwrite", NULL }; > - int pages = 128, overwrite = false; > + static char *kwlist[] = { "pages", NULL }; > + int pages = 128; > > - if (!PyArg_ParseTupleAndKeywords(args, kwargs, "|ii", kwlist, > - &pages, &overwrite)) > + if (!PyArg_ParseTupleAndKeywords(args, kwargs, "|i", kwlist, > + &pages)) > return NULL; > > - if (perf_evlist__mmap(evlist, pages, overwrite) < 0) { > + if (perf_evlist__mmap(evlist, pages) < 0) { > PyErr_SetFromErrno(PyExc_OSError); > return NULL; > } > -- > 2.10.1 ^ permalink raw reply [flat|nested] 21+ messages in thread
* [PATCH 7/7] perf tools: Remove prot field in mmap param 2017-11-13 1:38 [PATCH 0/7] perf tools: Clarify overwrite and backward, bugfix Wang Nan ` (5 preceding siblings ...) 2017-11-13 1:38 ` [PATCH 6/7] perf tools: Remove 'overwrite' concept from code level Wang Nan @ 2017-11-13 1:38 ` Wang Nan 2017-11-13 11:52 ` Jiri Olsa 2017-11-13 11:52 ` Jiri Olsa 2017-11-13 14:49 ` [PATCH 0/7] perf tools: Clarify overwrite and backward, bugfix Liang, Kan 7 siblings, 2 replies; 21+ messages in thread From: Wang Nan @ 2017-11-13 1:38 UTC (permalink / raw) To: linux-kernel, kan.liang, acme, jolsa, namhyung; +Cc: Wang Nan After removing the concept of 'overwrite' in code level, now the prot is determinated by write_backward. There's no need to pass prot from perf_evlist__mmap_ex(). Signed-off-by: Wang Nan <wangnan0@huawei.com> --- tools/perf/util/evlist.c | 17 ++++++----------- tools/perf/util/mmap.c | 4 ++-- tools/perf/util/mmap.h | 4 ++-- 3 files changed, 10 insertions(+), 15 deletions(-) diff --git a/tools/perf/util/evlist.c b/tools/perf/util/evlist.c index 4948d3d..0d713e0 100644 --- a/tools/perf/util/evlist.c +++ b/tools/perf/util/evlist.c @@ -799,28 +799,23 @@ perf_evlist__should_poll(struct perf_evlist *evlist __maybe_unused, } static int perf_evlist__mmap_per_evsel(struct perf_evlist *evlist, int idx, - struct mmap_params *_mp, int cpu_idx, + struct mmap_params *mp, int cpu_idx, int thread, int *_output, int *_output_backward) { struct perf_evsel *evsel; int revent; int evlist_cpu = cpu_map__cpu(evlist->cpus, cpu_idx); - struct mmap_params *mp; evlist__for_each_entry(evlist, evsel) { struct perf_mmap *maps = evlist->mmap; - struct mmap_params rdonly_mp; int *output = _output; int fd; int cpu; + int prot = PROT_READ; - mp = _mp; if (evsel->attr.write_backward) { output = _output_backward; maps = evlist->backward_mmap; - rdonly_mp = *_mp; - rdonly_mp.prot &= ~PROT_WRITE; - mp = &rdonly_mp; if (!maps) { maps = perf_evlist__alloc_mmap(evlist); @@ -830,6 +825,8 @@ static int perf_evlist__mmap_per_evsel(struct perf_evlist *evlist, int idx, if (evlist->bkw_mmap_state == BKW_MMAP_NOTREADY) perf_evlist__toggle_bkw_mmap(evlist, BKW_MMAP_RUNNING); } + } else { + prot |= PROT_WRITE; } if (evsel->system_wide && thread) @@ -844,7 +841,7 @@ static int perf_evlist__mmap_per_evsel(struct perf_evlist *evlist, int idx, if (*output == -1) { *output = fd; - if (perf_mmap__mmap(&maps[idx], mp, *output) < 0) + if (perf_mmap__mmap(&maps[idx], mp, prot, *output) < 0) return -1; } else { if (ioctl(fd, PERF_EVENT_IOC_SET_OUTPUT, *output) != 0) @@ -1064,9 +1061,7 @@ int perf_evlist__mmap_ex(struct perf_evlist *evlist, unsigned int pages, struct perf_evsel *evsel; const struct cpu_map *cpus = evlist->cpus; const struct thread_map *threads = evlist->threads; - struct mmap_params mp = { - .prot = PROT_READ | PROT_WRITE, - }; + struct mmap_params mp; if (!evlist->mmap) evlist->mmap = perf_evlist__alloc_mmap(evlist); diff --git a/tools/perf/util/mmap.c b/tools/perf/util/mmap.c index 703ed41..40e91a0 100644 --- a/tools/perf/util/mmap.c +++ b/tools/perf/util/mmap.c @@ -219,7 +219,7 @@ void perf_mmap__munmap(struct perf_mmap *map) auxtrace_mmap__munmap(&map->auxtrace_mmap); } -int perf_mmap__mmap(struct perf_mmap *map, struct mmap_params *mp, int fd) +int perf_mmap__mmap(struct perf_mmap *map, struct mmap_params *mp, int prot, int fd) { /* * The last one will be done at perf_evlist__mmap_consume(), so that we @@ -237,7 +237,7 @@ int perf_mmap__mmap(struct perf_mmap *map, struct mmap_params *mp, int fd) refcount_set(&map->refcnt, 2); map->prev = 0; map->mask = mp->mask; - map->base = mmap(NULL, perf_mmap__mmap_len(map), mp->prot, + map->base = mmap(NULL, perf_mmap__mmap_len(map), prot, MAP_SHARED, fd, 0); if (map->base == MAP_FAILED) { pr_debug2("failed to mmap perf event ring buffer, error %d\n", diff --git a/tools/perf/util/mmap.h b/tools/perf/util/mmap.h index 2c3d291..1f6fcc6 100644 --- a/tools/perf/util/mmap.h +++ b/tools/perf/util/mmap.h @@ -53,11 +53,11 @@ enum bkw_mmap_state { }; struct mmap_params { - int prot, mask; + int mask; struct auxtrace_mmap_params auxtrace_mp; }; -int perf_mmap__mmap(struct perf_mmap *map, struct mmap_params *mp, int fd); +int perf_mmap__mmap(struct perf_mmap *map, struct mmap_params *mp, int prot, int fd); void perf_mmap__munmap(struct perf_mmap *map); void perf_mmap__get(struct perf_mmap *map); -- 2.10.1 ^ permalink raw reply related [flat|nested] 21+ messages in thread
* Re: [PATCH 7/7] perf tools: Remove prot field in mmap param 2017-11-13 1:38 ` [PATCH 7/7] perf tools: Remove prot field in mmap param Wang Nan @ 2017-11-13 11:52 ` Jiri Olsa 2017-11-13 11:52 ` Jiri Olsa 1 sibling, 0 replies; 21+ messages in thread From: Jiri Olsa @ 2017-11-13 11:52 UTC (permalink / raw) To: Wang Nan; +Cc: linux-kernel, kan.liang, acme, namhyung On Mon, Nov 13, 2017 at 01:38:09AM +0000, Wang Nan wrote: > After removing the concept of 'overwrite' in code level, now the > prot is determinated by write_backward. There's no need to pass > prot from perf_evlist__mmap_ex(). > > Signed-off-by: Wang Nan <wangnan0@huawei.com> > --- > tools/perf/util/evlist.c | 17 ++++++----------- > tools/perf/util/mmap.c | 4 ++-- > tools/perf/util/mmap.h | 4 ++-- > 3 files changed, 10 insertions(+), 15 deletions(-) > > diff --git a/tools/perf/util/evlist.c b/tools/perf/util/evlist.c > index 4948d3d..0d713e0 100644 > --- a/tools/perf/util/evlist.c > +++ b/tools/perf/util/evlist.c > @@ -799,28 +799,23 @@ perf_evlist__should_poll(struct perf_evlist *evlist __maybe_unused, > } > > static int perf_evlist__mmap_per_evsel(struct perf_evlist *evlist, int idx, > - struct mmap_params *_mp, int cpu_idx, > + struct mmap_params *mp, int cpu_idx, > int thread, int *_output, int *_output_backward) > { > struct perf_evsel *evsel; > int revent; > int evlist_cpu = cpu_map__cpu(evlist->cpus, cpu_idx); > - struct mmap_params *mp; > > evlist__for_each_entry(evlist, evsel) { > struct perf_mmap *maps = evlist->mmap; > - struct mmap_params rdonly_mp; > int *output = _output; > int fd; > int cpu; > + int prot = PROT_READ; can't you set the PROT_READ in struct mmap_params *mp as its default value? mp->prot = PROT_READ; > > - mp = _mp; > if (evsel->attr.write_backward) { > output = _output_backward; > maps = evlist->backward_mmap; > - rdonly_mp = *_mp; > - rdonly_mp.prot &= ~PROT_WRITE; > - mp = &rdonly_mp; > > if (!maps) { > maps = perf_evlist__alloc_mmap(evlist); > @@ -830,6 +825,8 @@ static int perf_evlist__mmap_per_evsel(struct perf_evlist *evlist, int idx, > if (evlist->bkw_mmap_state == BKW_MMAP_NOTREADY) > perf_evlist__toggle_bkw_mmap(evlist, BKW_MMAP_RUNNING); > } > + } else { > + prot |= PROT_WRITE; > } > > if (evsel->system_wide && thread) > @@ -844,7 +841,7 @@ static int perf_evlist__mmap_per_evsel(struct perf_evlist *evlist, int idx, > if (*output == -1) { > *output = fd; > > - if (perf_mmap__mmap(&maps[idx], mp, *output) < 0) > + if (perf_mmap__mmap(&maps[idx], mp, prot, *output) < 0) so there's no need for the extra 'prot' param in here jirka ^ permalink raw reply [flat|nested] 21+ messages in thread
* Re: [PATCH 7/7] perf tools: Remove prot field in mmap param 2017-11-13 1:38 ` [PATCH 7/7] perf tools: Remove prot field in mmap param Wang Nan 2017-11-13 11:52 ` Jiri Olsa @ 2017-11-13 11:52 ` Jiri Olsa 1 sibling, 0 replies; 21+ messages in thread From: Jiri Olsa @ 2017-11-13 11:52 UTC (permalink / raw) To: Wang Nan; +Cc: linux-kernel, kan.liang, acme, namhyung On Mon, Nov 13, 2017 at 01:38:09AM +0000, Wang Nan wrote: > After removing the concept of 'overwrite' in code level, now the > prot is determinated by write_backward. There's no need to pass > prot from perf_evlist__mmap_ex(). > > Signed-off-by: Wang Nan <wangnan0@huawei.com> > --- > tools/perf/util/evlist.c | 17 ++++++----------- > tools/perf/util/mmap.c | 4 ++-- > tools/perf/util/mmap.h | 4 ++-- > 3 files changed, 10 insertions(+), 15 deletions(-) > > diff --git a/tools/perf/util/evlist.c b/tools/perf/util/evlist.c > index 4948d3d..0d713e0 100644 > --- a/tools/perf/util/evlist.c > +++ b/tools/perf/util/evlist.c > @@ -799,28 +799,23 @@ perf_evlist__should_poll(struct perf_evlist *evlist __maybe_unused, > } > > static int perf_evlist__mmap_per_evsel(struct perf_evlist *evlist, int idx, > - struct mmap_params *_mp, int cpu_idx, > + struct mmap_params *mp, int cpu_idx, > int thread, int *_output, int *_output_backward) > { > struct perf_evsel *evsel; > int revent; > int evlist_cpu = cpu_map__cpu(evlist->cpus, cpu_idx); > - struct mmap_params *mp; > > evlist__for_each_entry(evlist, evsel) { > struct perf_mmap *maps = evlist->mmap; > - struct mmap_params rdonly_mp; > int *output = _output; > int fd; > int cpu; > + int prot = PROT_READ; > > - mp = _mp; > if (evsel->attr.write_backward) { > output = _output_backward; > maps = evlist->backward_mmap; > - rdonly_mp = *_mp; > - rdonly_mp.prot &= ~PROT_WRITE; > - mp = &rdonly_mp; I dont think we need the first patch, you're reverting it in here jirka ^ permalink raw reply [flat|nested] 21+ messages in thread
* RE: [PATCH 0/7] perf tools: Clarify overwrite and backward, bugfix 2017-11-13 1:38 [PATCH 0/7] perf tools: Clarify overwrite and backward, bugfix Wang Nan ` (6 preceding siblings ...) 2017-11-13 1:38 ` [PATCH 7/7] perf tools: Remove prot field in mmap param Wang Nan @ 2017-11-13 14:49 ` Liang, Kan 7 siblings, 0 replies; 21+ messages in thread From: Liang, Kan @ 2017-11-13 14:49 UTC (permalink / raw) To: Wang Nan, linux-kernel@vger.kernel.org, acme@kernel.org, jolsa@redhat.com, namhyung@kernel.org > Based on previous discussion, perf needs to support only two types > of ringbuffer: read-write + forward, readonly + backward. This patchset > completly removes the concept of 'overwrite' from code level, controls > mapping permission using write_backward instead. I think I suggested to remove the concept of backward/forward, keep the overwrite. That's from user's perspective. Here you use read-write + forward and readonly + backward, which should be from kernel 's perspective. It's OK for me either. However, we should make the concepts connected by clearly documented, not just in changelog. I suggest you may create a new file, ringbuffer.txt, in Documentation to explain, the types of ringbuffer, how do they work, what's connections between overwrite and readonly + backward, and so on. > > Wang Nan (7): > perf mmap: Fix perf backward recording > perf tests: Set evlist of test__backward_ring_buffer() to !overwrite > perf tests: Set evlist of test__sw_clock_freq() to !overwrite > perf tests: Set evlist of test__basic_mmap() to !overwrite > perf tests: Set evlist of test__task_exit() to !overwrite > perf tools: Remove 'overwrite' concept from code level > perf tools: Remove prot field in mmap param > You had another related fix "perf tool: Don't discard prev in backward mode" https://lkml.org/lkml/2017/10/12/408 It has not been merged yet. It needs to backport. I think you may want to add it in this series as well. Thanks, Kan > tools/perf/arch/x86/tests/perf-time-to-tsc.c | 2 +- > tools/perf/builtin-kvm.c | 2 +- > tools/perf/builtin-record.c | 4 ++-- > tools/perf/builtin-top.c | 2 +- > tools/perf/builtin-trace.c | 2 +- > tools/perf/tests/backward-ring-buffer.c | 2 +- > tools/perf/tests/bpf.c | 2 +- > tools/perf/tests/code-reading.c | 2 +- > tools/perf/tests/keep-tracking.c | 2 +- > tools/perf/tests/mmap-basic.c | 2 +- > tools/perf/tests/openat-syscall-tp-fields.c | 2 +- > tools/perf/tests/perf-record.c | 2 +- > tools/perf/tests/sw-clock.c | 2 +- > tools/perf/tests/switch-tracking.c | 2 +- > tools/perf/tests/task-exit.c | 2 +- > tools/perf/util/evlist.c | 21 ++++++++++----------- > tools/perf/util/evlist.h | 6 ++---- > tools/perf/util/mmap.c | 10 +++++----- > tools/perf/util/mmap.h | 6 +++--- > tools/perf/util/python.c | 10 +++++----- > 20 files changed, 41 insertions(+), 44 deletions(-) > > -- > 2.10.1 ^ permalink raw reply [flat|nested] 21+ messages in thread
end of thread, other threads:[~2017-11-18 8:32 UTC | newest] Thread overview: 21+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2017-11-13 1:38 [PATCH 0/7] perf tools: Clarify overwrite and backward, bugfix Wang Nan 2017-11-13 1:38 ` [PATCH 1/7] perf mmap: Fix perf backward recording Wang Nan 2017-11-13 1:38 ` [PATCH 2/7] perf tests: Set evlist of test__backward_ring_buffer() to !overwrite Wang Nan 2017-11-13 18:30 ` Arnaldo Carvalho de Melo 2017-11-18 8:30 ` [tip:perf/core] " tip-bot for Wang Nan 2017-11-13 1:38 ` [PATCH 3/7] perf tests: Set evlist of test__sw_clock_freq() " Wang Nan 2017-11-13 18:31 ` Arnaldo Carvalho de Melo 2017-11-18 8:30 ` [tip:perf/core] " tip-bot for Wang Nan 2017-11-13 1:38 ` [PATCH 4/7] perf tests: Set evlist of test__basic_mmap() " Wang Nan 2017-11-13 18:31 ` Arnaldo Carvalho de Melo 2017-11-18 8:31 ` [tip:perf/core] " tip-bot for Wang Nan 2017-11-13 1:38 ` [PATCH 5/7] perf tests: Set evlist of test__task_exit() " Wang Nan 2017-11-13 18:32 ` Arnaldo Carvalho de Melo 2017-11-18 8:31 ` [tip:perf/core] " tip-bot for Wang Nan 2017-11-13 1:38 ` [PATCH 6/7] perf tools: Remove 'overwrite' concept from code level Wang Nan 2017-11-13 11:52 ` Jiri Olsa 2017-11-13 15:07 ` Liang, Kan 2017-11-13 1:38 ` [PATCH 7/7] perf tools: Remove prot field in mmap param Wang Nan 2017-11-13 11:52 ` Jiri Olsa 2017-11-13 11:52 ` Jiri Olsa 2017-11-13 14:49 ` [PATCH 0/7] perf tools: Clarify overwrite and backward, bugfix Liang, Kan
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox