public inbox for intel-gfx@lists.freedesktop.org
 help / color / mirror / Atom feed
From: Tvrtko Ursulin <tvrtko.ursulin@linux.intel.com>
To: ankitprasad.r.sharma@intel.com, intel-gfx@lists.freedesktop.org
Cc: akash.goel@intel.com, shashidhar.hiremath@intel.com
Subject: Re: [PATCH 2/3] igt/gem_pread: Support to verify pread/pwrite for non-shmem backed obj
Date: Tue, 15 Sep 2015 16:35:49 +0100	[thread overview]
Message-ID: <55F83AD5.6060800@linux.intel.com> (raw)
In-Reply-To: <1442306188-25779-3-git-send-email-ankitprasad.r.sharma@intel.com>



On 09/15/2015 09:36 AM, ankitprasad.r.sharma@intel.com wrote:
> From: Ankitprasad Sharma <ankitprasad.r.sharma@intel.com>
>
> This patch adds support to verify pread/pwrite for non-shmem backed
> objects. It also shows the pread/pwrite speed.
> It also tests speeds for pread with and without user side page faults
>
> v2: Fixed Rebase conflicts (Ankit)
>
> v3: Precalculating values to avoid redundant function calls (Dave)
> Replaced igt_subtest by igt_subtest_f, added asserts for mmap, corrected
> indentation (Tvrtko)
>
> v4: Updated data types to avoid redundant type conversions (Tvrtko)
> Corrected pagefault-pread time calculation (Ankit)
>
> Signed-off-by: Ankitprasad Sharma <ankitprasad.r.sharma at intel.com>
> ---
>   tests/gem_pread.c  | 108 +++++++++++++++++++++++++++++++++++++++++++++++++----
>   tests/gem_pwrite.c |  55 ++++++++++++++++++++++++---
>   2 files changed, 150 insertions(+), 13 deletions(-)
>
> diff --git a/tests/gem_pread.c b/tests/gem_pread.c
> index cc83948..41553b8 100644
> --- a/tests/gem_pread.c
> +++ b/tests/gem_pread.c
> @@ -41,6 +41,10 @@
>   #include "drmtest.h"
>
>   #define OBJECT_SIZE 16384
> +#define LARGE_OBJECT_SIZE 1024 * 1024
> +#define KGRN "\x1B[32m"
> +#define KRED "\x1B[31m"
> +#define KNRM "\x1B[0m"
>
>   static void do_gem_read(int fd, uint32_t handle, void *buf, int len, int loops)
>   {
> @@ -76,12 +80,16 @@ static const char *bytes_per_sec(char *buf, double v)
>
>
>   uint32_t *src, dst;
> +uint32_t *dst_user, src_stolen, large_stolen;
> +uint32_t *stolen_pf_user, *stolen_nopf_user;
>   int fd, count;
>
>   int main(int argc, char **argv)
>   {
>   	int object_size = 0;
> -	uint32_t buf[20];
> +	double usecs;
> +	char buf[100];
> +	char* bps;
>   	const struct {
>   		int level;
>   		const char *name;
> @@ -106,6 +114,8 @@ int main(int argc, char **argv)
>
>   		dst = gem_create(fd, object_size);
>   		src = malloc(object_size);
> +		src_stolen = gem_create_stolen(fd, object_size);
> +		dst_user = malloc(object_size);
>   	}
>
>   	igt_subtest("normal") {
> @@ -115,10 +125,10 @@ int main(int argc, char **argv)
>   			gettimeofday(&start, NULL);
>   			do_gem_read(fd, dst, src, object_size, count);
>   			gettimeofday(&end, NULL);
> +			usecs = elapsed(&start, &end, count);
> +			bps = bytes_per_sec(buf, object_size/usecs*1e6);
>   			igt_info("Time to pread %d bytes x %6d:	%7.3fµs, %s\n",
> -				 object_size, count,
> -				 elapsed(&start, &end, count),
> -				 bytes_per_sec((char *)buf, object_size/elapsed(&start, &end, count)*1e6));
> +				 object_size, count, usecs, bps);
>   			fflush(stdout);
>   		}
>   	}
> @@ -133,18 +143,102 @@ int main(int argc, char **argv)
>   				gettimeofday(&start, NULL);
>   				do_gem_read(fd, dst, src, object_size, count);
>   				gettimeofday(&end, NULL);
> +				usecs = elapsed(&start, &end, count);
> +				bps = bytes_per_sec(buf, object_size/usecs*1e6);
>   				igt_info("Time to %s pread %d bytes x %6d:	%7.3fµs, %s\n",
> -					 c->name, object_size, count,
> -					 elapsed(&start, &end, count),
> -					 bytes_per_sec((char *)buf, object_size/elapsed(&start, &end, count)*1e6));
> +					 c->name, object_size, count, usecs, bps);
>   				fflush(stdout);
>   			}
>   		}
>   	}
>
> +	igt_subtest("stolen-normal") {
> +		for (count = 1; count <= 1<<17; count <<= 1) {
> +			struct timeval start, end;
> +
> +			gettimeofday(&start, NULL);
> +			do_gem_read(fd, src_stolen, dst_user, object_size, count);
> +			gettimeofday(&end, NULL);
> +			usecs = elapsed(&start, &end, count);
> +			bps = bytes_per_sec(buf, object_size/usecs*1e6);
> +			igt_info("Time to pread %d bytes x %6d:	%7.3fµs, %s\n",
> +				 object_size, count, usecs, bps);
> +			fflush(stdout);
> +		}
> +	}
> +	for (c = cache; c->level != -1; c++) {
> +		igt_subtest_f("stolen-%s", c->name) {
> +			gem_set_caching(fd, src_stolen, c->level);
> +
> +			for (count = 1; count <= 1<<17; count <<= 1) {
> +				struct timeval start, end;
> +
> +				gettimeofday(&start, NULL);
> +				do_gem_read(fd, src_stolen, dst_user,
> +					    object_size, count);
> +				gettimeofday(&end, NULL);
> +				usecs = elapsed(&start, &end, count);
> +				bps = bytes_per_sec(buf, object_size/usecs*1e6);
> +				igt_info("Time to stolen-%s pread %d bytes x %6d:      %7.3fµs, %s\n",
> +					 c->name, object_size, count, usecs, bps);
> +				fflush(stdout);
> +			}
> +		}
> +	}
> +
> +	/* List the time taken in pread operation for stolen objects, with
> +	 * and without the overhead of page fault handling on accessing the
> +	 * user space buffer
> +	 */
> +	igt_subtest("pagefault-pread") {
> +		large_stolen = gem_create_stolen(fd, LARGE_OBJECT_SIZE);
> +		stolen_nopf_user = (uint32_t *) mmap(NULL, LARGE_OBJECT_SIZE,
> +						PROT_WRITE,
> +						MAP_ANONYMOUS|MAP_PRIVATE,
> +						-1, 0);
> +		igt_assert(stolen_nopf_user);
> +
> +		for (count = 1; count <= 10; count ++) {
> +			struct timeval start, end;
> +			double t_elapsed = 0;
> +
> +			gettimeofday(&start, NULL);
> +			do_gem_read(fd, large_stolen, stolen_nopf_user,
> +				    LARGE_OBJECT_SIZE, 1);
> +			gettimeofday(&end, NULL);
> +			t_elapsed = elapsed(&start, &end, count);
> +			bps = bytes_per_sec(buf, object_size/t_elapsed*1e6);
> +			igt_info("Pagefault-N - Time to pread %d bytes: %7.3fµs, %s\n",
> +				 LARGE_OBJECT_SIZE, t_elapsed, bps);
> +
> +			stolen_pf_user = (uint32_t *) mmap(NULL, LARGE_OBJECT_SIZE,
> +						      PROT_WRITE,
> +						      MAP_ANONYMOUS|MAP_PRIVATE,
> +						      -1, 0);
> +			igt_assert(stolen_pf_user);
> +
> +			gettimeofday(&start, NULL);
> +			do_gem_read(fd, large_stolen, stolen_pf_user,
> +				    LARGE_OBJECT_SIZE, 1);
> +			gettimeofday(&end, NULL);
> +			usecs = elapsed(&start, &end, count);
> +			bps = bytes_per_sec(buf, object_size/usecs*1e6);
> +			igt_info("Pagefault-Y - Time to pread %d bytes: %7.3fµs, %s%s%s\n",
> +				 LARGE_OBJECT_SIZE, usecs,
> +				 t_elapsed < usecs ? KGRN : KRED, bps, KNRM);
> +			fflush(stdout);
> +			munmap(stolen_pf_user, LARGE_OBJECT_SIZE);
> +		}
> +		munmap(stolen_nopf_user, LARGE_OBJECT_SIZE);
> +		gem_close(fd, large_stolen);
> +	}
> +
> +
>   	igt_fixture {
>   		free(src);
>   		gem_close(fd, dst);
> +		free(dst_user);
> +		gem_close(fd, src_stolen);
>
>   		close(fd);
>   	}
> diff --git a/tests/gem_pwrite.c b/tests/gem_pwrite.c
> index 5b6a77f..23509c5 100644
> --- a/tests/gem_pwrite.c
> +++ b/tests/gem_pwrite.c
> @@ -135,12 +135,15 @@ static void test_big_gtt(int fd, int scale)
>   }
>
>   uint32_t *src, dst;
> +uint32_t *src_user, dst_stolen;
>   int fd;
>
>   int main(int argc, char **argv)
>   {
>   	int object_size = 0;
> -	uint32_t buf[20];
> +	double usecs;
> +	char* bps;
> +	char buf[100];
>   	int count;
>   	const struct {
>   		int level;
> @@ -167,6 +170,8 @@ int main(int argc, char **argv)
>
>   		dst = gem_create(fd, object_size);
>   		src = malloc(object_size);
> +		dst_stolen = gem_create_stolen(fd, object_size);
> +		src_user = malloc(object_size);
>   	}
>
>   	igt_subtest("normal") {
> @@ -176,10 +181,10 @@ int main(int argc, char **argv)
>   			gettimeofday(&start, NULL);
>   			do_gem_write(fd, dst, src, object_size, count);
>   			gettimeofday(&end, NULL);
> +			usecs = elapsed(&start, &end, count);
> +			bps = bytes_per_sec(buf, object_size/usecs*1e6);
>   			igt_info("Time to pwrite %d bytes x %6d:	%7.3fµs, %s\n",
> -				 object_size, count,
> -				 elapsed(&start, &end, count),
> -				 bytes_per_sec((char *)buf, object_size/elapsed(&start, &end, count)*1e6));
> +				 object_size, count, usecs, bps);
>   			fflush(stdout);
>   		}
>   	}
> @@ -194,10 +199,46 @@ int main(int argc, char **argv)
>   				gettimeofday(&start, NULL);
>   				do_gem_write(fd, dst, src, object_size, count);
>   				gettimeofday(&end, NULL);
> +				usecs = elapsed(&start, &end, count);
> +				bps = bytes_per_sec(buf, object_size/usecs*1e6);
>   				igt_info("Time to %s pwrite %d bytes x %6d:	%7.3fµs, %s\n",
> +					 c->name, object_size, count, usecs, bps);
> +				fflush(stdout);
> +			}
> +		}
> +	}
> +
> +	igt_subtest("stolen-normal") {
> +		for (count = 1; count <= 1<<17; count <<= 1) {
> +			struct timeval start, end;
> +
> +			gettimeofday(&start, NULL);
> +			do_gem_write(fd, dst_stolen, src_user,
> +				     object_size, count);
> +			gettimeofday(&end, NULL);
> +			usecs = elapsed(&start, &end, count);
> +			bps = bytes_per_sec(buf, object_size/usecs*1e6);
> +			igt_info("Time to pwrite %d bytes x %6d:        %7.3fµs, %s\n",
> +				 object_size, count, usecs, bps);
> +			fflush(stdout);
> +		}
> +	}
> +
> +	for (c = cache; c->level != -1; c++) {
> +		igt_subtest_f("stolen-%s", c->name) {
> +			gem_set_caching(fd, dst, c->level);
> +			for (count = 1; count <= 1<<17; count <<= 1) {
> +				struct timeval start, end;
> +
> +				gettimeofday(&start, NULL);
> +				do_gem_write(fd, dst_stolen, src_user,
> +					     object_size, count);
> +				gettimeofday(&end, NULL);
> +				bps = bytes_per_sec(buf,
> +						    object_size/usecs*1e6);
> +				igt_info("Time to stolen-%s pwrite %d bytes x %6d:     %7.3fµs, %s\n",
>   					 c->name, object_size, count,
> -					 elapsed(&start, &end, count),
> -					 bytes_per_sec((char *)buf, object_size/elapsed(&start, &end, count)*1e6));
> +					 usecs, bps);
>   				fflush(stdout);
>   			}
>   		}
> @@ -206,6 +247,8 @@ int main(int argc, char **argv)
>   	igt_fixture {
>   		free(src);
>   		gem_close(fd, dst);
> +		free(src_user);
> +		gem_close(fd, dst_stolen);
>   	}
>
>   	igt_subtest("big-cpu")
>

