[igt-dev] [RFC i-g-t] tests/xe/xe_evict: Check for memory availability
Kumar, Janga Rahul
janga.rahul.kumar at intel.com
Wed Jul 5 10:54:27 UTC 2023
> -----Original Message-----
> From: igt-dev <igt-dev-bounces at lists.freedesktop.org> On Behalf Of Niranjana
> Vishwanathapura
> Sent: 05 July 2023 02:36
> To: igt-dev at lists.freedesktop.org
> Cc: Hellstrom, Thomas <thomas.hellstrom at intel.com>
> Subject: [igt-dev] [RFC i-g-t] tests/xe/xe_evict: Check for memory availability
>
> On systems with low system memory the subtests fail in various ways including
> returning -ENOMEM, hanging, etc.
> Ensure system has enough memory for the tests, otherwise skip it.
Instead of skipping the tests, we can update the num_bo to fit in the available memory.
>
> Signed-off-by: Niranjana Vishwanathapura
> <niranjana.vishwanathapura at intel.com>
> ---
> tests/xe/xe_evict.c | 42 ++++++++++++++++++++++++++++--------------
> 1 file changed, 28 insertions(+), 14 deletions(-)
>
> diff --git a/tests/xe/xe_evict.c b/tests/xe/xe_evict.c index
> 1a70f1b45..d28400f1c 100644
> --- a/tests/xe/xe_evict.c
> +++ b/tests/xe/xe_evict.c
> @@ -454,6 +454,13 @@ static uint64_t calc_bo_size(uint64_t vram_size, int
> mul, int div)
> return (ALIGN(vram_size, 0x40000000) * mul) / div; }
>
> +static bool has_required_memory(uint64_t mem_size, uint64_t vram_size,
> + int num_bos, uint64_t bo_size)
> +{
> + /* Assume 1/2 of system memory is available to use */
> + return (mem_size / 2 + vram_size) >= (num_bos * bo_size); }
I think here available VRAM size for use needs to considered instead of total VRAM size.
Thanks,
Rahul
> +
> /**
> * SUBTEST: evict-%s
> * Description: %arg[1] evict test.
> @@ -658,12 +665,13 @@ igt_main
> MIXED_THREADS | MULTI_VM | THREADED |
> BIND_ENGINE },
> { NULL },
> };
> - uint64_t vram_size;
> + uint64_t mem_size, vram_size;
> int fd;
>
> igt_fixture {
> fd = drm_open_driver(DRIVER_XE);
> igt_require(xe_has_vram(fd));
> + mem_size = igt_get_total_ram_mb() << 20;
> vram_size = xe_vram_size(fd, 0);
> igt_assert(vram_size);
>
> @@ -673,25 +681,31 @@ igt_main
> }
>
> for (const struct section *s = sections; s->name; s++) {
> - igt_subtest_f("evict-%s", s->name)
> - test_evict(-1, hwe, s->n_engines, s->n_execs,
> - calc_bo_size(vram_size, s->mul, s->div),
> - s->flags, NULL);
> + igt_subtest_f("evict-%s", s->name) {
> + uint64_t bo_size = calc_bo_size(vram_size, s->mul, s-
> >div);
> +
> + igt_require(has_required_memory(mem_size,
> vram_size, s->n_execs / 2, bo_size));
> + test_evict(-1, hwe, s->n_engines, s->n_execs, bo_size,
> s->flags, NULL);
> + }
> }
>
> for (const struct section_cm *s = sections_cm; s->name; s++) {
> - igt_subtest_f("evict-%s", s->name)
> - test_evict_cm(-1, hwe, s->n_engines, s->n_execs,
> - calc_bo_size(vram_size, s->mul, s->div),
> - s->flags, NULL);
> + igt_subtest_f("evict-%s", s->name) {
> + uint64_t bo_size = calc_bo_size(vram_size, s->mul, s-
> >div);
> +
> + igt_require(has_required_memory(mem_size,
> vram_size, s->n_execs / 2, bo_size));
> + test_evict(-1, hwe, s->n_engines, s->n_execs, bo_size,
> s->flags, NULL);
> + }
> }
>
> for (const struct section_threads *s = sections_threads; s->name; s++) {
> - igt_subtest_f("evict-%s", s->name)
> - threads(-1, hwe, s->n_threads, s->n_engines,
> - s->n_execs,
> - calc_bo_size(vram_size, s->mul, s->div),
> - s->flags);
> + igt_subtest_f("evict-%s", s->name) {
> + uint64_t bo_size = calc_bo_size(vram_size, s->mul, s-
> >div);
> +
> + igt_require(has_required_memory(mem_size,
> vram_size,
> + s->n_threads * (s-
> >n_execs / 2), bo_size));
> + threads(-1, hwe, s->n_threads, s->n_engines, s-
> >n_execs, bo_size, s->flags);
> + }
> }
>
> igt_fixture
> --
> 2.21.0.rc0.32.g243a4c7e27
More information about the igt-dev
mailing list