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>