Skip site navigation (1)Skip section navigation (2)
Date:      Wed, 7 Jul 1999 23:06:02 -0700 (PDT)
From:      Kirk McKusick <mckusick@FreeBSD.org>
To:        cvs-committers@FreeBSD.org, cvs-all@FreeBSD.org
Subject:   cvs commit: src/sys/alpha/alpha machdep.c src/sys/i386/i386 machdep.c pmap.c src/sys/kern kern_subr.c vfs_bio.c vfs_cluster.c vfs_subr.c vfs_vnops.c src/sys/sys buf.h src/sys/ufs/ufs ufs_readwrite.c
Message-ID:  <199907080606.XAA98473@freefall.freebsd.org>

next in thread | raw e-mail | index | archive | help
mckusick    1999/07/07 23:06:01 PDT

  Modified files:
    sys/alpha/alpha      machdep.c 
    sys/i386/i386        machdep.c pmap.c 
    sys/kern             kern_subr.c vfs_bio.c vfs_cluster.c 
                         vfs_subr.c vfs_vnops.c 
    sys/sys              buf.h 
    sys/ufs/ufs          ufs_readwrite.c 
  Log:
  These changes appear to give us benefits with both small (32MB) and
  large (1G) memory machine configurations.  I was able to run 'dbench 32'
  on a 32MB system without bring the machine to a grinding halt.
  
      * buffer cache hash table now dynamically allocated.  This will
        have no effect on memory consumption for smaller systems and
        will help scale the buffer cache for larger systems.
  
      * minor enhancement to pmap_clearbit().  I noticed that
        all the calls to it used constant arguments.  Making
        it an inline allows the constants to propogate to
        deeper inlines and should produce better code.
  
      * removal of inherent vfs_ioopt support through the emplacement
        of appropriate #ifdef's, with John's permission.  If we do not
        find a use for it by the end of the year we will remove it entirely.
  
      * removal of getnewbufloops* counters & sysctl's - no longer
        necessary for debugging, getnewbuf() is now optimal.
  
      * buffer hash table functions removed from sys/buf.h and localized
        to vfs_bio.c
  
      * VFS_BIO_NEED_DIRTYFLUSH flag and support code added
        ( bwillwrite() ), allowing processes to block when too many dirty
        buffers are present in the system.
  
      * removal of a softdep test in bdwrite() that is no longer necessary
        now that bdwrite() no longer attempts to flush dirty buffers.
  
      * slight optimization added to bqrelse() - there is no reason
        to test for available buffer space on B_DELWRI buffers.
  
      * addition of reverse-scanning code to vfs_bio_awrite().
        vfs_bio_awrite() will attempt to locate clusterable areas
        in both the forward and reverse direction relative to the
        offset of the buffer passed to it.  This will probably not
        make much of a difference now, but I believe we will start
        to rely on it heavily in the future if we decide to shift
        some of the burden of the clustering closer to the actual
        I/O initiation.
  
      * Removal of the newbufcnt and lastnewbuf counters that Kirk
        added.  They do not fix any race conditions that haven't already
        been fixed by the gbincore() test done after the only call
        to getnewbuf().  getnewbuf() is a static, so there is no chance
        of it being misused by other modules.  ( Unless Kirk can think
        of a specific thing that this code fixes.  I went through it
        very carefully and didn't see anything ).
  
      * removal of VOP_ISLOCKED() check in flushbufqueues().  I do not
        think this check is necessary, the buffer should flush properly
        whether the vnode is locked or not. ( yes? ).
  
      * removal of extra arguments passed to getnewbuf() that are not
        necessary.
  
      * missed cluster_wbuild() that had to be a cluster_wbuild_wb() in
        vfs_cluster.c
  
      * vn_write() now calls bwillwrite() *PRIOR* to locking the vnode,
        which should greatly aid flushing operations in heavy load
        situations - both the pageout and update daemons will be able
        to operate more efficiently.
  
      * removal of b_usecount.  We may add it back in later but for now
        it is useless.  Prior implementations of the buffer cache never
        had enough buffers for it to be useful, and current implementations
        which make more buffers available might not benefit relative to
        the amount of sophistication required to implement a b_usecount.
        Straight LRU should work just as well, especially when most things
        are VMIO backed.  I expect that (even though John will not like
        this assumption) directories will become VMIO backed some point soon.
  
  Submitted by:	Matthew Dillon <dillon@backplane.com>
  Reviewed by:	Kirk McKusick <mckusick@mckusick.com>
  
  Revision  Changes    Path
  1.48      +2 -2      src/sys/alpha/alpha/machdep.c
  1.354     +2 -2      src/sys/i386/i386/machdep.c
  1.241     +4 -3      src/sys/i386/i386/pmap.c
  1.29      +9 -2      src/sys/kern/kern_subr.c
  1.221     +214 -167  src/sys/kern/vfs_bio.c
  1.87      +4 -13     src/sys/kern/vfs_cluster.c
  1.207     +2 -2      src/sys/kern/vfs_subr.c
  1.70      +6 -2      src/sys/kern/vfs_vnops.c
  1.76      +4 -14     src/sys/sys/buf.h
  1.59      +8 -4      src/sys/ufs/ufs/ufs_readwrite.c



To Unsubscribe: send mail to majordomo@FreeBSD.org
with "unsubscribe cvs-all" in the body of the message




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