All of lore.kernel.org
 help / color / mirror / Atom feed
From: Arnaldo Carvalho de Melo <acme@kernel.org>
To: Jin Yao <yao.jin@linux.intel.com>
Cc: Jiri Olsa <jolsa@redhat.com>,
	jolsa@kernel.org, peterz@infradead.org, mingo@redhat.com,
	alexander.shishkin@linux.intel.com, Linux-kernel@vger.kernel.org,
	ak@linux.intel.com, kan.liang@intel.com, yao.jin@intel.com
Subject: Re: [PATCH] perf record: Skip side-band event setup if HAVE_LIBBPF_SUPPORT is not set
Date: Fri, 7 Aug 2020 09:28:40 -0300	[thread overview]
Message-ID: <20200807122840.GE2456573@kernel.org> (raw)
In-Reply-To: <20200807121629.GC2456573@kernel.org>

Em Fri, Aug 07, 2020 at 09:16:29AM -0300, Arnaldo Carvalho de Melo escreveu:
> Em Fri, Aug 07, 2020 at 09:09:56AM -0300, Arnaldo Carvalho de Melo escreveu:
> > Em Fri, Aug 07, 2020 at 09:08:24AM -0300, Arnaldo Carvalho de Melo escreveu:
> > > Em Thu, Aug 06, 2020 at 09:43:57PM +0200, Jiri Olsa escreveu:
> > > > On Wed, Aug 05, 2020 at 10:29:37AM +0800, Jin Yao wrote:
> > > > > We received an error report that perf-record caused 'Segmentation fault'
> > > > > on a newly system (e.g. on the new installed ubuntu).
> > > > > 
> > > > >  (gdb) backtrace
> > > > >  #0  __read_once_size (size=4, res=<synthetic pointer>, p=0x14) at /root/0-jinyao/acme/tools/include/linux/compiler.h:139
> > > > >  #1  atomic_read (v=0x14) at /root/0-jinyao/acme/tools/include/asm/../../arch/x86/include/asm/atomic.h:28
> > > > >  #2  refcount_read (r=0x14) at /root/0-jinyao/acme/tools/include/linux/refcount.h:65
> > > > >  #3  perf_mmap__read_init (map=map@entry=0x0) at mmap.c:177
> > > > >  #4  0x0000561ce5c0de39 in perf_evlist__poll_thread (arg=0x561ce68584d0) at util/sideband_evlist.c:62
> > > > >  #5  0x00007fad78491609 in start_thread (arg=<optimized out>) at pthread_create.c:477
> > > > >  #6  0x00007fad7823c103 in clone () at ../sysdeps/unix/sysv/linux/x86_64/clone.S:95
> > > > 
> > > > hum, I recall discussing the same issue,
> > > > I thought it was already fixed :-\ in any case:
> > > > 
> > > > Acked-by: Jiri Olsa <jolsa@redhat.com>
> > > 
> > > I added this:
> > > 
> > > Fixes: 23cbb41c939a ("perf record: Move side band evlist setup to separate routine")
> > > 
> > > To help this fixe go back to a few stable kernels. Technically the
> > > problem was introduced much earlier, when the side band thread was
> > > added, but then this would require more cherry-picking of patches and
> > > since we have a workaround, i.e. build with libbpf, I think this is
> > > enough.
> > 
> > I backtrack on that, as the sideband event is not just for BPF... The
> > switch-output-event code uses it as well, so it can't be dependent on
> > LIBBPF being built...
> > 
> > I'll see what I can do
> 
> So this is the change I made, the side band thread is may have been
> already created by 
> 
> [acme@quaco ~]$ perf record -h switch-output-event
> 
>  Usage: perf record [<options>] [<command>]
>     or: perf record [<options>] -- <command> [<options>]
> 
>         --switch-output-event <switch output event>
>                           switch output event selector. use 'perf list' to list available events
> 
> [acme@quaco ~]$
> 
> I'm doing some extra checking now on your report, and the patch below
> has skews because it clashed with the clockid patches by Jiri so I had
> to resolve its merge.
 
Sorry, I resent your patch, doh, here is the end result, with my change,
its ok to call perf_evlist__start_sb_thread() with a NULL evlist, it'll
just return 0.

- Arnald


