Re: [BUG] scheduler: first timeslice of the exiting thread



On 04/09, Oleg Nesterov wrote:

Satoru Takeuchi wrote:

a) On sched_fork, the creator share its timeslice with new process.
b) On sched_exit, if the exiting process didn't exhaust its first
timeslice yet, it gives its timeslice to the parent.

It has no problem on the process model since the creator is the parent.
However, on the thread model, the creator is not the parent, it is same
as the creator's parent. Hence, on this kind of program, the creator
can't retrieve shared timeslice and exausts its timeslice at a rate of
knots. In addition, somehow, the parent (typically shell?) gets extra
timeslice.

Yes, this is an old oddity.

Perhaps

void sched_exit(struct task_struct *p)
{
task_t *t, *did_fork = p->parent;

if (!thread_group_leader(p))
list_for_each_entry(t, p->thread_group)
if (!t->exit_state) {
did_fork = t;
break;
}

... give time_slice to did_fork ..
}

may improve things a little bit, because the rest of time_slice doesn't leak
off the thread group.

However this is not very nice and we have the same problem with CLONE_PARENT.

Oleg.

-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/



Relevant Pages