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.