commit b13536a7e93680625094beb18cdce4ae47a3dbfb
Author: Jin Yao <yao.jin@linux.intel.com>
Date:   Wed Aug 5 10:29:37 2020 +0800

    perf record: Skip side-band event setup if HAVE_LIBBPF_SUPPORT is not set
    
    We received an error report that perf-record caused 'Segmentation fault'
    on a newly system (e.g. on the new installed ubuntu).
    
      (gdb) backtrace
      #0  __read_once_size (size=4, res=<synthetic pointer>, p=0x14) at /root/0-jinyao/acme/tools/include/linux/compiler.h:139
      #1  atomic_read (v=0x14) at /root/0-jinyao/acme/tools/include/asm/../../arch/x86/include/asm/atomic.h:28
      #2  refcount_read (r=0x14) at /root/0-jinyao/acme/tools/include/linux/refcount.h:65
      #3  perf_mmap__read_init (map=map@entry=0x0) at mmap.c:177
      #4  0x0000561ce5c0de39 in perf_evlist__poll_thread (arg=0x561ce68584d0) at util/sideband_evlist.c:62
      #5  0x00007fad78491609 in start_thread (arg=<optimized out>) at pthread_create.c:477
      #6  0x00007fad7823c103 in clone () at ../sysdeps/unix/sysv/linux/x86_64/clone.S:95
    
    The root cause is, evlist__add_bpf_sb_event() just returns 0 if
    HAVE_LIBBPF_SUPPORT is not defined (inline function path). So it will
    not create a valid evsel for side-band event.
    
    But perf-record still creates BPF side band thread to process the
    side-band event, then the error happpens.
    
    We can reproduce this issue by removing the libelf-dev. e.g.
    1. apt-get remove libelf-dev
    2. perf record -a -- sleep 1
    
      root@test:~# ./perf record -a -- sleep 1
      perf: Segmentation fault
      Obtained 6 stack frames.
      ./perf(+0x28eee8) [0x5562d6ef6ee8]
      /lib/x86_64-linux-gnu/libc.so.6(+0x46210) [0x7fbfdc65f210]
      ./perf(+0x342e74) [0x5562d6faae74]
      ./perf(+0x257e39) [0x5562d6ebfe39]
      /lib/x86_64-linux-gnu/libpthread.so.0(+0x9609) [0x7fbfdc990609]
      /lib/x86_64-linux-gnu/libc.so.6(clone+0x43) [0x7fbfdc73b103]
      Segmentation fault (core dumped)
    
    To fix this issue,
    
    1. We either install the missing libraries to let HAVE_LIBBPF_SUPPORT
       be defined.
       e.g. apt-get install libelf-dev and install other related libraries.
    
    2. Use this patch to skip the side-band event setup if HAVE_LIBBPF_SUPPORT
       is not set.
    
    Committer notes:
    
    The side band thread is not used just with BPF, it is also used with
    --switch-output-event, so narrow the ifdef to the BPF specific part.
    
    Fixes: 23cbb41c939a ("perf record: Move side band evlist setup to separate routine")
    Signed-off-by: Jin Yao <yao.jin@linux.intel.com>
    Acked-by: Jiri Olsa <jolsa@kernel.org>
    Cc: Alexander Shishkin <alexander.shishkin@linux.intel.com>
    Cc: Andi Kleen <ak@linux.intel.com>
    Cc: Jin Yao <yao.jin@intel.com>
    Cc: Kan Liang <kan.liang@linux.intel.com>
    Cc: Peter Zijlstra <peterz@infradead.org>
    Link: http://lore.kernel.org/lkml/20200805022937.29184-1-yao.jin@linux.intel.com
    Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>

diff --git a/tools/perf/builtin-record.c b/tools/perf/builtin-record.c
index 7d97c8e9f7f9..f91352f847c0 100644
--- a/tools/perf/builtin-record.c
+++ b/tools/perf/builtin-record.c
@@ -1531,7 +1531,7 @@ static int record__setup_sb_evlist(struct record *rec)
 		evlist__set_cb(rec->sb_evlist, record__process_signal_event, rec);
 		rec->thread_id = pthread_self();
 	}
-
+#ifdef HAVE_LIBBPF_SUPPORT
 	if (!opts->no_bpf_event) {
 		if (rec->sb_evlist == NULL) {
 			rec->sb_evlist = evlist__new();
@@ -1547,7 +1547,7 @@ static int record__setup_sb_evlist(struct record *rec)
 			return -1;
 		}
 	}
-
+#endif
 	if (perf_evlist__start_sb_thread(rec->sb_evlist, &rec->opts.target)) {
 		pr_debug("Couldn't start the BPF side band thread:\nBPF programs starting from now on won't be annotatable\n");
 		opts->no_bpf_event = true;

  reply	other threads:[~2020-08-07 12:28 UTC|newest]

Thread overview: 8+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2020-08-05  2:29 [PATCH] perf record: Skip side-band event setup if HAVE_LIBBPF_SUPPORT is not set Jin Yao
2020-08-06 19:43 ` Jiri Olsa
2020-08-07  6:26   ` Jin, Yao
2020-08-07 12:08   ` Arnaldo Carvalho de Melo
2020-08-07 12:09     ` Arnaldo Carvalho de Melo
2020-08-07 12:16       ` Arnaldo Carvalho de Melo
2020-08-07 12:28         ` Arnaldo Carvalho de Melo [this message]
2020-08-10  0:35           ` Jin, Yao

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20200807122840.GE2456573@kernel.org \
    --to=acme@kernel.org \
    --cc=Linux-kernel@vger.kernel.org \
    --cc=ak@linux.intel.com \
    --cc=alexander.shishkin@linux.intel.com \
    --cc=jolsa@kernel.org \
    --cc=jolsa@redhat.com \
    --cc=kan.liang@intel.com \
    --cc=mingo@redhat.com \
    --cc=peterz@infradead.org \
    --cc=yao.jin@intel.com \
    --cc=yao.jin@linux.intel.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
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.