Hi,

my latest scheduler patch gave poor performance in some
cases (when the task is on the 'wrong' CPU) and I seem
to have tracked it down to smp_message_pass() in
arch/i386/kernel/smp.c...

The goal of the function is to pass a message to another CPU
to tell it to do something (reschedule, in this case). The
problem is that the message doesn't seem to arrive for a
while, or the schedule just doesn't occur for some strange
reason...

I found this (rather suspect looking) piece of code in smp.c:

        /*
         *      Set the target requirement
         */
        
        if (target==MSG_ALL_BUT_SELF)
        {
                dest=APIC_DEST_ALLBUT;
                target_map=cpu_present_map;
                cpu_callin_map[0]=(1<<p);
        }
        else if (target==MSG_ALL)
        {
                dest=APIC_DEST_ALLINC;
                target_map=cpu_present_map;
                cpu_callin_map[0]=0;
        }
        else
        {
                dest=0;
                target_map=(1<<target);
                cpu_callin_map[0]=0;
        }

It seems to imply that we set the target to 0 if there's no
magic value to use. This corresponds with my experience that
the system feels responsive when my processes are on CPU 0
and performance sucks when the stuff is on CPU 1 (xosview
tells this to me).

cheers,

Rik -- the flu hits, the flu hits, the flu hits -- MORE
+-------------------------------------------------------------------+
| Linux memory management tour guide.        [EMAIL PROTECTED] |
| Scouting Vries cubscout leader.      http://www.phys.uu.nl/~riel/ |
+-------------------------------------------------------------------+

-
Linux SMP list: FIRST see FAQ at http://www.irisa.fr/prive/mentre/smp-faq/
To Unsubscribe: send "unsubscribe linux-smp" to [EMAIL PROTECTED]

Reply via email to