mm: vmstat: use a single setter function and callback for adjusting percpu thresholds
reduce_pgdat_percpu_threshold() and restore_pgdat_percpu_threshold() exist to adjust the per-cpu vmstat thresholds while kswapd is awake to avoid errors due to counter drift. The functions duplicate some code so this patch replaces them with a single set_pgdat_percpu_threshold() that takes a callback function to calculate the desired threshold as a parameter. [akpm@linux-foundation.org: readability tweak] [kosaki.motohiro@jp.fujitsu.com: set_pgdat_percpu_threshold(): don't use for_each_online_cpu] Signed-off-by: Mel Gorman <mel@csn.ul.ie> Reviewed-by: Christoph Lameter <cl@linux.com> Reviewed-by: KAMEZAWA Hiroyuki <kamezawa.hiroyu@jp.fujitsu.com> Signed-off-by: KOSAKI Motohiro <kosaki.motohiro@jp.fujitsu.com> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
This commit is contained in:
committed by
Linus Torvalds
parent
88f5acf88a
commit
b44129b306
19
mm/vmscan.c
19
mm/vmscan.c
@@ -2448,9 +2448,24 @@ static int kswapd(void *p)
|
||||
*/
|
||||
if (!sleeping_prematurely(pgdat, order, remaining)) {
|
||||
trace_mm_vmscan_kswapd_sleep(pgdat->node_id);
|
||||
restore_pgdat_percpu_threshold(pgdat);
|
||||
|
||||
/*
|
||||
* vmstat counters are not perfectly
|
||||
* accurate and the estimated value
|
||||
* for counters such as NR_FREE_PAGES
|
||||
* can deviate from the true value by
|
||||
* nr_online_cpus * threshold. To
|
||||
* avoid the zone watermarks being
|
||||
* breached while under pressure, we
|
||||
* reduce the per-cpu vmstat threshold
|
||||
* while kswapd is awake and restore
|
||||
* them before going back to sleep.
|
||||
*/
|
||||
set_pgdat_percpu_threshold(pgdat,
|
||||
calculate_normal_threshold);
|
||||
schedule();
|
||||
reduce_pgdat_percpu_threshold(pgdat);
|
||||
set_pgdat_percpu_threshold(pgdat,
|
||||
calculate_pressure_threshold);
|
||||
} else {
|
||||
if (remaining)
|
||||
count_vm_event(KSWAPD_LOW_WMARK_HIT_QUICKLY);
|
||||
|
Reference in New Issue
Block a user