From: Ingo Molnar <mingo@elte.hu>
To: Stijn Devriendt <highguy@gmail.com>
Cc: Linus Torvalds <torvalds@linux-foundation.org>,
Mike Galbraith <efault@gmx.de>,
Peter Zijlstra <a.p.zijlstra@chello.nl>,
Andrea Arcangeli <andrea@suse.de>,
Thomas Gleixner <tglx@linutronix.de>,
Andrew Morton <akpm@linux-foundation.org>,
peterz@infradead.org, linux-kernel@vger.kernel.org
Subject: Re: [RFC] observe and act upon workload parallelism: PERF_TYPE_PARALLELISM (Was: [RFC][PATCH] sched_wait_block: wait for blocked threads)
Date: Mon, 16 Nov 2009 21:22:14 +0100 [thread overview]
Message-ID: <20091116202214.GD360@elte.hu> (raw)
In-Reply-To: <c76f371a0911161113v60eef516qee0a1a9cf99d2ae@mail.gmail.com>
* Stijn Devriendt <highguy@gmail.com> wrote:
> > And then we can use poll() in the thread manager task to observe
> > PIDs, workloads or full CPUs. The poll() implementation of perf
> > events is fast and scalable.
>
> I've had a quick peek at the perf code and how it currently hooks into
> the scheduler and at first glance it looks like 2 additional context
> switches are required when using perf. The scheduler will first
> schedule the idle thread to later find out that the schedule tail woke
> up another process to run. My initial solution woke up the process
> before making a scheduling decision. Depending on context switch times
> the original blocking operation may have been unblocked (especially on
> SMP); e.g. a blocked user-space mutex which was held shortly. Feel
> free to correct me here as it was merely a quick peek.
( Btw., the PERF_TYPE_PARALLELISM name sucks. A better name would be
PERF_COUNT_SW_TASKS or PERF_COUNT_SW_THREAD_POOL or so. )
I'd definitely not advocate a 'controller thread' approach: it's an
unnecessary extra intermediary and it doubles the context switch cost
and tears cache footprint apart.
We want any such scheme to schedule 'naturally' and optimally: i.e. a
blocking thread will schedule an available thread - no ifs and when.
The only limit we want is on concurrency - and we can do that by waking
tasks from the poll() waitqueue if a task blocks - and by requeueing
woken tasks to the poll() waitqueue if a task wakes (and if the
concurrency threshold does not allow it to run)..
In a sense the poll() waitqueue becomes a mini-runqueue for 'ready'
tasks - and the 'number of tasks running' value of the sw event object a
rq->nr_running value. It does not make the tasks available to the real
scheduler - but it's a list of tasks that are willing to run.
This would be a perfect and suitable use of poll() concepts i think -
and well-optimized one as well. It could even be plugged into epoll().
Ingo
next prev parent reply other threads:[~2009-11-16 20:22 UTC|newest]
Thread overview: 12+ messages / expand[flat|nested] mbox.gz Atom feed top
2009-11-15 19:04 [RFC][PATCH] sched_wait_block: wait for blocked threads Stijn Devriendt
2009-11-15 19:04 ` [PATCH] Initial prototype version of sched_wait_block Stijn Devriendt
2009-11-16 8:35 ` [RFC] observe and act upon workload parallelism: PERF_TYPE_PARALLELISM (Was: [RFC][PATCH] sched_wait_block: wait for blocked threads) Ingo Molnar
2009-11-16 18:02 ` Linus Torvalds
2009-11-16 18:18 ` Linus Torvalds
2009-11-16 18:31 ` Alan Cox
2009-11-16 19:49 ` Stijn Devriendt
2009-11-16 20:13 ` Ingo Molnar
2009-11-21 11:26 ` Stijn Devriendt
2009-11-16 19:13 ` Stijn Devriendt
2009-11-16 20:22 ` Ingo Molnar [this message]
2009-11-18 9:30 ` Stijn Devriendt
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=20091116202214.GD360@elte.hu \
--to=mingo@elte.hu \
--cc=a.p.zijlstra@chello.nl \
--cc=akpm@linux-foundation.org \
--cc=andrea@suse.de \
--cc=efault@gmx.de \
--cc=highguy@gmail.com \
--cc=linux-kernel@vger.kernel.org \
--cc=peterz@infradead.org \
--cc=tglx@linutronix.de \
--cc=torvalds@linux-foundation.org \
/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.