[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PATCH] Improve DMA transfers by increasing the buffer size
From: |
Ian Jackson |
Subject: |
[Qemu-devel] [PATCH] Improve DMA transfers by increasing the buffer size. |
Date: |
Wed, 26 Mar 2008 16:35:00 +0000 |
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 <address@hidden>
Signed-off-by: Samuel Thibault <address@hidden>
>From 4eaa19458262cce92f0b891c51433ccee0a19b79 Mon Sep 17 00:00:00 2001
From: Ian Jackson <address@hidden>
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 <address@hidden>
Signed-off-by: Samuel Thibault <address@hidden>
---
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
+
+#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
- [Qemu-devel] [PATCH] Improve DMA transfers by increasing the buffer size.,
Ian Jackson <=