All of lore.kernel.org
 help / color / mirror / Atom feed
* perf object code reading test crashes
@ 2016-02-17  6:42 Steven Noonan
  2016-02-17 14:27 ` Arnaldo Carvalho de Melo
  0 siblings, 1 reply; 5+ messages in thread
From: Steven Noonan @ 2016-02-17  6:42 UTC (permalink / raw)
  To: Linux Kernel mailing List; +Cc: Arnaldo Carvalho de Melo, Adrian Hunter

I oddly didn't run into this issue on every machine I tried, but
there's some issues here:

$ sudo perf test 21
21: Test object code reading                                 :***
Error in `perf': corrupted double-linked list: 0x00000000023ffcd0 ***
======= Backtrace: =========
/usr/lib/libc.so.6(+0x72055)[0x7f25be0f3055]
/usr/lib/libc.so.6(+0x779b6)[0x7f25be0f89b6]
/usr/lib/libc.so.6(+0x7a0ed)[0x7f25be0fb0ed]
/usr/lib/libc.so.6(__libc_calloc+0xba)[0x7f25be0fceda]
perf(parse_events_lex_init_extra+0x38)[0x4cfff8]
perf(parse_events+0x55)[0x4a0615]
perf(perf_evlist__config+0xcf)[0x4eeb2f]
perf[0x479f82]
perf(test__code_reading+0x1e)[0x47ad4e]
perf(cmd_test+0x5dd)[0x46452d]
perf[0x47f4e3]
perf(main+0x603)[0x42c723]
/usr/lib/libc.so.6(__libc_start_main+0xf0)[0x7f25be0a1610]
perf(_start+0x29)[0x42c859]
======= Memory map: ========
00400000-0068d000 r-xp 00000000 08:03 2384296
  /usr/bin/perf
0088d000-008a1000 r--p 0028d000 08:03 2384296
  /usr/bin/perf
008a1000-008c2000 rw-p 002a1000 08:03 2384296
  /usr/bin/perf
008c2000-0194f000 rw-p 00000000 00:00 0
02193000-021b4000 rw-p 00000000 00:00 0                                  [heap]
021b4000-0254a000 rw-p 00000000 00:00 0                                  [heap]
7f25b8000000-7f25b8021000 rw-p 00000000 00:00 0
7f25b8021000-7f25bc000000 ---p 00000000 00:00 0
7f25bcdff000-7f25bce15000 r-xp 00000000 08:03 2378588
  /usr/lib/libgcc_s.so.1
7f25bce15000-7f25bd014000 ---p 00016000 08:03 2378588
  /usr/lib/libgcc_s.so.1
7f25bd014000-7f25bd015000 rw-p 00015000 08:03 2378588
  /usr/lib/libgcc_s.so.1
7f25bd015000-7f25bd017000 r-xp 00000000 08:03 2361423
  /usr/lib/libutil-2.22.so
7f25bd017000-7f25bd216000 ---p 00002000 08:03 2361423
  /usr/lib/libutil-2.22.so
7f25bd216000-7f25bd217000 r--p 00001000 08:03 2361423
  /usr/lib/libutil-2.22.so
7f25bd217000-7f25bd218000 rw-p 00002000 08:03 2361423
  /usr/lib/libutil-2.22.so
7f25bd218000-7f25bd220000 r-xp 00000000 08:03 2361358
  /usr/lib/libcrypt-2.22.so
7f25bd220000-7f25bd420000 ---p 00008000 08:03 2361358
  /usr/lib/libcrypt-2.22.so
7f25bd420000-7f25bd421000 r--p 00008000 08:03 2361358
  /usr/lib/libcrypt-2.22.so
7f25bd421000-7f25bd422000 rw-p 00009000 08:03 2361358
  /usr/lib/libcrypt-2.22.so
7f25bd422000-7f25bd450000 rw-p 00000000 00:00 0
7f25bd450000-7f25bd45f000 r-xp 00000000 08:03 2365752
  /usr/lib/libbz2.so.1.0.6
7f25bd45f000-7f25bd65e000 ---p 0000f000 08:03 2365752
  /usr/lib/libbz2.so.1.0.6
7f25bd65e000-7f25bd660000 rw-p 0000e000 08:03 2365752
  /usr/lib/libbz2.so.1.0.6
7f25bd660000-7f25bd66a000 r-xp 00000000 08:03 2379940
  /usr/lib/libnuma.so.1.0.0
7f25bd66a000-7f25bd86a000 ---p 0000a000 08:03 2379940
  /usr/lib/libnuma.so.1.0.0
