Commit 1babe18385d3976043c04237ce837f3736197eb4
Committed by
Linus Torvalds
1 parent
16c4042f08
Exists in
master
and in
20 other branches
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
mm/page-writeback.c
... | ... | @@ -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; |