[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