monitor/mwait support for idle

Andrew Gallatin gallatin at cs.duke.edu
Mon Apr 21 20:11:12 UTC 2008


Jeff Roberson writes:
 > http://people.freebsd.org/~jeff/mwait.diff
 > 
 > This patch implements support for the x86/amd64 monitor and mwait 
 > instructions in the idle loop.  This also implements idle loop selection 
 > via a sysctl string.  The following loops are supported, in 
 > decreasing order of performance and power consumption:
 > 
 > spin      - Simply returns
 > mwait     - Always use mwait to sleep.  CPU enters C0 or C1 depending on
 >              how busy it is.
 > mwait_hlt - Use mwait when busy but fall back to hlt/acpi when not.
 > hlt       - pure hlt loop
 > acpi      - uses acpi_cpu_idle if available and hlt if not.  This is the 
 > default.
 > 

Something which may be a bit confusing is that machines like recent
Core2 Xeons will go into C1E when hlt is executed, depending on an MSR
setting that most BIOSes enable (bit 25, MSR 0x1a0).  I think C1E
might be a deeper sleep than what is reached by mwait.  I confess that
I don't know much about C1E, other than it kills network io intensive
performance, and I turn off this (mis)feature whenever I can.

It will be interesting to see how much mwait helps.  I'm sure it will
save power over my current workaround of disabling hlt altogether :)

Drew



More information about the freebsd-arch mailing list