Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2992500AbbHHRMO (ORCPT ); Sat, 8 Aug 2015 13:12:14 -0400 Received: from mx1.redhat.com ([209.132.183.28]:38139 "EHLO mx1.redhat.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751982AbbHHRMN (ORCPT ); Sat, 8 Aug 2015 13:12:13 -0400 Date: Sat, 8 Aug 2015 19:12:10 +0200 From: Jiri Olsa To: Arnaldo Carvalho de Melo Cc: kan.liang@intel.com, jolsa@kernel.org, namhyung@kernel.org, ak@linux.intel.com, linux-kernel@vger.kernel.org Subject: [PATCH] perf tools: Unset perf_event_attr::freq when period term is set Message-ID: <20150808171210.GC17040@krava.brq.redhat.com> References: <1438890294-33409-1-git-send-email-kan.liang@intel.com> <1438890294-33409-2-git-send-email-kan.liang@intel.com> <20150807153843.GD3325@kernel.org> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20150807153843.GD3325@kernel.org> User-Agent: Mutt/1.5.23 (2014-03-12) Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 3213 Lines: 81 On Fri, Aug 07, 2015 at 12:38:43PM -0300, Arnaldo Carvalho de Melo wrote: > Em Thu, Aug 06, 2015 at 03:44:53PM -0400, kan.liang@intel.com escreveu: > > From: Kan Liang > > Here are some examples and test results. > > > > 1. Comparing the elapsed time and perf.data size from "kernbench -M -H". > > > > The test command for FULL callgraph and time support. > > "perf record -e > > '{cpu/cpu-cycles,period=100000/,cpu/instructions,period=20000/p}' > > --call-graph fp --time" > > Jiri, while testing this I noticed that the message for EINVAL when > using the cpu// syntax (per-event settings) is cryptic: > > [root@zoo ~]# perf record -e 'cpu/cpu-cycles,call-graph=fp,time,period=100000/p' ls > Error: > The sys_perf_event_open() syscall returned with 22 (Invalid argument) for event (cpu/cpu-cycles,call-graph=fp,time,period=100000/p). > /bin/dmesg may provide additional information. > No CONFIG_PERF_EVENTS=y kernel support configured? > > Whereas if we use -F, it is much, much clearer, telling the user exactly > what is failing and what needs to be done to make it work: > > [root@zoo ~]# perf record -F 100000 -e cpu/cpu-cycles/ usleep 1 > Maximum frequency rate (25000) reached. > Please use -F freq option with lower value or consider > tweaking /proc/sys/kernel/perf_event_max_sample_rate. > [root@zoo ~]# > > Hope this is something easy to wire up, given your event parsing kung foo > skillz... my kungu foo found there was actually another issue ;-) we did not clear up attr->freq bit.. so the sample_period was handled as sample_freq value.. please check the patch below anyfoo, now period setup can raise sky high (which is correct) and once it meets the God it shows: [jolsa@krava perf]$ ./perf record -e 'cpu/cpu-cycles,call-graph=fp,time,period=1000000000000000000000000/' ls event syntax error: '..time,period=1000000000000000000000000/' \___ parser error I'll check if we could add some default error message when value crosses the type maximum.. which now falls to parser error jirka --- We need to unset 'perf_event_attr::freq' bit (default 1) when 'period' term is specified within event definition like: -e 'cpu/cpu-cycles,call-graph=fp,time,period=100000' otherwise it will handle the period value as frequency (and fail if it crossed the maximum allowed frequency value). Signed-off-by: Jiri Olsa Link: http://lkml.kernel.org/n/tip-7f3gjwbekakhyxr47wvin4zb@git.kernel.org --- diff --git a/tools/perf/util/evsel.c b/tools/perf/util/evsel.c index d902cad4ce10..4c779d23b1d7 100644 --- a/tools/perf/util/evsel.c +++ b/tools/perf/util/evsel.c @@ -623,6 +623,7 @@ static void apply_config_terms(struct perf_evsel *evsel, switch (term->type) { case PERF_EVSEL__CONFIG_TERM_PERIOD: attr->sample_period = term->val.period; + attr->freq = 0; break; case PERF_EVSEL__CONFIG_TERM_TIME: if (term->val.time) -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/