cvs commit: src/sys/i386/i386 pmap.c uio_machdep.c src/sys/kern kern_sfbuf.c kern_xio.c sys_pipe.c uipc_syscalls.c src/sys/sys pipe.h sfbuf.h src/sys/vm pmap.h
Matthew Dillon
dillon at crater.dragonflybsd.org
Thu Apr 1 09:58:51 PST 2004
dillon 2004/04/01 09:58:09 PST
DragonFly src repository
Modified files:
sys/i386/i386 pmap.c uio_machdep.c
sys/kern kern_sfbuf.c kern_xio.c sys_pipe.c
uipc_syscalls.c
sys/sys pipe.h sfbuf.h
sys/vm pmap.h
Log:
Enhance the pmap_kenter*() API and friends, separating out entries which
only need invalidation on the local cpu against entries which need invalidation
across the entire system, and provide a synchronization abstraction.
Enhance sf_buf_alloc() and friends to allow the caller to specify whether the
sf_buf's kernel mapping is going to be used on just the current cpu or
whether it needs to be valid across all cpus. This is done by maintaining
a cpumask of known-synchronized cpus in the struct sf_buf
Optimize sf_buf_alloc() and friends by removing both TAILQ operations in the
critical path. TAILQ operations to remove the sf_buf from the free queue
are now done in a lazy fashion. Most sf_buf operations allocate a buf,
work on it, and free it, so why waste time moving the sf_buf off the freelist
if we are only going to move back onto the free list a microsecond later?
Fix a bug in sf_buf_alloc() code as it was being used by the PIPE code.
sf_buf_alloc() was unconditionally using PCATCH in its tsleep() call, which
is only correct when called from the sendfile() interface.
Optimize the PIPE code to require only local cpu_invlpg()'s when mapping
sf_buf's, greatly reducing the number of IPIs required. On a DELL-2550,
a pipe test which explicitly blows out the sf_buf caching by using huge
buffers improves from 350 to 550 MBytes/sec. However, note that buildworld
times were not found to have changed.
Replace the PIPE code's custom 'struct pipemapping' structure with a
struct xio and use the XIO API functions rather then its own.
Revision Changes Path
1.33 +44 -7 src/sys/i386/i386/pmap.c
1.3 +1 -1 src/sys/i386/i386/uio_machdep.c
1.3 +80 -22 src/sys/kern/kern_sfbuf.c
1.3 +2 -2 src/sys/kern/kern_xio.c
1.17 +59 -101 src/sys/kern/sys_pipe.c
1.30 +1 -1 src/sys/kern/uipc_syscalls.c
1.5 +16 -24 src/sys/sys/pipe.h
1.4 +10 -1 src/sys/sys/sfbuf.h
1.10 +6 -2 src/sys/vm/pmap.h
http://www.dragonflybsd.org/cvsweb/src/sys/i386/i386/pmap.c.diff?r1=1.32&r2=1.33&f=h
http://www.dragonflybsd.org/cvsweb/src/sys/i386/i386/uio_machdep.c.diff?r1=1.2&r2=1.3&f=h
http://www.dragonflybsd.org/cvsweb/src/sys/kern/kern_sfbuf.c.diff?r1=1.2&r2=1.3&f=h
http://www.dragonflybsd.org/cvsweb/src/sys/kern/kern_xio.c.diff?r1=1.2&r2=1.3&f=h
http://www.dragonflybsd.org/cvsweb/src/sys/kern/sys_pipe.c.diff?r1=1.16&r2=1.17&f=h
http://www.dragonflybsd.org/cvsweb/src/sys/kern/uipc_syscalls.c.diff?r1=1.29&r2=1.30&f=h
http://www.dragonflybsd.org/cvsweb/src/sys/sys/pipe.h.diff?r1=1.4&r2=1.5&f=h
http://www.dragonflybsd.org/cvsweb/src/sys/sys/sfbuf.h.diff?r1=1.3&r2=1.4&f=h
http://www.dragonflybsd.org/cvsweb/src/sys/vm/pmap.h.diff?r1=1.9&r2=1.10&f=h
More information about the Commits
mailing list