Commit 1babe18385d3976043c04237ce837f3736197eb4

Authored by Wu Fengguang
Committed by Linus Torvalds
1 parent 16c4042f08

writeback: add comment to the dirty limit functions

Document global_dirty_limits() and bdi_dirty_limit().

Signed-off-by: Wu Fengguang <fengguang.wu@intel.com>
Cc: Christoph Hellwig <hch@infradead.org>
Cc: Dave Chinner <david@fromorbit.com>
Cc: Jens Axboe <axboe@kernel.dk>
Cc: Peter Zijlstra <a.p.zijlstra@chello.nl>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>

Showing 1 changed file with 28 additions and 3 deletions Side-by-side Diff

... ... @@ -261,11 +261,18 @@
261 261 }
262 262  
263 263 /*
264   - * scale the dirty limit
  264 + * task_dirty_limit - scale down dirty throttling threshold for one task
265 265 *
266 266 * task specific dirty limit:
267 267 *
268 268 * dirty -= (dirty/8) * p_{t}
  269 + *
  270 + * To protect light/slow dirtying tasks from heavier/fast ones, we start
  271 + * throttling individual tasks before reaching the bdi dirty limit.
  272 + * Relatively low thresholds will be allocated to heavy dirtiers. So when
  273 + * dirty pages grow large, heavy dirtiers will be throttled first, which will
  274 + * effectively curb the growth of dirty pages. Light dirtiers with high enough
  275 + * dirty threshold may never get throttled.
269 276 */
270 277 static unsigned long task_dirty_limit(struct task_struct *tsk,
271 278 unsigned long bdi_dirty)
... ... @@ -390,6 +397,15 @@
390 397 return x + 1; /* Ensure that we never return 0 */
391 398 }
392 399  
  400 +/**
  401 + * global_dirty_limits - background-writeback and dirty-throttling thresholds
  402 + *
  403 + * Calculate the dirty thresholds based on sysctl parameters
  404 + * - vm.dirty_background_ratio or vm.dirty_background_bytes
  405 + * - vm.dirty_ratio or vm.dirty_bytes
  406 + * The dirty limits will be lifted by 1/4 for PF_LESS_THROTTLE (ie. nfsd) and
  407 + * runtime tasks.
  408 + */
393 409 void global_dirty_limits(unsigned long *pbackground, unsigned long *pdirty)
394 410 {
395 411 unsigned long background;
... ... @@ -424,8 +440,17 @@
424 440 *pdirty = dirty;
425 441 }
426 442  
427   -unsigned long bdi_dirty_limit(struct backing_dev_info *bdi,
428   - unsigned long dirty)
  443 +/**
  444 + * bdi_dirty_limit - @bdi's share of dirty throttling threshold
  445 + *
  446 + * Allocate high/low dirty limits to fast/slow devices, in order to prevent
  447 + * - starving fast devices
  448 + * - piling up dirty pages (that will take long time to sync) on slow devices
  449 + *
  450 + * The bdi's share of dirty limit will be adapting to its throughput and
  451 + * bounded by the bdi->min_ratio and/or bdi->max_ratio parameters, if set.
  452 + */
  453 +unsigned long bdi_dirty_limit(struct backing_dev_info *bdi, unsigned long dirty)
429 454 {
430 455 u64 bdi_dirty;
431 456 long numerator, denominator;