From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([208.118.235.92]:35146) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1S9xUp-0005zm-Cp for qemu-devel@nongnu.org; Tue, 20 Mar 2012 07:45:22 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1S9xUj-0004hf-19 for qemu-devel@nongnu.org; Tue, 20 Mar 2012 07:44:58 -0400 Received: from e06smtp10.uk.ibm.com ([195.75.94.106]:54955) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1S9xUi-0004gp-Nb for qemu-devel@nongnu.org; Tue, 20 Mar 2012 07:44:52 -0400 Received: from /spool/local by e06smtp10.uk.ibm.com with IBM ESMTP SMTP Gateway: Authorized Use Only! Violators will be prosecuted for from ; Tue, 20 Mar 2012 11:44:48 -0000 Received: from d06av04.portsmouth.uk.ibm.com (d06av04.portsmouth.uk.ibm.com [9.149.37.216]) by d06nrmr1407.portsmouth.uk.ibm.com (8.13.8/8.13.8/NCO v10.0) with ESMTP id q2KBijlh2621510 for ; Tue, 20 Mar 2012 11:44:45 GMT Received: from d06av04.portsmouth.uk.ibm.com (loopback [127.0.0.1]) by d06av04.portsmouth.uk.ibm.com (8.14.4/8.13.1/NCO v10.0 AVout) with ESMTP id q2KBihlj008943 for ; Tue, 20 Mar 2012 05:44:44 -0600 Date: Tue, 20 Mar 2012 11:44:42 +0000 From: Stefan Hajnoczi Message-ID: <20120320114442.GA30819@stefanha-thinkpad.localdomain> References: <1331603611-9103-1-git-send-email-zwu.kernel@gmail.com> <4F685230.9040209@redhat.com> <4F6854B2.8000209@redhat.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <4F6854B2.8000209@redhat.com> Subject: Re: [Qemu-devel] [PATCH] block: add the support to drain throttled requests List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: Kevin Wolf Cc: Zhi Yong Wu , Paolo Bonzini , Zhi Yong Wu , qemu-devel@nongnu.org On Tue, Mar 20, 2012 at 10:58:10AM +0100, Kevin Wolf wrote: > Am 20.03.2012 10:47, schrieb Paolo Bonzini: > > Il 20/03/2012 10:40, Zhi Yong Wu ha scritto: > >> HI, Kevin, > >> > >> We hope that I/O throttling can be shipped without known issue in QEMU > >> 1.1, so if you are available, can you give this patch some love? > > > > I'm sorry to say this, but I think I/O throttling is impossible to save. > > As it is implemented now, it just cannot work in the presence of > > synchronous I/O, except at the cost of busy waiting with the global > > mutex taken. See the message from Stefan yesterday. > > qemu_aio_flush() is busy waiting with the global mutex taken anyway, so > it doesn't change that much. Yesterday I only posted an analysis of the bug but here are some thoughts on how to move forward. Throttling itself is not the problem. We've known that synchronous operations in the vcpu thread are a problem long before throttling. This is just another reason to convert device emulation to use asynchronous interfaces. Here is the list of device models that perform synchronous block I/O: hw/fdc.c hw/ide/atapi.c hw/ide/core.c hw/nand.c hw/onenand.c hw/pflash_cfi01.c hw/pflash_cfi02.c hw/sd.c Zhi Hui Li is working on hw/fdc.c and recently sent a patch. I think it's too close to QEMU 1.1 to convert all the remaining devices and test them properly before the soft-freeze. But it's probably possible to convert IDE before the soft-freeze. In the meantime we could add this to bdrv_rw_co(): if (bs->io_limits_enabled) { fprintf(stderr, "Disabling I/O throttling on '%s' due " "to synchronous I/O\n", bdrv_get_device_name(bs)); bdrv_io_limits_disable(bs); } It's not pretty but tells the user there is an issue and avoids deadlocking. Stefan