lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  linux-cve-announce  PHC 
Open Source and information security mailing list archives
 
Hash Suite: Windows password security audit tool. GUI, reports in PDF.
[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Date:	Thu, 18 Feb 2016 11:27:27 -0300
From:	Arnaldo Carvalho de Melo <acme@...nel.org>
To:	Steven Noonan <steven@...inklabs.net>
Cc:	Linux Kernel mailing List <linux-kernel@...r.kernel.org>,
	Adrian Hunter <adrian.hunter@...el.com>
Subject: Re: perf object code reading test crashes

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@...inklabs.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@...et 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@...et 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@...et ~]# cat /proc/sys/kernel/perf_event_max_sample_rate 
  25000
  [root@...et ~]# 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@...et ~]# 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@...et ~]# 

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

  [acme@...et 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@...et 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@...et 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@...et ~]# cat /proc/sys/kernel/perf_event_max_sample_rate 
  1000
  [root@...et ~]# 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@...et ~]#

---
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,
 		},

Powered by blists - more mailing lists