|
@@ -788,6 +788,9 @@ unsigned int sysctl_numa_balancing_scan_period_max = 100*16;
|
|
|
/* Portion of address space to scan in MB */
|
|
|
unsigned int sysctl_numa_balancing_scan_size = 256;
|
|
|
|
|
|
+/* Scan @scan_size MB every @scan_period after an initial @scan_delay in ms */
|
|
|
+unsigned int sysctl_numa_balancing_scan_delay = 1000;
|
|
|
+
|
|
|
static void task_numa_placement(struct task_struct *p)
|
|
|
{
|
|
|
int seq = ACCESS_ONCE(p->mm->numa_scan_seq);
|
|
@@ -929,6 +932,8 @@ void task_tick_numa(struct rq *rq, struct task_struct *curr)
|
|
|
period = (u64)curr->numa_scan_period * NSEC_PER_MSEC;
|
|
|
|
|
|
if (now - curr->node_stamp > period) {
|
|
|
+ if (!curr->node_stamp)
|
|
|
+ curr->numa_scan_period = sysctl_numa_balancing_scan_period_min;
|
|
|
curr->node_stamp = now;
|
|
|
|
|
|
if (!time_before(jiffies, curr->mm->numa_next_scan)) {
|