Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751441AbcJHEEg (ORCPT ); Sat, 8 Oct 2016 00:04:36 -0400 Received: from szxga02-in.huawei.com ([119.145.14.65]:35760 "EHLO szxga02-in.huawei.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1750708AbcJHEE0 (ORCPT ); Sat, 8 Oct 2016 00:04:26 -0400 Subject: Re: [PATCH 1/3] perf, tools: Handle events including .c and .o To: Arnaldo Carvalho de Melo , Andi Kleen References: <1475696832-9188-1-git-send-email-andi@firstfloor.org> <1475696832-9188-2-git-send-email-andi@firstfloor.org> <20161006201824.GG4809@kernel.org> CC: , , , Andi Kleen From: "Wangnan (F)" Message-ID: <57F86FE0.5010105@huawei.com> Date: Sat, 8 Oct 2016 12:02:40 +0800 User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:38.0) Gecko/20100101 Thunderbird/38.5.0 MIME-Version: 1.0 In-Reply-To: <20161006201824.GG4809@kernel.org> Content-Type: text/plain; charset="utf-8"; format=flowed Content-Transfer-Encoding: 7bit X-Originating-IP: [10.111.66.109] X-CFilter-Loop: Reflected Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 3115 Lines: 77 On 2016/10/7 4:18, Arnaldo Carvalho de Melo wrote: > Em Wed, Oct 05, 2016 at 12:47:10PM -0700, Andi Kleen escreveu: >> From: Andi Kleen >> >> This is a generic bug fix, but it helps with Sukadev's JSON event tree >> where such events can happen. >> >> Any event inclduing a .c/.o/.bpf currently triggers BPF compilation or loading >> and then an error. This can happen for some Intel JSON events, which cannot >> be used. >> >> Fix the scanner to only match for .o or .c or .bpf at the end. >> This will prevent loading multiple BPF scripts separated with comma, >> but I assume this is acceptable. > So, I tried it with the example provided in the thread for a previous > version of this patch (IIRC) and it still fails: > > > [acme@jouet linux]$ perf stat -e '{unc_p_clockticks,unc_p_power_state_occupancy.cores_c0}' -a -I 1000 > ERROR: problems with path {unc_p_clockticks,unc_p_power_state_occupancy.c: No such file or directory > event syntax error: '{unc_p_clockticks,unc_p_power_state_occupancy.cores_c0}' > \___ Failed to load {unc_p_clockticks,unc_p_power_state_occupancy.c from source: Error when compiling BPF scriptlet > > (add -v to see detail) > Run 'perf list' for a list of valid events > > Usage: perf stat [] [] > > -e, --event event selector. use 'perf list' to list available events > [acme@jouet linux]$ > > And with another event that for sure is available on this machine: > > > > [acme@jouet linux]$ perf stat -e '{uops_executed.core_cycles_ge_2}' -I 1000 usleep 10 > ERROR: problems with path {uops_executed.c: No such file or directory > event syntax error: '{uops_executed.core_cycles_ge_2}' > \___ Failed to load {uops_executed.c from source: Error when compiling BPF scriptlet > > (add -v to see detail) > Run 'perf list' for a list of valid events > > Usage: perf stat [] [] > > -e, --event event selector. use 'perf list' to list available events > [acme@jouet linux]$ > > > I thought this was due to the Makefile not noticing the change in the .l files, but I made > sure I deleted the build dir and rebuilt from scratch, same problem. > > - Arnaldo > Tested again, and thank you for giving us another chance for fixing this :) The key problem here is not the ending '$' but the leading '{'. Flex's greedy maching policy makes this problem. According to the design of parse-events.l, when it see something like '...{...}...', it first matches a 'group' in '' scope, then rewind to INITIAL scope to match events in the group. In INITIAL scope, when it see a '{', flex consume this char and goes back to '' scope to match next event. It works well before match BPF file path using unlimited '.*\.c' because '.*' will match the leading '{' in INITIAL scope without consuming it. The simplest method for this problem is fixing the '.*' part: like what we define for 'event', don't match ',', '{' and '}'. Doesn't like 'event', '/' is required because this is a path. Will post a patch for it. Please test it again. Thank you.