DragonFly BSD
DragonFly commits List (threaded) for 2004-04
[Date Prev][Date Next]  [Thread Prev][Thread Next]  [Date Index][Thread Index]

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


From: Matthew Dillon <dillon@xxxxxxxxxxxxxxxxxxxxxxx>
Date: Thu, 1 Apr 2004 09:58:09 -0800 (PST)

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



[Date Prev][Date Next]  [Thread Prev][Thread Next]  [Date Index][Thread Index]