|
@@ -1326,12 +1326,15 @@ static int task_numa_migrate(struct task_struct *p)
|
|
/* Attempt to migrate a task to a CPU on the preferred node. */
|
|
/* Attempt to migrate a task to a CPU on the preferred node. */
|
|
static void numa_migrate_preferred(struct task_struct *p)
|
|
static void numa_migrate_preferred(struct task_struct *p)
|
|
{
|
|
{
|
|
|
|
+ unsigned long interval = HZ;
|
|
|
|
+
|
|
/* This task has no NUMA fault statistics yet */
|
|
/* This task has no NUMA fault statistics yet */
|
|
if (unlikely(p->numa_preferred_nid == -1 || !p->numa_faults_memory))
|
|
if (unlikely(p->numa_preferred_nid == -1 || !p->numa_faults_memory))
|
|
return;
|
|
return;
|
|
|
|
|
|
/* Periodically retry migrating the task to the preferred node */
|
|
/* Periodically retry migrating the task to the preferred node */
|
|
- p->numa_migrate_retry = jiffies + HZ;
|
|
|
|
|
|
+ interval = min(interval, msecs_to_jiffies(p->numa_scan_period) / 16);
|
|
|
|
+ p->numa_migrate_retry = jiffies + interval;
|
|
|
|
|
|
/* Success if task is already running on preferred CPU */
|
|
/* Success if task is already running on preferred CPU */
|
|
if (task_node(p) == p->numa_preferred_nid)
|
|
if (task_node(p) == p->numa_preferred_nid)
|