Commit 930aa174 authored by Mel Gorman's avatar Mel Gorman Committed by Ingo Molnar

sched/numa: Remove the numa_balancing_scan_period_reset sysctl

With scan rate adaptions based on whether the workload has properly
converged or not there should be no need for the scan period reset
hammer. Get rid of it.
Signed-off-by: default avatarMel Gorman <mgorman@suse.de>
Reviewed-by: default avatarRik van Riel <riel@redhat.com>
Cc: Andrea Arcangeli <aarcange@redhat.com>
Cc: Johannes Weiner <hannes@cmpxchg.org>
Cc: Srikar Dronamraju <srikar@linux.vnet.ibm.com>
Signed-off-by: default avatarPeter Zijlstra <peterz@infradead.org>
Link: http://lkml.kernel.org/r/1381141781-10992-60-git-send-email-mgorman@suse.deSigned-off-by: default avatarIngo Molnar <mingo@kernel.org>
parent 04bb2f94
...@@ -374,15 +374,13 @@ guarantee. If the target workload is already bound to NUMA nodes then this ...@@ -374,15 +374,13 @@ guarantee. If the target workload is already bound to NUMA nodes then this
feature should be disabled. Otherwise, if the system overhead from the feature should be disabled. Otherwise, if the system overhead from the
feature is too high then the rate the kernel samples for NUMA hinting feature is too high then the rate the kernel samples for NUMA hinting
faults may be controlled by the numa_balancing_scan_period_min_ms, faults may be controlled by the numa_balancing_scan_period_min_ms,
numa_balancing_scan_delay_ms, numa_balancing_scan_period_reset, numa_balancing_scan_delay_ms, numa_balancing_scan_period_max_ms,
numa_balancing_scan_period_max_ms, numa_balancing_scan_size_mb and numa_balancing_scan_size_mb and numa_balancing_settle_count sysctls.
numa_balancing_settle_count sysctls.
============================================================== ==============================================================
numa_balancing_scan_period_min_ms, numa_balancing_scan_delay_ms, numa_balancing_scan_period_min_ms, numa_balancing_scan_delay_ms,
numa_balancing_scan_period_max_ms, numa_balancing_scan_period_reset, numa_balancing_scan_period_max_ms, numa_balancing_scan_size_mb
numa_balancing_scan_size_mb
Automatic NUMA balancing scans tasks address space and unmaps pages to Automatic NUMA balancing scans tasks address space and unmaps pages to
detect if pages are properly placed or if the data should be migrated to a detect if pages are properly placed or if the data should be migrated to a
...@@ -418,9 +416,6 @@ rate for each task. ...@@ -418,9 +416,6 @@ rate for each task.
numa_balancing_scan_size_mb is how many megabytes worth of pages are numa_balancing_scan_size_mb is how many megabytes worth of pages are
scanned for a given scan. scanned for a given scan.
numa_balancing_scan_period_reset is a blunt instrument that controls how
often a tasks scan delay is reset to detect sudden changes in task behaviour.
numa_balancing_settle_count is how many scan periods must complete before numa_balancing_settle_count is how many scan periods must complete before
the schedule balancer stops pushing the task towards a preferred node. This the schedule balancer stops pushing the task towards a preferred node. This
gives the scheduler a chance to place the task on an alternative node if the gives the scheduler a chance to place the task on an alternative node if the
......
...@@ -420,9 +420,6 @@ struct mm_struct { ...@@ -420,9 +420,6 @@ struct mm_struct {
*/ */
unsigned long numa_next_scan; unsigned long numa_next_scan;
/* numa_next_reset is when the PTE scanner period will be reset */
unsigned long numa_next_reset;
/* Restart point for scanning and setting pte_numa */ /* Restart point for scanning and setting pte_numa */
unsigned long numa_scan_offset; unsigned long numa_scan_offset;
......
...@@ -47,7 +47,6 @@ extern enum sched_tunable_scaling sysctl_sched_tunable_scaling; ...@@ -47,7 +47,6 @@ extern enum sched_tunable_scaling sysctl_sched_tunable_scaling;
extern unsigned int sysctl_numa_balancing_scan_delay; extern unsigned int sysctl_numa_balancing_scan_delay;
extern unsigned int sysctl_numa_balancing_scan_period_min; extern unsigned int sysctl_numa_balancing_scan_period_min;
extern unsigned int sysctl_numa_balancing_scan_period_max; extern unsigned int sysctl_numa_balancing_scan_period_max;
extern unsigned int sysctl_numa_balancing_scan_period_reset;
extern unsigned int sysctl_numa_balancing_scan_size; extern unsigned int sysctl_numa_balancing_scan_size;
extern unsigned int sysctl_numa_balancing_settle_count; extern unsigned int sysctl_numa_balancing_settle_count;
......
...@@ -1721,7 +1721,6 @@ static void __sched_fork(unsigned long clone_flags, struct task_struct *p) ...@@ -1721,7 +1721,6 @@ static void __sched_fork(unsigned long clone_flags, struct task_struct *p)
#ifdef CONFIG_NUMA_BALANCING #ifdef CONFIG_NUMA_BALANCING
if (p->mm && atomic_read(&p->mm->mm_users) == 1) { if (p->mm && atomic_read(&p->mm->mm_users) == 1) {
p->mm->numa_next_scan = jiffies + msecs_to_jiffies(sysctl_numa_balancing_scan_delay); p->mm->numa_next_scan = jiffies + msecs_to_jiffies(sysctl_numa_balancing_scan_delay);
p->mm->numa_next_reset = jiffies + msecs_to_jiffies(sysctl_numa_balancing_scan_period_reset);
p->mm->numa_scan_seq = 0; p->mm->numa_scan_seq = 0;
} }
......
...@@ -826,7 +826,6 @@ update_stats_curr_start(struct cfs_rq *cfs_rq, struct sched_entity *se) ...@@ -826,7 +826,6 @@ update_stats_curr_start(struct cfs_rq *cfs_rq, struct sched_entity *se)
*/ */
unsigned int sysctl_numa_balancing_scan_period_min = 1000; unsigned int sysctl_numa_balancing_scan_period_min = 1000;
unsigned int sysctl_numa_balancing_scan_period_max = 60000; unsigned int sysctl_numa_balancing_scan_period_max = 60000;
unsigned int sysctl_numa_balancing_scan_period_reset = 60000;
/* Portion of address space to scan in MB */ /* Portion of address space to scan in MB */
unsigned int sysctl_numa_balancing_scan_size = 256; unsigned int sysctl_numa_balancing_scan_size = 256;
...@@ -1685,24 +1684,9 @@ void task_numa_work(struct callback_head *work) ...@@ -1685,24 +1684,9 @@ void task_numa_work(struct callback_head *work)
if (p->flags & PF_EXITING) if (p->flags & PF_EXITING)
return; return;
if (!mm->numa_next_reset || !mm->numa_next_scan) { if (!mm->numa_next_scan) {
mm->numa_next_scan = now + mm->numa_next_scan = now +
msecs_to_jiffies(sysctl_numa_balancing_scan_delay); msecs_to_jiffies(sysctl_numa_balancing_scan_delay);
mm->numa_next_reset = now +
msecs_to_jiffies(sysctl_numa_balancing_scan_period_reset);
}
/*
* Reset the scan period if enough time has gone by. Objective is that
* scanning will be reduced if pages are properly placed. As tasks
* can enter different phases this needs to be re-examined. Lacking
* proper tracking of reference behaviour, this blunt hammer is used.
*/
migrate = mm->numa_next_reset;
if (time_after(now, migrate)) {
p->numa_scan_period = task_scan_min(p);
next_scan = now + msecs_to_jiffies(sysctl_numa_balancing_scan_period_reset);
xchg(&mm->numa_next_reset, next_scan);
} }
/* /*
......
...@@ -370,13 +370,6 @@ static struct ctl_table kern_table[] = { ...@@ -370,13 +370,6 @@ static struct ctl_table kern_table[] = {
.mode = 0644, .mode = 0644,
.proc_handler = proc_dointvec, .proc_handler = proc_dointvec,
}, },
{
.procname = "numa_balancing_scan_period_reset",
.data = &sysctl_numa_balancing_scan_period_reset,
.maxlen = sizeof(unsigned int),
.mode = 0644,
.proc_handler = proc_dointvec,
},
{ {
.procname = "numa_balancing_scan_period_max_ms", .procname = "numa_balancing_scan_period_max_ms",
.data = &sysctl_numa_balancing_scan_period_max, .data = &sysctl_numa_balancing_scan_period_max,
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment