From: Peter Zijlstra <peterz@infradead.org>
To: xialiang <xiaiaxaxi@sjtu.edu.cn>
Cc: Robin Holt <holt@sgi.com>,
Bart Van Assche <bart.vanassche@gmail.com>,
linux-kernel@vger.kernel.org
Subject: Re: How can I migrate a currently running task?
Date: Sat, 28 Jun 2008 09:55:39 +0200 [thread overview]
Message-ID: <1214639739.12348.13.camel@twins> (raw)
In-Reply-To: <20080628120521.kjrvzpgpwwcc0g0c@webmail1.sjtu.edu.cn>
On Sat, 2008-06-28 at 12:05 +0800, xialiang wrote:
> Quoting Robin Holt <holt@sgi.com>:
>
> > On Fri, Jun 27, 2008 at 09:38:05PM +0800, xialiang wrote:
> >> Quoting Bart Van Assche <bart.vanassche@gmail.com>:
> >>
> >>> On Fri, Jun 27, 2008 at 3:17 PM, 夏亮 <xiaiaxaxi@sjtu.edu.cn> wrote:
> >>>> I am working on Intel Duo Core with Linux OS 2.6.21, and I'd like to
> >>>> migrate task from one cpu to another cpu.
> >>>> In SMP systems, load_balance() function uses move_tasks() to move
> >>>> processes
> >>>> from source runqueue to local runqueue, but it does not move a currently
> >>>> running task. If I want to migrate a currently running task from source
> >>>> runqueue to local runqueue, how can I do? Any suggestion is preferred.
> >>>
> >>> Are you familiar with the glibc pthread_setaffinity_np() function
> >>> and/or the sched_setaffinity() system call ?
> >>>
> >>> Bart.
> >>>
> >>
> >> Yes. I know sched_setaffinity(), it sets cpu_mask of a task. I want to
> >> use it in a timer interrupt( scheduler_tick() ), can I?
> >
> > Don't use it from a timer handler. You can use migrate_task() to move the
> > task, but your email from a couple days ago said you wanted to move the
> > task at the head of the runqueue due to cpu heat or something like that.
> > That is a very imprecise way to move the task as any unfortunate task
> > that happens to be running when the timer tick occurs could get migrated,
> > not the one generating the work.
> >
> > I think you really want to look at the other areas of the kernel which do
> > stuff like throttling the cpu. Just moving a task off the cpu does not
> > prevent it from being used for another compute intesive load. You could
> > take the cpu offline. I guess to do that, I would use schedule_work()
> > or kthread_create() to get out of the timer context and into a regular
> > thread context then take the cpu offline from there.
> >
> > Good Luck,
> > Robin
> >
>
> I would move a task at the head of the runqueue, but I already
> know which task creates the heat. I get the profile of tasks
> beforehand. So if I find the temperature of a cpu is much higher than
> that of the other, and coincidentally the currently running task of
> the cpu is what I want to migrate. Can I migrate it in the
> scheduler_tick()?
No, you cannot migrate current from hardirq context.
> Or where should I put the migration code? Thanks!
If you want to balance temperature, the best place would be the load
balancer.
Just don't wreck all the other balance conditions.
next prev parent reply other threads:[~2008-06-28 7:55 UTC|newest]
Thread overview: 7+ messages / expand[flat|nested] mbox.gz Atom feed top
2008-06-27 13:17 夏亮
2008-06-27 13:25 ` Bart Van Assche
2008-06-27 13:38 ` xialiang
2008-06-27 18:48 ` Robin Holt
2008-06-28 4:05 ` xialiang
2008-06-28 7:55 ` Peter Zijlstra [this message]
2008-06-27 14:27 ` Dmitry Adamushko
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=1214639739.12348.13.camel@twins \
--to=peterz@infradead.org \
--cc=bart.vanassche@gmail.com \
--cc=holt@sgi.com \
--cc=linux-kernel@vger.kernel.org \
--cc=xiaiaxaxi@sjtu.edu.cn \
/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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox
all inboxes | Powered by JetHome®