From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mailman by lists.gnu.org with tmda-scanned (Exim 4.43) id 1Jrcy5-0002xM-ND for qemu-devel@nongnu.org; Thu, 01 May 2008 13:53:17 -0400 Received: from exim by lists.gnu.org with spam-scanned (Exim 4.43) id 1Jrcy0-0002vc-Ow for qemu-devel@nongnu.org; Thu, 01 May 2008 13:53:17 -0400 Received: from [199.232.76.173] (port=33681 helo=monty-python.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1Jrcy0-0002vO-Bj for qemu-devel@nongnu.org; Thu, 01 May 2008 13:53:12 -0400 Received: from mo-p00-ob.rzone.de ([81.169.146.160]) by monty-python.gnu.org with esmtp (Exim 4.60) (envelope-from ) id 1Jrcxz-0006YB-In for qemu-devel@nongnu.org; Thu, 01 May 2008 13:53:12 -0400 From: Kevin Wolf Subject: Re: [Qemu-devel] [PATCH] Align file accesses with cache=off (O_DIRECT) Date: Thu, 1 May 2008 19:55:00 +0200 References: <4807514B.9040607@suse.de> <200804302305.42741@kevin-wolf.de> In-Reply-To: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: 7bit Content-Disposition: inline Message-Id: <200805011955.00265@kevin-wolf.de> Reply-To: qemu-devel@nongnu.org List-Id: qemu-devel.nongnu.org List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: Blue Swirl Cc: Laurent Vivier , qemu-devel@nongnu.org Am Donnerstag, 1. Mai 2008 16:35:51 schrieb Blue Swirl: > On 5/1/08, Kevin Wolf wrote: > > Am Mittwoch, 30. April 2008 16:30:27 schrieb Blue Swirl: > > > Maybe the alignment could be handled like AIO and synchronous IO > > > > > > emulation layers are added in bdrv_register, but at open stage? > > > > You mean to preserve the original pread if the file is opened without > > O_DIRECT and replace it by the emulation function only if O_DIRECT is > > really used? > > Right. > > Maybe it's slightly faster that way and it would be closer to how > other block emulations are handled. It's just an idea. Maybe I'm missing something but AFAIK this pread pointer exists once for each block driver, i.e. every raw image uses the original pread or every raw image uses the emulating one. The difference between the O_DIRECT case and the AIO/sync emulation is that AIO/sync is the same for all devices of one driver while O_DIRECT can differ between images of the same driver. So you would need to have one common pread which in turn calls a function pointer stored in the BlockDriverState. I doubt that this is much cheaper than an if in pread. And it wouldn't get too close to other emulations anyway because of the driver/device difference. Kevin