[Intel-gfx] [PATCH i-g-t] tests/gem_exec_nop: Improved test run time

Morton, Derek J derek.j.morton at intel.com
Wed Nov 4 05:40:45 PST 2015


>
>
>-----Original Message-----
>From: Chris Wilson [mailto:chris at chris-wilson.co.uk] 
>Sent: Tuesday, November 3, 2015 4:40 PM
>To: Morton, Derek J
>Cc: intel-gfx at lists.freedesktop.org; Wood, Thomas; Gore, Tim
>Subject: Re: [PATCH i-g-t] tests/gem_exec_nop: Improved test run time
>
>On Tue, Nov 03, 2015 at 04:29:45PM +0000, Derek Morton wrote:
>> Reduced the Sleep period to 200mS and reduced the repetition count to 
>> 7 to decrease the test run time significantly.
>> 
>> Also fixed a non ascii character that messed up the results table formatting.
>
>Pardon? Are you working around someone else's bug?

> 
>> Signed-off-by: Derek Morton <derek.j.morton at intel.com>
>> ---
>>  tests/gem_exec_nop.c | 6 +++---
>>  1 file changed, 3 insertions(+), 3 deletions(-)
>> 
>> diff --git a/tests/gem_exec_nop.c b/tests/gem_exec_nop.c index 
>> a287d08..5028145 100644
>> --- a/tests/gem_exec_nop.c
>> +++ b/tests/gem_exec_nop.c
>> @@ -133,7 +133,7 @@ static void loop(int fd, uint32_t handle, unsigned ring_id, const char *ring_nam
>>  	gem_sync(fd, handle);
>>  
>>  	for (count = 1; count <= SLOW_QUICK(1<<17, 1<<4); count <<= 1) {
>> -		const int reps = 13;
>> +		const int reps = 7;
>>  		igt_stats_t stats;
>>  		int n;
>>  
>> @@ -142,7 +142,7 @@ static void loop(int fd, uint32_t handle, unsigned ring_id, const char *ring_nam
>>  		for (n = 0; n < reps; n++) {
>>  			struct timespec start, end;
>>  			int loops = count;
>> -			sleep(1); /* wait for the hw to go back to sleep */
>> +			usleep(200000); /* wait 200mS for the hw to go back to sleep */
>>  			clock_gettime(CLOCK_MONOTONIC, &start);
>>  			while (loops--)
>>  				do_ioctl(fd, DRM_IOCTL_I915_GEM_EXECBUFFER2, &execbuf); @@ -151,7 
>> +151,7 @@ static void loop(int fd, uint32_t handle, unsigned ring_id, const char *ring_nam
>>  			igt_stats_push(&stats, elapsed(&start, &end, count));
>>  		}
>>  
>> -		igt_info("Time to exec x %d:		%7.3fµs (ring=%s)\n",
>> +		igt_info("Time to exec x %d:		%7.3fuS (ring=%s)\n",
>
>Did SI change the standard unit of measurement for time?

Before my patch the test output looks like:
Starting subtest: render
RPS frequency range [200, 600]
Time to exec x 1:		535.017Time to exec x 2:		401.132Time to exec x 4:		291.106Time to exec x 8:		229.292Time to exec x 16:		219.579Time to exec x 32:		186.793Time to exec x 64:		185.509Time to exec x 128:		186.183Time to exec x 256:		166.506Time to exec x 512:		159.418Time to exec x 1024:		142.648Time to exec x 2048:		116.864Time to exec x 4096:		 91.829Time to exec x 8192:		 75.913Time to exec x 16384:		 70.119Time to exec x 32768:		 64.604Time to exec x 65536:		 64.213Time to exec x 131072:		 61.843Subtest render: SUCCESS (457.063s)
Test requirement passed: min > 0
Setting min/max to 200MHz
Test requirement passed: sysfs_write("gt_min_freq_mhz", min) == 0 && sysfs_write("gt_max_freq_mhz", min) == 0
Test requirement passed: max > 0
Setting min/max to 600MHz
Test requirement passed: sysfs_write("gt_max_freq_mhz", max) == 0 && sysfs_write("gt_min_freq_mhz", max) == 0


With my patch it looks like:
Starting subtest: render
RPS frequency range [200, 600]
Time to exec x 1:		693.088uS (ring=render)
Time to exec x 2:		435.635uS (ring=render)
Time to exec x 4:		333.473uS (ring=render)
Time to exec x 8:		286.832uS (ring=render)
Time to exec x 16:		168.929uS (ring=render)
Time to exec x 32:		169.966uS (ring=render)
Time to exec x 64:		202.545uS (ring=render)
Time to exec x 128:		198.233uS (ring=render)
Time to exec x 256:		165.126uS (ring=render)
Time to exec x 512:		155.830uS (ring=render)
Time to exec x 1024:		124.994uS (ring=render)
Time to exec x 2048:		 96.887uS (ring=render)
Time to exec x 4096:		 85.416uS (ring=render)
Time to exec x 8192:		 74.398uS (ring=render)
Time to exec x 16384:		 74.131uS (ring=render)
Time to exec x 32768:		 63.949uS (ring=render)
Time to exec x 65536:		 61.973uS (ring=render)
Time to exec x 131072:		 61.645uS (ring=render)
Subtest render: SUCCESS (143.826s)
Test requirement passed: min > 0
Setting min/max to 200MHz
Test requirement passed: sysfs_write("gt_min_freq_mhz", min) == 0 && sysfs_write("gt_max_freq_mhz", min) == 0
Test requirement passed: max > 0
Setting min/max to 600MHz
Test requirement passed: sysfs_write("gt_max_freq_mhz", max) == 0 && sysfs_write("gt_min_freq_mhz", max) == 0

So the 'µ' character is causing problems.

I have done some more investigations and have found a change you made to igt_core.c in June to be the cause.
You added:
	if (isatty(STDOUT_FILENO))
		setlocale(LC_ALL, "");
to common_init()

I added some debug and the setlocale() on android is returning 'C' so is forcing standard ascii to be used. As 'µ' is not an ascii character it causes problems.

So I think if you want to continue allow setting a locale to a lowest common denominator (ascii) then all the text printed by tests also needs to conform to ascii and this change is valid.

//Derek

>-Chris
>
>--
>Chris Wilson, Intel Open Source Technology Centre
>


More information about the Intel-gfx mailing list