[igt-dev] [PATCH v2 1/1] lib/gem_cs_prefetch: enable on Simics Simulator.
Caz Yokoyama
Caz.Yokoyama at intel.com
Wed Apr 17 15:32:25 UTC 2019
Drop the patch. Will re-work.
-caz
On Tue, 2019-04-16 at 12:25 -0700, Caz Yokoyama wrote:
> As its comment says, _intel_require_memory() will be removed when all
> test
> calls _intel_require_memory().
>
> Signed-off-by: Caz Yokoyama <caz.yokoyama at intel.com>
> Cc: Stuart Summers <stuart.summers at intel.com>
> ---
> lib/igt_aux.h | 1 +
> lib/intel_os.c | 42
> ++++++++++++++++++++++++++++++++++++
> tests/i915/gem_cs_prefetch.c | 21 ++++++++++++++----
> 3 files changed, 60 insertions(+), 4 deletions(-)
>
> diff --git a/lib/igt_aux.h b/lib/igt_aux.h
> index 55392790..9cb41d41 100644
> --- a/lib/igt_aux.h
> +++ b/lib/igt_aux.h
> @@ -199,6 +199,7 @@ void *intel_get_total_pinnable_mem(size_t
> *pinned);
> int __intel_check_memory(uint64_t count, uint64_t size, unsigned
> mode,
> uint64_t *out_required, uint64_t *out_total);
> void intel_require_memory(uint64_t count, uint64_t size, unsigned
> mode);
> +void _intel_require_memory(uint64_t count, uint64_t size, unsigned
> mode);
> void intel_require_files(uint64_t count);
> #define CHECK_RAM 0x1
> #define CHECK_SWAP 0x2
> diff --git a/lib/intel_os.c b/lib/intel_os.c
> index dd93bea1..c1aab19a 100644
> --- a/lib/intel_os.c
> +++ b/lib/intel_os.c
> @@ -414,6 +414,48 @@ void intel_require_memory(uint64_t count,
> uint64_t size, unsigned mode)
> (long long)vfs_file_max());
> }
>
> +/*
> + * same as intel_require_memory() except for no
> igt_skip_on_simulation()
> + * Will be removed when all test calls _intel_require_memory().
> + */
> +void _intel_require_memory(uint64_t count, uint64_t size, unsigned
> mode)
> +{
> + uint64_t required, total;
> + bool sufficient_memory;
> +
> + sufficient_memory = __intel_check_memory(count, size, mode,
> + &required, &total);
> + if (!sufficient_memory) {
> + int dir = open("/proc", O_RDONLY);
> + char *info;
> +
> + info = igt_sysfs_get(dir, "meminfo");
> + if (info) {
> + igt_warn("Insufficient free memory;
> /proc/meminfo:\n%s",
> + info);
> + free(info);
> + }
> +
> + info = igt_sysfs_get(dir, "slabinfo");
> + if (info) {
> + igt_warn("Insufficient free memory;
> /proc/slabinfo:\n%s",
> + info);
> + free(info);
> + }
> +
> + close(dir);
> + }
> +
> + igt_require_f(sufficient_memory,
> + "Estimated that we need %'llu objects and %'llu
> MiB for the test, but only have %'llu MiB available (%s%s) and a
> maximum of %'llu objects\n",
> + (long long)count,
> + (long long)((required + ((1<<20) - 1)) >> 20),
> + (long long)(total >> 20),
> + mode & (CHECK_RAM | CHECK_SWAP) ? "RAM" : "",
> + mode & CHECK_SWAP ? " + swap": "",
> + (long long)vfs_file_max());
> +}
> +
> void intel_purge_vm_caches(int drm_fd)
> {
> int fd;
> diff --git a/tests/i915/gem_cs_prefetch.c
> b/tests/i915/gem_cs_prefetch.c
> index 2b865368..26ff1bc2 100644
> --- a/tests/i915/gem_cs_prefetch.c
> +++ b/tests/i915/gem_cs_prefetch.c
> @@ -92,13 +92,20 @@ static void can_test_ring(unsigned ring)
> close(fd);
> }
>
> +/*
> + * Following number is calculated from actual execution in Simics,
> i.e.
> + * __intel_check_memory() reports 7948206080 byte of main memory in
> total
> + * gem_create() reports ENOMEM on 14279th execution.
> + */
> +#define KERNEL_BO_OVERHEAD_SIMICS (7948206080 / 14279-1 -
> BATCH_SIZE)
> static void test_ring(unsigned ring)
> {
> struct drm_i915_gem_execbuffer2 execbuf;
> struct drm_i915_gem_exec_object2 obj[2];
> struct shadow shadow;
> - uint64_t i, count;
> + uint64_t i, count, required, total;
> int fd, gen;
> + bool sufficient_memory;
>
> can_test_ring(ring);
>
> @@ -107,7 +114,15 @@ static void test_ring(unsigned ring)
> setup(fd, gen, &shadow);
>
> count = gem_aperture_size(fd) / BATCH_SIZE;
> - intel_require_memory(count, BATCH_SIZE, CHECK_RAM);
> + if (igt_run_in_simulation()) {
> + sufficient_memory = __intel_check_memory(count,
> BATCH_SIZE,
> + CHECK_RAM,
> &required,
> + &total);
> + if (!sufficient_memory)
> + count = total /
> + (BATCH_SIZE + KERNEL_BO_OVERHEAD_SIMICS);
> + }
> + _intel_require_memory(count, BATCH_SIZE, CHECK_RAM);
> /* Fill the entire gart with batches and run them. */
> memset(obj, 0, sizeof(obj));
> obj[1].handle = shadow.handle;
> @@ -141,8 +156,6 @@ igt_main
> {
> const struct intel_execution_engine *e;
>
> - igt_skip_on_simulation();
> -
> for (e = intel_execution_engines; e->name; e++)
> igt_subtest_f("%s", e->name)
> test_ring(e->exec_id | e->flags);
More information about the igt-dev
mailing list