On Fri, May 18, 2012 at 9:40 AM, Paolo Bonzini <bonz...@gnu.org> wrote:
> Il 16/05/2012 21:16, Erik Faye-Lund ha scritto:
>> From: theoleblond <theodore.lebl...@gmail.com>
>>
>> SwitchToThread() only gives away the rest of the current time
>> slice to another thread in the current process. So if the
>> thread that feeds the file decscriptor we're polling is not
>> in the current process, we get busy-waiting. This can lead
>> to very poor performance in some cases, so we better just
>> wait a tiny amount instead.
>>
>> * lib/poll.c: use SleepEx(1, TRUE) instead of SwitchToThread()
>> ---
>>
>> Here's a patch we've applied to Git for Windows. Perhaps it's
>> useful upstream as well?
>>
>> I'm forwarding it on behalf of Theodore, who was nice enough
>> to debug a performance issue and nail down a fix. Thanks,
>> Theodore!
>>
>>  ChangeLog  | 13 +++++++++++++
>>  lib/poll.c |  3 ++-
>>  2 files changed, 15 insertions(+), 1 deletion(-)
>>
>> diff --git a/ChangeLog b/ChangeLog
>> index aeb3cf8..b94c311 100644
>> --- a/ChangeLog
>> +++ b/ChangeLog
>> @@ -1,3 +1,16 @@
>> +2012-05-16  theoleblond  <theodore.lebl...@gmail.com>
>> +
>> +     poll: prevent busy-waiting
>> +
>> +     SwitchToThread() only gives away the rest of the current time
>> +     slice to another thread in the current process. So if the
>> +     thread that feeds the file decscriptor we're polling is not
>> +     in the current process, we get busy-waiting. This can lead
>> +     to very poor performance in some cases, so we better just
>> +     wait a tiny amount instead.
>> +
>> +     * lib/poll.c: use SleepEx(1, TRUE) instead of SwitchToThread()
>> +
>>  2012-05-15  Pádraig Brady  <p...@draigbrady.com>
>>
>>       fsusage: fix block size returned on older Linux 2.6
>> diff --git a/lib/poll.c b/lib/poll.c
>> index 3071b12..235338e 100644
>> --- a/lib/poll.c
>> +++ b/lib/poll.c
>> @@ -598,7 +598,8 @@ restart:
>>
>>    if (!rc && timeout == INFTIM)
>>      {
>> -      SwitchToThread();
>> +      /* Sleep 1 millisecond to avoid busy wait */
>> +      SleepEx(1, TRUE);
>>        goto restart;
>>      }
>>
>
> Looks good, do you have commit access?
>

Nope.

Reply via email to