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 [EMAIL PROTECTED] More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/