Date: Sat, 19 Apr 2008 12:47:47 -1000 (HST) From: Jeff Roberson <jroberson@jroberson.net> To: Alfred Perlstein <alfred@freebsd.org> Cc: arch@freebsd.org Subject: Re: monitor/mwait support for idle Message-ID: <20080419124622.Q942@desktop> In-Reply-To: <20080419192152.GX95731@elvis.mu.org> References: <20080419004911.R942@desktop> <20080419192152.GX95731@elvis.mu.org>
next in thread | previous in thread | raw e-mail | index | archive | help
On Sat, 19 Apr 2008, Alfred Perlstein wrote: > Jeff, this is very interesting! > > I have a question about your earlier email. You mentioned that the > IPIs and communication to enter the idle state (hlt, mwait) is expensive. > > Perhaps something to track the number of times entering and exiting > the state would be a good idea. options COUNT_IPIS will tell you the number of physical IPIs delivered. options SCHED_STATS has statistics on the number of times we were preempted by a remote cpu. > > Additionally a tuneable for the number of spins before entering the > state might be a good idea. Perhaps spinning for "1" or "2" (where > 1/2 is one unit of hz) before entering idle might be a good compromise > to avoid hlt enter/exit thrashing. > > Let me know your thoughts on this. It may already be implemented > so just saying "we do that" would be fine too. :) Presently it's kern.sched.idlespinthresh and idlespins. I'm not sure I intend to leave those sysctls indefinitely. Jeff > > -Alfred > > * Jeff Roberson <jroberson@jroberson.net> [080419 03:56] wrote: >> 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. >> >> This also introduces a new MD function 'cpu_wake_idle' which allows MD to >> use a faster mechanism than IPI to wake idle. In the spin case this is a >> nop. For hlt and acpi we resort to an IPI. If the processor is sleeping >> in mwait we can simply write to a per-cpu buffer to wake it up. This >> saves considerable cpu cycles on the initiator and target. >> >> The prototype for cpu_idle() changed to accept an integer indication of >> how busy we are from the scheduler. If we have been busy MD code may >> choose to enter a higher power state on idle. ULE now spins for a short >> while if we have been very busy regardless of MD settings. >> >> There seems to be a problem entering C0 on the Xeons I have access to. It >> returns from mwait too quickly. Hopefully intel will respond to my email >> about that. >> >> Feedback welcome. >> >> Thanks, >> Jeff >> _______________________________________________ >> freebsd-arch@freebsd.org mailing list >> http://lists.freebsd.org/mailman/listinfo/freebsd-arch >> To unsubscribe, send any mail to "freebsd-arch-unsubscribe@freebsd.org" > > -- > - Alfred Perlstein >
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20080419124622.Q942>