[PATCH i-g-t 1/2] tests/intel/xe_drm_fdinfo: Group utilization tests and skip when no utilization data
Bernatowicz, Marcin
marcin.bernatowicz at linux.intel.com
Thu Mar 6 09:19:37 UTC 2025
On 3/5/2025 6:08 PM, Lucas De Marchi wrote:
> On Tue, Mar 04, 2025 at 07:56:39PM +0100, Marcin Bernatowicz wrote:
>> Wrap all utilization-related subtests in an igt_subtest_group and add
>> a fixture that ensures utilization data is available before running
>> them.
>>
>> Link: https://lore.kernel.org/r/20250205191644.2550879-1-
>> marcin.bernatowicz at linux.intel.com
>>
>> Signed-off-by: Marcin Bernatowicz <marcin.bernatowicz at linux.intel.com>
>> Cc: Jakub Kolakowski <jakub1.kolakowski at intel.com>
>> Cc: Lucas De Marchi <lucas.demarchi at intel.com>
>> Cc: Lukasz Laguna <lukasz.laguna at intel.com>
>> Cc: Umesh Nerlige Ramappa <umesh.nerlige.ramappa at intel.com>
>> ---
>> tests/intel/xe_drm_fdinfo.c | 122 ++++++++++++++++++++----------------
>> 1 file changed, 67 insertions(+), 55 deletions(-)
>>
>> diff --git a/tests/intel/xe_drm_fdinfo.c b/tests/intel/xe_drm_fdinfo.c
>> index 7330b4330..d18fe10d8 100644
>> --- a/tests/intel/xe_drm_fdinfo.c
>> +++ b/tests/intel/xe_drm_fdinfo.c
>> @@ -735,10 +735,6 @@ igt_main
>> igt_subtest("basic-mem")
>> basic_memory(xe);
>>
>> - igt_describe("Check if basic fdinfo content is present for engine
>> utilization");
>> - igt_subtest("basic-utilization")
>> - basic_engine_utilization(xe);
>> -
>> igt_describe("Create and compare total and resident memory
>> consumption by client");
>> igt_subtest("mem-total-resident")
>> mem_total_resident(xe);
>> @@ -751,57 +747,73 @@ igt_main
>> igt_subtest("mem-active")
>> mem_active(xe, xe_engine(xe, 0));
>>
>> - igt_subtest("utilization-single-idle")
>> - xe_for_each_engine(xe, hwe)
>> - utilization_single(xe, hwe, 0);
>> -
>> - igt_subtest("utilization-single-full-load")
>> - xe_for_each_engine(xe, hwe)
>> - utilization_single(xe, hwe, TEST_BUSY | TEST_TRAILING_IDLE);
>> -
>> - igt_subtest("utilization-single-full-load-isolation")
>> - xe_for_each_engine(xe, hwe)
>> - utilization_single(xe, hwe, TEST_BUSY |
>> TEST_TRAILING_IDLE | TEST_ISOLATION);
>> -
>> - igt_subtest("utilization-single-full-load-destroy-queue")
>> - xe_for_each_engine(xe, hwe)
>> - utilization_single_destroy_queue(xe, hwe);
>> -
>> - igt_subtest("utilization-others-idle")
>> - xe_for_each_engine(xe, hwe)
>> - utilization_others_idle(xe, hwe);
>> -
>> - igt_subtest("utilization-others-full-load")
>> - xe_for_each_engine(xe, hwe)
>> - utilization_others_full_load(xe, hwe);
>> -
>> - igt_subtest("utilization-all-full-load")
>> - utilization_all_full_load(xe);
>> -
>> -
>> - for (const struct section *s = sections; s->name; s++) {
>> - igt_subtest_f("%s-utilization-single-idle", s->name)
>> - xe_for_each_gt(xe, gt)
>> - xe_for_each_engine_class(class)
>> - utilization_multi(xe, gt, class, s->flags);
>> -
>> - igt_subtest_f("%s-utilization-single-full-load", s->name)
>> - xe_for_each_gt(xe, gt)
>> - xe_for_each_engine_class(class)
>> - utilization_multi(xe, gt, class,
>> - s->flags |
>> - TEST_BUSY |
>> - TEST_TRAILING_IDLE);
>> -
>> - igt_subtest_f("%s-utilization-single-full-load-isolation",
>> - s->name)
>> - xe_for_each_gt(xe, gt)
>> - xe_for_each_engine_class(class)
>> - utilization_multi(xe, gt, class,
>> - s->flags |
>> - TEST_BUSY |
>> - TEST_TRAILING_IDLE |
>> - TEST_ISOLATION);
>> + igt_subtest_group {
>> + igt_fixture {
>> + struct drm_client_fdinfo info = { };
>> +
>> + igt_require(igt_parse_drm_fdinfo(xe, &info, engine_map,
>> + ARRAY_SIZE(engine_map),
>> + NULL, 0));
>> + igt_require(info.num_engines);
>
> humn... is this fixture exectuded in addition to the outer fixture
> for each each subtest? Otherwise it won't have the fd open and thus no
> client.
Yes, it is executed in addition to the outer fixture (but if the outer
fixture fails, this one should not run), so xe is already opened. This
fixture applies at the group scope - if it fails or is skipped, all
tests in the group will also fail or be skipped.
However, as Kamil pointed out, fixtures are executed even if no test
from the group is selected for execution. This means that if we run
igt at xe_drm_fdinfo@basic-mem (which is outside this group), the fixture
from the utilization group still runs, potentially logging an unmet
requirement.
IIUC, the only solution is to move the checks inside the subtests.
>
> Lucas De Marchi
More information about the igt-dev
mailing list