Skip site navigation (1)Skip section navigation (2)
Date:      Sat, 20 Mar 2004 15:37:51 -0600
From:      Alan Cox <alc@cs.rice.edu>
To:        Nate Lawson <nate@root.org>
Cc:        cvs-all@FreeBSD.org
Subject:   Re: cvs commit: src/sys/amd64/amd64 uio_machdep.c src/sys/conf files.amd64 src/sys/sys uio.h
Message-ID:  <20040320213751.GW6197@cs.rice.edu>
In-Reply-To: <20040320124836.Q23876@root.org>
References:  <20040320193633.8E25416A553@hub.freebsd.org> <20040320124836.Q23876@root.org>

next in thread | previous in thread | raw e-mail | index | archive | help
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



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20040320213751.GW6197>