Mesa (staging/20.1): intel/perf: fix raw query kernel metric selection
GitLab Mirror
gitlab-mirror at kemper.freedesktop.org
Wed Sep 2 13:58:49 UTC 2020
Module: Mesa
Branch: staging/20.1
Commit: 7d73fbff3ff94ff056ea88117de10933f756d57c
URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=7d73fbff3ff94ff056ea88117de10933f756d57c
Author: Lionel Landwerlin <lionel.g.landwerlin at intel.com>
Date: Mon Aug 24 13:52:59 2020 +0300
intel/perf: fix raw query kernel metric selection
The raw query is meant to be used with MDAPI [1]. When using this
metric without this library, we usually selected the TestOa metric to
provide some default sensible values (instead of undefined).
Historically this TestOa metric lived in the kernel at ID=1. We
removed all metrics from the kernel in kernel commit 9aba9c188da136
("drm/i915/perf: remove generated code").
This fixes the Mesa code to use a valid metric set ID (1 could work
some of the time, but not guaranteed).
[1] : https://github.com/intel/metrics-discovery
v2: Store fallback metric at init time
v3: Drop TestOa lookout
v4: Skip the existing queries (Marcin)
Signed-off-by: Lionel Landwerlin <lionel.g.landwerlin at intel.com>
CC: <mesa-stable at lists.freedesktop.org>
Tested-by: Marcin Ślusarz <marcin.slusarz at intel.com> (v1)
Reviewed-by: Kenneth Graunke <kenneth at whitecape.org>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/6438>
(cherry-picked from commit ec1fa1d51ff614c19d08c949482b40c060de48c9)
---
.pick_status.json | 2 +-
src/intel/perf/gen_perf.c | 13 +++++++++++++
src/intel/perf/gen_perf.h | 5 +++++
src/intel/perf/gen_perf_query.c | 2 +-
4 files changed, 20 insertions(+), 2 deletions(-)
diff --git a/.pick_status.json b/.pick_status.json
index bba637c6d6e..281098e0920 100644
--- a/.pick_status.json
+++ b/.pick_status.json
@@ -3406,7 +3406,7 @@
"description": "intel/perf: fix raw query kernel metric selection",
"nominated": true,
"nomination_type": 0,
- "resolution": 0,
+ "resolution": 1,
"master_sha": null,
"because_sha": null
},
diff --git a/src/intel/perf/gen_perf.c b/src/intel/perf/gen_perf.c
index 189f71f6575..77b7f4d8188 100644
--- a/src/intel/perf/gen_perf.c
+++ b/src/intel/perf/gen_perf.c
@@ -621,6 +621,19 @@ load_oa_metrics(struct gen_perf_config *perf, int fd,
else
enumerate_sysfs_metrics(perf);
+ /* Select a fallback OA metric. Look for the TestOa metric or use the last
+ * one if no present (on HSW).
+ */
+ for (int i = 0; i < perf->n_queries; i++) {
+ if (perf->queries[i].symbol_name &&
+ strcmp(perf->queries[i].symbol_name, "TestOa") == 0) {
+ perf->fallback_raw_oa_metric = perf->queries[i].oa_metrics_set_id;
+ break;
+ }
+ }
+ if (perf->fallback_raw_oa_metric == 0)
+ perf->fallback_raw_oa_metric = perf->queries[perf->n_queries - 1].oa_metrics_set_id;
+
return true;
}
diff --git a/src/intel/perf/gen_perf.h b/src/intel/perf/gen_perf.h
index 1421d2b3a08..05029bc912e 100644
--- a/src/intel/perf/gen_perf.h
+++ b/src/intel/perf/gen_perf.h
@@ -228,6 +228,11 @@ struct gen_perf_config {
*/
struct hash_table *oa_metrics_table;
+ /* When MDAPI hasn't configured the metric we need to use by the time the
+ * query begins, this OA metric is used as a fallback.
+ */
+ uint64_t fallback_raw_oa_metric;
+
/* Location of the device's sysfs entry. */
char sysfs_dev_dir[256];
diff --git a/src/intel/perf/gen_perf_query.c b/src/intel/perf/gen_perf_query.c
index b9744913b16..fb6e5d33efb 100644
--- a/src/intel/perf/gen_perf_query.c
+++ b/src/intel/perf/gen_perf_query.c
@@ -423,7 +423,7 @@ get_metric_id(struct gen_perf_config *perf,
if (!gen_perf_load_metric_id(perf, query->guid,
&raw_query->oa_metrics_set_id)) {
DBG("Unable to read query guid=%s ID, falling back to test config\n", query->guid);
- raw_query->oa_metrics_set_id = 1ULL;
+ raw_query->oa_metrics_set_id = perf->fallback_raw_oa_metric;
} else {
DBG("Raw query '%s'guid=%s loaded ID: %"PRIu64"\n",
query->name, query->guid, query->oa_metrics_set_id);
More information about the mesa-commit
mailing list