1. 08 Dec, 2011 3 commits
    • Wu Fengguang's avatar
      writeback: set max_pause to lowest value on zero bdi_dirty · 82e230a0
      Wu Fengguang authored
      Some trace shows lots of bdi_dirty=0 lines where it's actually some
      small value if w/o the accounting errors in the per-cpu bdi stats.
      
      In this case the max pause time should really be set to the smallest
      (non-zero) value to avoid IO queue underrun and improve throughput.
      Signed-off-by: default avatarWu Fengguang <fengguang.wu@intel.com>
      82e230a0
    • Wu Fengguang's avatar
      writeback: permit through good bdi even when global dirty exceeded · c5c6343c
      Wu Fengguang authored
      On a system with 1 local mount and 1 NFS mount, if the NFS server
      becomes not responding when dd to the NFS mount, the NFS dirty pages may
      exceed the global dirty limit and _every_ task involving writing will be
      blocked. The whole system appears unresponsive.
      
      The workaround is to permit through the bdi's that only has a small
      number of dirty pages. The number chosen (bdi_stat_error pages) is not
      enough to enable the local disk to run in optimal throughput, however is
      enough to make the system responsive on a broken NFS mount. The user can
      then kill the dirtiers on the NFS mount and increase the global dirty
      limit to bring up the local disk's throughput.
      
      It risks allowing dirty pages to grow much larger than the global dirty
      limit when there are 1000+ mounts, however that's very unlikely to happen,
      especially in low memory profiles.
      Signed-off-by: default avatarWu Fengguang <fengguang.wu@intel.com>
      c5c6343c
    • Wu Fengguang's avatar
      writeback: comment on the bdi dirty threshold · aed21ad2
      Wu Fengguang authored
      We do "floating proportions" to let active devices to grow its target
      share of dirty pages and stalled/inactive devices to decrease its target
      share over time.
      
      It works well except in the case of "an inactive disk suddenly goes
      busy", where the initial target share may be too small. To mitigate
      this, bdi_position_ratio() has the below line to raise a small
      bdi_thresh when it's safe to do so, so that the disk be feed with enough
      dirty pages for efficient IO and in turn fast rampup of bdi_thresh:
      
              bdi_thresh = max(bdi_thresh, (limit - dirty) / 8);
      
      balance_dirty_pages() normally does negative feedback control which
      adjusts ratelimit to balance the bdi dirty pages around the target.
      In some extreme cases when that is not enough, it will have to block
      the tasks completely until the bdi dirty pages drop below bdi_thresh.
      Acked-by: default avatarJan Kara <jack@suse.cz>
      Acked-by: default avatarPeter Zijlstra <a.p.zijlstra@chello.nl>
      Signed-off-by: default avatarWu Fengguang <fengguang.wu@intel.com>
      aed21ad2
  2. 02 Dec, 2011 1 commit
  3. 29 Nov, 2011 2 commits
  4. 28 Nov, 2011 11 commits
  5. 27 Nov, 2011 5 commits
  6. 26 Nov, 2011 4 commits
  7. 24 Nov, 2011 14 commits