7f25bd86a000-7f25bd86b000 r--p 0000a000 08:03 2379940
  /usr/lib/libnuma.so.1.0.0
7f25bd86b000-7f25bd86c000 rw-p 0000b000 08:03 2379940
  /usr/lib/libnuma.so.1.0.0
7f25bd86c000-7f25bd891000 r-xp 00000000 08:03 2365772
  /usr/lib/liblzma.so.5.2.2
7f25bd891000-7f25bda90000 ---p 00025000 08:03 2365772
  /usr/lib/liblzma.so.5.2.2
7f25bda90000-7f25bda91000 r--p 00024000 08:03 2365772
  /usr/lib/liblzma.so.5.2.2
7f25bda91000-7f25bda92000 rw-p 00025000 08:03 2365772
  /usr/lib/liblzma.so.5.2.2
7f25bda92000-7f25bdaa7000 r-xp 00000000 08:03 2365728
  /usr/lib/libz.so.1.2.8
7f25bdaa7000-7f25bdca6000 ---p 00015000 08:03 2365728
  /usr/lib/libz.so.1.2.8
7f25bdca6000-7f25bdca7000 r--p 00014000 08:03 2365728
  /usr/lib/libz.so.1.2.8
7f25bdca7000-7f25bdca8000 rw-p 00015000 08:03 2365728
  /usr/lib/libz.so.1.2.8
7f25bdca8000-7f25bde33000 r-xp 00000000 08:03 2380612
  /usr/lib/libpython2.7.so.1.0
7f25bde33000-7f25be032000 ---p 0018b000 08:03 2380612
  /usr/lib/libpython2.7.so.1.0
7f25be032000-7f25be034000 r--p 0018a000 08:03 2380612
  /usr/lib/libpython2.7.so.1.0
7f25be034000-7f25be072000 rw-p 0018c000 08:03 2380612
  /usr/lib/libpython2.7.so.1.0
7f25be072000-7f25be081000 rw-p 00000000 00:00 0
7f25be081000-7f25be21b000 r-xp 00000000 08:03 2361437
  /usr/lib/libc-2.22.so
7f25be21b000-7f25be41b000 ---p 0019a000 08:03 2361437
  /usr/lib/libc-2.22.so
7f25be41b000-7f25be41f000 r--p 0019a000 08:03 2361437
  /usr/lib/libc-2.22.so
7f25be41f000-7f25be421000 rw-p 0019e000 08:03 2361437
  /usr/lib/libc-2.22.so
7f25be421000-7f25be425000 rw-p 00000000 00:00 0
7f25be425000-7f25be5ff000 r-xp 00000000 08:03 2367396
  /usr/lib/perl5/core_perl/CORE/libperl.so
7f25be5ff000-7f25be7ff000 ---p 001da000 08:03 2367396
  /usr/lib/perl5/core_perl/CORE/libperl.so
7f25be7ff000-7f25be804000 r--p 001da000 08:03 2367396
  /usr/lib/perl5/core_perl/CORE/libperl.so
7f25be804000-7f25be808000 rw-p 001df000 08:03 2367396
  /usr/lib/perl5/core_perl/CORE/libperl.so
7f25be808000-7f25be905000 r-xp 00000000 08:03 2392491
  /usr/lib/libslang.so.2.3.0
7f25be905000-7f25beb04000 ---p 000fd000 08:03 2392491
  /usr/lib/libslang.so.2.3.0
7f25beb04000-7f25beb09000 r--p 000fc000 08:03 2392491
  /usr/lib/libslang.so.2.3.0
7f25beb09000-7f25beb22000 rw-p 00101000 08:03 2392491
  /usr/lib/libslang.so.2.3.0
7f25beb22000-7f25beb77000 rw-p 00000000 00:00 0
7f25beb77000-7f25beb87000 r-xp 00000000 08:03 2384494
  /usr/lib/libunwind-x86_64.so.8.0.1
7f25beb87000-7f25bed86000 ---p 00010000 08:03 2384494
  /usr/lib/libunwind-x86_64.so.8.0.1
7f25bed86000-7f25bed87000 r--p 0000f000 08:03 2384494
  /usr/lib/libunwind-x86_64.so.8.0.1
7f25bed87000-7f25bed88000 rw-p 00010000 08:03 2384494
  /usr/lib/libunwind-x86_64.so.8.0.1
7f25bed88000-7f25bed96000 rw-p 00000000 00:00 0
7f25bed96000-7f25beda1000 r-xp 00000000 08:03 2384491
  /usr/lib/libunwind.so.8.0.1
7f25beda1000-7f25befa0000 ---p 0000b000 08:03 2384491
  /usr/lib/libunwind.so.8.0.1
