Do you think of something like:
#define CAN_MIGRATE_TASK(p,rq,this_cpu) \
(HOMENODE_UNSET(p) && \ //<--
(jiffies - (p)->last_run > cache_decay_ticks) && \
!task_running(rq, p) && \
((p)->cpus_allowed & (1UL << (this_cpu))))
curr = curr->prev;
if (!CAN_MIGRATE_TASK(tmp, busiest, this_cpu)
|| !numa_should_migrate(tmp, busiest, this_cpu)) {
if (curr != head)
goto skip_queue;
idx++;
goto skip_bitmap;
}
if (HOMENODE_UNSET(tmp)) //<--
set_task_node(tmp,cpu_to_node(this_cpu)); //<--
pull_task(busiest, array, tmp, this_rq, this_cpu);
if (!idle && --imbalance) {
...
?
Guess this would help a bit for multithreaded jobs. Chosing the
homenode more carefully here would be pretty expensive.
Regards,
Erich
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/