[PATCH 3/3] tests/intel/xe_exec_system_allocator: Rebind the prefetch ranges
Matthew Brost
matthew.brost at intel.com
Wed May 14 23:07:27 UTC 2025
On Tue, May 13, 2025 at 05:07:11PM +0000, sai.gowtham.ch at intel.com wrote:
> From: Sai Gowtham Ch <sai.gowtham.ch at intel.com>
>
> Test rebinds the prefetch ranges to check the ideal behaviour of prefetch mechanisim,
> expecting address ranges in the corresponding mem regions has to be created again and
> use those address ranges to submit workloads.
>
> Cc: Himal Prasad Ghimiray <himal.prasad.ghimiray at intel.com>
> Cc: Matthew Brost <matthew.brost at intel.com>
> Signed-off-by: Sai Gowtham Ch <sai.gowtham.ch at intel.com>
> ---
> tests/intel/xe_exec_system_allocator.c | 47 +++++++++++++++++++++++---
> 1 file changed, 42 insertions(+), 5 deletions(-)
>
> diff --git a/tests/intel/xe_exec_system_allocator.c b/tests/intel/xe_exec_system_allocator.c
> index c3f0e61f3..94907847c 100644
> --- a/tests/intel/xe_exec_system_allocator.c
> +++ b/tests/intel/xe_exec_system_allocator.c
> @@ -484,6 +484,24 @@ static void test_basic(int fd, struct drm_xe_engine_class_instance *eci,
> * Description: Prefetch of mutliple ranges within arg[1] size and check if multiple ranges are created
> * Test category: functionality test
> *
> + * SUBTEST: bind-vram-%s
> + * Description: Validate prefetch-smem of size arg[1] by rebinding them with prefetch-vram to
> + * check the behaviour, ideal behaviour is to migrate ranges
> + * Test category: functionality test
> + *
> + * SUBTEST: bind-smem-%s
> + * Description: Validate prefetch-smem of size arg[1] by rebinding them with prefetch-vram
> + * check the behaviour, ideal behaviour is to migrate ranges
> + * Test category: functionality test
> + *
> + * SUBTEST: multi-range-bind-vram-%s
> + * Description: Validate multiple ranges of size arg[1] by binding them with multiple ranges at vram
> + * Test category: functionality test
> + *
> + * SUBTEST: multi-range-bind-smem-%s
> + * Description: Validate multiple ranges of size arg[1] by binding them with multiple ranges at smem
> + * Test category: functionality test
> + *
> * arg[1]:
> *
> * @SZ_4K: SZ_4K
> @@ -492,7 +510,7 @@ static void test_basic(int fd, struct drm_xe_engine_class_instance *eci,
> */
> #define MAX_BATCH_DWORDS 16
> static void prefetch(int fd, struct drm_xe_engine_class_instance *eci,
> - size_t bo_size, unsigned int flags, int num_dwords)
> + size_t bo_size, unsigned int flags, int num_dwords, bool bind)
You have flags field but added a bool for bind? Confusing.
Again I think you should build prefetch tests within existing tests (the test_exec function).
Matt
> {
> struct batch_data *data;
> uint64_t target_addr;
> @@ -542,6 +560,13 @@ static void prefetch(int fd, struct drm_xe_engine_class_instance *eci,
> sync[0].addr = to_user_pointer(exec_ufence);
> xe_vm_prefetch_async(fd, vm, 0, 0, addr, bo_size, sync, 1, flags & VRAM ? 1 : 0);
> xe_wait_ufence(fd, exec_ufence, USER_FENCE_VALUE, 0, NSEC_PER_SEC);
> + if (bind) {
> + exec_ufence[0] = 0;
> + sync[0].addr = to_user_pointer(exec_ufence);
> + xe_vm_prefetch_async(fd, vm, 0, 0, addr, bo_size, sync, 1, flags & VRAM ? 0 : 1);
> + xe_wait_ufence(fd, exec_ufence, USER_FENCE_VALUE, 0, NSEC_PER_SEC);
> + exec_ufence[0] = 0;
> + }
> exec.exec_queue_id = exec_queues;
>
> for (int i = 0; i < num_dwords; i++) {
> @@ -2045,16 +2070,28 @@ igt_main
>
> for (m = mode; m->name; m++) {
> igt_subtest_f("prefetch-smem-%s", m->name)
> - prefetch(fd, &engine->instance, m->size, 0, 1);
> + prefetch(fd, &engine->instance, m->size, 0, 1, 0);
>
> igt_subtest_f("prefetch-vram-%s", m->name)
> - prefetch(fd, &engine->instance, m->size, VRAM, 1);
> + prefetch(fd, &engine->instance, m->size, VRAM, 1, 0);
>
> igt_subtest_f("multi-range-smem-%s", m->name)
> - prefetch(fd, &engine->instance, m->size, 0, 10);
> + prefetch(fd, &engine->instance, m->size, 0, 10, 0);
>
> igt_subtest_f("multi-range-vram-%s", m->name)
> - prefetch(fd, &engine->instance, m->size, VRAM, 10);
> + prefetch(fd, &engine->instance, m->size, VRAM, 10, 0);
> +
> + igt_subtest_f("bind-vram-%s", m->name)
> + prefetch(fd, &engine->instance, m->size, 0, 1, 1);
> +
> + igt_subtest_f("bind-smem-%s", m->name)
> + prefetch(fd, &engine->instance, m->size, VRAM, 1, 1);
> +
> + igt_subtest_f("multi-range-bind-vram-%s", m->name)
> + prefetch(fd, &engine->instance, m->size, 0, 10, 1);
> +
> + igt_subtest_f("multi-range-bind-smem-%s", m->name)
> + prefetch(fd, &engine->instance, m->size, VRAM, 10, 1);
> }
>
> igt_fixture {
> --
> 2.34.1
>
More information about the igt-dev
mailing list