Re: high temperature with gnumach and hurd
> > > just wanted to tell you, that the temperature of my cpu is raising to
> > > very high values, while having the hurd system running.
> > >
> > > If I am working with linux, the temperature of the cpu is somewhere
> > > below 60°C (under heavy load), but if I boot the hurd thing and don't do
> > > anything, the temperature raises to higher 60's and the bios temperature
> > > warning starts howling.
> >
> > This is intended behaviour: GNU/Hurd is a *hot* OS :-)
> >
> > > Did anyone else recognize this problem?
> >
> > Maybe GNUmach should idle/hlt the CPU when all tasks/threads
> > are idle?
>
> This was sort of brought up a while ago with respect to a laptop.
> Mach actively sends idle instructions to the cpu, so the cpu is always
> at full usage, this may be causing the heat up.
Exactly. On x86, sending a hlt instruction will block the CPU
until an interrupt trickles in (e.g. hw clock, etc...).
I don't have GNUmach sources on the box I'm posting from right now,
so here's how it is done on FreeBSD -STABLE:
/usr/src/sys/i386/i386/machdep.c:
/*
* Shutdown the CPU as much as possible
*/
void
cpu_halt(void)
{
for (;;)
__asm__ ("hlt");
}
/*
* Hook to idle the CPU when possible. This is disabled by default for
* the SMP case as there is a small window of opportunity whereby a ready
* process is delayed to the next clock tick. It should be safe to enable
* for SMP if power is a concern.
*
* On -stable, cpu_idle() is called with interrupts disabled and must
* return with them enabled.
*/
#ifdef SMP
static int cpu_idle_hlt = 0;
#else
static int cpu_idle_hlt = 1;
#endif
SYSCTL_INT(_machdep, OID_AUTO, cpu_idle_hlt, CTLFLAG_RW,
&cpu_idle_hlt, 0, "Idle loop HLT enable");
void
cpu_idle(void)
{
if (cpu_idle_hlt) {
/*
* We must guarentee that hlt is exactly the instruction
* following the sti.
*/
__asm __volatile("sti; hlt");
} else {
__asm __volatile("sti");
}
}
cpu_halt() and cpu_idle() are called from the scheduler in
/usr/src/sys/i386/i386/swtch.s, but that's off topic here,
so no need to reproduce that code.
Anyone with GNUmach sources available: could you please
post the code of the idle loop? A quick fix for single
CPU systems should be possible and painless, though there
_will_ be issues in the SMP case.
--
Farid Hajji. http://www.farid-hajji.net/address.html
Reply to: