All of lore.kernel.org
 help / color / mirror / Atom feed
From: Jiri Olsa <jolsa@redhat.com>
To: Arnaldo Carvalho de Melo <acme@kernel.org>
Cc: Jiri Olsa <jolsa@kernel.org>, Wang Nan <wangnan0@huawei.com>,
	Namhyung Kim <namhyung@kernel.org>,
	David Ahern <dsahern@gmail.com>,
	Linux Kernel Mailing List <linux-kernel@vger.kernel.org>
Subject: Re: perf tools event parsing code
Date: Sun, 2 Aug 2015 21:56:27 +0200	[thread overview]
Message-ID: <20150802195523.GA11901@krava.redhat.com> (raw)
In-Reply-To: <20150731205532.GC16700@kernel.org>

On Fri, Jul 31, 2015 at 05:55:32PM -0300, Arnaldo Carvalho de Melo wrote:
> Trying to figure out why this cset, by Wangnan:
> 
> https://git.kernel.org/cgit/linux/kernel/git/acme/linux.git/commit/?h=perf/ebpf&id=42cb6deef348f6afece0ad6fd7b034bfb532000e
> 
> doesn't make the routine he associated with parsing '--event bpf_program.o',
> ended up in this:

that change looks ok to me, but this
backtrac eis from pmu cpu lookup/parsing, please check below
> 
> #0  parse_events__scan_bytes (yybytes=yybytes@entry=0x7fffffff8480 "event=0x2e,umask=0x4f\n", _yybytes_len=22, yyscanner=0x18e4c30)
>     at util/parse-events-flex.c:3312
> #1  0x00000000004addb3 in parse_events__scan_string (yystr=<optimized out>, yystr@entry=0x7fffffff8480 "event=0x2e,umask=0x4f\n", yyscanner=<optimized out>)
>     at util/parse-events-flex.c:3274
> #2  0x000000000048a5e7 in parse_events__scanner (str=str@entry=0x7fffffff8480 "event=0x2e,umask=0x4f\n", data=data@entry=0x7fffffff83f0, 
>     start_token=start_token@entry=259) at util/parse-events.c:1081
> #3  0x000000000048ca52 in parse_events_terms (terms=terms@entry=0x18e4a88, str=str@entry=0x7fffffff8480 "event=0x2e,umask=0x4f\n")
>     at util/parse-events.c:1104
> #4  0x00000000004b2497 in __perf_pmu__new_alias (list=list@entry=0x7fffffffa700, dir=dir@entry=0x7fffffff96b0 "/sys/bus/event_source/devices/cpu/events", 
>     name=name@entry=0x18d864b "cache-references", desc=desc@entry=0x0, val=val@entry=0x7fffffff8480 "event=0x2e,umask=0x4f\n") at util/pmu.c:224
> #5  0x00000000004b25c0 in perf_pmu__new_alias (list=list@entry=0x7fffffffa700, dir=dir@entry=0x7fffffff96b0 "/sys/bus/event_source/devices/cpu/events", 
>     name=name@entry=0x18d864b "cache-references", file=file@entry=0x18d67e0) at util/pmu.c:258
> #6  0x00000000004b2788 in pmu_aliases_parse (dir=dir@entry=0x7fffffff96b0 "/sys/bus/event_source/devices/cpu/events", head=head@entry=0x7fffffffa700)
>     at util/pmu.c:313
> #7  0x00000000004b2864 in pmu_aliases (name=name@entry=0x5b9c47 "cpu", head=head@entry=0x7fffffffa700) at util/pmu.c:340
> #8  0x00000000004b328a in pmu_lookup (name=<optimized out>, name@entry=0x5b9c47 "cpu") at util/pmu.c:477
> #9  0x00000000004b33de in perf_pmu__find (name=name@entry=0x5b9c47 "cpu") at util/pmu.c:541
> #10 0x000000000048a445 in perf_pmu__parse_init () at util/parse-events.c:1008
> #11 0x000000000048b86d in perf_pmu__parse_check (name=name@entry=0x18d6c40 "file.c") at util/parse-events.c:1054
> #12 0x00000000004ad4e2 in pmu_str_check (scanner=scanner@entry=0x18d6f20) at util/parse-events.l:74

this is support for the event term shortcut, like using

  perf record -e mem-loads ...
    
instead of:
    
  perf record -e cpu/mem-loads/

it calls 'perf_pmu__find("cpu") which triggers 'cpu' pmu 
lookup 'pmu_lookup("cpu")'

and that one triggers alias parsing above as well  ;-)

> #13 0x00000000004af78b in parse_events_lex (yylval_param=yylval_param@entry=0x7fffffffa900, yylloc_param=yylloc_param@entry=0x7fffffffa920, 
>     yyscanner=yyscanner@entry=0x18d6f20) at util/parse-events.l:267
> #14 0x00000000004b042c in parse_events_parse (_data=_data@entry=0x7fffffffbec0, scanner=0x18d6f20) at util/parse-events-bison.c:1570
> #15 0x000000000048a5f6 in parse_events__scanner (str=str@entry=0x7fffffffe778 "file.c", data=data@entry=0x7fffffffbec0, start_token=start_token@entry=258)
>     at util/parse-events.c:1086
> #16 0x000000000048b955 in parse_events (evlist=0x18d7b90, str=str@entry=0x7fffffffe778 "file.c", err=err@entry=0x7fffffffbf10) at util/parse-events.c:1126

events parsing starts here ^^^

> #17 0x000000000048b9f7 in parse_events_option (opt=<optimized out>, str=0x7fffffffe778 "file.c", unset=<optimized out>) at util/parse-events.c:1224
> #18 0x0000000000487f30 in get_value (p=p@entry=0x7fffffffc0b0, opt=0x831c00 <__record_options>, flags=flags@entry=1) at util/parse-options.c:151
> #19 0x000000000048823e in parse_short_opt (p=p@entry=0x7fffffffc0b0, options=<optimized out>, options@entry=0x831c00 <__record_options>)
>     at util/parse-options.c:230
> #20 0x0000000000488d6e in parse_options_step (ctx=ctx@entry=0x7fffffffc0b0, options=options@entry=0x831c00 <__record_options>, 
>     usagestr=usagestr@entry=0x599850 <__record_usage>) at util/parse-options.c:401
> #21 0x000000000048918c in parse_options_subcommand (argc=argc@entry=5, argv=argv@entry=0x7fffffffe520, options=0x831c00 <__record_options>, 
>     subcommands=subcommands@entry=0x0, usagestr=0x599850 <__record_usage>, flags=flags@entry=2) at util/parse-options.c:518
> #22 0x00000000004892da in parse_options (argc=argc@entry=5, argv=argv@entry=0x7fffffffe520, options=<optimized out>, usagestr=<optimized out>, 
>     flags=flags@entry=2) at util/parse-options.c:553
> #23 0x000000000042ad70 in cmd_record (argc=5, argv=0x7fffffffe520, prefix=<optimized out>) at builtin-record.c:1102
> #24 0x0000000000474253 in run_builtin (p=p@entry=0x83c7f0 <commands+144>, argc=argc@entry=5, argv=argv@entry=0x7fffffffe520) at perf.c:370
> #25 0x000000000047443f in handle_internal_command (argc=5, argv=0x7fffffffe520) at perf.c:429
> #26 0x00000000004744b0 in run_argv (argcp=argcp@entry=0x7fffffffe38c, argv=argv@entry=0x7fffffffe380) at perf.c:473
> #27 0x0000000000474726 in main (argc=5, argv=0x7fffffffe520) at perf.c:588
> (gdb) 
> 
> /me trying to figure out this problem, but also how to avoid doing all this
> seemingly unnecessary work, i.e. reading everything on the sysfs pmu files when
> trying to figure out if this is a bpf filter event (-e foo.o).

it's deep, but it's initialized only once.. after it's initialized,
there's no other parsing

jirka

  reply	other threads:[~2015-08-02 19:56 UTC|newest]

Thread overview: 3+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2015-07-31 20:55 perf tools event parsing code Arnaldo Carvalho de Melo
2015-08-02 19:56 ` Jiri Olsa [this message]
2015-08-03 15:12   ` Arnaldo Carvalho de Melo

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=20150802195523.GA11901@krava.redhat.com \
    --to=jolsa@redhat.com \
    --cc=acme@kernel.org \
    --cc=dsahern@gmail.com \
    --cc=jolsa@kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=namhyung@kernel.org \
    --cc=wangnan0@huawei.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.