From: Umesh Nerlige Ramappa <umesh.nerlige.ramappa@intel.com>
To: igt-dev@lists.freedesktop.org
Cc: Lionel G Landwerlin <lionel.g.landwerlin@linux.intel.com>
Subject: [igt-dev] [PATCH i-g-t 23/31] i915/perf: Add support for engine specific metrics
Date: Tue, 14 Feb 2023 16:46:40 -0800 [thread overview]
Message-ID: <20230215004648.2100655-24-umesh.nerlige.ramappa@intel.com> (raw)
In-Reply-To: <20230215004648.2100655-1-umesh.nerlige.ramappa@intel.com>
Metrics config is different for media vs render engines. Choose the metrics
configurations as per the engine used for the test.
Signed-off-by: Umesh Nerlige Ramappa <umesh.nerlige.ramappa@intel.com>
---
tests/i915/perf.c | 236 ++++++++++++++++++++++++++--------------------
1 file changed, 136 insertions(+), 100 deletions(-)
diff --git a/tests/i915/perf.c b/tests/i915/perf.c
index 9c546cc1..15f9202d 100644
--- a/tests/i915/perf.c
+++ b/tests/i915/perf.c
@@ -278,7 +278,6 @@ static uint32_t num_perf_oa_groups;
static uint64_t gt_max_freq_mhz = 0;
static struct intel_perf *intel_perf = NULL;
-static struct intel_perf_metric_set *test_set = NULL;
static bool *undefined_a_counters;
static uint64_t oa_exp_1_millisec;
@@ -289,6 +288,10 @@ static void (*sanity_check_reports)(const uint32_t *oa_report0,
const uint32_t *oa_report1,
enum drm_i915_oa_format format);
+
+static struct intel_perf_metric_set *metric_set(const struct intel_execution_engine2 *e2);
+#define default_test_set metric_set(&default_e2)
+
static void
dump_report(const uint32_t *report, uint32_t size, const char *message) {
uint32_t i;
@@ -691,17 +694,7 @@ oar_unit_default_format(void)
if (IS_DG2(devid) || IS_METEORLAKE(devid))
return I915_OAR_FORMAT_A32u40_A4u32_B8_C8;
- return test_set->perf_oa_format;
-}
-
-static int
-oa_unit_default_format(const struct intel_execution_engine2 *e)
-{
- if (e->class == I915_ENGINE_CLASS_VIDEO ||
- e->class == I915_ENGINE_CLASS_VIDEO_ENHANCE)
- return I915_OAM_FORMAT_MPEC8u32_B8_C8;
-
- return test_set->perf_oa_format;
+ return default_test_set->perf_oa_format;
}
/*
@@ -1133,9 +1126,6 @@ gen8_sanity_check_test_oa_reports(const uint32_t *oa_report0,
static bool
init_sys_info(void)
{
- const char *test_set_name = NULL;
- struct intel_perf_metric_set *metric_set_iter;
-
igt_assert_neq(devid, 0);
intel_perf = intel_perf_for_fd(drm_fd);
@@ -1152,38 +1142,17 @@ init_sys_info(void)
* RenderBasic
*/
if (IS_HASWELL(devid)) {
- test_set_name = "RenderBasic";
read_report_ticks = hsw_read_report_ticks;
sanity_check_reports = hsw_sanity_check_render_basic_reports;
undefined_a_counters = hsw_undefined_a_counters;
} else {
- test_set_name = "TestOa";
read_report_ticks = gen8_read_report_ticks;
sanity_check_reports = gen8_sanity_check_test_oa_reports;
undefined_a_counters = gen8_undefined_a_counters;
}
- igt_list_for_each_entry(metric_set_iter, &intel_perf->metric_sets, link) {
- if (strcmp(metric_set_iter->symbol_name, test_set_name) == 0) {
- test_set = metric_set_iter;
- break;
- }
- }
-
- if (!test_set)
- return false;
-
- igt_debug("%s metric set UUID = %s\n",
- test_set->symbol_name,
- test_set->hw_config_guid);
-
intel_perf_load_perf_configs(intel_perf, drm_fd);
- if (test_set->perf_oa_metrics_set == 0) {
- igt_debug("Unable to load configurations\n");
- return false;
- }
-
oa_exp_1_millisec = max_oa_exponent_for_period_lte(1000000);
return true;
@@ -1255,8 +1224,8 @@ test_system_wide_paranoid(void)
DRM_I915_PERF_PROP_SAMPLE_OA, true,
/* OA unit configuration */
- DRM_I915_PERF_PROP_OA_METRICS_SET, test_set->perf_oa_metrics_set,
- DRM_I915_PERF_PROP_OA_FORMAT, test_set->perf_oa_format,
+ DRM_I915_PERF_PROP_OA_METRICS_SET, default_test_set->perf_oa_metrics_set,
+ DRM_I915_PERF_PROP_OA_FORMAT, default_test_set->perf_oa_format,
DRM_I915_PERF_PROP_OA_EXPONENT, oa_exp_1_millisec,
};
struct drm_i915_perf_open_param param = {
@@ -1281,8 +1250,8 @@ test_system_wide_paranoid(void)
DRM_I915_PERF_PROP_SAMPLE_OA, true,
/* OA unit configuration */
- DRM_I915_PERF_PROP_OA_METRICS_SET, test_set->perf_oa_metrics_set,
- DRM_I915_PERF_PROP_OA_FORMAT, test_set->perf_oa_format,
+ DRM_I915_PERF_PROP_OA_METRICS_SET, default_test_set->perf_oa_metrics_set,
+ DRM_I915_PERF_PROP_OA_FORMAT, default_test_set->perf_oa_format,
DRM_I915_PERF_PROP_OA_EXPONENT, oa_exp_1_millisec,
};
struct drm_i915_perf_open_param param = {
@@ -1313,8 +1282,8 @@ test_invalid_open_flags(void)
DRM_I915_PERF_PROP_SAMPLE_OA, true,
/* OA unit configuration */
- DRM_I915_PERF_PROP_OA_METRICS_SET, test_set->perf_oa_metrics_set,
- DRM_I915_PERF_PROP_OA_FORMAT, test_set->perf_oa_format,
+ DRM_I915_PERF_PROP_OA_METRICS_SET, default_test_set->perf_oa_metrics_set,
+ DRM_I915_PERF_PROP_OA_FORMAT, default_test_set->perf_oa_format,
DRM_I915_PERF_PROP_OA_EXPONENT, oa_exp_1_millisec,
};
struct drm_i915_perf_open_param param = {
@@ -1331,8 +1300,8 @@ test_invalid_class_instance(void)
{
uint64_t properties[] = {
DRM_I915_PERF_PROP_SAMPLE_OA, true,
- DRM_I915_PERF_PROP_OA_METRICS_SET, test_set->perf_oa_metrics_set,
- DRM_I915_PERF_PROP_OA_FORMAT, test_set->perf_oa_format,
+ DRM_I915_PERF_PROP_OA_METRICS_SET, default_test_set->perf_oa_metrics_set,
+ DRM_I915_PERF_PROP_OA_FORMAT, default_test_set->perf_oa_format,
DRM_I915_PERF_PROP_OA_EXPONENT, oa_exp_1_millisec,
DRM_I915_PERF_PROP_OA_ENGINE_CLASS, 0,
DRM_I915_PERF_PROP_OA_ENGINE_INSTANCE, 0,
@@ -1375,7 +1344,7 @@ test_invalid_oa_metric_set_id(void)
DRM_I915_PERF_PROP_SAMPLE_OA, true,
/* OA unit configuration */
- DRM_I915_PERF_PROP_OA_FORMAT, test_set->perf_oa_format,
+ DRM_I915_PERF_PROP_OA_FORMAT, default_test_set->perf_oa_format,
DRM_I915_PERF_PROP_OA_EXPONENT, oa_exp_1_millisec,
DRM_I915_PERF_PROP_OA_METRICS_SET, UINT64_MAX,
};
@@ -1392,7 +1361,7 @@ test_invalid_oa_metric_set_id(void)
do_ioctl_err(drm_fd, DRM_IOCTL_I915_PERF_OPEN, ¶m, EINVAL);
/* Check that we aren't just seeing false positives... */
- properties[ARRAY_SIZE(properties) - 1] = test_set->perf_oa_metrics_set;
+ properties[ARRAY_SIZE(properties) - 1] = default_test_set->perf_oa_metrics_set;
stream_fd = __perf_open(drm_fd, ¶m, false);
__perf_close(stream_fd);
@@ -1409,7 +1378,7 @@ test_invalid_oa_format_id(void)
DRM_I915_PERF_PROP_SAMPLE_OA, true,
/* OA unit configuration */
- DRM_I915_PERF_PROP_OA_METRICS_SET, test_set->perf_oa_metrics_set,
+ DRM_I915_PERF_PROP_OA_METRICS_SET, default_test_set->perf_oa_metrics_set,
DRM_I915_PERF_PROP_OA_EXPONENT, oa_exp_1_millisec,
DRM_I915_PERF_PROP_OA_FORMAT, UINT64_MAX,
};
@@ -1426,7 +1395,7 @@ test_invalid_oa_format_id(void)
do_ioctl_err(drm_fd, DRM_IOCTL_I915_PERF_OPEN, ¶m, EINVAL);
/* Check that we aren't just seeing false positives... */
- properties[ARRAY_SIZE(properties) - 1] = test_set->perf_oa_format;
+ properties[ARRAY_SIZE(properties) - 1] = default_test_set->perf_oa_format;
stream_fd = __perf_open(drm_fd, ¶m, false);
__perf_close(stream_fd);
@@ -1442,9 +1411,9 @@ test_missing_sample_flags(void)
/* No _PROP_SAMPLE_xyz flags */
/* OA unit configuration */
- DRM_I915_PERF_PROP_OA_METRICS_SET, test_set->perf_oa_metrics_set,
+ DRM_I915_PERF_PROP_OA_METRICS_SET, default_test_set->perf_oa_metrics_set,
DRM_I915_PERF_PROP_OA_EXPONENT, oa_exp_1_millisec,
- DRM_I915_PERF_PROP_OA_FORMAT, test_set->perf_oa_format,
+ DRM_I915_PERF_PROP_OA_FORMAT, default_test_set->perf_oa_format,
};
struct drm_i915_perf_open_param param = {
.flags = I915_PERF_FLAG_FD_CLOEXEC,
@@ -1577,6 +1546,7 @@ open_and_read_2_oa_reports(int format_id,
bool timer_only,
const struct intel_execution_engine2 *e)
{
+ struct intel_perf_metric_set *test_set = metric_set(e);
uint64_t properties[] = {
/* Include OA reports in samples */
DRM_I915_PERF_PROP_SAMPLE_OA, true,
@@ -1961,7 +1931,8 @@ static bool expected_report_timing_delta(uint32_t delta, uint32_t expected_delta
static void
test_oa_exponents(const struct intel_execution_engine2 *e)
{
- uint64_t fmt = oa_unit_default_format(e);
+ struct intel_perf_metric_set *test_set = metric_set(e);
+ uint64_t fmt = test_set->perf_oa_format;
load_helper_init();
load_helper_run(HIGH);
@@ -2107,8 +2078,8 @@ test_invalid_oa_exponent(void)
DRM_I915_PERF_PROP_SAMPLE_OA, true,
/* OA unit configuration */
- DRM_I915_PERF_PROP_OA_METRICS_SET, test_set->perf_oa_metrics_set,
- DRM_I915_PERF_PROP_OA_FORMAT, test_set->perf_oa_format,
+ DRM_I915_PERF_PROP_OA_METRICS_SET, default_test_set->perf_oa_metrics_set,
+ DRM_I915_PERF_PROP_OA_FORMAT, default_test_set->perf_oa_format,
DRM_I915_PERF_PROP_OA_EXPONENT, 31, /* maximum exponent expected
to be accepted */
};
@@ -2143,8 +2114,8 @@ test_low_oa_exponent_permissions(void)
DRM_I915_PERF_PROP_SAMPLE_OA, true,
/* OA unit configuration */
- DRM_I915_PERF_PROP_OA_METRICS_SET, test_set->perf_oa_metrics_set,
- DRM_I915_PERF_PROP_OA_FORMAT, test_set->perf_oa_format,
+ DRM_I915_PERF_PROP_OA_METRICS_SET, default_test_set->perf_oa_metrics_set,
+ DRM_I915_PERF_PROP_OA_FORMAT, default_test_set->perf_oa_format,
DRM_I915_PERF_PROP_OA_EXPONENT, bad_exponent,
};
struct drm_i915_perf_open_param param = {
@@ -2206,8 +2177,8 @@ test_per_context_mode_unprivileged(void)
DRM_I915_PERF_PROP_SAMPLE_OA, true,
/* OA unit configuration */
- DRM_I915_PERF_PROP_OA_METRICS_SET, test_set->perf_oa_metrics_set,
- DRM_I915_PERF_PROP_OA_FORMAT, test_set->perf_oa_format,
+ DRM_I915_PERF_PROP_OA_METRICS_SET, default_test_set->perf_oa_metrics_set,
+ DRM_I915_PERF_PROP_OA_FORMAT, default_test_set->perf_oa_format,
DRM_I915_PERF_PROP_OA_EXPONENT, oa_exp_1_millisec,
};
struct drm_i915_perf_open_param param = {
@@ -2302,10 +2273,11 @@ test_blocking(uint64_t requested_oa_period,
int64_t start, end;
int n = 0;
+ struct intel_perf_metric_set *test_set = metric_set(e);
ADD_PROPS(props, idx, SAMPLE_OA, true);
ADD_PROPS(props, idx, OA_METRICS_SET, test_set->perf_oa_metrics_set);
- ADD_PROPS(props, idx, OA_FORMAT, oa_unit_default_format(e));
+ ADD_PROPS(props, idx, OA_FORMAT, test_set->perf_oa_format);
ADD_PROPS(props, idx, OA_EXPONENT, oa_exponent);
if (has_param_poll_period() && set_kernel_hrtimer)
@@ -2465,10 +2437,11 @@ test_polling(uint64_t requested_oa_period,
int min_iterations = (test_duration_ns / (oa_period + (kernel_hrtimer + kernel_hrtimer / 5)));
int64_t start, end;
int n = 0;
+ struct intel_perf_metric_set *test_set = metric_set(e);
ADD_PROPS(props, idx, SAMPLE_OA, true);
ADD_PROPS(props, idx, OA_METRICS_SET, test_set->perf_oa_metrics_set);
- ADD_PROPS(props, idx, OA_FORMAT, oa_unit_default_format(e));
+ ADD_PROPS(props, idx, OA_FORMAT, test_set->perf_oa_format);
ADD_PROPS(props, idx, OA_EXPONENT, oa_exponent);
if (has_param_poll_period() && set_kernel_hrtimer)
@@ -2640,8 +2613,8 @@ static void test_polling_small_buf(void)
DRM_I915_PERF_PROP_SAMPLE_OA, true,
/* OA unit configuration */
- DRM_I915_PERF_PROP_OA_METRICS_SET, test_set->perf_oa_metrics_set,
- DRM_I915_PERF_PROP_OA_FORMAT, test_set->perf_oa_format,
+ DRM_I915_PERF_PROP_OA_METRICS_SET, default_test_set->perf_oa_metrics_set,
+ DRM_I915_PERF_PROP_OA_FORMAT, default_test_set->perf_oa_format,
DRM_I915_PERF_PROP_OA_EXPONENT, oa_exponent,
};
struct drm_i915_perf_open_param param = {
@@ -2653,7 +2626,7 @@ static void test_polling_small_buf(void)
};
uint32_t test_duration = 80 * 1000 * 1000;
int sample_size = (sizeof(struct drm_i915_perf_record_header) +
- get_oa_format(test_set->perf_oa_format).size);
+ get_oa_format(default_test_set->perf_oa_format).size);
int n_expected_reports = test_duration / oa_exponent_to_ns(oa_exponent);
int n_expect_read_bytes = n_expected_reports * sample_size;
struct timespec ts = {};
@@ -2738,11 +2711,12 @@ static void
gen12_test_oa_tlb_invalidate(const struct intel_execution_engine2 *e)
{
int oa_exponent = max_oa_exponent_for_period_lte(30000000);
+ struct intel_perf_metric_set *test_set = metric_set(e);
uint64_t properties[] = {
DRM_I915_PERF_PROP_SAMPLE_OA, true,
DRM_I915_PERF_PROP_OA_METRICS_SET, test_set->perf_oa_metrics_set,
- DRM_I915_PERF_PROP_OA_FORMAT, oa_unit_default_format(e),
+ DRM_I915_PERF_PROP_OA_FORMAT, test_set->perf_oa_format,
DRM_I915_PERF_PROP_OA_EXPONENT, oa_exponent,
DRM_I915_PERF_PROP_OA_ENGINE_CLASS, e->class,
DRM_I915_PERF_PROP_OA_ENGINE_INSTANCE, e->instance,
@@ -2785,7 +2759,8 @@ test_buffer_fill(const struct intel_execution_engine2 *e)
/* ~5 micro second period */
int oa_exponent = max_oa_exponent_for_period_lte(5000);
uint64_t oa_period = oa_exponent_to_ns(oa_exponent);
- uint64_t fmt = oa_unit_default_format(e);
+ struct intel_perf_metric_set *test_set = metric_set(e);
+ uint64_t fmt = test_set->perf_oa_format;
uint64_t properties[] = {
/* Include OA reports in samples */
DRM_I915_PERF_PROP_SAMPLE_OA, true,
@@ -2942,8 +2917,8 @@ test_non_zero_reason(void)
DRM_I915_PERF_PROP_SAMPLE_OA, true,
/* OA unit configuration */
- DRM_I915_PERF_PROP_OA_METRICS_SET, test_set->perf_oa_metrics_set,
- DRM_I915_PERF_PROP_OA_FORMAT, test_set->perf_oa_format,
+ DRM_I915_PERF_PROP_OA_METRICS_SET, default_test_set->perf_oa_metrics_set,
+ DRM_I915_PERF_PROP_OA_FORMAT, default_test_set->perf_oa_format,
DRM_I915_PERF_PROP_OA_EXPONENT, oa_exponent,
};
struct drm_i915_perf_open_param param = {
@@ -2999,7 +2974,7 @@ test_non_zero_reason(void)
if (last_report) {
sanity_check_reports(last_report, report,
- test_set->perf_oa_format);
+ default_test_set->perf_oa_format);
}
last_report = report;
break;
@@ -3021,7 +2996,8 @@ test_enable_disable(const struct intel_execution_engine2 *e)
/* ~5 micro second period */
int oa_exponent = max_oa_exponent_for_period_lte(5000);
uint64_t oa_period = oa_exponent_to_ns(oa_exponent);
- uint64_t fmt = oa_unit_default_format(e);
+ struct intel_perf_metric_set *test_set = metric_set(e);
+ uint64_t fmt = test_set->perf_oa_format;
uint64_t properties[] = {
/* Include OA reports in samples */
DRM_I915_PERF_PROP_SAMPLE_OA, true,
@@ -3181,8 +3157,8 @@ test_short_reads(void)
DRM_I915_PERF_PROP_SAMPLE_OA, true,
/* OA unit configuration */
- DRM_I915_PERF_PROP_OA_METRICS_SET, test_set->perf_oa_metrics_set,
- DRM_I915_PERF_PROP_OA_FORMAT, test_set->perf_oa_format,
+ DRM_I915_PERF_PROP_OA_METRICS_SET, default_test_set->perf_oa_metrics_set,
+ DRM_I915_PERF_PROP_OA_FORMAT, default_test_set->perf_oa_format,
DRM_I915_PERF_PROP_OA_EXPONENT, oa_exponent,
};
struct drm_i915_perf_open_param param = {
@@ -3272,8 +3248,8 @@ test_non_sampling_read_error(void)
DRM_I915_PERF_PROP_SAMPLE_OA, true,
/* OA unit configuration */
- DRM_I915_PERF_PROP_OA_METRICS_SET, test_set->perf_oa_metrics_set,
- DRM_I915_PERF_PROP_OA_FORMAT, test_set->perf_oa_format,
+ DRM_I915_PERF_PROP_OA_METRICS_SET, default_test_set->perf_oa_metrics_set,
+ DRM_I915_PERF_PROP_OA_FORMAT, default_test_set->perf_oa_format,
/* XXX: no sampling exponent */
};
@@ -3308,8 +3284,8 @@ test_disabled_read_error(void)
DRM_I915_PERF_PROP_SAMPLE_OA, true,
/* OA unit configuration */
- DRM_I915_PERF_PROP_OA_METRICS_SET, test_set->perf_oa_metrics_set,
- DRM_I915_PERF_PROP_OA_FORMAT, test_set->perf_oa_format,
+ DRM_I915_PERF_PROP_OA_METRICS_SET, default_test_set->perf_oa_metrics_set,
+ DRM_I915_PERF_PROP_OA_FORMAT, default_test_set->perf_oa_format,
DRM_I915_PERF_PROP_OA_EXPONENT, oa_exponent,
};
struct drm_i915_perf_open_param param = {
@@ -3335,7 +3311,7 @@ test_disabled_read_error(void)
param.flags &= ~I915_PERF_FLAG_DISABLED;
stream_fd = __perf_open(drm_fd, ¶m, false);
- read_2_oa_reports(test_set->perf_oa_format,
+ read_2_oa_reports(default_test_set->perf_oa_format,
oa_exponent,
oa_report0,
oa_report1,
@@ -3349,7 +3325,7 @@ test_disabled_read_error(void)
do_ioctl(stream_fd, I915_PERF_IOCTL_ENABLE, 0);
- read_2_oa_reports(test_set->perf_oa_format,
+ read_2_oa_reports(default_test_set->perf_oa_format,
oa_exponent,
oa_report0,
oa_report1,
@@ -3362,6 +3338,7 @@ static void
gen12_test_mi_rpc(const struct intel_execution_engine2 *e)
{
uint64_t fmt = oar_unit_default_format();
+ struct intel_perf_metric_set *test_set = metric_set(e);
uint64_t properties[] = {
/* On Gen12, MI RPC uses OAR. OAR is configured only for the
* render context that wants to measure the performance. Hence a
@@ -3470,8 +3447,8 @@ test_mi_rpc(void)
DRM_I915_PERF_PROP_SAMPLE_OA, true,
/* OA unit configuration */
- DRM_I915_PERF_PROP_OA_METRICS_SET, test_set->perf_oa_metrics_set,
- DRM_I915_PERF_PROP_OA_FORMAT, test_set->perf_oa_format,
+ DRM_I915_PERF_PROP_OA_METRICS_SET, default_test_set->perf_oa_metrics_set,
+ DRM_I915_PERF_PROP_OA_FORMAT, default_test_set->perf_oa_format,
/* Note: no OA exponent specified in this case */
};
@@ -3509,7 +3486,7 @@ test_mi_rpc(void)
report32 = buf->ptr;
dump_report(report32, 64, "mi-rpc");
igt_assert_eq(report32[0], 0xdeadbeef); /* report ID */
- igt_assert(oa_timestamp(report32, test_set->perf_oa_format)); /* timestamp */
+ igt_assert(oa_timestamp(report32, default_test_set->perf_oa_format)); /* timestamp */
igt_assert_neq(report32[63], 0x80808080); /* end of report */
igt_assert_eq(report32[64], 0x80808080); /* after 256 byte report */
@@ -3573,8 +3550,8 @@ hsw_test_single_ctx_counters(void)
DRM_I915_PERF_PROP_SAMPLE_OA, true,
/* OA unit configuration */
- DRM_I915_PERF_PROP_OA_METRICS_SET, test_set->perf_oa_metrics_set,
- DRM_I915_PERF_PROP_OA_FORMAT, test_set->perf_oa_format,
+ DRM_I915_PERF_PROP_OA_METRICS_SET, default_test_set->perf_oa_metrics_set,
+ DRM_I915_PERF_PROP_OA_FORMAT, default_test_set->perf_oa_format,
/* Note: no OA exponent specified in this case */
};
@@ -3719,7 +3696,7 @@ hsw_test_single_ctx_counters(void)
igt_assert_neq(report1_32[1], 0); /* timestamp */
print_reports(report0_32, report1_32,
- lookup_format(test_set->perf_oa_format));
+ lookup_format(default_test_set->perf_oa_format));
/* A40 == N samples written to all render targets */
n_samples_written = report1_32[43] - report0_32[43];
@@ -3802,8 +3779,8 @@ gen8_test_single_ctx_render_target_writes_a_counter(void)
DRM_I915_PERF_PROP_SAMPLE_OA, true,
/* OA unit configuration */
- DRM_I915_PERF_PROP_OA_METRICS_SET, test_set->perf_oa_metrics_set,
- DRM_I915_PERF_PROP_OA_FORMAT, test_set->perf_oa_format,
+ DRM_I915_PERF_PROP_OA_METRICS_SET, default_test_set->perf_oa_metrics_set,
+ DRM_I915_PERF_PROP_OA_FORMAT, default_test_set->perf_oa_format,
DRM_I915_PERF_PROP_OA_EXPONENT, oa_exponent,
/* Note: no OA exponent specified in this case */
@@ -3813,7 +3790,7 @@ gen8_test_single_ctx_render_target_writes_a_counter(void)
.num_properties = ARRAY_SIZE(properties) / 2,
.properties_ptr = to_user_pointer(properties),
};
- size_t format_size = get_oa_format(test_set->perf_oa_format).size;
+ size_t format_size = get_oa_format(default_test_set->perf_oa_format).size;
size_t sample_size = (sizeof(struct drm_i915_perf_record_header) +
format_size);
int max_reports = MAX_OA_BUF_SIZE / format_size;
@@ -3848,7 +3825,7 @@ gen8_test_single_ctx_render_target_writes_a_counter(void)
int delta_delta;
int ret;
struct accumulator accumulator = {
- .format = test_set->perf_oa_format
+ .format = default_test_set->perf_oa_format
};
bops = buf_ops_create(drm_fd);
@@ -4014,7 +3991,7 @@ gen8_test_single_ctx_render_target_writes_a_counter(void)
goto again;
}
- len = i915_read_reports_until_timestamp(test_set->perf_oa_format,
+ len = i915_read_reports_until_timestamp(default_test_set->perf_oa_format,
buf, buf_size,
report0_32[1],
report1_32[1]);
@@ -4029,7 +4006,7 @@ gen8_test_single_ctx_render_target_writes_a_counter(void)
uint32_t reason;
const char *skip_reason = NULL, *report_reason = NULL;
struct accumulator laccumulator = {
- .format = test_set->perf_oa_format
+ .format = default_test_set->perf_oa_format
};
@@ -4160,7 +4137,7 @@ gen8_test_single_ctx_render_target_writes_a_counter(void)
if (report == report1_32) {
igt_debug("Breaking on end of report\n");
print_reports(report0_32, report1_32,
- lookup_format(test_set->perf_oa_format));
+ lookup_format(default_test_set->perf_oa_format));
break;
}
}
@@ -4215,6 +4192,7 @@ again:
static void gen12_single_ctx_helper(const struct intel_execution_engine2 *e)
{
+ struct intel_perf_metric_set *test_set = metric_set(e);
uint64_t fmt = oar_unit_default_format();
uint64_t properties[] = {
/* Have a random value here for the context id, but initialize
@@ -4560,8 +4538,8 @@ test_rc6_disable(void)
DRM_I915_PERF_PROP_SAMPLE_OA, true,
/* OA unit configuration */
- DRM_I915_PERF_PROP_OA_METRICS_SET, test_set->perf_oa_metrics_set,
- DRM_I915_PERF_PROP_OA_FORMAT, test_set->perf_oa_format,
+ DRM_I915_PERF_PROP_OA_METRICS_SET, default_test_set->perf_oa_metrics_set,
+ DRM_I915_PERF_PROP_OA_FORMAT, default_test_set->perf_oa_format,
DRM_I915_PERF_PROP_OA_EXPONENT, oa_exp_1_millisec,
};
struct drm_i915_perf_open_param param = {
@@ -4603,6 +4581,8 @@ test_rc6_disable(void)
static void
test_stress_open_close(const struct intel_execution_engine2 *e)
{
+ struct intel_perf_metric_set *test_set = metric_set(e);
+
load_helper_init();
load_helper_run(HIGH);
@@ -4616,7 +4596,7 @@ test_stress_open_close(const struct intel_execution_engine2 *e)
/* OA unit configuration */
DRM_I915_PERF_PROP_OA_METRICS_SET, test_set->perf_oa_metrics_set,
- DRM_I915_PERF_PROP_OA_FORMAT, oa_unit_default_format(e),
+ DRM_I915_PERF_PROP_OA_FORMAT, test_set->perf_oa_format,
DRM_I915_PERF_PROP_OA_EXPONENT, oa_exponent,
DRM_I915_PERF_PROP_OA_ENGINE_CLASS, e->class,
DRM_I915_PERF_PROP_OA_ENGINE_INSTANCE, e->instance,
@@ -4704,6 +4684,7 @@ make_valid_reduced_sseu_config(struct drm_i915_gem_context_param_sseu default_ss
static void
test_global_sseu_config_invalid(const struct intel_execution_engine2 *e)
{
+ struct intel_perf_metric_set *test_set = metric_set(e);
struct drm_i915_gem_context_param_sseu default_sseu;
struct drm_i915_gem_context_param_sseu sseu_param;
struct drm_i915_gem_context_param ctx_gp = {
@@ -4719,7 +4700,7 @@ test_global_sseu_config_invalid(const struct intel_execution_engine2 *e)
/* OA unit configuration */
DRM_I915_PERF_PROP_OA_METRICS_SET, test_set->perf_oa_metrics_set,
- DRM_I915_PERF_PROP_OA_FORMAT, oa_unit_default_format(e),
+ DRM_I915_PERF_PROP_OA_FORMAT, test_set->perf_oa_format,
DRM_I915_PERF_PROP_OA_EXPONENT, oa_exp_1_millisec,
DRM_I915_PERF_PROP_GLOBAL_SSEU, to_user_pointer(&sseu_param),
DRM_I915_PERF_PROP_OA_ENGINE_CLASS, e->class,
@@ -4793,6 +4774,7 @@ test_global_sseu_config_invalid(const struct intel_execution_engine2 *e)
static void
test_global_sseu_config(const struct intel_execution_engine2 *e)
{
+ struct intel_perf_metric_set *test_set = metric_set(e);
struct drm_i915_gem_context_param_sseu default_sseu;
struct drm_i915_gem_context_param_sseu sseu_param;
struct drm_i915_gem_context_param ctx_gp = {
@@ -4808,7 +4790,7 @@ test_global_sseu_config(const struct intel_execution_engine2 *e)
/* OA unit configuration */
DRM_I915_PERF_PROP_OA_METRICS_SET, test_set->perf_oa_metrics_set,
- DRM_I915_PERF_PROP_OA_FORMAT, oa_unit_default_format(e),
+ DRM_I915_PERF_PROP_OA_FORMAT, test_set->perf_oa_format,
DRM_I915_PERF_PROP_OA_EXPONENT, oa_exp_1_millisec,
DRM_I915_PERF_PROP_GLOBAL_SSEU, to_user_pointer(&sseu_param),
DRM_I915_PERF_PROP_OA_ENGINE_CLASS, e->class,
@@ -5014,7 +4996,7 @@ test_create_destroy_userspace_config(void)
/* OA unit configuration */
DRM_I915_PERF_PROP_SAMPLE_OA, true,
- DRM_I915_PERF_PROP_OA_FORMAT, test_set->perf_oa_format,
+ DRM_I915_PERF_PROP_OA_FORMAT, default_test_set->perf_oa_format,
DRM_I915_PERF_PROP_OA_EXPONENT, oa_exp_1_millisec,
DRM_I915_PERF_PROP_OA_METRICS_SET
};
@@ -5301,8 +5283,8 @@ test_i915_ref_count(void)
* init_sys_info()...
*/
igt_require(init_sys_info());
- properties[3] = test_set->perf_oa_metrics_set;
- properties[5] = test_set->perf_oa_format;
+ properties[3] = default_test_set->perf_oa_metrics_set;
+ properties[5] = default_test_set->perf_oa_format;
properties[7] = oa_exp_1_millisec;
ref_count0 = read_i915_module_ref();
@@ -5323,7 +5305,7 @@ test_i915_ref_count(void)
igt_assert(ref_count0 > baseline);
- read_2_oa_reports(test_set->perf_oa_format,
+ read_2_oa_reports(default_test_set->perf_oa_format,
oa_exp_1_millisec,
oa_report0,
oa_report1,
@@ -5383,6 +5365,9 @@ struct perf_engine_group {
/* perf engines in a group */
int num_engines;
struct i915_engine_class_instance *ci;
+
+ int gt;
+ struct intel_perf_metric_set *test_set;
};
static struct drm_i915_query_engine_info *query_engine_info(int i915)
@@ -5399,6 +5384,49 @@ static struct drm_i915_query_engine_info *query_engine_info(int i915)
return qinfo;
}
+static struct intel_perf_metric_set *metric_set(const struct intel_execution_engine2 *e2)
+{
+ const char *test_set_name = NULL;
+ struct intel_perf_metric_set *metric_set_iter;
+ struct intel_perf_metric_set *test_set = NULL;
+
+ if (IS_HASWELL(devid))
+ test_set_name = "RenderBasic";
+ else if (e2->class == I915_ENGINE_CLASS_RENDER)
+ test_set_name = "TestOa";
+ else if ((e2->class == I915_ENGINE_CLASS_VIDEO ||
+ e2->class == I915_ENGINE_CLASS_VIDEO_ENHANCE) &&
+ HAS_OAM(devid))
+ test_set_name = "MediaSet1";
+ else
+ igt_assert(!"reached");
+
+ igt_list_for_each_entry(metric_set_iter, &intel_perf->metric_sets, link) {
+ if (strcmp(metric_set_iter->symbol_name, test_set_name) == 0) {
+ test_set = metric_set_iter;
+ break;
+ }
+ }
+
+ igt_assert(test_set);
+
+ /*
+ * configuration was loaded in init_sys_info() ->
+ * intel_perf_load_perf_configs(), and test_set->perf_oa_metrics_set
+ * should point to metric id returned by the config add ioctl. 0 is
+ * invalid.
+ */
+ igt_assert_neq_u64(test_set->perf_oa_metrics_set, 0);
+
+ igt_debug("engine %d:%d - %s metric set UUID = %s\n",
+ e2->class,
+ e2->instance,
+ test_set->symbol_name,
+ test_set->hw_config_guid);
+
+ return test_set;
+}
+
static int compare_engine_oa_unit_id(const void *e1, const void *e2)
{
const struct drm_i915_engine_info *_e1 = e1;
@@ -5574,8 +5602,8 @@ test_gt_exclusive_stream(const intel_ctx_t *ctx, bool exponent)
{
uint64_t properties[] = {
DRM_I915_PERF_PROP_SAMPLE_OA, true,
- DRM_I915_PERF_PROP_OA_METRICS_SET, test_set->perf_oa_metrics_set,
- DRM_I915_PERF_PROP_OA_FORMAT, test_set->perf_oa_format,
+ DRM_I915_PERF_PROP_OA_METRICS_SET, 0,
+ DRM_I915_PERF_PROP_OA_FORMAT, 0,
DRM_I915_PERF_PROP_OA_ENGINE_CLASS, 0,
DRM_I915_PERF_PROP_OA_ENGINE_INSTANCE, 0,
DRM_I915_PERF_PROP_OA_EXPONENT, oa_exp_1_millisec,
@@ -5594,12 +5622,16 @@ test_gt_exclusive_stream(const intel_ctx_t *ctx, bool exponent)
for (i = 0; i < num_perf_oa_groups; i++) {
struct perf_engine_group *grp = &perf_oa_groups[i];
struct i915_engine_class_instance *ci = random_engine(grp);
+ struct intel_execution_engine2 *e2 = __ci_to_e2(ctx, ci);
+ struct intel_perf_metric_set *test_set = metric_set(e2);
if (!exponent) {
properties[0] = DRM_I915_PERF_PROP_CTX_HANDLE;
properties[1] = ctx->id;
}
+ properties[3] = test_set->perf_oa_metrics_set;
+ properties[5] = test_set->perf_oa_format;
properties[7] = ci->engine_class;
properties[9] = ci->engine_instance;
grp->perf_fd = igt_ioctl(drm_fd,
@@ -5617,6 +5649,8 @@ test_gt_exclusive_stream(const intel_ctx_t *ctx, bool exponent)
for (j = 0; j < grp->num_engines; j++) {
struct i915_engine_class_instance *ci = grp->ci + j;
+ struct intel_execution_engine2 *e2 = __ci_to_e2(ctx, ci);
+ struct intel_perf_metric_set *test_set = metric_set(e2);
/*
* case 1:
@@ -5624,6 +5658,8 @@ test_gt_exclusive_stream(const intel_ctx_t *ctx, bool exponent)
*/
properties[0] = DRM_I915_PERF_PROP_SAMPLE_OA;
properties[1] = true;
+ properties[3] = test_set->perf_oa_metrics_set;
+ properties[5] = test_set->perf_oa_format;
properties[7] = ci->engine_class;
properties[9] = ci->engine_instance;
/* for SAMPLE OA use case, we must pass exponent */
--
2.36.1
next prev parent reply other threads:[~2023-02-15 0:46 UTC|newest]
Thread overview: 73+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-02-15 0:46 [igt-dev] [PATCH i-g-t 00/31] Enable OAM support in IGT and GPUvis Umesh Nerlige Ramappa
2023-02-15 0:46 ` [igt-dev] [PATCH i-g-t 01/31] i915/perf: Add support for 64-bit OA formats Umesh Nerlige Ramappa
2023-03-04 2:55 ` Dixit, Ashutosh
2023-02-15 0:46 ` [igt-dev] [PATCH i-g-t 02/31] i915/perf: Define a default engine for OA Umesh Nerlige Ramappa
2023-03-04 3:05 ` Dixit, Ashutosh
2023-02-15 0:46 ` [igt-dev] [PATCH i-g-t 03/31] i915/perf: Use default engine for sseu tests Umesh Nerlige Ramappa
2023-03-04 3:08 ` Dixit, Ashutosh
2023-02-15 0:46 ` [igt-dev] [PATCH i-g-t 04/31] i915/perf: Ensure rcs0 is present for gen12-mi-rpc Umesh Nerlige Ramappa
2023-03-04 3:26 ` Dixit, Ashutosh
2023-02-15 0:46 ` [igt-dev] [PATCH i-g-t 05/31] i915/perf: Use ARRAY_SIZE for buffer-fill test Umesh Nerlige Ramappa
2023-03-04 3:28 ` Dixit, Ashutosh
2023-02-15 0:46 ` [igt-dev] [PATCH i-g-t 06/31] i915/perf: Add class:instance support to OA tests Umesh Nerlige Ramappa
2023-03-04 3:38 ` Dixit, Ashutosh
2023-02-15 0:46 ` [igt-dev] [PATCH i-g-t 07/31] i915/perf: Enable tests to run on specific engines Umesh Nerlige Ramappa
2023-03-06 22:19 ` Dixit, Ashutosh
2023-02-15 0:46 ` [igt-dev] [PATCH i-g-t 08/31] i915/perf: Treat ticks as 64 bit Umesh Nerlige Ramappa
2023-03-06 23:13 ` Dixit, Ashutosh
2023-03-09 22:55 ` Umesh Nerlige Ramappa
2023-03-09 23:00 ` Dixit, Ashutosh
2023-02-15 0:46 ` [igt-dev] [PATCH i-g-t 09/31] i915/perf: Treat timestamp as 64 bit value Umesh Nerlige Ramappa
2023-03-07 12:53 ` Kamil Konieczny
2023-02-15 0:46 ` [igt-dev] [PATCH i-g-t 10/31] i915/perf: Add OAM format type Umesh Nerlige Ramappa
2023-03-07 13:45 ` Kamil Konieczny
2023-03-09 22:39 ` Umesh Nerlige Ramappa
2023-02-15 0:46 ` [igt-dev] [PATCH i-g-t 11/31] i915/perf: Move OA format array from stack to heap Umesh Nerlige Ramappa
2023-03-07 13:32 ` Kamil Konieczny
2023-02-15 0:46 ` [igt-dev] [PATCH i-g-t 12/31] i915/perf: Use a helper for OA format Umesh Nerlige Ramappa
2023-03-07 13:49 ` Kamil Konieczny
2023-02-15 0:46 ` [igt-dev] [PATCH i-g-t 13/31] i915/perf: Add support for oa perf groups Umesh Nerlige Ramappa
2023-03-07 14:09 ` Kamil Konieczny
2023-02-15 0:46 ` [igt-dev] [PATCH i-g-t 14/31] i915/perf: Test concurrent access to OA in different groups Umesh Nerlige Ramappa
2023-03-13 15:04 ` Kamil Konieczny
2023-03-14 23:17 ` Dixit, Ashutosh
2023-03-15 20:40 ` Umesh Nerlige Ramappa
2023-02-15 0:46 ` [igt-dev] [PATCH i-g-t 15/31] i915/perf: Add OAM support Umesh Nerlige Ramappa
2023-03-13 15:21 ` Kamil Konieczny
2023-03-15 0:38 ` Dixit, Ashutosh
2023-03-15 20:37 ` Umesh Nerlige Ramappa
2023-03-15 21:52 ` Dixit, Ashutosh
2023-02-15 0:46 ` [igt-dev] [PATCH i-g-t 16/31] lib/perf: Make chipsets aware of oa formats Umesh Nerlige Ramappa
2023-03-13 15:49 ` Kamil Konieczny
2023-02-15 0:46 ` [igt-dev] [PATCH i-g-t 17/31] i915/perf: Choose OAM format for media metrics Umesh Nerlige Ramappa
2023-03-13 15:52 ` Kamil Konieczny
2023-02-15 0:46 ` [igt-dev] [PATCH i-g-t 18/31] lib/perf" Set missing metric unit for some counters Umesh Nerlige Ramappa
2023-02-24 13:22 ` Kamil Konieczny
2023-03-15 4:44 ` Dixit, Ashutosh
2023-03-15 19:58 ` Umesh Nerlige Ramappa
2023-02-15 0:46 ` [igt-dev] [PATCH i-g-t 19/31] lib/perf: Add MTL to supprted HW in oa guid registry Umesh Nerlige Ramappa
2023-03-13 15:55 ` Kamil Konieczny
2023-03-13 15:57 ` Kamil Konieczny
2023-02-15 0:46 ` [igt-dev] [PATCH i-g-t 20/31] lib/perf: Add support for OAM format in codegen Umesh Nerlige Ramappa
2023-03-13 16:04 ` Kamil Konieczny
2023-02-15 0:46 ` [igt-dev] [PATCH i-g-t 21/31] lib/perf: Update MTL GT2 metrics for OAM Umesh Nerlige Ramappa
2023-03-13 16:09 ` Kamil Konieczny
2023-02-15 0:46 ` [igt-dev] [PATCH i-g-t 22/31] lib/perf: Update MTL GT3 " Umesh Nerlige Ramappa
2023-03-13 16:15 ` Kamil Konieczny
2023-03-16 18:38 ` Umesh Nerlige Ramappa
2023-02-15 0:46 ` Umesh Nerlige Ramappa [this message]
2023-02-15 0:46 ` [igt-dev] [PATCH i-g-t 24/31] i915/perf: Run non-zero-reason on media engines as well Umesh Nerlige Ramappa
2023-03-15 16:50 ` Kamil Konieczny
2023-02-15 0:46 ` [igt-dev] [PATCH i-g-t 25/31] i915/perf: Make sanity check failures descriptive Umesh Nerlige Ramappa
2023-03-15 16:47 ` Kamil Konieczny
2023-02-15 0:46 ` [igt-dev] [PATCH i-g-t 26/31] lib/perf: Enable multi-tile support for perf library Umesh Nerlige Ramappa
2023-02-15 0:46 ` [igt-dev] [PATCH i-g-t 27/31] lib/perf: Update MTL OA timestamp and EU thread config Umesh Nerlige Ramappa
2023-02-15 0:46 ` [igt-dev] [PATCH i-g-t 28/31] lib/perf: Add support for MPEC format Umesh Nerlige Ramappa
2023-02-15 0:46 ` [igt-dev] [PATCH i-g-t 29/31] lib/perf: Adjust the GPU timestamp for new OA formats Umesh Nerlige Ramappa
2023-02-15 0:46 ` [igt-dev] [PATCH i-g-t 30/31] tools/perf: Choose the right card Umesh Nerlige Ramappa
2023-02-16 19:39 ` Kamil Konieczny
2023-02-16 21:27 ` Umesh Nerlige Ramappa
2023-03-03 1:17 ` Umesh Nerlige Ramappa
2023-02-15 0:46 ` [igt-dev] [PATCH i-g-t 31/31] lib/perf: Apply shift to raw timestamp as well Umesh Nerlige Ramappa
2023-02-15 1:26 ` [igt-dev] ✓ Fi.CI.BAT: success for Enable OAM support in IGT and GPUvis (rev2) Patchwork
2023-02-15 14:12 ` [igt-dev] ✗ Fi.CI.IGT: failure " Patchwork
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=20230215004648.2100655-24-umesh.nerlige.ramappa@intel.com \
--to=umesh.nerlige.ramappa@intel.com \
--cc=igt-dev@lists.freedesktop.org \
--cc=lionel.g.landwerlin@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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox