From: Jiri Olsa <jolsa@redhat.com>
To: Ian Rogers <irogers@google.com>
Cc: Peter Zijlstra <peterz@infradead.org>,
Ingo Molnar <mingo@redhat.com>,
Arnaldo Carvalho de Melo <acme@kernel.org>,
Mark Rutland <mark.rutland@arm.com>,
Alexander Shishkin <alexander.shishkin@linux.intel.com>,
Namhyung Kim <namhyung@kernel.org>,
Andi Kleen <ak@linux.intel.com>,
Jin Yao <yao.jin@linux.intel.com>, Leo Yan <leo.yan@linaro.org>,
John Garry <john.garry@huawei.com>,
Kan Liang <kan.liang@linux.intel.com>,
Kajol Jain <kjain@linux.ibm.com>,
Adrian Hunter <adrian.hunter@intel.com>,
Paul Clarke <pc@us.ibm.com>,
linux-kernel@vger.kernel.org,
Stephane Eranian <eranian@google.com>
Subject: Re: [PATCH 2/2] perf test: Improve pmu event metric testing
Date: Wed, 13 May 2020 19:48:19 +0200 [thread overview]
Message-ID: <20200513174819.GA3343750@krava> (raw)
In-Reply-To: <20200513062236.854-2-irogers@google.com>
On Tue, May 12, 2020 at 11:22:36PM -0700, Ian Rogers wrote:
SNIP
> +
> +static int check_parse_id(const char *id, bool same_cpu, struct pmu_event *pe)
> +{
> + struct parse_events_error error;
> + struct evlist *evlist;
> + int ret;
> +
> + /* Numbers are always valid. */
> + if (is_number(id))
> + return 0;
> +
> + evlist = evlist__new();
> + memset(&error, 0, sizeof(error));
> + ret = parse_events(evlist, id, &error);
> + if (ret && same_cpu) {
> + fprintf(stderr,
> + "\nWARNING: Parse event failed metric '%s' id '%s' expr '%s'\n",
> + pe->metric_name, id, pe->metric_expr);
> + fprintf(stderr, "Error string '%s' help '%s'\n",
> + error.str, error.help);
> + } else if (ret) {
> + pr_debug3("Parse event failed, but for an event that may not be supported by this CPU.\nid '%s' metric '%s' expr '%s'\n",
> + id, pe->metric_name, pe->metric_expr);
> + }
I wonder if we could add 'fake pmu' that would be used for tests
and use it parse_events_add_pmu to add 'fake' evsel but the name
would be correct.. we could add parse_events_state::fake_pmu bool
for that
rest of the event types (other than pmu syntax) might be ok
> + evlist__delete(evlist);
> + free(error.str);
> + free(error.help);
> + free(error.first_str);
> + free(error.first_help);
> + /* TODO: too many metrics are broken to fail on this test currently. */
> + return 0;
> +}
> +
> +static int test_parsing(void)
> +{
> + struct pmu_events_map *cpus_map = perf_pmu__find_map(NULL);
> + struct pmu_events_map *map;
> + struct pmu_event *pe;
> + int i, j, k;
> + const char **ids;
> + int idnum;
> + int ret = 0;
> + struct expr_parse_ctx ctx;
> + double result;
> +
> + i = 0;
> + for (;;) {
> + map = &pmu_events_map[i++];
> + if (!map->table) {
> + map = NULL;
hum, what's the map = NULL for in here?
thanks,
jirka
> + break;
> + }
> + j = 0;
> + for (;;) {
> + pe = &map->table[j++];
> + if (!pe->name && !pe->metric_group && !pe->metric_name)
> + break;
> + if (!pe->metric_expr)
> + continue;
> + if (expr__find_other(pe->metric_expr, NULL,
> + &ids, &idnum, 0) < 0) {
> + pr_debug("Parse other failed for map %s %s %s\n",
> + map->cpuid, map->version, map->type);
> + pr_debug("On metric %s\n", pe->metric_name);
> + pr_debug("On expression %s\n", pe->metric_expr);
> + ret++;
> + continue;
> + }
> + expr__ctx_init(&ctx);
> +
> + /*
> + * Add all ids with a made up value. The value may
> + * trigger divide by zero when subtracted and so try to
> + * make them unique.
> + */
> + for (k = 0; k < idnum; k++)
> + expr__add_id(&ctx, ids[k], k + 1);
> +
> + for (k = 0; k < idnum; k++) {
> + if (check_parse_id(ids[k], map == cpus_map, pe))
> + ret++;
> + }
> +
> + if (expr__parse(&result, &ctx, pe->metric_expr, 0)) {
> + pr_debug("Parse failed for map %s %s %s\n",
> + map->cpuid, map->version, map->type);
> + pr_debug("On metric %s\n", pe->metric_name);
> + pr_debug("On expression %s\n", pe->metric_expr);
> + ret++;
> + }
> + for (k = 0; k < idnum; k++)
> + zfree(&ids[k]);
> + free(ids);
> + }
> + }
> + return ret;
SNIP
prev parent reply other threads:[~2020-05-13 17:48 UTC|newest]
Thread overview: 11+ messages / expand[flat|nested] mbox.gz Atom feed top
2020-05-13 6:22 [PATCH 1/2] perf expr: Test parsing of floating point numbers Ian Rogers
2020-05-13 6:22 ` [PATCH 2/2] perf test: Improve pmu event metric testing Ian Rogers
2020-05-13 6:29 ` Ian Rogers
2020-05-13 15:25 ` John Garry
2020-05-13 16:10 ` Ian Rogers
2020-05-14 8:59 ` John Garry
2020-05-14 23:02 ` Ian Rogers
2020-05-15 9:09 ` John Garry
2020-05-15 11:48 ` Jiri Olsa
2020-05-15 14:36 ` John Garry
2020-05-13 17:48 ` Jiri Olsa [this message]
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=20200513174819.GA3343750@krava \
--to=jolsa@redhat.com \
--cc=acme@kernel.org \
--cc=adrian.hunter@intel.com \
--cc=ak@linux.intel.com \
--cc=alexander.shishkin@linux.intel.com \
--cc=eranian@google.com \
--cc=irogers@google.com \
--cc=john.garry@huawei.com \
--cc=kan.liang@linux.intel.com \
--cc=kjain@linux.ibm.com \
--cc=leo.yan@linaro.org \
--cc=linux-kernel@vger.kernel.org \
--cc=mark.rutland@arm.com \
--cc=mingo@redhat.com \
--cc=namhyung@kernel.org \
--cc=pc@us.ibm.com \
--cc=peterz@infradead.org \
--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.