|
From: | Anthony Liguori |
Subject: | [Qemu-devel] Re: [PATCH][RFT] Fix the regression with SPARC emulation |
Date: | Wed, 08 Oct 2008 14:40:51 -0500 |
User-agent: | Thunderbird 2.0.0.17 (X11/20080925) |
Blue Swirl wrote:
On 10/8/08, Anthony Liguori <address@hidden> wrote:The attached patch should be the proper fix for the sparc performance regression. Unfortunately, this means abandoning signalfd() in favor of the signal handler/pipe trick but I don't see another solution to the problem.That's too bad, what was the problem?
signalfd() worked fine for KVM because KVM handles the main loop in a dedicated thread. This means select() is always running in that thread. With normal QEMU, something needs to kick the VCPU execution out of it's loop to handle the IO request. You need something like a signal to do because you need to be able to execute code to basically do cpu_interrupt.
The signal-pipe stuff works before we can write to the pipe to queue up the io completion, but also do the cpu_interrupt. I was hoping to set SIGIO on the signalfd() to just have a signal handler that did cpu_interrupt but it doesn't appear that signalfd() supports SIGIO so that's not an option.
Maybe there should be two commits for future bisections, one that reverses the signalfd patches and second one that adds the signal/pipe stuff?
It would be difficult to do that because of the aio refactoring that came after the signalfd implementation.
Please test and let me know if this works for all of your cases (it did for me with -clock unix and -clock dynticks).Works here too, with AIO and AIO disabled.
Okay, I'll commit. Regards, Anthony Liguori
[Prev in Thread] | Current Thread | [Next in Thread] |