On Sat, Feb 01, 2003 at 12:47:59PM -0800, Terry Lambert wrote:
> Bosko Milekic wrote:
> > On Fri, Jan 31, 2003 at 11:52:53AM -0800, Matthew Dillon wrote:
> > >      Another solution would be to have a global mask of 'idle' cpus and send
> > >      an IPI to them when a new KSE is scheduled on a non-idle cpu that would
> > >      simply serve to wakeup the HLT.  IPIs are nasty, but there are large
> > >      (power consumption) advantages to standardizing on the HLT methodology.
> > 
> >   Or, as I explained in my previous post, only HLT the [virtual] CPU if
> >   the other [virtual] CPU that is sharing the same execution & cache
> >   units is not HLT'd itself.  If the other one is HLT'd, then not do the
> >   HLT.
> 
> Actually, why is that?  Why would you not want to HLT all the
> units that are not being used?

  Because, the comment explains, a halted CPU will not pick up a new
  thread off the run queue until the next timer tick.  So if all your
  logical units are idled then you can afford to just loop checking
  whether something is runnable without interfering with the performance
  of other threads running on a different logical cpu sharing your
  execution unit (because the other logical units are idle anyway).
  That way, you don't have to necessarily wait for the next timer tick
  to check whether something is runnable, especially if it's made
  runnable before.  The disadvantage is that you don't really economize
  on power consumption.

  The ideal situation would be to have as Matt (and the comment
  actually) says a cpu mask of idle cpus and generate an IPI to wake up
  CPUs sitting in HLT when something hits the runqueue, then you can
  just hlt all of them and rely on the IPI to wake you up, or the next
  timer tick, whichever comes first and you can really get the best of
  both worlds.

> -- Terry

-- 
Bosko Milekic * [EMAIL PROTECTED] * [EMAIL PROTECTED]


To Unsubscribe: send mail to [EMAIL PROTECTED]
with "unsubscribe freebsd-current" in the body of the message

Reply via email to