[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-Id: <C6872B72-24ED-425D-BA9E-9983779B393A@googlemail.com>
Date: Fri, 17 Jun 2011 20:45:47 +0200
From: Mathias Krause <minipli@...glemail.com>
To: David Miller <davem@...emloft.net>
Cc: akpm@...ux-foundation.org, torvalds@...ux-foundation.org,
sparclinux@...r.kernel.org, linux-kernel@...r.kernel.org
Subject: Re: [PATCH] sparc, exec: remove redundant addr_limit assignment
On 12.06.2011, 01:08 David Miller wrote:
> From: Mathias Krause <minipli@...glemail.com>
> Date: Fri, 10 Jun 2011 15:10:53 +0200
>
>> The address limit is already set in flush_old_exec() so this
>> assignment of USER_DS is redundant.
>>
>> Signed-off-by: Mathias Krause <minipli@...glemail.com>
> ...
>> @@ -368,9 +368,6 @@ void flush_thread(void)
>>
>> /* Clear FPU register state. */
>> t->fpsaved[0] = 0;
>> -
>> - if (get_thread_current_ds() != ASI_AIUS)
>> - set_fs(USER_DS);
>> }
>
> Yeah but now you're doing it unconditionally, the guard is here
> because the %asi register write which set_fs() does is extremely
> expensive on sparc64 and %99.99999 of the time we can avoid it.
David, can you please use the attached test program to give us some
numbers on how expensive the write to the %asi register is, relative to
the complexity of the whole exec() path. Please test it w/ and w/o the
attached patch. If the difference is significant it might be worth the
pain to push the set_fs() down to the arch specific code, e.g. into
flush_thread() as on SPARC, and remove it from flush_old_exec().
For the test something like:
$ for i in 1 2 3; do echo "run #$i:"; time exec_test 5000 /bin/true; done
or better:
$ perf stat -r3 exec_test 5000 /bin/true
should give some reasonable numbers.
I've no SPARC machine, so can't test myself.
Thanks,
Mathias
Download attachment "exec_test.c" of type "application/octet-stream" (999 bytes)
Download attachment "no_unconditional_set_fs.diff" of type "application/octet-stream" (347 bytes)
Powered by blists - more mailing lists