1. 04 Jul, 2002 3 commits
    • Andrew Morton's avatar
      [PATCH] per-cpu buffer_head cache · e7ae11b6
      Andrew Morton authored
      ext2 and ext3 implement a custom LRU cache of buffer_heads - the eight
      most-recently-used inode bitmap buffers and the eight MRU block bitmap
      buffers.
      
      I don't like them, for a number of reasons:
      
      - The code is duplicated between filesystems
      
      - The functionality is unavailable to other filesystems
      
      - The LRU only applies to bitmap buffers.  And not, say, indirects.
      
      - The LRUs are subtly dependent upon lock_super() for protection:
        without lock_super protection a bitmap could be evicted and freed
        while in use.
      
        And removing this dependence on lock_super() gets us one step on
        the way toward getting that semaphore out of the ext2 block allocator -
        it causes significant contention under some loads and should be a
        spinlock.
      
      - The LRUs pin 64 kbytes per mounted filesystem.
      
      Now, we could just delete those LRUs and rely on the VM to manage the
      memory.  But that would introduce significant lock contention in
      __find_get_block - the blockdev mapping's private_lock and page_lock
      are heavily used.
      
      So this patch introduces a transparent per-CPU bh lru which is hidden
      inside __find_get_block(), __getblk() and __bread().  It is designed to
      shorten code paths and to reduce lock contention.  It uses a seven-slot
      LRU.  It achieves a 99% hit rate in `dbench 64'.  It provides benefit
      to all filesystems.
      
      The next patches remove the open-coded LRUs from ext2 and ext3.
      
      Taken together, these patches are a code cleanup (300-400 lines gone),
      and they reduce lock contention.  Anton tested these patches on the
      32-way and demonstrated a throughput improvement of up to 15% on
      RAM-only dbench runs.  See http://samba.org/~anton/linux/2.5.24/dbench/
      
      Most of this benefit is from avoiding find_get_page() on the blockdev
      mapping.  Because the generic LRU copes with indirect blocks as well as
      bitmaps.
      e7ae11b6
    • Andrew Morton's avatar
      [PATCH] Fix 3c59x driver for some 3c566B's · fbaf74c8
      Andrew Morton authored
      Fix from Rahul Karnik and Donald Becker - some new 3c566B mini-PCI NICs
      refuse to power up the transceiver unless we tickle an undocumented bit
      in an undocumented register.  They worked this out by before-and-after
      diffing of the register contents when it was set up by the Windows
      driver.
      fbaf74c8
    • Andrew Morton's avatar
      [PATCH] handle BIO allocation failures in swap_writepage() · 27c02b00
      Andrew Morton authored
      If allocation of a BIO for swap writeout fails, mark the page dirty
      again to save it from eviction.
      27c02b00
  2. 20 Jun, 2002 37 commits