From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mailman by lists.gnu.org with tmda-scanned (Exim 4.43) id 1KNufj-0003iH-A0 for qemu-devel@nongnu.org; Tue, 29 Jul 2008 15:15:47 -0400 Received: from exim by lists.gnu.org with spam-scanned (Exim 4.43) id 1KNufh-0003i1-Qc for qemu-devel@nongnu.org; Tue, 29 Jul 2008 15:15:47 -0400 Received: from [199.232.76.173] (port=49691 helo=monty-python.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1KNufh-0003hy-NH for qemu-devel@nongnu.org; Tue, 29 Jul 2008 15:15:45 -0400 Received: from an-out-0708.google.com ([209.85.132.246]:39754) by monty-python.gnu.org with esmtp (Exim 4.60) (envelope-from ) id 1KNufh-00008N-NP for qemu-devel@nongnu.org; Tue, 29 Jul 2008 15:15:45 -0400 Received: by an-out-0708.google.com with SMTP id d18so2040and.130 for ; Tue, 29 Jul 2008 12:15:45 -0700 (PDT) Message-ID: <488F6C3F.8050207@codemonkey.ws> Date: Tue, 29 Jul 2008 14:15:11 -0500 From: Anthony Liguori MIME-Version: 1.0 Subject: Re: [Qemu-devel] [patch 0/5][v2] qcow2: improve I/O performance with cache=off References: <20080729141352.573798859@bull.net> In-Reply-To: <20080729141352.573798859@bull.net> Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit Reply-To: qemu-devel@nongnu.org List-Id: qemu-devel.nongnu.org List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: qemu-devel@nongnu.org Cc: Laurent Vivier Laurent Vivier wrote: > These patches improve qcow2 performance when used with cache=off. > > They modify block-qcow2.c to read/write as many clusters as > possible per bdrv_aio_[read|write](). > This patch series looks like a pretty good clean up of the code. The perf improvement is a nice side effect too. I'm a little concerned about how much code this touches though. How much testing have you done of these changes? Have you tested all of the corner cases (backing files, filling up a disk image, etc.)? Regards, Anthony Liguori > Some benchmarks: > > * mkfs on 500 MB qcow2 disk > > mkfs WITHOUT WITH > > ide, cache=off,snapshot=off 41 s 5 s 8x faster > ide, cache=off,snapshot=on 40 s 5 s 8x faster > ide, cache=on, snapshot=off 3 s 3 s > ide, cache=on, snapshot=on 4 s 3 s > > * tar jxvf linux-2.6.25.7.tar.bz2 > > ide, cache=off,snapshot=off 847 s 379 s 2.2x faster > ide, cache=off,snapshot=on 801 s 364 s 2.2x faster > ide, cache=on, snapshot=off 238 s 236 s > ide, cache=on, snapshot=on 236 s 237 s > > * dd if=/dev/zero of=file > > dd if=/dev/null WITHOUT WITH > > ide, cache=off,snapshot=off 333 kB/s 3.7 MB/s 11.3x faster > ide, cache=off,snapshot=on 337 kB/s 3.6 MB/s 10.9x faster > ide, cache=on, snapshot=off 9.06 MB/s 9.23 MB/s > ide, cache=on, snapshot=on 8,89 MB/s 8.89 MB/s > > * dbench 1 > > dbench WITHOUT WITH > > ide, cache=off,snapshot=off 20.8494 MB/sec 24.8521 MB/sec +19,2% > ide, cache=off,snapshot=on 20.9349 MB/sec 24.2296 MB/sec +15,7% > ide, cache=on, snapshot=off 23.6612 MB/sec 25.4724 MB/sec + 7,6% > ide, cache=on, snapshot=on 24.1836 MB/sec 24.8169 MB/sec > > [PATCH 1/5] extract code from get_cluster_offset() into new functions > seek_l2_table(), l2_load() and l2_allocate(). > > [PATCH 2/5] divide get_cluster_offset() into get_cluster_offset() and > alloc_cluster_offset(). > > [PATCH 3/5] divide alloc_cluster_offset() into alloc_cluster_offset() > and alloc_compressed_cluster_offset(). Factorize code > to free clusters into free_used_clusters(). > > [PATCH 4/5] modify get_cluster_offset(), alloc_cluster_offset() and > free_used_clusters() to specify how many clusters we > want. > > [PATCH 5/5] in free_used_clusters(), try to aggregate free clusters > and freed clusters. > > Laurent > -- > > >