1. 30 Apr, 2008 3 commits
  2. 05 Dec, 2007 1 commit
  3. 17 Oct, 2007 3 commits
    • Peter Zijlstra's avatar
      mm: per device dirty threshold · 04fbfdc1
      Peter Zijlstra authored
      
      Scale writeback cache per backing device, proportional to its writeout speed.
      
      By decoupling the BDI dirty thresholds a number of problems we currently have
      will go away, namely:
      
       - mutual interference starvation (for any number of BDIs);
       - deadlocks with stacked BDIs (loop, FUSE and local NFS mounts).
      
      It might be that all dirty pages are for a single BDI while other BDIs are
      idling. By giving each BDI a 'fair' share of the dirty limit, each one can have
      dirty pages outstanding and make progress.
      
      A global threshold also creates a deadlock for stacked BDIs; when A writes to
      B, and A generates enough dirty pages to get throttled, B will never start
      writeback until the dirty pages go away. Again, by giving each BDI its own
      'independent' dirty limit, this problem is avoided.
      
      So the problem is to determine how to distribute the total dirty limit across
      the BDIs fairly and efficiently. A DBI that has a large dirty limit but does
      not have any dirty pages outstanding is a waste.
      
      What is done is to keep a floating proportion between the DBIs based on
      writeback completions. This way faster/more active devices get a larger share
      than slower/idle devices.
      
      [akpm@linux-foundation.org: fix warnings]
      [hugh@veritas.com: Fix occasional hang when a task couldn't get out of balance_dirty_pages]
      Signed-off-by: default avatarPeter Zijlstra <a.p.zijlstra@chello.nl>
      Signed-off-by: default avatarHugh Dickins <hugh@veritas.com>
      Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
      Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
      04fbfdc1
    • Peter Zijlstra's avatar
      mm: scalable bdi statistics counters · b2e8fb6e
      Peter Zijlstra authored
      
      Provide scalable per backing_dev_info statistics counters.
      Signed-off-by: default avatarPeter Zijlstra <a.p.zijlstra@chello.nl>
      Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
      Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
      b2e8fb6e
    • Peter Zijlstra's avatar
      nfs: remove congestion_end() · c4dc4bee
      Peter Zijlstra authored
      
      These patches aim to improve balance_dirty_pages() and directly address three
      issues:
        1) inter device starvation
        2) stacked device deadlocks
        3) inter process starvation
      
      1 and 2 are a direct result from removing the global dirty limit and using
      per device dirty limits. By giving each device its own dirty limit is will
      no longer starve another device, and the cyclic dependancy on the dirty limit
      is broken.
      
      In order to efficiently distribute the dirty limit across the independant
      devices a floating proportion is used, this will allocate a share of the total
      limit proportional to the device's recent activity.
      
      3 is done by also scaling the dirty limit proportional to the current task's
      recent dirty rate.
      
      This patch:
      
      nfs: remove congestion_end().  It's redundant, clear_bdi_congested() already
      wakes the waiters.
      Signed-off-by: default avatarPeter Zijlstra <a.p.zijlstra@chello.nl>
      Cc: Trond Myklebust <trond.myklebust@fys.uio.no>
      Cc: "J. Bruce Fields" <bfields@fieldses.org>
      Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
      Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
      c4dc4bee
  4. 16 Jul, 2007 1 commit
  5. 17 Mar, 2007 1 commit
  6. 20 Oct, 2006 1 commit
    • Andrew Morton's avatar
      [PATCH] separate bdi congestion functions from queue congestion functions · 3fcfab16
      Andrew Morton authored
      
      Separate out the concept of "queue congestion" from "backing-dev congestion".
      Congestion is a backing-dev concept, not a queue concept.
      
      The blk_* congestion functions are retained, as wrappers around the core
      backing-dev congestion functions.
      
      This proper layering is needed so that NFS can cleanly use the congestion
      functions, and so that CONFIG_BLOCK=n actually links.
      
      Cc: "Thomas Maier" <balagi@justmail.de>
      Cc: "Jens Axboe" <jens.axboe@oracle.com>
      Cc: Trond Myklebust <trond.myklebust@fys.uio.no>
      Cc: David Howells <dhowells@redhat.com>
      Cc: Peter Osterlund <petero2@telia.com>
      Signed-off-by: default avatarAndrew Morton <akpm@osdl.org>
      Signed-off-by: default avatarLinus Torvalds <torvalds@osdl.org>
      3fcfab16