[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Xen-devel] Questions about the use of idle_vcpu[]



On Mon, 2016-01-18 at 10:47 +0000, George Dunlap wrote:
> On Fri, Jan 15, 2016 at 1:04 AM, Tianyang Chen <tiche@xxxxxxxxxxxxxx>
> 
> > If an idle vcpu is picked, the ret.time is set accordingly in both
> > credit
> > and credit2 by checking whether snext is idle. if so, credit
> > returns -1 and
> > credit2 returns 2ms. However, there is no corresponding code in the
> > RTDS
> > scheduler to handle this. When an idle_vcpu is picked, the value of
> > ret.time
> > would be 0 and the scheduler would be invoked again. What is the
> > logic
> > behind this?
> 
> No real logic, as far as I can tell. :-)ÂÂThe ret.time return value
> tells the generic scheduling code when to set the next scheduler
> timer.ÂÂAccording to the comment in xen/common/schedule.c:schedule(),
> returning a negative value means "don't bother setting a timer"
> (e.g.,
> no time limit).ÂÂSo credit1 does the right thing.
> 
It does.

> It looks like credit2's behavior will probably prevent the processor
> from going into deeper power-saving states, and rtds' behavior might
> cause it to essentially busy-wait.
> 
RTDS behavior is broken in many respect, including this, and in fact,
Meng andÂTianyang are sending patches already to fix it (I'll let you
guys have my comments shortly :-P).

Credit2, AFAICR, could also avoid _always_ re-setting the timer, but it
does need to do that at least a few times, even when idle is selected,
because of the dynamic load tracking mechanism it includes. In fact,
that is based on a 'decaying average', which in turns relies on
csched2_schedule() to run and update the statistics, even when the cpu
is idle. If we don't do that, the load tracking mechanism will never
see that the cpu (well, it's actually the runqueue) is idle, and the
load will never go down! :-/

I've got patches for:
Â- extending the dynamic load tracking logic to all scheduler (iff
 Âthey want to use it, of course)
Â- only call {csched,csched2,rtds}_schedule() if necessary. That
 Âmeans, if the pcpu/runqueue is idle (and if the dynamic tracking is
 Âin use by the specific scheduler), only return a positive valueÂ
 Âand set the timer if the dynamic load is >0, to allow it to decay
 Â(if the pcpu/runqueue stays idle enough).

But they are on hold, while I'm finishing some other work.

> Dario / Meng, am I reading things right?ÂÂIf so, we should probably
> fix that...
> 
Yep, and in fact, we're on it already. I hope to be able to post my
patches soon. :-)

Regards,
Dario
-- 
<<This happens because I choose it to happen!>> (Raistlin Majere)
-----------------------------------------------------------------
Dario Faggioli, Ph.D, http://about.me/dario.faggioli
Senior Software Engineer, Citrix Systems R&D Ltd., Cambridge (UK)

Attachment: signature.asc
Description: This is a digitally signed message part

_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxx
http://lists.xen.org/xen-devel

 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.