WARNING - OLD ARCHIVES

This is an archived copy of the Xen.org mailing list, which we have preserved to ensure that existing links to archives are not broken. The live archive, which contains the latest emails, can be found at http://lists.xen.org/
   
 
 
Xen 
 
Home Products Support Community News
 
   
 

xen-devel

[Xen-devel] Re: [PATCH] ioemu: improve DMA transfers

Samuel Thibault, le Thu 20 Mar 2008 16:31:45 +0000, a écrit :
> Ooops, don't apply it, my late conversion from sectors to bytes went
> wrong (but the graph it correct).

This one is correct

Samuel



ioemu: improve DMA transfers
by increasing the size of DMA buffers.

Signed-off-by: Samuel Thibault <samuel.thibault@xxxxxxxxxxxxx>

diff -r dc1fe3bd1393 tools/ioemu/hw/ide.c
--- a/tools/ioemu/hw/ide.c      Thu Mar 20 10:53:10 2008 +0000
+++ b/tools/ioemu/hw/ide.c      Thu Mar 20 16:33:05 2008 +0000
@@ -189,6 +189,15 @@
 
 /* set to 1 set disable mult support */
 #define MAX_MULT_SECTORS 16
+#ifdef CONFIG_STUBDOM
+#include <xen/io/blkif.h>
+#define IDE_DMA_BUF_SIZE (BLKIF_MAX_SEGMENTS_PER_REQUEST * TARGET_PAGE_SIZE)
+#else
+#define IDE_DMA_BUF_SIZE 131072
+#endif
+#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 */
 
@@ -932,8 +941,8 @@
 
     /* 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
@@ -1041,8 +1050,8 @@
 
     /* 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;
 
@@ -1336,8 +1345,8 @@
         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;
     }
@@ -2306,7 +2315,7 @@
 
     for(i = 0; i < 2; i++) {
         s = ide_state + i;
-        s->io_buffer = qemu_memalign(getpagesize(), MAX_MULT_SECTORS*512 + 4);
+        s->io_buffer = qemu_memalign(getpagesize(), IDE_DMA_BUF_SIZE + 4);
         if (i == 0)
             s->bs = hd0;
         else
--- a/tools/ioemu/hw/scsi-disk.c        Thu Mar 20 10:53:10 2008 +0000
+++ b/tools/ioemu/hw/scsi-disk.c        Thu Mar 20 16:33:05 2008 +0000
@@ -34,9 +34,10 @@
 #define SENSE_ILLEGAL_REQUEST 5
 
 #ifdef CONFIG_STUBDOM
-#define SCSI_DMA_BUF_SIZE    32768
+#include <xen/io/blkif.h>
+#define SCSI_DMA_BUF_SIZE    (BLKIF_MAX_SEGMENTS_PER_REQUEST * 
TARGET_PAGE_SIZE)
 #else
-#define SCSI_DMA_BUF_SIZE    65536
+#define SCSI_DMA_BUF_SIZE    131072
 #endif
 
 typedef struct SCSIRequest {

_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-devel

<Prev in Thread] Current Thread [Next in Thread>