From mboxrd@z Thu Jan 1 00:00:00 1970 From: Samuel Thibault Subject: [PATCH] ioemu: improve DMA transfers Date: Thu, 20 Mar 2008 16:29:15 +0000 Message-ID: <20080320162915.GB11225@implementation.uk.xensource.com> Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="J2SCkAp4GZ/dPZZf" Return-path: Content-Disposition: inline List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Sender: xen-devel-bounces@lists.xensource.com Errors-To: xen-devel-bounces@lists.xensource.com To: xen-devel@lists.xensource.com List-Id: xen-devel@lists.xenproject.org --J2SCkAp4GZ/dPZZf Content-Type: text/plain; charset=us-ascii Content-Disposition: inline Hello, I was wondering about the not so good performances of the IDE emulation even in the case of DMA transfers. It happens that qemu is actually limiting the qemu / dom0 kernel reads/writes to 8KB at a time, which is not very big (the SCSI emulation uses 64KB). Increasing it provides a very good improvement, as the attached graph shows. On my test machine, 55MB/s can be achieved with a buffer of 128KB, to be compared to the native 65MB/s. The stubdomain approach is limited to 44KB because of the limit in the PV blk interface. Samuel ioemu: improve DMA transfers by increasing the size of DMA buffers. Signed-off-by: Samuel Thibault 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:11:03 2008 +0000 @@ -189,6 +189,15 @@ /* set to 1 set disable mult support */ #define MAX_MULT_SECTORS 16 +#ifdef CONFIG_STUBDOM +#include +#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) + n = IDE_DMA_BUF_SIZE; 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) + n = IDE_DMA_BUF_SIZE; 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 / 4)) + n = (IDE_DMA_BUF_SIZE / 4); 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*512 + 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:11:03 2008 +0000 @@ -34,9 +34,10 @@ #define SENSE_ILLEGAL_REQUEST 5 #ifdef CONFIG_STUBDOM -#define SCSI_DMA_BUF_SIZE 32768 +#include +#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 { --J2SCkAp4GZ/dPZZf Content-Type: application/postscript Content-Disposition: attachment; filename="hda-perfs.eps" Content-Transfer-Encoding: quoted-printable %!PS-Adobe-2.0 EPSF-2.0=0A%%Title: hda-perfs.eps=0A%%Creator: gnuplot 4.2 p= atchlevel 2 =0A%%CreationDate: Thu Mar 20 16:27:41 2008=0A%%DocumentFonts: = (atend)=0A%%BoundingBox: 50 50 410 302=0A%%EndComments=0A%%BeginProlog=0A/g= nudict 256 dict def=0Agnudict begin=0A%=0A% The following 6 true/false flag= s may be edited by hand if required=0A% The unit line width may also be cha= nged=0A%=0A/Color true def=0A/Blacktext false def=0A/Solid false def=0A/Das= hlength 1 def=0A/Landscape false def=0A/Level1 false def=0A/Rounded false d= ef=0A/TransparentPatterns false def=0A/gnulinewidth 5.000 def=0A/userlinewi= dth gnulinewidth def=0A%=0A/vshift -46 def=0A/dl1 {=0A 10.0 Dashlength mul= mul=0A Rounded { currentlinewidth 0.75 mul sub dup 0 le { pop 0.01 } if }= if=0A} def=0A/dl2 {=0A 10.0 Dashlength mul mul=0A Rounded { currentlinew= idth 0.75 mul add } if=0A} def=0A/hpt_ 31.5 def=0A/vpt_ 31.5 def=0A/hpt hpt= _ def=0A/vpt vpt_ def=0ALevel1 {} {=0A/SDict 10 dict def=0Asystemdict /pdfm= ark known not {=0A userdict /pdfmark systemdict /cleartomark get put=0A} i= f=0ASDict begin [=0A /Title (hda-perfs.eps)=0A /Subject (gnuplot plot)=0A= /Creator (gnuplot 4.2 patchlevel 2 )=0A /Author (Samuel Thibault,,,)=0A%= /Producer (gnuplot)=0A% /Keywords ()=0A /CreationDate (Thu Mar 20 16:27= :41 2008)=0A /DOCINFO pdfmark=0Aend=0A} ifelse=0A%=0A% Gnuplot Prolog Vers= ion 4.2 (August 2006)=0A%=0A/M {moveto} bind def=0A/L {lineto} bind def=0A/= R {rmoveto} bind def=0A/V {rlineto} bind def=0A/N {newpath moveto} bind def= =0A/Z {closepath} bind def=0A/C {setrgbcolor} bind def=0A/f {rlineto fill} = bind def=0A/vpt2 vpt 2 mul def=0A/hpt2 hpt 2 mul def=0A/Lshow {currentpoint= stroke M 0 vshift R =0A Blacktext {gsave 0 setgray show grestore} {show} i= felse} def=0A/Rshow {currentpoint stroke M dup stringwidth pop neg vshift R= =0A Blacktext {gsave 0 setgray show grestore} {show} ifelse} def=0A/Cshow {= currentpoint stroke M dup stringwidth pop -2 div vshift R =0A Blacktext {gs= ave 0 setgray show grestore} {show} ifelse} def=0A/UP {dup vpt_ mul /vpt ex= ch def hpt_ mul /hpt exch def=0A /hpt2 hpt 2 mul def /vpt2 vpt 2 mul def} = def=0A/DL {Color {setrgbcolor Solid {pop []} if 0 setdash}=0A {pop pop pop = 0 setgray Solid {pop []} if 0 setdash} ifelse} def=0A/BL {stroke userlinewi= dth 2 mul setlinewidth=0A Rounded {1 setlinejoin 1 setlinecap} if} def=0A/A= L {stroke userlinewidth 2 div setlinewidth=0A Rounded {1 setlinejoin 1 setl= inecap} if} def=0A/UL {dup gnulinewidth mul /userlinewidth exch def=0A dup = 1 lt {pop 1} if 10 mul /udl exch def} def=0A/PL {stroke userlinewidth setli= newidth=0A Rounded {1 setlinejoin 1 setlinecap} if} def=0A% Default Line co= lors=0A/LCw {1 1 1} def=0A/LCb {0 0 0} def=0A/LCa {0 0 0} def=0A/LC0 {1 0 0= } def=0A/LC1 {0 1 0} def=0A/LC2 {0 0 1} def=0A/LC3 {1 0 1} def=0A/LC4 {0 1 = 1} def=0A/LC5 {1 1 0} def=0A/LC6 {0 0 0} def=0A/LC7 {1 0.3 0} def=0A/LC8 {0= =2E5 0.5 0.5} def=0A% Default Line Types=0A/LTw {PL [] 1 setgray} def=0A/LT= b {BL [] LCb DL} def=0A/LTa {AL [1 udl mul 2 udl mul] 0 setdash LCa setrgbc= olor} def=0A/LT0 {PL [] LC0 DL} def=0A/LT1 {PL [4 dl1 2 dl2] LC1 DL} def=0A= /LT2 {PL [2 dl1 3 dl2] LC2 DL} def=0A/LT3 {PL [1 dl1 1.5 dl2] LC3 DL} def= =0A/LT4 {PL [6 dl1 2 dl2 1 dl1 2 dl2] LC4 DL} def=0A/LT5 {PL [3 dl1 3 dl2 1= dl1 3 dl2] LC5 DL} def=0A/LT6 {PL [2 dl1 2 dl2 2 dl1 6 dl2] LC6 DL} def=0A= /LT7 {PL [1 dl1 2 dl2 6 dl1 2 dl2 1 dl1 2 dl2] LC7 DL} def=0A/LT8 {PL [2 dl= 1 2 dl2 2 dl1 2 dl2 2 dl1 2 dl2 2 dl1 4 dl2] LC8 DL} def=0A/Pnt {stroke [] = 0 setdash gsave 1 setlinecap M 0 0 V stroke grestore} def=0A/Dia {stroke []= 0 setdash 2 copy vpt add M=0A hpt neg vpt neg V hpt vpt neg V=0A hpt vpt= V hpt neg vpt V closepath stroke=0A Pnt} def=0A/Pls {stroke [] 0 setdash = vpt sub M 0 vpt2 V=0A currentpoint stroke M=0A hpt neg vpt neg R hpt2 0 V= stroke=0A } def=0A/Box {stroke [] 0 setdash 2 copy exch hpt sub exch vpt a= dd M=0A 0 vpt2 neg V hpt2 0 V 0 vpt2 V=0A hpt2 neg 0 V closepath stroke= =0A Pnt} def=0A/Crs {stroke [] 0 setdash exch hpt sub exch vpt add M=0A h= pt2 vpt2 neg V currentpoint stroke M=0A hpt2 neg 0 R hpt2 vpt2 V stroke} d= ef=0A/TriU {stroke [] 0 setdash 2 copy vpt 1.12 mul add M=0A hpt neg vpt -= 1.62 mul V=0A hpt 2 mul 0 V=0A hpt neg vpt 1.62 mul V closepath stroke=0A= Pnt} def=0A/Star {2 copy Pls Crs} def=0A/BoxF {stroke [] 0 setdash exch h= pt sub exch vpt add M=0A 0 vpt2 neg V hpt2 0 V 0 vpt2 V=0A hpt2 neg 0 V c= losepath fill} def=0A/TriUF {stroke [] 0 setdash vpt 1.12 mul add M=0A hpt= neg vpt -1.62 mul V=0A hpt 2 mul 0 V=0A hpt neg vpt 1.62 mul V closepath= fill} def=0A/TriD {stroke [] 0 setdash 2 copy vpt 1.12 mul sub M=0A hpt n= eg vpt 1.62 mul V=0A hpt 2 mul 0 V=0A hpt neg vpt -1.62 mul V closepath s= troke=0A Pnt} def=0A/TriDF {stroke [] 0 setdash vpt 1.12 mul sub M=0A hpt= neg vpt 1.62 mul V=0A hpt 2 mul 0 V=0A hpt neg vpt -1.62 mul V closepath= fill} def=0A/DiaF {stroke [] 0 setdash vpt add M=0A hpt neg vpt neg V hpt= vpt neg V=0A hpt vpt V hpt neg vpt V closepath fill} def=0A/Pent {stroke = [] 0 setdash 2 copy gsave=0A translate 0 hpt M 4 {72 rotate 0 hpt L} repea= t=0A closepath stroke grestore Pnt} def=0A/PentF {stroke [] 0 setdash gsav= e=0A translate 0 hpt M 4 {72 rotate 0 hpt L} repeat=0A closepath fill gre= store} def=0A/Circle {stroke [] 0 setdash 2 copy=0A hpt 0 360 arc stroke P= nt} def=0A/CircleF {stroke [] 0 setdash hpt 0 360 arc fill} def=0A/C0 {BL [= ] 0 setdash 2 copy moveto vpt 90 450 arc} bind def=0A/C1 {BL [] 0 setdash 2= copy moveto=0A 2 copy vpt 0 90 arc closepath fill=0A vpt 0 360 arc closepa= th} bind def=0A/C2 {BL [] 0 setdash 2 copy moveto=0A 2 copy vpt 90 180 arc = closepath fill=0A vpt 0 360 arc closepath} bind def=0A/C3 {BL [] 0 setdash = 2 copy moveto=0A 2 copy vpt 0 180 arc closepath fill=0A vpt 0 360 arc close= path} bind def=0A/C4 {BL [] 0 setdash 2 copy moveto=0A 2 copy vpt 180 270 a= rc closepath fill=0A vpt 0 360 arc closepath} bind def=0A/C5 {BL [] 0 setda= sh 2 copy moveto=0A 2 copy vpt 0 90 arc=0A 2 copy moveto=0A 2 copy vpt 180 = 270 arc closepath fill=0A vpt 0 360 arc} bind def=0A/C6 {BL [] 0 setdash 2 = copy moveto=0A 2 copy vpt 90 270 arc closepath fill=0A vpt 0 360 arc closep= ath} bind def=0A/C7 {BL [] 0 setdash 2 copy moveto=0A 2 copy vpt 0 270 arc = closepath fill=0A vpt 0 360 arc closepath} bind def=0A/C8 {BL [] 0 setdash = 2 copy moveto=0A 2 copy vpt 270 360 arc closepath fill=0A vpt 0 360 arc clo= sepath} bind def=0A/C9 {BL [] 0 setdash 2 copy moveto=0A 2 copy vpt 270 450= arc closepath fill=0A vpt 0 360 arc closepath} bind def=0A/C10 {BL [] 0 se= tdash 2 copy 2 copy moveto vpt 270 360 arc closepath fill=0A 2 copy moveto= =0A 2 copy vpt 90 180 arc closepath fill=0A vpt 0 360 arc closepath} bind d= ef=0A/C11 {BL [] 0 setdash 2 copy moveto=0A 2 copy vpt 0 180 arc closepath = fill=0A 2 copy moveto=0A 2 copy vpt 270 360 arc closepath fill=0A vpt 0 360= arc closepath} bind def=0A/C12 {BL [] 0 setdash 2 copy moveto=0A 2 copy vp= t 180 360 arc closepath fill=0A vpt 0 360 arc closepath} bind def=0A/C13 {B= L [] 0 setdash 2 copy moveto=0A 2 copy vpt 0 90 arc closepath fill=0A 2 cop= y moveto=0A 2 copy vpt 180 360 arc closepath fill=0A vpt 0 360 arc closepat= h} bind def=0A/C14 {BL [] 0 setdash 2 copy moveto=0A 2 copy vpt 90 360 arc = closepath fill=0A vpt 0 360 arc} bind def=0A/C15 {BL [] 0 setdash 2 copy vp= t 0 360 arc closepath fill=0A vpt 0 360 arc closepath} bind def=0A/Rec {new= path 4 2 roll moveto 1 index 0 rlineto 0 exch rlineto=0A neg 0 rlineto clos= epath} bind def=0A/Square {dup Rec} bind def=0A/Bsquare {vpt sub exch vpt s= ub exch vpt2 Square} bind def=0A/S0 {BL [] 0 setdash 2 copy moveto 0 vpt rl= ineto BL Bsquare} bind def=0A/S1 {BL [] 0 setdash 2 copy vpt Square fill Bs= quare} bind def=0A/S2 {BL [] 0 setdash 2 copy exch vpt sub exch vpt Square = fill Bsquare} bind def=0A/S3 {BL [] 0 setdash 2 copy exch vpt sub exch vpt2= vpt Rec fill Bsquare} bind def=0A/S4 {BL [] 0 setdash 2 copy exch vpt sub = exch vpt sub vpt Square fill Bsquare} bind def=0A/S5 {BL [] 0 setdash 2 cop= y 2 copy vpt Square fill=0A exch vpt sub exch vpt sub vpt Square fill Bsqua= re} bind def=0A/S6 {BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt vp= t2 Rec fill Bsquare} bind def=0A/S7 {BL [] 0 setdash 2 copy exch vpt sub ex= ch vpt sub vpt vpt2 Rec fill=0A 2 copy vpt Square fill Bsquare} bind def=0A= /S8 {BL [] 0 setdash 2 copy vpt sub vpt Square fill Bsquare} bind def=0A/S9= {BL [] 0 setdash 2 copy vpt sub vpt vpt2 Rec fill Bsquare} bind def=0A/S10= {BL [] 0 setdash 2 copy vpt sub vpt Square fill 2 copy exch vpt sub exch v= pt Square fill=0A Bsquare} bind def=0A/S11 {BL [] 0 setdash 2 copy vpt sub = vpt Square fill 2 copy exch vpt sub exch vpt2 vpt Rec fill=0A Bsquare} bind= def=0A/S12 {BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt2 vpt Rec = fill Bsquare} bind def=0A/S13 {BL [] 0 setdash 2 copy exch vpt sub exch vpt= sub vpt2 vpt Rec fill=0A 2 copy vpt Square fill Bsquare} bind def=0A/S14 {= BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt2 vpt Rec fill=0A 2 cop= y exch vpt sub exch vpt Square fill Bsquare} bind def=0A/S15 {BL [] 0 setda= sh 2 copy Bsquare fill Bsquare} bind def=0A/D0 {gsave translate 45 rotate 0= 0 S0 stroke grestore} bind def=0A/D1 {gsave translate 45 rotate 0 0 S1 str= oke grestore} bind def=0A/D2 {gsave translate 45 rotate 0 0 S2 stroke grest= ore} bind def=0A/D3 {gsave translate 45 rotate 0 0 S3 stroke grestore} bind= def=0A/D4 {gsave translate 45 rotate 0 0 S4 stroke grestore} bind def=0A/D= 5 {gsave translate 45 rotate 0 0 S5 stroke grestore} bind def=0A/D6 {gsave = translate 45 rotate 0 0 S6 stroke grestore} bind def=0A/D7 {gsave translate= 45 rotate 0 0 S7 stroke grestore} bind def=0A/D8 {gsave translate 45 rotat= e 0 0 S8 stroke grestore} bind def=0A/D9 {gsave translate 45 rotate 0 0 S9 = stroke grestore} bind def=0A/D10 {gsave translate 45 rotate 0 0 S10 stroke = grestore} bind def=0A/D11 {gsave translate 45 rotate 0 0 S11 stroke grestor= e} bind def=0A/D12 {gsave translate 45 rotate 0 0 S12 stroke grestore} bind= def=0A/D13 {gsave translate 45 rotate 0 0 S13 stroke grestore} bind def=0A= /D14 {gsave translate 45 rotate 0 0 S14 stroke grestore} bind def=0A/D15 {g= save translate 45 rotate 0 0 S15 stroke grestore} bind def=0A/DiaE {stroke = [] 0 setdash vpt add M=0A hpt neg vpt neg V hpt vpt neg V=0A hpt vpt V hp= t neg vpt V closepath stroke} def=0A/BoxE {stroke [] 0 setdash exch hpt sub= exch vpt add M=0A 0 vpt2 neg V hpt2 0 V 0 vpt2 V=0A hpt2 neg 0 V closepa= th stroke} def=0A/TriUE {stroke [] 0 setdash vpt 1.12 mul add M=0A hpt neg= vpt -1.62 mul V=0A hpt 2 mul 0 V=0A hpt neg vpt 1.62 mul V closepath str= oke} def=0A/TriDE {stroke [] 0 setdash vpt 1.12 mul sub M=0A hpt neg vpt 1= =2E62 mul V=0A hpt 2 mul 0 V=0A hpt neg vpt -1.62 mul V closepath stroke}= def=0A/PentE {stroke [] 0 setdash gsave=0A translate 0 hpt M 4 {72 rotate= 0 hpt L} repeat=0A closepath stroke grestore} def=0A/CircE {stroke [] 0 s= etdash =0A hpt 0 360 arc stroke} def=0A/Opaque {gsave closepath 1 setgray = fill grestore 0 setgray closepath} def=0A/DiaW {stroke [] 0 setdash vpt add= M=0A hpt neg vpt neg V hpt vpt neg V=0A hpt vpt V hpt neg vpt V Opaque s= troke} def=0A/BoxW {stroke [] 0 setdash exch hpt sub exch vpt add M=0A 0 v= pt2 neg V hpt2 0 V 0 vpt2 V=0A hpt2 neg 0 V Opaque stroke} def=0A/TriUW {s= troke [] 0 setdash vpt 1.12 mul add M=0A hpt neg vpt -1.62 mul V=0A hpt 2= mul 0 V=0A hpt neg vpt 1.62 mul V Opaque stroke} def=0A/TriDW {stroke [] = 0 setdash vpt 1.12 mul sub M=0A hpt neg vpt 1.62 mul V=0A hpt 2 mul 0 V= =0A hpt neg vpt -1.62 mul V Opaque stroke} def=0A/PentW {stroke [] 0 setda= sh gsave=0A translate 0 hpt M 4 {72 rotate 0 hpt L} repeat=0A Opaque stro= ke grestore} def=0A/CircW {stroke [] 0 setdash =0A hpt 0 360 arc Opaque st= roke} def=0A/BoxFill {gsave Rec 1 setgray fill grestore} def=0A/Density {= =0A /Fillden exch def=0A currentrgbcolor=0A /ColB exch def /ColG exch de= f /ColR exch def=0A /ColR ColR Fillden mul Fillden sub 1 add def=0A /ColG= ColG Fillden mul Fillden sub 1 add def=0A /ColB ColB Fillden mul Fillden = sub 1 add def=0A ColR ColG ColB setrgbcolor} def=0A/BoxColFill {gsave Rec = PolyFill} def=0A/PolyFill {gsave Density fill grestore grestore} def=0A/h {= rlineto rlineto rlineto gsave fill grestore} bind def=0A%=0A% PostScript Le= vel 1 Pattern Fill routine for rectangles=0A% Usage: x y w h s a XX Pattern= Fill=0A% x,y =3D lower left corner of box to be filled=0A% w,h =3D width an= d height of box=0A% a =3D angle in degrees between lines and x-axis=0A% = XX =3D 0/1 for no/yes cross-hatch=0A%=0A/PatternFill {gsave /PFa [ 9 2 roll= ] def=0A PFa 0 get PFa 2 get 2 div add PFa 1 get PFa 3 get 2 div add tran= slate=0A PFa 2 get -2 div PFa 3 get -2 div PFa 2 get PFa 3 get Rec=0A gsa= ve 1 setgray fill grestore clip=0A currentlinewidth 0.5 mul setlinewidth= =0A /PFs PFa 2 get dup mul PFa 3 get dup mul add sqrt def=0A 0 0 M PFa 5 = get rotate PFs -2 div dup translate=0A 0 1 PFs PFa 4 get div 1 add floor c= vi=0A {PFa 4 get mul 0 M 0 PFs V} for=0A 0 PFa 6 get ne {=0A 0 1 PFs PFa 4= get div 1 add floor cvi=0A {PFa 4 get mul 0 2 1 roll M PFs 0 V} for=0A } i= f=0A stroke grestore} def=0A%=0A/languagelevel where=0A {pop languagelevel= } {1} ifelse=0A 2 lt=0A {/InterpretLevel1 true def}=0A {/InterpretLevel1 Le= vel1 def}=0A ifelse=0A%=0A% PostScript level 2 pattern fill definitions=0A%= =0A/Level2PatternFill {=0A/Tile8x8 {/PaintType 2 /PatternType 1 /TilingType= 1 /BBox [0 0 8 8] /XStep 8 /YStep 8}=0A bind def=0A/KeepColor {currentrgbc= olor [/Pattern /DeviceRGB] setcolorspace} bind def=0A<< Tile8x8=0A /PaintPr= oc {0.5 setlinewidth pop 0 0 M 8 8 L 0 8 M 8 0 L stroke} =0A>> matrix makep= attern=0A/Pat1 exch def=0A<< Tile8x8=0A /PaintProc {0.5 setlinewidth pop 0 = 0 M 8 8 L 0 8 M 8 0 L stroke=0A 0 4 M 4 8 L 8 4 L 4 0 L 0 4 L stroke}=0A>> = matrix makepattern=0A/Pat2 exch def=0A<< Tile8x8=0A /PaintProc {0.5 setline= width pop 0 0 M 0 8 L=0A 8 8 L 8 0 L 0 0 L fill}=0A>> matrix makepattern=0A= /Pat3 exch def=0A<< Tile8x8=0A /PaintProc {0.5 setlinewidth pop -4 8 M 8 -4= L=0A 0 12 M 12 0 L stroke}=0A>> matrix makepattern=0A/Pat4 exch def=0A<< T= ile8x8=0A /PaintProc {0.5 setlinewidth pop -4 0 M 8 12 L=0A 0 -4 M 12 8 L s= troke}=0A>> matrix makepattern=0A/Pat5 exch def=0A<< Tile8x8=0A /PaintProc = {0.5 setlinewidth pop -2 8 M 4 -4 L=0A 0 12 M 8 -4 L 4 12 M 10 0 L stroke}= =0A>> matrix makepattern=0A/Pat6 exch def=0A<< Tile8x8=0A /PaintProc {0.5 s= etlinewidth pop -2 0 M 4 12 L=0A 0 -4 M 8 12 L 4 -4 M 10 8 L stroke}=0A>> m= atrix makepattern=0A/Pat7 exch def=0A<< Tile8x8=0A /PaintProc {0.5 setlinew= idth pop 8 -2 M -4 4 L=0A 12 0 M -4 8 L 12 4 M 0 10 L stroke}=0A>> matrix m= akepattern=0A/Pat8 exch def=0A<< Tile8x8=0A /PaintProc {0.5 setlinewidth po= p 0 -2 M 12 4 L=0A -4 0 M 12 8 L -4 4 M 8 10 L stroke}=0A>> matrix makepatt= ern=0A/Pat9 exch def=0A/Pattern1 {PatternBgnd KeepColor Pat1 setpattern} bi= nd def=0A/Pattern2 {PatternBgnd KeepColor Pat2 setpattern} bind def=0A/Patt= ern3 {PatternBgnd KeepColor Pat3 setpattern} bind def=0A/Pattern4 {PatternB= gnd KeepColor Landscape {Pat5} {Pat4} ifelse setpattern} bind def=0A/Patter= n5 {PatternBgnd KeepColor Landscape {Pat4} {Pat5} ifelse setpattern} bind d= ef=0A/Pattern6 {PatternBgnd KeepColor Landscape {Pat9} {Pat6} ifelse setpat= tern} bind def=0A/Pattern7 {PatternBgnd KeepColor Landscape {Pat8} {Pat7} i= felse setpattern} bind def=0A} def=0A%=0A%=0A%End of PostScript Level 2 cod= e=0A%=0A/PatternBgnd {=0A TransparentPatterns {} {gsave 1 setgray fill gre= store} ifelse=0A} def=0A%=0A% Substitute for Level 2 pattern fill codes wit= h=0A% grayscale if Level 2 support is not selected.=0A%=0A/Level1PatternFil= l {=0A/Pattern1 {0.250 Density} bind def=0A/Pattern2 {0.500 Density} bind d= ef=0A/Pattern3 {0.750 Density} bind def=0A/Pattern4 {0.125 Density} bind de= f=0A/Pattern5 {0.375 Density} bind def=0A/Pattern6 {0.625 Density} bind def= =0A/Pattern7 {0.875 Density} bind def=0A} def=0A%=0A% Now test for support = of Level 2 code=0A%=0ALevel1 {Level1PatternFill} {Level2PatternFill} ifelse= =0A%=0A/Symbol-Oblique /Symbol findfont [1 0 .167 1 0 0] makefont=0Adup len= gth dict begin {1 index /FID eq {pop pop} {def} ifelse} forall=0Acurrentdic= t end definefont pop=0A/MFshow {=0A { dup 5 get 3 ge=0A { 5 get 3 eq = {gsave} {grestore} ifelse }=0A {dup dup 0 get findfont exch 1 get scale= font setfont=0A [ currentpoint ] exch dup 2 get 0 exch R dup 5 get 2 ne= {dup dup 6=0A get exch 4 get {show} {stringwidth pop 0 R} ifelse }if d= up 5 get 0 eq=0A {dup 3 get {2 get neg 0 exch R pop} {pop aload pop M} = ifelse} {dup 5=0A get 1 eq {dup 2 get exch dup 3 get exch 6 get stringw= idth pop -2 div=0A dup 0 R} {dup 6 get stringwidth pop -2 div 0 R 6 get= =0A show 2 index {aload pop M neg 3 -1 roll neg R pop pop} {pop pop pop= =0A pop aload pop M} ifelse }ifelse }ifelse }=0A ifelse }=0A fora= ll} bind def=0A/MFwidth {0 exch { dup 5 get 3 ge { 5 get 3 eq { 0 } { pop }= ifelse }=0A {dup 3 get{dup dup 0 get findfont exch 1 get scalefont setfont= =0A 6 get stringwidth pop add} {pop} ifelse} ifelse} forall} bind def= =0A/MLshow { currentpoint stroke M=0A 0 exch R=0A Blacktext {gsave 0 setg= ray MFshow grestore} {MFshow} ifelse } bind def=0A/MRshow { currentpoint st= roke M=0A exch dup MFwidth neg 3 -1 roll R=0A Blacktext {gsave 0 setgray = MFshow grestore} {MFshow} ifelse } bind def=0A/MCshow { currentpoint stroke= M=0A exch dup MFwidth -2 div 3 -1 roll R=0A Blacktext {gsave 0 setgray M= Fshow grestore} {MFshow} ifelse } bind def=0A/XYsave { [( ) 1 2 true fal= se 3 ()] } bind def=0A/XYrestore { [( ) 1 2 true false 4 ()] } bind def=0Ae= nd=0A%%EndProlog=0Agnudict begin=0Agsave=0A50 50 translate=0A0.050 0.050 sc= ale=0A0 setgray=0Anewpath=0A(Helvetica) findfont 140 scalefont setfont=0A1.= 000 UL=0ALTb=0A714 420 M=0A63 0 V=0A6185 0 R=0A-63 0 V=0Astroke=0A630 420 M= =0A[ [(Helvetica) 140.0 0.0 true true 0 ( 10)]=0A] -46.7 MRshow=0A1.000 UL= =0ALTb=0A714 1760 M=0A31 0 V=0A6217 0 R=0A-31 0 V=0A714 2544 M=0A31 0 V=0A6= 217 0 R=0A-31 0 V=0A714 3100 M=0A31 0 V=0A6217 0 R=0A-31 0 V=0A714 3532 M= =0A31 0 V=0A6217 0 R=0A-31 0 V=0A714 3884 M=0A31 0 V=0A6217 0 R=0A-31 0 V= =0A714 4182 M=0A31 0 V=0A6217 0 R=0A-31 0 V=0A714 4441 M=0A31 0 V=0A6217 0 = R=0A-31 0 V=0A714 4668 M=0A31 0 V=0A6217 0 R=0A-31 0 V=0A714 4872 M=0A63 0 = V=0A6185 0 R=0A-63 0 V=0Astroke=0A630 4872 M=0A[ [(Helvetica) 140.0 0.0 tru= e true 0 ( 100)]=0A] -46.7 MRshow=0A1.000 UL=0ALTb=0A714 420 M=0A0 63 V=0A0= 4389 R=0A0 -63 V=0Astroke=0A714 280 M=0A[ [(Helvetica) 140.0 0.0 true true= 0 ( 1)]=0A] -46.7 MCshow=0A1.000 UL=0ALTb=0A1341 420 M=0A0 31 V=0A0 4421 R= =0A0 -31 V=0A1708 420 M=0A0 31 V=0A0 4421 R=0A0 -31 V=0A1968 420 M=0A0 31 V= =0A0 4421 R=0A0 -31 V=0A2170 420 M=0A0 31 V=0A0 4421 R=0A0 -31 V=0A2335 420= M=0A0 31 V=0A0 4421 R=0A0 -31 V=0A2474 420 M=0A0 31 V=0A0 4421 R=0A0 -31 V= =0A2595 420 M=0A0 31 V=0A0 4421 R=0A0 -31 V=0A2701 420 M=0A0 31 V=0A0 4421 = R=0A0 -31 V=0A2797 420 M=0A0 63 V=0A0 4389 R=0A0 -63 V=0Astroke=0A2797 280 = M=0A[ [(Helvetica) 140.0 0.0 true true 0 ( 10)]=0A] -46.7 MCshow=0A1.000 UL= =0ALTb=0A3424 420 M=0A0 31 V=0A0 4421 R=0A0 -31 V=0A3790 420 M=0A0 31 V=0A0= 4421 R=0A0 -31 V=0A4051 420 M=0A0 31 V=0A0 4421 R=0A0 -31 V=0A4252 420 M= =0A0 31 V=0A0 4421 R=0A0 -31 V=0A4417 420 M=0A0 31 V=0A0 4421 R=0A0 -31 V= =0A4557 420 M=0A0 31 V=0A0 4421 R=0A0 -31 V=0A4678 420 M=0A0 31 V=0A0 4421 = R=0A0 -31 V=0A4784 420 M=0A0 31 V=0A0 4421 R=0A0 -31 V=0A4879 420 M=0A0 63 = V=0A0 4389 R=0A0 -63 V=0Astroke=0A4879 280 M=0A[ [(Helvetica) 140.0 0.0 tru= e true 0 ( 100)]=0A] -46.7 MCshow=0A1.000 UL=0ALTb=0A5506 420 M=0A0 31 V=0A= 0 4421 R=0A0 -31 V=0A5873 420 M=0A0 31 V=0A0 4421 R=0A0 -31 V=0A6133 420 M= =0A0 31 V=0A0 4421 R=0A0 -31 V=0A6335 420 M=0A0 31 V=0A0 4421 R=0A0 -31 V= =0A6500 420 M=0A0 31 V=0A0 4421 R=0A0 -31 V=0A6639 420 M=0A0 31 V=0A0 4421 = R=0A0 -31 V=0A6760 420 M=0A0 31 V=0A0 4421 R=0A0 -31 V=0A6867 420 M=0A0 31 = V=0A0 4421 R=0A0 -31 V=0A6962 420 M=0A0 63 V=0A0 4389 R=0A0 -63 V=0Astroke= =0A6962 280 M=0A[ [(Helvetica) 140.0 0.0 true true 0 ( 1000)]=0A] -46.7 MCs= how=0A1.000 UL=0ALTb=0A1.000 UL=0ALTb=0A714 4872 N=0A714 420 L=0A6248 0 V= =0A0 4452 V=0A-6248 0 V=0AZ stroke=0ALCb setrgbcolor=0A140 2646 M=0Acurrent= point gsave translate 90 rotate 0 0 moveto=0A[ [(Helvetica) 140.0 0.0 true = true 0 (MB/s)]=0A] -46.7 MCshow=0Agrestore=0ALTb=0ALCb setrgbcolor=0A3838 7= 0 M=0A[ [(Helvetica) 140.0 0.0 true true 0 (DMA buf size \(KB\))]=0A] -46.7= MCshow=0ALTb=0A1.000 UP=0A1.000 UL=0ALTb=0A1.000 UL=0ALT0=0ALTb=0A6311 833= M=0A[ [(Helvetica) 140.0 0.0 true true 0 (dom0 qemu)]=0A] -46.7 MRshow=0AL= T0=0A6395 833 M=0A399 0 V=0A1341 604 M=0A627 1057 V=0A627 679 V=0A627 610 V= =0A627 378 V=0A627 242 V=0A627 146 V=0A627 0 V=0Astroke=0ALT1=0ALTb=0A6311 = 693 M=0A[ [(Helvetica) 140.0 0.0 true true 0 (stubdom qemu)]=0A] -46.7 MRsh= ow=0ALT1=0A6395 693 M=0A399 0 V=0A1341 773 M=0A627 1082 V=0A367 412 V=0A260= 341 V=0A367 342 V=0A260 245 V=0A367 176 V=0A260 199 V=0A288 74 V=0Astroke= =0ALT2=0ALTb=0A6311 553 M=0A[ [(Helvetica) 140.0 0.0 true true 0 (native)]= =0A] -46.7 MRshow=0ALT2=0A6395 553 M=0A399 0 V=0A1341 4039 M=0A4389 0 V=0As= troke=0ALTb=0A714 4872 N=0A714 420 L=0A6248 0 V=0A0 4452 V=0A-6248 0 V=0AZ = stroke=0A1.000 UP=0A1.000 UL=0ALTb=0Astroke=0Agrestore=0Aend=0Ashowpage=0A%= %Trailer=0A%%DocumentFonts: Helvetica=0A --J2SCkAp4GZ/dPZZf Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Content-Disposition: inline _______________________________________________ Xen-devel mailing list Xen-devel@lists.xensource.com http://lists.xensource.com/xen-devel --J2SCkAp4GZ/dPZZf--