perf expr: Add debug logging for literals

Useful for diagnosing problems with metrics.

Signed-off-by: Ian Rogers <irogers@google.com>
Cc: Alexander Shishkin <alexander.shishkin@linux.intel.com>
Cc: Andi Kleen <ak@linux.intel.com>
Cc: Jiri Olsa <jolsa@redhat.com>
Cc: John Garry <john.garry@huawei.com>
Cc: Kajol Jain <kjain@linux.ibm.com>
Cc: Kan Liang <kan.liang@linux.intel.com>
Cc: Konstantin Khlebnikov <koct9i@gmail.com>
Cc: Mark Rutland <mark.rutland@arm.com>
Cc: Namhyung Kim <namhyung@kernel.org>
Cc: Paul Clarke <pc@us.ibm.com>
Cc: Peter Zijlstra <peterz@infradead.org>
Cc: Stephane Eranian <eranian@google.com>
Link: http://lore.kernel.org/lkml/20211124001231.3277836-1-irogers@google.com
[ Fixed up perf_cpu conflict, i.e. we need to append ".cpu" to cpu__max_present_cpu() result ]
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
This commit is contained in:
Ian Rogers 2021-11-23 16:12:28 -08:00 committed by Arnaldo Carvalho de Melo
parent 6dd8646939
commit f56ef30a31

View file

@ -405,12 +405,17 @@ double expr_id_data__source_count(const struct expr_id_data *data)
double expr__get_literal(const char *literal)
{
static struct cpu_topology *topology;
double result = NAN;
if (!strcmp("#smt_on", literal))
return smt_on() > 0 ? 1.0 : 0.0;
if (!strcmp("#smt_on", literal)) {
result = smt_on() > 0 ? 1.0 : 0.0;
goto out;
}
if (!strcmp("#num_cpus", literal))
return cpu__max_present_cpu().cpu;
if (!strcmp("#num_cpus", literal)) {
result = cpu__max_present_cpu().cpu;
goto out;
}
/*
* Assume that topology strings are consistent, such as CPUs "0-1"
@ -422,16 +427,24 @@ double expr__get_literal(const char *literal)
topology = cpu_topology__new();
if (!topology) {
pr_err("Error creating CPU topology");
return NAN;
goto out;
}
}
if (!strcmp("#num_packages", literal))
return topology->package_cpus_lists;
if (!strcmp("#num_dies", literal))
return topology->die_cpus_lists;
if (!strcmp("#num_cores", literal))
return topology->core_cpus_lists;
if (!strcmp("#num_packages", literal)) {
result = topology->package_cpus_lists;
goto out;
}
if (!strcmp("#num_dies", literal)) {
result = topology->die_cpus_lists;
goto out;
}
if (!strcmp("#num_cores", literal)) {
result = topology->core_cpus_lists;
goto out;
}
pr_err("Unrecognized literal '%s'", literal);
return NAN;
out:
pr_debug2("literal: %s = %f\n", literal, result);
return result;
}