7f25befa0000-7f25befa1000 r--p 0000a000 08:03 2384491
  /usr/lib/libunwind.so.8.0.1
7f25befa1000-7f25befa2000 rw-p 0000b000 08:03 2384491
  /usr/lib/libunwind.so.8.0.1
7f25befa2000-7f25befb0000 rw-p 00000000 00:00 0
7f25befb0000-7f25beff7000 r-xp 00000000 08:03 2365854
  /usr/lib/libdw-0.165.so
7f25beff7000-7f25bf1f7000 ---p 00047000 08:03 2365854
  /usr/lib/libdw-0.165.so
7f25bf1f7000-7f25bf1f9000 r--p 00047000 08:03 2365854
  /usr/lib/libdw-0.165.so
7f25bf1f9000-7f25bf1fa000 rw-p 00049000 08:03 2365854
  /usr/lib/libdw-0.165.so
7f25bf1fa000-7f25bf211000 r-xp 00000000 08:03 2365856
  /usr/lib/libelf-0.165.so
7f25bf211000-7f25bf410000 ---p 00017000 08:03 2365856
  /usr/lib/libelf-0.165.so
7f25bf410000-7f25bf411000 r--p 00016000 08:03 2365856
  /usr/lib/libelf-0.165.so
7f25bf411000-7f25bf412000 rw-p 00017000 08:03 2365856
  /usr/lib/libelf-0.165.so
7f25bf412000-7f25bf415000 r-xp 00000000 08:03 2361340
  /usr/lib/libdl-2.22.so
7f25bf415000-7f25bf614000 ---p 00003000 08:03 2361340
  /usr/lib/libdl-2.22.so
7f25bf614000-7f25bf615000 r--p 00002000 08:03 2361340
  /usr/lib/libdl-2.22.so
7f25bf615000-7f25bf616000 rw-p 00003000 08:03 2361340
  /usr/lib/libdl-2.22.so
7f25bf616000-7f25bf713000 r-xp 00000000 08:03 2361395
  /usr/lib/libm-2.22.so
7f25bf713000-7f25bf912000 ---p 000fd000 08:03 2361395
  /usr/lib/libm-2.22.so
7f25bf912000-7f25bf913000 r--p 000fc000 08:03 2361395
  /usr/lib/libm-2.22.so
7f25bf913000-7f25bf914000 rw-p 000fd000 08:03 2361395
  /usr/lib/libm-2.22.so
7f25bf914000-7f25bf91b000 r-xp 00000000 08:03 2361374
  /usr/lib/librt-2.22.so
7f25bf91b000-7f25bfb1a000 ---p 00007000 08:03 2361374
  /usr/lib/librt-2.22.so
7f25bfb1a000-7f25bfb1b000 r--p 00006000 08:03 2361374
  /usr/lib/librt-2.22.so
7f25bfb1b000-7f25bfb1c000 rw-p 00007000 08:03 2361374
  /usr/lib/librt-2.22.so
7f25bfb1c000-7f25bfb34000 r-xp 00000000 08:03 2361457
  /usr/lib/libpthread-2.22.so
7f25bfb34000-7f25bfd33000 ---p 00018000 08:03 2361457
  /usr/lib/libpthread-2.22.so
7f25bfd33000-7f25bfd34000 r--p 00017000 08:03 2361457
  /usr/lib/libpthread-2.22.so
7f25bfd34000-7f25bfd35000 rw-p 00018000 08:03 2361457
  /usr/lib/libpthread-2.22.so
7f25bfd35000-7f25bfd39000 rw-p 00000000 00:00 0
7f25bfd39000-7f25bfd5b000 r-xp 00000000 08:03 2361373
  /usr/lib/ld-2.22.so
7f25bff13000-7f25bff1e000 rw-p 00000000 00:00 0
7f25bff59000-7f25bff5a000 rw-p 00000000 00:00 0
7f25bff5a000-7f25bff5b000 r--p 00021000 08:03 2361373
  /usr/lib/ld-2.22.so
7f25bff5b000-7f25bff5c000 rw-p 00022000 08:03 2361373
  /usr/lib/ld-2.22.so
7f25bff5c000-7f25bff5d000 rw-p 00000000 00:00 0
7ffc284af000-7ffc284d0000 rw-p 00000000 00:00 0                          [stack]
7ffc28585000-7ffc28587000 r--p 00000000 00:00 0                          [vvar]
7ffc28587000-7ffc28589000 r-xp 00000000 00:00 0                          [vdso]
 FAILED!


Valgrind seems to suggest that the cpu map is getting freed too early:

