From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mailman by lists.gnu.org with tmda-scanned (Exim 4.43) id 1L0E98-0004B0-GS for qemu-devel@nongnu.org; Wed, 12 Nov 2008 06:44:30 -0500 Received: from exim by lists.gnu.org with spam-scanned (Exim 4.43) id 1L0E96-0004Ag-OF for qemu-devel@nongnu.org; Wed, 12 Nov 2008 06:44:29 -0500 Received: from [199.232.76.173] (port=47533 helo=monty-python.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1L0E96-0004AX-GW for qemu-devel@nongnu.org; Wed, 12 Nov 2008 06:44:28 -0500 Received: from mx2.redhat.com ([66.187.237.31]:48389) by monty-python.gnu.org with esmtp (Exim 4.60) (envelope-from ) id 1L0E95-0001FA-J0 for qemu-devel@nongnu.org; Wed, 12 Nov 2008 06:44:28 -0500 Date: Wed, 12 Nov 2008 13:42:29 +0200 From: Gleb Natapov Subject: Re: [Qemu-devel] [RESEND][PATCH 0/3] Fix guest time drift under heavy load. Message-ID: <20081112114229.GG20617@redhat.com> References: <20081106145142.GA29861@redhat.com> <49130F54.4060907@codemonkey.ws> <20081108083620.GB19381@redhat.com> <491711AB.7000806@codemonkey.ws> <20081110143750.GA20617@redhat.com> <49185247.70905@codemonkey.ws> <20081110152925.GB20617@redhat.com> <49185744.6010500@codemonkey.ws> <20081111144324.GE20617@redhat.com> <4919E86D.8070705@codemonkey.ws> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <4919E86D.8070705@codemonkey.ws> Reply-To: qemu-devel@nongnu.org List-Id: qemu-devel.nongnu.org List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: Anthony Liguori Cc: Paul Brook , qemu-devel@nongnu.org On Tue, Nov 11, 2008 at 02:17:49PM -0600, Anthony Liguori wrote: > Gleb Natapov wrote: >> On Mon, Nov 10, 2008 at 09:46:12AM -0600, Anthony Liguori wrote: >> -usbdevice tablet has nothing to do with it. Qemu misses interrupt >> even >> without this option and with SDL screen it misses them in bunches when >> SDL redraws a screen. In case of vnc qemu misses interrupt because of >> fsync() call in raw_flush(), or so my instrumentation shows. >> > > Can you give this patch a spin? > Doesn't compile for me. fd_pool_inuse and fd_inuse are used but not defined. > This introduces a bdrv_aio_flush() which will wait for all existing AIO > operations to complete before indicating completion. It also fixes up > IDE. Fixing up SCSI will be a little more tricky but not much. Since > we now use O_DSYNC, it's unnecessary to do an fsync (or an fdatasync). > > Assuming you're using IDE, this should eliminate any delays from fsync. I am using IDE. > SDL delays are unavoidable because it's going to come down to SDL doing > sychronous updates to the X server. The proper long term solution here > would be to put SDL in it's own thread but I'm not too worried about And probably time-keeping deserves its own thread. And CPU execution too. > this case. It's a good argument for timer fixups but I think it's > important to identify all the reasons we're losing ticks and if we can > do something about it, we should. > I completely agree that all the cases that can be fixed should be fixed, but even if qemu itself will be perfect, it is still at mercy of scheduler to get scheduled often enough. Qemu timers code tries to compensate missed timer by triggering next one immediately. What I am seen with SDL is that qemu missed ~10 timers and tries to run all of them at once without giving CPU chance to handle any of them. As a result all but one of them are lost. -- Gleb.