From: Davide Libenzi <davidel@xmailserver.org>
To: Mike Kravetz <mkravetz@sequent.com>
Cc: lse-tech@lists.sourceforge.net, Andi Kleen <ak@suse.de>,
linux-kernel@vger.kernel.org
Subject: RE: CPU affinity & IPI latency
Date: Thu, 12 Jul 2001 17:22:55 -0700 (PDT) [thread overview]
Message-ID: <XFMail.20010712172255.davidel@xmailserver.org> (raw)
In-Reply-To: <20010712164017.C1150@w-mikek2.des.beaverton.ibm.com>
On 12-Jul-2001 Mike Kravetz wrote:
> This discussion was started on 'lse-tech@lists.sourceforge.net'.
> I'm widening the distribution in the hope of getting more input.
>
> It started when Andi Kleen noticed that a single 'CPU Hog' task
> was being bounced back and forth between the 2 CPUs on his 2-way
> system. I had seen similar behavior when running the context
> switching test of LMbench. When running lat_ctx with only two
> threads on an 8 CPU system, one would ?expect? the two threads
> to be confined to two of the 8 CPUs in the system. However, what
> I have observed is that the threads are effectively 'round
> robined' among all the CPUs and they all end up bearing
> an equivalent amount of the CPU load. To more easily observe
> this, increase the number of 'TRIPS' in the benchmark to a really
> large number.
>
> After a little investigation, I believe this 'situation' is caused
> by the latency of the reschedule IPI used by the scheduler. Recall
> that in lat_ctx all threads are in a tight loop consisting of:
>
> pipe_read()
> pipe_write()
>
> Both threads 'start' on the same CPU and are sitting in pipe_read
> waiting for data. A token is written to the pipe and one thread
> is awakened. The awakened thread, then immediately writes the token
> back to the pipe which ultimately results in a call to reschedule_idle()
> that will 'initiate' the scheduling of the other thread. In
> reschedule_idle() we can not take the 'fast path' because WE are
> currently executing on the other thread's preferred CPU. Therefore,
> reschedule_idle() chooses the oldest idle CPU and sends the IPI.
> However, before the IPI is received (and schedule() run) on the
> remote CPU, the currently running thread calls pipe_read which
> blocks and calls schedule(). Since the other task has yet to be
> scheduled on the other CPU, it is scheduled to run on the current
> CPU. Both tasks continue to execute on the one CPU until such time
> that an IPI induced schedule() on the other CPU hits a window where
> it finds one of the tasks to schedule. We continue in this way,
> migrating the tasks to the oldest idle CPU and eventually cycling our
> way through all the CPUs.
>
> Does this explanation sound reasonable?
I would say yes.
>
> If so, it would then follow that booting with 'idle=poll' would
> help alleviate this situation. However, that is not the case. With
> idle=poll the CPU load is not as evenly distributed among the CPUs,
> but is still distributed among all of them.
>
> Does the behavior of the 'benchmark' mean anything? Should one
> expect tasks to stay their preferred CPUs if possible?
Maybe having a per-cpu wake list where the rescheduled task is moved to be woken
up by IPI target.
- Davide
next prev parent reply other threads:[~2001-07-13 0:20 UTC|newest]
Thread overview: 30+ messages / expand[flat|nested] mbox.gz Atom feed top
2001-07-12 23:40 CPU affinity & IPI latency Mike Kravetz
2001-07-13 0:22 ` Davide Libenzi [this message]
2001-07-13 0:36 ` Larry McVoy
2001-07-13 2:06 ` Mark Hahn
2001-07-13 16:41 ` Davide Libenzi
2001-07-13 17:31 ` Mike Kravetz
2001-07-13 19:17 ` Davide Libenzi
2001-07-13 19:39 ` [Lse-tech] " Gerrit Huizenga
2001-07-13 20:05 ` Davide Libenzi
2001-07-13 17:05 ` Mike Kravetz
2001-07-13 19:51 ` David Lang
2001-07-13 22:43 ` Mike Kravetz
2001-07-15 20:02 ` Davide Libenzi
2001-07-15 20:10 ` [Lse-tech] " Andi Kleen
2001-07-15 20:15 ` Andi Kleen
2001-07-15 20:31 ` Davide Libenzi
2001-07-16 15:46 ` [Lse-tech] " Mike Kravetz
2001-07-13 19:54 ` Chris Wedgwood
2001-07-15 7:42 ` Troy Benjegerdes
2001-07-15 9:05 ` [Lse-tech] " Andi Kleen
2001-07-15 17:00 ` Troy Benjegerdes
2001-07-16 0:58 ` Mike Kravetz
-- strict thread matches above, loose matches on Subject: below --
2001-07-14 3:25 Hubertus Franke
2001-07-16 16:14 ` Mike Kravetz
2001-07-16 21:25 ` Davide Libenzi
2001-07-16 10:10 Hubertus Franke
2001-07-16 16:16 ` Davide Libenzi
2001-07-16 18:26 Hubertus Franke
2001-07-16 21:45 Hubertus Franke
2001-07-16 22:56 ` Davide Libenzi
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=XFMail.20010712172255.davidel@xmailserver.org \
--to=davidel@xmailserver.org \
--cc=ak@suse.de \
--cc=linux-kernel@vger.kernel.org \
--cc=lse-tech@lists.sourceforge.net \
--cc=mkravetz@sequent.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.