From mboxrd@z Thu Jan 1 00:00:00 1970 From: Anthony Liguori Subject: Re: [patch 2/2] QEMU: decrease console "refresh rate" with -nographic Date: Wed, 16 Apr 2008 08:53:25 -0500 Message-ID: <480604D5.3040401@codemonkey.ws> References: <20080411183852.150819622@localhost.localdomain> <20080411184851.559593822@localhost.localdomain> <4802352A.4010105@flac.kalibalik.dk> <20080414150255.GA11640@dmt> <48038526.3090702@qumranet.com> <20080414172446.GA27224@dmt> <35388.bFoQE3daRhY=.1208244417.squirrel@webmail.hotelhot.dk> <48047519.9080007@qumranet.com> <4804B9B3.3040904@codemonkey.ws> <4804BF88.1070003@qumranet.com> <20080415150423.GA3363@dmt> <4804CAF7.3060606@codemonkey.ws> <4804CD07.2000600@qumranet.com> <4804F075.5090502@codemonkey.ws> <4805BAAC.2010000@qumranet.com> Mime-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Cc: kvm-devel@lists.sourceforge.net, Marcelo Tosatti To: Avi Kivity Return-path: In-Reply-To: <4805BAAC.2010000@qumranet.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: kvm-devel-bounces@lists.sourceforge.net Errors-To: kvm-devel-bounces@lists.sourceforge.net List-Id: kvm.vger.kernel.org Avi Kivity wrote: > Anthony Liguori wrote: >>> >>> What about aio completions? The only race-free way to handle both >>> posix aio completion and fd readiness is signals AFAIK. >> >> We poll aio completion after the select don't we? Worst case >> scenario we miss a signal and wait to poll after the next select >> event. That's going to occur very often because of the timer. > > if select() doesn't enable signals (like you can do with pselect) you > may sit for a long time in select() until the timer expires. > > Consider a 100Hz Linux guest running 'ls -lR' out of a cold cache: > instead of 1-2 ms disk latencies you'll see 10 ms latencies, killing > performance by a factor of 5. > > I see the following possible solutions: > > 1. Apply Anders' patch and keep I/O completions signal based. > > 2. Use signalfd() to convert aio completions to fd readiness, > emulating signalfd() using a thread which does sigwait()+write() (to a > pipe) on older hosts > > 3. Use a separate thread for aio completions > > 4. Use pselect(), live with the race on older hosts (it was introduced > in 2.6.16, which we barely support anyway), live with the signal > delivery inefficiency. > > When I started writing this email I was in favor of (1), but now with > the new signalfd emulation I'm leaning towards (2). I still think (1) > should be merged, preferably to qemu upstream. There is a 5th option. Do away with the use of posix aio. We get absolutely no benefit from it because it's limited to a single thread. Fabrice has reverted a patch to change that in the past. Regards, Anthony Liguori ------------------------------------------------------------------------- This SF.net email is sponsored by the 2008 JavaOne(SM) Conference Don't miss this year's exciting event. There's still time to save $100. Use priority code J8TL2D2. http://ad.doubleclick.net/clk;198757673;13503038;p?http://java.sun.com/javaone