cvs commit: src/sys/amd64/amd64 uio_machdep.c src/sys/conf files.amd64 src/sys/sys uio.h

Alan Cox alc at cs.rice.edu
Sat Mar 20 13:37:53 PST 2004


On Sat, Mar 20, 2004 at 12:50:12PM -0800, Nate Lawson wrote:
> On Sat, 20 Mar 2004, Alan Cox wrote:
> >   FreeBSD src repository
> >
> >   Modified files:
> >     sys/conf             files.amd64
> >     sys/sys              uio.h
> >   Added files:
> >     sys/amd64/amd64      uio_machdep.c
> >   Log:
> >   Introduce uiomove_fromphys().  This is a variant of uiomove() that takes
> >   a collection of physical pages as the source.  On amd64 it is implemented
> >   using the direct virtual-to-physical map.
> >
> >   Revision  Changes    Path
> >   1.1       +131 -0    src/sys/amd64/amd64/uio_machdep.c (new)
> >   1.30      +1 -0      src/sys/conf/files.amd64
> >   1.34      +3 -0      src/sys/sys/uio.h
> 
> Excellent.  FreeBSD hits the 21st century, where we flip back to P->V.
> 

The funny part is that I'm seeing even greater performance gains
from using this API on a 32-bit P4 Xeon.  There, we don't have
a direct virtual-to-physical mapping, so I use sf_buf_alloc() and
sf_buf_free().  For a prototype pipe reimplementation that eliminates
the ephemeral mappings and uses uiomove_fromphys(), the lmbench
pipe bandwidth is going from ~1GB/sec to ~1.7GB/sec.  This surprised
me at first, but it's consistent with Jeff R's reported numbers
for how expensive invlpg is on P4s.

Regards,
Alan


More information about the cvs-src mailing list