From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([140.186.70.92]:45504) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1RV3lf-00084E-6J for qemu-devel@nongnu.org; Mon, 28 Nov 2011 11:09:23 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1RV3ld-0002dw-T1 for qemu-devel@nongnu.org; Mon, 28 Nov 2011 11:09:19 -0500 Received: from e06smtp15.uk.ibm.com ([195.75.94.111]:50619) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1RV3ld-0002ar-DZ for qemu-devel@nongnu.org; Mon, 28 Nov 2011 11:09:17 -0500 Received: from /spool/local by e06smtp15.uk.ibm.com with IBM ESMTP SMTP Gateway: Authorized Use Only! Violators will be prosecuted for from ; Mon, 28 Nov 2011 16:09:04 -0000 Received: from d06av03.portsmouth.uk.ibm.com (d06av03.portsmouth.uk.ibm.com [9.149.37.213]) by d06nrmr1707.portsmouth.uk.ibm.com (8.13.8/8.13.8/NCO v10.0) with ESMTP id pASG8pCf2273510 for ; Mon, 28 Nov 2011 16:08:51 GMT Received: from d06av03.portsmouth.uk.ibm.com (localhost.localdomain [127.0.0.1]) by d06av03.portsmouth.uk.ibm.com (8.14.4/8.13.1/NCO v10.0 AVout) with ESMTP id pASG8oWc008696 for ; Mon, 28 Nov 2011 09:08:51 -0700 From: Stefan Hajnoczi Date: Mon, 28 Nov 2011 16:08:46 +0000 Message-Id: <1322496527-19019-1-git-send-email-stefanha@linux.vnet.ibm.com> Subject: [Qemu-devel] [PATCH v5 0/8] block: generic copy-on-read List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: qemu-devel@nongnu.org Cc: Kevin Wolf , Stefan Hajnoczi [Kevin: As requested, I am only sending Patch 4 and not the rest of the patches since they are unchanged and already applied to your block tree.] The new -drive copy-on-read=on|off feature populates the image file with data from the backing file on read. This is useful when accessing images backed over a slow medium (e.g. http over internet). All read data will be stored in the local image file so it does not need to be fetched again in the future. This series is a prerequisite for the image streaming feature, which uses copy-on-read to populate the image file in the background while the VM is running. However, the copy-on-read feature is useful on its own. Copy-on-read is implemented by checking whether or not data is allocated in the image file before reading it. If data is not allocated then it needs to be read and written back to the image file. The tricky bit is avoiding races with other I/O requests. These patches add request tracking to BlockDriverState so that the list of pending requests is available. Copy-on-read prevents races by serializing overlapping requests. Finally, there is a performance impact when enabling this feature since an additional write is performed. Serializing overlapping requests also means that I/O patterns where multiple requests access the same cluster will see a loss in parallelism. Perhaps we can be smarter about preventing corruption in the future and win back some performance. v5: * Fix refcount on startup [Kevin] v4: * No changes, sorry for the spam v3 emails that were sent out v3: * Improve wait_for_overlapping_requests() comment [Kevin] v2: * Based on bdrv_co_is_allocated patch series - now safe in coroutine context * Use QEMU_ALIGN_DOWN/UP() macros for copy-on-read cluster calculations [Zhi Yong] * Reset bs->copy_on_read on bdrv_close() [Kevin] * Refcount bs->copy_on_read so it doesn't get clobbered by multiple users [Marcelo] * Use bool instead of int where appropriate [Kevin] * Use compound literal assignment to ensure BdrvTrackedRequest fields always get zeroed [Kevin] * Comment rationale for copy-on-read bounce buffer [Kevin] Stefan Hajnoczi (1): block: add interface to toggle copy-on-read block.c | 22 ++++++++++++++++++++++ block.h | 4 ++++ block_int.h | 2 ++ 3 files changed, 28 insertions(+), 0 deletions(-) -- 1.7.7.3