On Thu, Jul 11, 2013 at 10:46:52AM +0100, Mel Gorman wrote:
> @@ -829,10 +854,29 @@ static void task_numa_placement(struct task_struct *p)
>               }
>       }
>  
> -     /* Update the tasks preferred node if necessary */
> +     /*
> +      * Record the preferred node as the node with the most faults,
> +      * requeue the task to be running on the idlest CPU on the
> +      * preferred node and reset the scanning rate to recheck
> +      * the working set placement.
> +      */
>       if (max_faults && max_nid != p->numa_preferred_nid) {
> +             int preferred_cpu;
> +
> +             /*
> +              * If the task is not on the preferred node then find the most
> +              * idle CPU to migrate to.
> +              */
> +             preferred_cpu = task_cpu(p);
> +             if (cpu_to_node(preferred_cpu) != max_nid) {
> +                     preferred_cpu = find_idlest_cpu_node(preferred_cpu,
> +                                                          max_nid);
> +             }
> +
> +             /* Update the preferred nid and migrate task if possible */
>               p->numa_preferred_nid = max_nid;
>               p->numa_migrate_seq = 0;
> +             migrate_task_to(p, preferred_cpu);
>       }
>  }

Now what happens if the migrations fails? We set numa_preferred_nid to max_nid
but then never re-try the migration. Should we not re-try the migration every
so often, regardless of whether max_nid changed?
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

Reply via email to