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>

index | next in thread | previous in thread | raw e-mail

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


home | help

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