[CI 4/6] lib/igt_drm_fdinfo: Parse drm-total-cycles
Lucas De Marchi
lucas.demarchi at intel.com
Tue May 21 16:15:23 UTC 2024
Parse drm-total-cycles and annotate what are the possible engine
utilization types that can be used. Currently there are 2 possible ways
to calculate utilization:
1) via drm-engine, that uses the time and derive the utilization by
comparing to the CPU time
2) via drm-cycles + drm-total-cycles, that uses the GPU time
igt_drm_fdinfo just marks the presence of the keys, letting the caller
decide which method to use.
It is assumed that if any drm-engine, drm-cycles or drm-total-cycles is
available, it's available for all engines with non-zero utilization.
Reviewed-by: Umesh Nerlige Ramappa <umesh.nerlige.ramappa at intel.com>
Link: https://lore.kernel.org/r/20240504064643.25863-12-lucas.demarchi@intel.com
Signed-off-by: Lucas De Marchi <lucas.demarchi at intel.com>
---
lib/igt_drm_fdinfo.c | 4 ++++
lib/igt_drm_fdinfo.h | 3 +++
2 files changed, 7 insertions(+)
diff --git a/lib/igt_drm_fdinfo.c b/lib/igt_drm_fdinfo.c
index 9622d05b7..539d15056 100644
--- a/lib/igt_drm_fdinfo.c
+++ b/lib/igt_drm_fdinfo.c
@@ -265,6 +265,10 @@ __igt_parse_drm_fdinfo(int dir, const char *fd, struct drm_client_fdinfo *info,
idx = parse_engine(l + keylen, info,
name_map, map_entries, &val);
UPDATE_ENGINE(idx, cycles, val, DRM_FDINFO_UTILIZATION_CYCLES);
+ } else if (strstartswith(l, "drm-total-cycles-", &keylen)) {
+ idx = parse_engine(l + keylen, info,
+ name_map, map_entries, &val);
+ UPDATE_ENGINE(idx, total_cycles, val, DRM_FDINFO_UTILIZATION_TOTAL_CYCLES);
} else if (strstartswith(l, "drm-total-", &keylen)) {
idx = parse_region(l + keylen, info,
region_map, region_entries, &val);
diff --git a/lib/igt_drm_fdinfo.h b/lib/igt_drm_fdinfo.h
index ea90edd79..35f43305b 100644
--- a/lib/igt_drm_fdinfo.h
+++ b/lib/igt_drm_fdinfo.h
@@ -44,6 +44,7 @@ struct drm_client_meminfo {
enum drm_fdinfo_utilization {
DRM_FDINFO_UTILIZATION_ENGINE_TIME = 1U << 0,
DRM_FDINFO_UTILIZATION_CYCLES = 1U << 1,
+ DRM_FDINFO_UTILIZATION_TOTAL_CYCLES = 1U << 2,
};
struct drm_client_fdinfo {
@@ -63,6 +64,8 @@ struct drm_client_fdinfo {
uint64_t engine_time[DRM_CLIENT_FDINFO_MAX_ENGINES];
/* drm-cycles-<engine> values */
uint64_t cycles[DRM_CLIENT_FDINFO_MAX_ENGINES];
+ /* drm-total-cycles-<engine> values */
+ uint64_t total_cycles[DRM_CLIENT_FDINFO_MAX_ENGINES];
unsigned int num_regions;
unsigned int last_region_index;
--
2.43.0
More information about the igt-dev
mailing list