Reviewed-by: Tvrtko Ursulin <tvrtko.ursulin@intel.com>

Regards,

Tvrtko


_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/intel-gfx

  reply	other threads:[~2015-09-15 15:35 UTC|newest]

Thread overview: 14+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2015-09-15  8:36 [PATCH v4 0/3] Tests for verifying the old and extended GEM_CREATE ioctl ankitprasad.r.sharma
2015-09-15  8:36 ` [PATCH 1/3] igt/gem_stolen: Verifying extended gem_create ioctl ankitprasad.r.sharma
2015-09-15 15:27   ` Tvrtko Ursulin
2015-09-15  8:36 ` [PATCH 2/3] igt/gem_pread: Support to verify pread/pwrite for non-shmem backed obj ankitprasad.r.sharma
2015-09-15 15:35   ` Tvrtko Ursulin [this message]
2015-09-15  8:36 ` [PATCH 3/3] igt/gem_create: Test to validate parameters for GEM_CREATE ioctl ankitprasad.r.sharma
2015-09-15 15:42   ` Tvrtko Ursulin
  -- strict thread matches above, loose matches on Subject: below --
2015-07-22 13:45 [PATCH v3 0/3] Tests for verifying the old and extended " ankitprasad.r.sharma
2015-07-22 13:45 ` [PATCH 2/3] igt/gem_pread: Support to verify pread/pwrite for non-shmem backed obj ankitprasad.r.sharma
2015-07-22 16:14   ` Tvrtko Ursulin
2015-07-01  9:26 [PATCH v2 0/3] Tests for verifying the old and extended GEM_CREATE ioctl ankitprasad.r.sharma
2015-07-01  9:26 ` [PATCH 2/3] igt/gem_pread: Support to verify pread/pwrite for non-shmem backed obj ankitprasad.r.sharma
2015-07-03  9:37   ` Tvrtko Ursulin
2015-07-06 14:33     ` Dave Gordon
2015-07-21 12:38     ` Ankitprasad Sharma
2015-05-13 11:53 [PATCH 0/3] Tests for verifying the old and extended GEM_CREATE ioctl ankitprasad.r.sharma
2015-05-13 11:53 ` [PATCH 2/3] igt/gem_pread: Support to verify pread/pwrite for non-shmem backed obj ankitprasad.r.sharma

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=55F83AD5.6060800@linux.intel.com \
    --to=tvrtko.ursulin@linux.intel.com \
    --cc=akash.goel@intel.com \
    --cc=ankitprasad.r.sharma@intel.com \
    --cc=intel-gfx@lists.freedesktop.org \
    --cc=shashidhar.hiremath@intel.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox