From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mailman by lists.gnu.org with tmda-scanned (Exim 4.43) id 1Jf1up-0001Kj-D2 for qemu-devel@nongnu.org; Thu, 27 Mar 2008 19:53:51 -0400 Received: from exim by lists.gnu.org with spam-scanned (Exim 4.43) id 1Jf1uo-0001KO-4F for qemu-devel@nongnu.org; Thu, 27 Mar 2008 19:53:50 -0400 Received: from [199.232.76.173] (helo=monty-python.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1Jf1un-0001KJ-Tg for qemu-devel@nongnu.org; Thu, 27 Mar 2008 19:53:49 -0400 Received: from hall.aurel32.net ([88.191.38.19]) by monty-python.gnu.org with esmtps (TLS-1.0:RSA_AES_256_CBC_SHA1:32) (Exim 4.60) (envelope-from ) id 1Jf1un-00060B-8s for qemu-devel@nongnu.org; Thu, 27 Mar 2008 19:53:49 -0400 Received: from volta-wlan.aurel32.net ([2002:52e8:2fb:ffff:21d:e0ff:fe49:1047] helo=volta.aurel32.net) by hall.aurel32.net with esmtpsa (TLS-1.0:RSA_AES_256_CBC_SHA1:32) (Exim 4.63) (envelope-from ) id 1Jf1uj-00078e-OH for qemu-devel@nongnu.org; Fri, 28 Mar 2008 00:53:45 +0100 Received: from aurel32 by volta.aurel32.net with local (Exim 4.69) (envelope-from ) id 1Jf1ue-0002LD-Vz for qemu-devel@nongnu.org; Fri, 28 Mar 2008 00:53:41 +0100 Date: Fri, 28 Mar 2008 00:53:40 +0100 From: Aurelien Jarno Subject: Re: [Qemu-devel] [PATCH] Improve DMA transfers by increasing the buffer size. Message-ID: <20080327235340.GA7964@volta.aurel32.net> References: <18410.31540.160387.110544@mariner.uk.xensource.com> MIME-Version: 1.0 Content-Type: text/plain; charset=iso-8859-15 Content-Disposition: inline In-Reply-To: <18410.31540.160387.110544@mariner.uk.xensource.com> 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 On Wed, Mar 26, 2008 at 04:35:00PM +0000, Ian Jackson wrote: Content-Description: message body text > In this patch we increase the DMA buffers in the ide emulation from 8k > to 132k, and make it configurable separately from the MAX_MULT_SECTORS > for maximum multi-mode transfers. This can improve the performance in > some conditions. > > The patch is cross-ported from xen-unstable hg changeset > f4a92f0db20fda98a633c149e3396c005a759a77 > > Signed-off-by: Ian Jackson > Signed-off-by: Samuel Thibault > Content-Description: increase ide DMA buffers > From 4eaa19458262cce92f0b891c51433ccee0a19b79 Mon Sep 17 00:00:00 2001 > From: Ian Jackson > Date: Wed, 26 Mar 2008 16:09:35 +0000 > Subject: [PATCH] Improve DMA transfers by increasing the size of DMA buffers. > > This involves a new constant IDE_DMA_BUF_SIZE which is separate from > MAX_MULT_SECTORS. > > Cross-ported from xen-unstable > 17267:f4a92f0db20fda98a633c149e3396c005a759a77 > > Signed-off-by: Ian Jackson > Signed-off-by: Samuel Thibault > --- > hw/ide.c | 20 +++++++++++++------- > 1 files changed, 13 insertions(+), 7 deletions(-) > > diff --git a/hw/ide.c b/hw/ide.c > index 56a1cda..b73dba2 100644 > --- a/hw/ide.c > +++ b/hw/ide.c > @@ -202,6 +202,12 @@ > /* set to 1 set disable mult support */ > #define MAX_MULT_SECTORS 16 > > +#define IDE_DMA_BUF_SIZE 131072 Wouldn't it be better to define this value in number of sectors? This would avoid a few divisions in the code, and anyway the code handling DMA transfers is working with a number of sectors, not a number of bytes. > +#if (IDE_DMA_BUF_SIZE < MAX_MULT_SECTORS * 512) > +#error "IDE_DMA_BUF_SIZE must be bigger or equal to MAX_MULT_SECTORS * 512" > +#endif > + > /* ATAPI defines */ > > #define ATAPI_PACKET_SIZE 12 > @@ -920,8 +926,8 @@ static void ide_read_dma_cb(void *opaque, int ret) > > /* launch next transfer */ > n = s->nsector; > - if (n > MAX_MULT_SECTORS) > - n = MAX_MULT_SECTORS; > + if (n > IDE_DMA_BUF_SIZE / 512) > + n = IDE_DMA_BUF_SIZE / 512; > s->io_buffer_index = 0; > s->io_buffer_size = n * 512; > #ifdef DEBUG_AIO > @@ -1028,8 +1034,8 @@ static void ide_write_dma_cb(void *opaque, int ret) > > /* launch next transfer */ > n = s->nsector; > - if (n > MAX_MULT_SECTORS) > - n = MAX_MULT_SECTORS; > + if (n > IDE_DMA_BUF_SIZE / 512) > + n = IDE_DMA_BUF_SIZE / 512; > s->io_buffer_index = 0; > s->io_buffer_size = n * 512; > > @@ -1323,8 +1329,8 @@ static void ide_atapi_cmd_read_dma_cb(void *opaque, int ret) > data_offset = 16; > } else { > n = s->packet_transfer_size >> 11; > - if (n > (MAX_MULT_SECTORS / 4)) > - n = (MAX_MULT_SECTORS / 4); > + if (n > (IDE_DMA_BUF_SIZE / 2048)) > + n = (IDE_DMA_BUF_SIZE / 2048); > s->io_buffer_size = n * 2048; > data_offset = 0; > } > @@ -2557,7 +2563,7 @@ static void ide_init2(IDEState *ide_state, > > for(i = 0; i < 2; i++) { > s = ide_state + i; > - s->io_buffer = qemu_memalign(512, MAX_MULT_SECTORS*512 + 4); > + s->io_buffer = qemu_memalign(512, IDE_DMA_BUF_SIZE + 4); > if (i == 0) > s->bs = hd0; > else > -- > 1.4.4.4 > -- .''`. Aurelien Jarno | GPG: 1024D/F1BCDB73 : :' : Debian developer | Electrical Engineer `. `' aurel32@debian.org | aurelien@aurel32.net `- people.debian.org/~aurel32 | www.aurel32.net