==11450== 3 errors in context 25 of 25:
==11450== Invalid read of size 4
==11450==    at 0x4CC64D: atomic_inc (atomic.h:48)
==11450==    by 0x4CC64D: cpu_map__get (cpumap.c:235)
==11450==    by 0x484DF0: __perf_evlist__propagate_maps (evlist.c:137)
==11450==    by 0x4857D9: perf_evlist__add (evlist.c:165)
==11450==    by 0x48588E: perf_evlist__splice_list_tail (evlist.c:182)
==11450==    by 0x4947F9: parse_events (parse-events.c:1411)
==11450==    by 0x476383: do_test_code_reading (code-reading.c:534)
==11450==    by 0x476575: test__code_reading (code-reading.c:608)
==11450==    by 0x45D7CD: run_test (builtin-test.c:219)
==11450==    by 0x45D982: __cmd_test (builtin-test.c:268)
==11450==    by 0x45DBD1: cmd_test (builtin-test.c:338)
==11450==    by 0x47B580: run_builtin (perf.c:386)
==11450==    by 0x47B77D: handle_internal_command (perf.c:447)
==11450==  Address 0x875b8a0 is 0 bytes inside a block of size 136 free'd
==11450==    at 0x4C29D2A: free (in
/usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
==11450==    by 0x4CBD49: cpu_map__delete (cpumap.c:228)
==11450==    by 0x4CC690: cpu_map__put (cpumap.c:242)
==11450==    by 0x484DE3: __perf_evlist__propagate_maps (evlist.c:136)
==11450==    by 0x484E87: perf_evlist__propagate_maps (evlist.c:152)
==11450==    by 0x486948: perf_evlist__set_maps (evlist.c:1222)
==11450==    by 0x4763FC: do_test_code_reading (code-reading.c:552)
==11450==    by 0x476575: test__code_reading (code-reading.c:608)
==11450==    by 0x45D7CD: run_test (builtin-test.c:219)
==11450==    by 0x45D982: __cmd_test (builtin-test.c:268)
==11450==    by 0x45DBD1: cmd_test (builtin-test.c:338)
==11450==    by 0x47B580: run_builtin (perf.c:386)
==11450==  Block was alloc'd at
==11450==    at 0x4C28C10: malloc (in
/usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
==11450==    by 0x4CBC10: cpu_map__trim_new (cpumap.c:35)
==11450==    by 0x4CC1FD: cpu_map__read (cpumap.c:93)
==11450==    by 0x4CC286: cpu_map__read_all_cpu_map (cpumap.c:110)
==11450==    by 0x4CC2E3: cpu_map__new (cpumap.c:125)
==11450==    by 0x4762BC: do_test_code_reading (code-reading.c:512)
==11450==    by 0x476575: test__code_reading (code-reading.c:608)
==11450==    by 0x45D7CD: run_test (builtin-test.c:219)
==11450==    by 0x45D982: __cmd_test (builtin-test.c:268)
==11450==    by 0x45DBD1: cmd_test (builtin-test.c:338)
==11450==    by 0x47B580: run_builtin (perf.c:386)
==11450==    by 0x47B77D: handle_internal_command (perf.c:447)


I tried this, and the problem goes away:

diff --git a/tools/perf/tests/code-reading.c b/tools/perf/tests/code-reading.c
index a767a64..00d30b9 100644
--- a/tools/perf/tests/code-reading.c
+++ b/tools/perf/tests/code-reading.c
@@ -514,6 +514,7 @@ static int do_test_code_reading(bool try_kcore)
                pr_debug("cpu_map__new failed\n");
                goto out_put;
        }
+       cpu_map__get(cpus);

        while (1) {
                const char *str;


But the above change seems totally bogus, because cpu_map__new should
have set the reference count to 1 already, so we must have unbalanced
get/put calls somehow. Anyone see the issue?

^ permalink raw reply related	[flat|nested] 5+ messages in thread

* Re: perf object code reading test crashes
  2016-02-17  6:42 perf object code reading test crashes Steven Noonan
@ 2016-02-17 14:27 ` Arnaldo Carvalho de Melo
  2016-02-18  1:13   ` Steven Noonan
  0 siblings, 1 reply; 5+ messages in thread
From: Arnaldo Carvalho de Melo @ 2016-02-17 14:27 UTC (permalink / raw)
  To: Steven Noonan; +Cc: Linux Kernel mailing List, Adrian Hunter, acme

Em Tue, Feb 16, 2016 at 10:42:19PM -0800, Steven Noonan escreveu:
> I oddly didn't run into this issue on every machine I tried, but
> there's some issues here:
> 
> $ sudo perf test 21
> 21: Test object code reading                                 :***
> Error in `perf': corrupted double-linked list: 0x00000000023ffcd0 ***

>  FAILED!
> 
> Valgrind seems to suggest that the cpu map is getting freed too early:
> 
> ==11450==  Address 0x875b8a0 is 0 bytes inside a block of size 136 free'd
> ==11450==    at 0x4C29D2A: free (in
> /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
> ==11450==    by 0x4CBD49: cpu_map__delete (cpumap.c:228)
> ==11450==    by 0x4CC690: cpu_map__put (cpumap.c:242)
> ==11450==    by 0x484DE3: __perf_evlist__propagate_maps (evlist.c:136)
 
 
> I tried this, and the problem goes away:

 
> +++ b/tools/perf/tests/code-reading.c
> @@ -514,6 +514,7 @@ static int do_test_code_reading(bool try_kcore)
>         }
> +       cpu_map__get(cpus);
> 
>         while (1) {

Yeah, we forgot to grab refcounts in perf_evlist__set_maps(), can you
try this instead, if it works please let me know so that I can add a:

Reported-and-Tested-by: you to this patch,

Thanks for the nice report!

- Arnaldo

diff --git a/tools/perf/util/evlist.c b/tools/perf/util/evlist.c
index d81f13de2476..a7eb0eae9938 100644
--- a/tools/perf/util/evlist.c
+++ b/tools/perf/util/evlist.c
@@ -1181,12 +1181,12 @@ void perf_evlist__set_maps(struct perf_evlist *evlist, struct cpu_map *cpus,
 	 */
 	if (cpus != evlist->cpus) {
 		cpu_map__put(evlist->cpus);
-		evlist->cpus = cpus;
+		evlist->cpus = cpu_map__get(cpus);
 	}
 
 	if (threads != evlist->threads) {
 		thread_map__put(evlist->threads);
-		evlist->threads = threads;
+		evlist->threads = thread_map__get(threads);
 	}
 
 	perf_evlist__propagate_maps(evlist);

^ permalink raw reply related	[flat|nested] 5+ messages in thread

* Re: perf object code reading test crashes
  2016-02-17 14:27 ` Arnaldo Carvalho de Melo
@ 2016-02-18  1:13   ` Steven Noonan
  2016-02-18 14:27     ` Arnaldo Carvalho de Melo
  0 siblings, 1 reply; 5+ messages in thread
From: Steven Noonan @ 2016-02-18  1:13 UTC (permalink / raw)
  To: Arnaldo Carvalho de Melo; +Cc: Linux Kernel mailing List, Adrian Hunter, acme

On Wed, Feb 17, 2016 at 6:27 AM, Arnaldo Carvalho de Melo
<acme@redhat.com> wrote:
> Em Tue, Feb 16, 2016 at 10:42:19PM -0800, Steven Noonan escreveu:
>> I oddly didn't run into this issue on every machine I tried, but
>> there's some issues here:
>>
>> $ sudo perf test 21
>> 21: Test object code reading                                 :***
>> Error in `perf': corrupted double-linked list: 0x00000000023ffcd0 ***
>
>>  FAILED!
>>
>> Valgrind seems to suggest that the cpu map is getting freed too early:
>>
>> ==11450==  Address 0x875b8a0 is 0 bytes inside a block of size 136 free'd
>> ==11450==    at 0x4C29D2A: free (in
>> /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
>> ==11450==    by 0x4CBD49: cpu_map__delete (cpumap.c:228)
>> ==11450==    by 0x4CC690: cpu_map__put (cpumap.c:242)
>> ==11450==    by 0x484DE3: __perf_evlist__propagate_maps (evlist.c:136)
>
>
>> I tried this, and the problem goes away:
>
>
>> +++ b/tools/perf/tests/code-reading.c
>> @@ -514,6 +514,7 @@ static int do_test_code_reading(bool try_kcore)
>>         }
>> +       cpu_map__get(cpus);
>>
>>         while (1) {
>
> Yeah, we forgot to grab refcounts in perf_evlist__set_maps(), can you
> try this instead, if it works please let me know so that I can add a:
>
> Reported-and-Tested-by: you to this patch,
>
> Thanks for the nice report!
>
> - Arnaldo

That did the trick for the refcounting as far as valgrind/libc are concerned.

Reported-and-Tested-by: Steven Noonan <steven@uplinklabs.net>


Now to figure out why the test is failing. This same test works fine
on another system running the same kernel build:

$ ./perf test -v -v 21
21: Test object code reading                                 :
--- start ---
test child forked, pid 19527
Looking at the vmlinux_path (7 entries long)
Using /usr/lib/debug/lib/modules/4.4.1-1-ec2/vmlinux for symbols
Parsing event 'cycles'
------------------------------------------------------------
perf_event_attr:
  size                             112
  { sample_period, sample_freq }   4000
  sample_type                      IP|TID|PERIOD
  disabled                         1
  inherit                          1
  mmap                             1
  comm                             1
  freq                             1
  task                             1
  sample_id_all                    1
  exclude_guest                    1
  mmap2                            1
  comm_exec                        1
------------------------------------------------------------
sys_perf_event_open: pid 19527  cpu 0  group_fd -1  flags 0x8
sys_perf_event_open failed, error -22
------------------------------------------------------------
perf_event_attr:
  size                             112
  { sample_period, sample_freq }   4000
  sample_type                      IP|TID|PERIOD
  disabled                         1
  inherit                          1
  mmap                             1
  comm                             1
  freq                             1
  task                             1
  sample_id_all                    1
  exclude_guest                    1
  mmap2                            1
  comm_exec                        1
------------------------------------------------------------
sys_perf_event_open: pid 19527  cpu 0  group_fd -1  flags 0
sys_perf_event_open failed, error -22
------------------------------------------------------------
perf_event_attr:
  size                             112
  { sample_period, sample_freq }   4000
  sample_type                      IP|TID|PERIOD
  disabled                         1
  inherit                          1
  mmap                             1
  comm                             1
  freq                             1
  task                             1
  sample_id_all                    1
  exclude_guest                    1
  comm_exec                        1
------------------------------------------------------------
sys_perf_event_open: pid 19527  cpu 0  group_fd -1  flags 0
sys_perf_event_open failed, error -22
------------------------------------------------------------
perf_event_attr:
  size                             112
  { sample_period, sample_freq }   4000
  sample_type                      IP|TID|PERIOD
  disabled                         1
  inherit                          1
  mmap                             1
  comm                             1
  freq                             1
  task                             1
  sample_id_all                    1
  comm_exec                        1
------------------------------------------------------------
sys_perf_event_open: pid 19527  cpu 0  group_fd -1  flags 0
sys_perf_event_open failed, error -22
------------------------------------------------------------
perf_event_attr:
  size                             112
  { sample_period, sample_freq }   4000
  sample_type                      IP|TID|PERIOD
  disabled                         1
  inherit                          1
  mmap                             1
  comm                             1
  freq                             1
  task                             1
  comm_exec                        1
------------------------------------------------------------
sys_perf_event_open: pid 19527  cpu 0  group_fd -1  flags 0
sys_perf_event_open failed, error -22
Parsing event 'cycles:u'
------------------------------------------------------------
perf_event_attr:
  size                             112
  { sample_period, sample_freq }   4000
  sample_type                      IP|TID|PERIOD
  disabled                         1
  inherit                          1
  exclude_kernel                   1
  exclude_hv                       1
  mmap                             1
  comm                             1
  freq                             1
  task                             1
  comm_exec                        1
------------------------------------------------------------
sys_perf_event_open: pid 19527  cpu 0  group_fd -1  flags 0
sys_perf_event_open failed, error -22
perf_evlist__open failed
test child finished with -1
---- end ----
Test object code reading: FAILED!


>
> diff --git a/tools/perf/util/evlist.c b/tools/perf/util/evlist.c
> index d81f13de2476..a7eb0eae9938 100644
> --- a/tools/perf/util/evlist.c
> +++ b/tools/perf/util/evlist.c
> @@ -1181,12 +1181,12 @@ void perf_evlist__set_maps(struct perf_evlist *evlist, struct cpu_map *cpus,
>          */
>         if (cpus != evlist->cpus) {
>                 cpu_map__put(evlist->cpus);
> -               evlist->cpus = cpus;
> +               evlist->cpus = cpu_map__get(cpus);
>         }
>
>         if (threads != evlist->threads) {
>                 thread_map__put(evlist->threads);
> -               evlist->threads = threads;
> +               evlist->threads = thread_map__get(threads);
>         }
>
>         perf_evlist__propagate_maps(evlist);

^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: perf object code reading test crashes
  2016-02-18  1:13   ` Steven Noonan
@ 2016-02-18 14:27     ` Arnaldo Carvalho de Melo
  2016-02-18 14:36       ` Arnaldo Carvalho de Melo
  0 siblings, 1 reply; 5+ messages in thread
From: Arnaldo Carvalho de Melo @ 2016-02-18 14:27 UTC (permalink / raw)
  To: Steven Noonan; +Cc: Linux Kernel mailing List, Adrian Hunter

Em Wed, Feb 17, 2016 at 05:13:59PM -0800, Steven Noonan escreveu:
> On Wed, Feb 17, 2016 at 6:27 AM, Arnaldo Carvalho de Melo wrote
> > Yeah, we forgot to grab refcounts in perf_evlist__set_maps(), can you
> > try this instead, if it works please let me know so that I can add a:

> > Reported-and-Tested-by: you to this patch,

> That did the trick for the refcounting as far as valgrind/libc are concerned.
 
> Reported-and-Tested-by: Steven Noonan <steven@uplinklabs.net>

Thanks, about the test failing:

#define EINVAL          22      /* Invalid argument */

It can be a number of things, lemme try running it here:
 
> Now to figure out why the test is failing. This same test works fine
> on another system running the same kernel build:
 
> $ ./perf test -v -v 21
> 21: Test object code reading                                 :
> --- start ---
> test child forked, pid 19527
> Looking at the vmlinux_path (7 entries long)
> Using /usr/lib/debug/lib/modules/4.4.1-1-ec2/vmlinux for symbols
> Parsing event 'cycles'
> ------------------------------------------------------------
> perf_event_attr:
>   size                             112
>   { sample_period, sample_freq }   4000
>   sample_type                      IP|TID|PERIOD
>   disabled                         1
>   inherit                          1
>   mmap                             1
>   comm                             1
>   freq                             1
>   task                             1
>   sample_id_all                    1
>   exclude_guest                    1
>   mmap2                            1
>   comm_exec                        1
> ------------------------------------------------------------
> sys_perf_event_open: pid 19527  cpu 0  group_fd -1  flags 0x8
> sys_perf_event_open failed, error -22

  [acme@jouet linux]$ perf test -v -v 21 2>&1 | head -30
  21: Test object code reading                                 :
  --- start ---
  test child forked, pid 28587
  Looking at the vmlinux_path (8 entries long)
  Using /usr/lib/debug/lib/modules/4.3.5-300.fc23.x86_64/vmlinux for symbols
  Parsing event 'cycles'
  ------------------------------------------------------------
  perf_event_attr:
    size                             112
    { sample_period, sample_freq }   4000
    sample_type                      IP|TID|PERIOD
    disabled                         1
    inherit                          1
    mmap                             1
    comm                             1
    freq                             1
    task                             1
    sample_id_all                    1
    exclude_guest                    1
    mmap2                            1
    comm_exec                        1
  ------------------------------------------------------------
  sys_perf_event_open: pid 28587  cpu 0  group_fd -1  flags 0x8
  sys_perf_event_open: pid 28587  cpu 1  group_fd -1  flags 0x8
  sys_perf_event_open: pid 28587  cpu 2  group_fd -1  flags 0x8
  sys_perf_event_open: pid 28587  cpu 3  group_fd -1  flags 0x8
  mmap size 528384B
  perf event ring buffer mmapped per cpu
  Reading object code for memory address: 0xffffffff810604ea
  File is: /usr/lib/debug/lib/modules/4.3.5-300.fc23.x86_64/vmlinux
  [acme@jouet linux]$ 

Works and starts to use the vmlinux file, etc, now lets try reducing the max
sample_freq to something below 4000 (4 kHz):

  [root@jouet ~]# cat /proc/sys/kernel/perf_event_max_sample_rate 
  25000
  [root@jouet ~]# echo 1000 > /proc/sys/kernel/perf_event_max_sample_rate 

When the system boots it starts with a high value and auto-decreases under
certain conditions:

  [root@jouet ~]# dmesg | grep max_sample_rate
  [ 2499.144373] perf interrupt took too long (2501 > 2500), lowering kernel.perf_event_max_sample_rate to 50000
  [ 3592.413606] perf interrupt took too long (5069 > 5000), lowering kernel.perf_event_max_sample_rate to 25000
  [root@jouet ~]# 

So lets say this specific system of yours went all the way down to 1000 (1 kHz):

  [acme@jouet linux]$ perf test -v -v 21 2>&1 | head -25
  21: Test object code reading                                 :
  --- start ---
  test child forked, pid 29140
  Looking at the vmlinux_path (8 entries long)
  Using /usr/lib/debug/lib/modules/4.3.5-300.fc23.x86_64/vmlinux for symbols
  Parsing event 'cycles'
  ------------------------------------------------------------
  perf_event_attr:
    size                             112
    { sample_period, sample_freq }   4000
    sample_type                      IP|TID|PERIOD
    disabled                         1
    inherit                          1
    mmap                             1
    comm                             1
    freq                             1
    task                             1
    sample_id_all                    1
    exclude_guest                    1
    mmap2                            1
    comm_exec                        1
  ------------------------------------------------------------
  sys_perf_event_open: pid 29140  cpu 0  group_fd -1  flags 0x8
  sys_perf_event_open failed, error -22
  ------------------------------------------------------------
  [acme@jouet linux]$ perf test -v -v 21 2>&1 | tail -5
  sys_perf_event_open failed, error -22
  perf_evlist__open failed
  test child finished with -1
  ---- end ----
  Test object code reading: FAILED!
  [acme@jouet linux]$ 

Oops, guess this is the problem, and I also think we don't need more than 1 hz
in this test if even that :-\

So, try the patch at the end of this message, with it and with I get:

  [root@jouet ~]# cat /proc/sys/kernel/perf_event_max_sample_rate 
  1000
  [root@jouet ~]# perf test -v -v 21 2>&1 | tail -26
  Using /proc/kcore for kernel object code
  Using /proc/kallsyms for symbols
  Parsing event 'cycles'
  ------------------------------------------------------------
  perf_event_attr:
    size                             112
    sample_type                      IP|TID
    disabled                         1
    inherit                          1
    mmap                             1
    comm                             1
    task                             1
    sample_id_all                    1
    exclude_guest                    1
    mmap2                            1
    comm_exec                        1
  ------------------------------------------------------------
  sys_perf_event_open: pid 31476  cpu 0  group_fd -1  flags 0x8
  sys_perf_event_open: pid 31476  cpu 1  group_fd -1  flags 0x8
  sys_perf_event_open: pid 31476  cpu 2  group_fd -1  flags 0x8
  sys_perf_event_open: pid 31476  cpu 3  group_fd -1  flags 0x8
  mmap size 528384B
  perf event ring buffer mmapped per cpu
  test child finished with 0
  ---- end ----
  Test object code reading: Ok
  [root@jouet ~]#

---
diff --git a/tools/perf/tests/code-reading.c b/tools/perf/tests/code-reading.c
index 313a48c6b2bc..a984accdaa74 100644
--- a/tools/perf/tests/code-reading.c
+++ b/tools/perf/tests/code-reading.c
@@ -439,7 +439,6 @@ static int do_test_code_reading(bool try_kcore)
 		.mmap_pages	     = UINT_MAX,
 		.user_freq	     = UINT_MAX,
 		.user_interval	     = ULLONG_MAX,
-		.freq		     = 4000,
 		.target		     = {
 			.uses_mmap   = true,
 		},

^ permalink raw reply related	[flat|nested] 5+ messages in thread

* Re: perf object code reading test crashes
  2016-02-18 14:27     ` Arnaldo Carvalho de Melo
@ 2016-02-18 14:36       ` Arnaldo Carvalho de Melo
  0 siblings, 0 replies; 5+ messages in thread
From: Arnaldo Carvalho de Melo @ 2016-02-18 14:36 UTC (permalink / raw)
  To: Steven Noonan; +Cc: Linux Kernel mailing List, Adrian Hunter

Em Thu, Feb 18, 2016 at 11:27:27AM -0300, Arnaldo Carvalho de Melo escreveu:
> Oops, guess this is the problem, and I also think we don't need more than 1 hz
> in this test if even that :-\
> 
> So, try the patch at the end of this message, with it and with I get:

Ok, so this test actually process samples, so please just replace that
with a lower freq, say 10.

> diff --git a/tools/perf/tests/code-reading.c b/tools/perf/tests/code-reading.c
> index 313a48c6b2bc..a984accdaa74 100644
> --- a/tools/perf/tests/code-reading.c
> +++ b/tools/perf/tests/code-reading.c
> @@ -439,7 +439,6 @@ static int do_test_code_reading(bool try_kcore)
>  		.mmap_pages	     = UINT_MAX,
>  		.user_freq	     = UINT_MAX,
>  		.user_interval	     = ULLONG_MAX,
> -		.freq		     = 4000,
>  		.target		     = {
>  			.uses_mmap   = true,
>  		},

^ permalink raw reply	[flat|nested] 5+ messages in thread

end of thread, other threads:[~2016-02-18 14:36 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2016-02-17  6:42 perf object code reading test crashes Steven Noonan
2016-02-17 14:27 ` Arnaldo Carvalho de Melo
2016-02-18  1:13   ` Steven Noonan
2016-02-18 14:27     ` Arnaldo Carvalho de Melo
2016-02-18 14:36       ` Arnaldo Carvalho de Melo

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.