Re: [patch] HT scheduler, sched-2.5.59-D7

From: Andrew Morton (akpm@digeo.com)
Date: Mon Jan 20 2003 - 17:28:27 EST


Ingo Molnar <mingo@elte.hu> wrote:
>
>
> the attached patch (against 2.5.59) is my current scheduler tree, it
> includes two main areas of changes:
>
> - interactivity improvements, mostly reworked bits from Andrea's tree and
> various tunings.
>

Thanks for doing this. Initial testing with one workload which is extremely
bad with 2.5.59: huge improvement.

The workload is:

workstation> ssh laptop
laptop> setenv DISPLAY workstation:0
laptop> make -j0 bzImage&
laptop> some-x-application &

For some reason, X-across-ethernet performs terribly when there's a kernel
compile on the client machine - lots of half-second lags.

All gone now.

wrt this:

        if (SMART_WAKE_CHILD) {
                if (unlikely(!current->array))
                        __activate_task(p, rq);
                else {
                        p->prio = current->prio;
                        list_add_tail(&p->run_list, &current->run_list);
                        p->array = current->array;
                        p->array->nr_active++;
                        nr_running_inc(rq);
                }

for some reason I decided that RT tasks need special handling here. I
forget why though ;) Please double-check that.

--- 25/kernel/sched.c~rcf-simple Thu Dec 26 02:34:11 2002
+++ 25-akpm/kernel/sched.c Thu Dec 26 02:34:40 2002
@@ -452,6 +452,8 @@ int wake_up_process(task_t * p)
 void wake_up_forked_process(task_t * p)
 {
         runqueue_t *rq = this_rq_lock();
+ struct task_struct *this_task = current;
+ prio_array_t *array = this_task->array;
 
         p->state = TASK_RUNNING;
         if (!rt_task(p)) {
@@ -467,6 +469,19 @@ void wake_up_forked_process(task_t * p)
         set_task_cpu(p, smp_processor_id());
         activate_task(p, rq);
 
+ /*
+ * Take caller off the head of the runqueue, so child will run first.
+ */
+ if (array) {
+ if (!rt_task(current)) {
+ dequeue_task(this_task, array);
+ enqueue_task(this_task, array);
+ } else {
+ list_del(&this_task->run_list);
+ list_add_tail(&this_task->run_list,
+ array->queue + this_task->prio);
+ }
+ }
         rq_unlock(rq);
 }
 

-
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/



This archive was generated by hypermail 2b29 : Thu Jan 23 2003 - 22:00:25 EST