powerd to use sysctl to import temps to drop freq to avoid heat crash

Julian H. Stacey jhs at berklix.com
Tue Jan 3 03:33:35 UTC 2012


Hi, Thanks to all of Ian, Hajimu, Tino !

Hajimu UMEMOTO wrote

> Yes, it is implemented already in the kernel, and it should be done by
> the ACPI passive cooling.

I guess "ACPI passive cooling" means ACPI is supposed to turn down
CPU frequency ?  & maybe turn off anything else possible
(I need to read
 http://en.wikipedia.org/wiki/Advanced_Configuration_and_Power_Interface 
& URLs beyond (PS I added one to FreeBSD page).


> It seems to me that your ACPI BIOS has it, and when the temperature of
> your CPU become over 90.0C, it will effect.

90 sounds terribly hot, so I compared with my Toshiba Satelite
	hw.acpi.thermal.tz0._PSV: 107.9C
	hw.acpi.thermal.tz0._HOT: -1
	hw.acpi.thermal.tz0._CRT: 108.9C
The plastic under my new HP notebook is too hot to comfortably hold.
with	top 75% idle
	hw.acpi.thermal.tz0.temperature: 68.0C
	kern.acct_chkfreq: 15
	kern.timecounter.tc.i8254.frequency: 1193182
	kern.timecounter.tc.ACPI-safe.frequency: 3579545
	kern.timecounter.tc.HPET.frequency: 14318180
	kern.timecounter.tc.TSC.frequency: 1596012059
	net.inet.sctp.sack_freq: 2
	machdep.acpi_timer_freq: 3579545
	machdep.tsc_freq: 1596012059
	machdep.i8254_freq: 1193182
	dev.cpu.0.freq: 696
	dev.cpu.0.freq_levels: 1592/100000 1393/87500 1194/75000 995/62500 796/35457 696/31024 597/26592 497/22160 398/17728 298/13296 199/8864 99/4432
	dev.acpi_throttle.0.freq_settings: 10000/-1 8750/-1 7500/-1 6250/-1 5000/-1 3750/-1 2500/-1 1250/-1
	dev.powernow.0.freq_settings: 1592/100000 796/35457
	dev.powernow.1.freq_settings: 1592/100000 796/35457


> However, I'm not sure why your notebook keeps over heating & crashing.

OK, Thanks


Ian Smith wrote:
> On Mon, 2 Jan 2012 04:13:38 +0100, Julian H. Stacey wrote:
>  > Hi mobile at freebsd.org, CC a few others.
>
> Hi Julian.  Trimmed some, added ume@, feel free ..
>
>  > I propose to hack src/usr.sbin/powerd/powerd.c
>  > 	To import temperatures via sysctl, & if too high, to forcibly
>  > 	reduce CPU frequency, even if CPU load is high,
>  > because my new HP Pavillion notebook keeps over heating & crashing.
>
> As ume@ points out, passive cooling _should_ be handling this, and in
> any case - even if you get a forced shutdown at CRT temp. - it shouldn't
> be 'crashing'.  Please elaborate on 'crashing'?  and at what sort of

TCP failed, rdist & remote xterms & NFS fail, local mousepad fails.  I
didnt bother to try for a crash dump. I guessed damage was about to occur.


> temperature this occurs?

Low 80s I recall. Not sure, I thought that was so high damage would
occur, so I just turned off & put an external fan under.  I've
reverted to default values & started a remote xterm with
	while (1)
		sysctl -a | grep temp ; date ; echo ; sleep 10 ; end 

Before with
	sysctl -a | grep temp
I just got
	hw.acpi.thermal.tz0.temperature: 68.0C
	dev.acpi_hp.0.hdd_temperature: 4
after
	kldload amdtemp
I get a lot more temperatures:
	dev.acpi_hp.0.hdd_temperature: 4
	dev.amdtemp.0.%desc: AMD K8 Thermal Sensors
	dev.amdtemp.0.%driver: amdtemp
	dev.amdtemp.0.%parent: hostb4
	dev.amdtemp.0.sensor0.core0: 51.0C
	dev.amdtemp.0.sensor0.core1: 49.0C
	dev.amdtemp.0.sensor1.core0: 58.0C
	dev.amdtemp.0.sensor1.core1: 56.0C
	dev.cpu.0.temperature: 57.0C
	dev.cpu.1.temperature: 57.0C
	hw.acpi.thermal.tz0.temperature: 66.0C


>  > dmesg & sysctl etc diagnostics at
>  > 	http://berklix.com/~jhs/hardware/hp/pavilion/dm3-1155ea/
>  > CPU: AMD Athlon(tm) Neo X2 Dual Core Processor L335 (1595.96-MHz K8-class CPU)
>  >   Origin = "AuthenticAMD"  Id = 0x60fb2  Family = f  Model = 6b  Stepping = 2
>
> Almost too much info :) esp. with sysctl -a including the verbose dmesg,
> but I noticed a couple of things on a quick skim.

Sorry I haven't got to grips which of these should be on & off so
now turned on all of
	debug.bootverbose: 1
	debug.cpufreq.verbose: 1
	debug.hwpstate_verbose: 1
	dev.acpi_hp.0.verbose: 0	# set to "1" in loader.conf but ignored.
	hw.acpi.verbose: 1


>  If you run powerd -v,
> what sort of freqs does it usually run at, when more or less idle?

When 75 to 90% idle (from top)

sysctl -a | grep freq | grep -v "cpufreq"
	kern.acct_chkfreq: 15
	kern.timecounter.tc.i8254.frequency: 1193182
	kern.timecounter.tc.ACPI-safe.frequency: 3579545
	kern.timecounter.tc.HPET.frequency: 14318180
	kern.timecounter.tc.TSC.frequency: 1595998039
	net.inet.sctp.sack_freq: 2
	machdep.acpi_timer_freq: 3579545
	machdep.tsc_freq: 1595998039
	machdep.i8254_freq: 1193182
	dev.cpu.0.freq: 497
	dev.cpu.0.freq_levels: 1592/100000 1393/87500 1194/75000 995/62500 796/35457 696/31024 597/26592 497/22160 398/17728 298/13296 199/8864 99/4432
	dev.acpi_throttle.0.freq_settings: 10000/-1 8750/-1 7500/-1 6250/-1 5000/-1 3750/-1 2500/-1 1250/-1
	dev.powernow.0.freq_settings: 1592/100000 796/35457
	dev.powernow.1.freq_settings: 1592/100000 796/35457

On an idle machine,
(with a little patch from Gary J. to allow for multiple cores:
	/src/bsd/fixes/FreeBSD/src/gen/usr.sbin/powerd.c.REL=8.2-RELEASE.diff
running powerd -v	# Using defaults
	powerd: using sysctl for AC line status
	powerd: using devd for AC line status
	load  64%, current freq  199 MHz (10), wanted freq  339 MHz
	changing clock speed from 199 MHz to 398 MHz
	powerd: error setting CPU frequency 398: Invalid argument
	load  27%, current freq  398 MHz ( 8), wanted freq  339 MHz
	load   7%, current freq  398 MHz ( 8), wanted freq  328 MHz
	load   4%, current freq  398 MHz ( 8), wanted freq  317 MHz
	load   8%, current freq  398 MHz ( 8), wanted freq  307 MHz
	load  12%, current freq  398 MHz ( 8), wanted freq  297 MHz
	changing clock speed from 398 MHz to 298 MHz
	powerd: error setting CPU frequency 298: Invalid argument
	load  25%, current freq  298 MHz ( 9), wanted freq  297 MHz
	load   7%, current freq  298 MHz ( 9), wanted freq  287 MHz
	load  14%, current freq  298 MHz ( 9), wanted freq  278 MHz
	load  15%, current freq  298 MHz ( 9), wanted freq  269 MHz
	load   7%, current freq  298 MHz ( 9), wanted freq  260 MHz
	load   6%, current freq  298 MHz ( 9), wanted freq  251 MHz
	load   0%, current freq  298 MHz ( 9), wanted freq  243 MHz
	load   4%, current freq  298 MHz ( 9), wanted freq  235 MHz
	load  10%, current freq  298 MHz ( 9), wanted freq  227 MHz
	load   0%, current freq  298 MHz ( 9), wanted freq  219 MHz
	load  17%, current freq  298 MHz ( 9), wanted freq  212 MHz
	load   0%, current freq  298 MHz ( 9), wanted freq  205 MHz
	load   3%, current freq  298 MHz ( 9), wanted freq  198 MHz
	changing clock speed from 298 MHz to 199 MHz
	powerd: error setting CPU frequency 199: Invalid argument
	load  42%, current freq  199 MHz (10), wanted freq  221 MHz
	changing clock speed from 199 MHz to 298 MHz
	powerd: error setting CPU frequency 298: Invalid argument
	load  33%, current freq  298 MHz ( 9), wanted freq  221 MHz
	load   4%, current freq  298 MHz ( 9), wanted freq  214 MHz
	load  10%, current freq  298 MHz ( 9), wanted freq  207 MHz
	load   4%, current freq  298 MHz ( 9), wanted freq  200 MHz
	load   4%, current freq  298 MHz ( 9), wanted freq  193 MHz
	changing clock speed from 298 MHz to 199 MHz
	powerd: error setting CPU frequency 199: Invalid argument
	load  57%, current freq  199 MHz (10), wanted freq  293 MHz
	changing clock speed from 199 MHz to 298 MHz
	powerd: error setting CPU frequency 298: Invalid argument
	load  27%, current freq  298 MHz ( 9), wanted freq  293 MHz
	load   3%, current freq  298 MHz ( 9), wanted freq  283 MHz
	load  11%, current freq  298 MHz ( 9), wanted freq  274 MHz
	load   9%, current freq  298 MHz ( 9), wanted freq  265 MHz
	load  13%, current freq  298 MHz ( 9), wanted freq  256 MHz
	load   7%, current freq  298 MHz ( 9), wanted freq  248 MHz
	load  10%, current freq  298 MHz ( 9), wanted freq  240 MHz
	load   0%, current freq  298 MHz ( 9), wanted freq  232 MHz
	load   4%, current freq  298 MHz ( 9), wanted freq  224 MHz
	load   0%, current freq  298 MHz ( 9), wanted freq  217 MHz
	load  10%, current freq  298 MHz ( 9), wanted freq  210 MHz
	load  10%, current freq  298 MHz ( 9), wanted freq  203 MHz
	load  12%, current freq  298 MHz ( 9), wanted freq  196 MHz
	changing clock speed from 298 MHz to 199 MHz
	powerd: error setting CPU frequency 199: Invalid argument
	load  60%, current freq  199 MHz (10), wanted freq  313 MHz
	changing clock speed from 199 MHz to 398 MHz
	

> Are
> you using default powerd settings?

I was when it crashed too often to be useful.
accepting values from /etc/defaults/rc.conf
but it crashed too much, so my rc.conf is now set to give:
	/usr/sbin/powerd -a adaptive -b minimum -n minimum


> When running on battery can you
> monitor power use with acpiconf -i0 to see the actual effect on power
> usage of running at various lower freqs?

	Wow what a nice command !
		Design capacity:        57276 mWh
		Last full capacity:     55544 mWh
		Technology:             secondary (rechargeable)
		Design voltage:         11100 mV
		Capacity (warn):        5554 mWh
		Capacity (low):         0 mWh
		Low/warn granularity:   555 mWh
		Warn/full granularity:  555 mWh
		Model number:           5160
		Serial number:          Li4402A
		Type:                   Li
		OEM info:                Hewlett-Packard
		State:                  high
		Remaining capacity:     100%
		Remaining time:         unknown
		Present rate:           unknown
		Present voltage:        12375 mV

Yes I could do that. I dont see anything that's going to give me
instantaneous consumption readings above though, & battery state
prediction is generaly not accurate. However, I can do better, I
can connect a power meter between wall supply & transformer
(battery will be irrelevant if full, not charging) & see how much
power is going in.  & a temperature probe underneath.  (OK, heat
emitted by screen I don't care about, (just any heat in chassis,
from inefficiency converting for screen), I'll see if I can turn
off screen with keys or BIOS)

But I guess another way is to hack the ACPI to turn the fan on at
lower threshold. ? Maybe I'll have to tweak what I got from acpidump -dt
  http://berklix.com/~jhs/hardware/hp/pavilion/dm3-1155ea/jhs-hp-pPavilion-dm3-1155ea.asl
per:
  http://www.freebsd.org/doc/en_US.ISO8859-1/books/handbook/acpi-debug.html


>  I see dev.powernow.0.freq_settings: 1592/100000 796/35457 ie just two
> speeds, with dmesg showing:
>  acpi_throttle0: <ACPI CPU Throttling> on cpu0
>  acpi_throttle0: P_CNT from P_BLK 0x410
>  powernow0: <PowerNow! K8> on cpu0
>  powernow1: <PowerNow! K8> on cpu1

powernow & throttling all new to me,  I must web search.
sysctl -d dev.powernow.0.freq_settings
	dev.powernow.0.freq_settings: CPU frequency driver settings

> If you disabled acpi_throttle0 in loader, you won't get all those N/8
> rates from throttling.  I'm not sure, esp on AMD hardware, whether those
> rates actually provide any cooling benefit or not.  I guess you've read
> mav@'s power tuning guide for hints on reducing power (thus, heat)?

No I haven't. but thanks for tip I found
	http://people.freebsd.org/~mav/power.pdf
		In Russian (or some kind of Cyrillic) I only have E &
		German & French.  I'll page through & look at syntax :-)
	http://people.freebsd.org/~mav/power.prd
		file power.prd:
			 CDF V2 Document, Little Endian, Os 0,
			 Version: 1.0, Code page: -535
		viewed with OpenOffice. whhatever it is, not useful for this.

> I also notice only C1 states, but using machdep.idle: amdc1e so I wonder
> if you're getting benefit from that?  Are there BIOS settings re that?

I didnt know what C1 was. Found it:
  http://en.wikipedia.org/wiki/Advanced_Configuration_and_Power_Interface

sysctl -a | grep machdep.idle
	machdep.idle: amdc1e
	machdep.idle_available: spin, amdc1e, hlt, acpi, 
sysctl -d machdep.idle
	machdep.idle: currently selected idle function
sysctl -d machdep.idle_available
	machdep.idle_available: list of available idle functions

Where are you seeing the C1 ? Wkipedia does make C1E sound more desirable.

I went throught the screen BIOS a while back & found no power
/ temp / frequency options, was a rather limited BIOS.


>  > Is this re-inventing the wheel ?
>  > Anyone else out there working on or know of similar code ?
>
> A few people have been down this road, you'd need to search the acpi@
> archives from a few years ago.  Nate Lawson was then firmly opposed to
> the idea, but you'll find some code there, in various older PRs too,
> though it seems none of those are still 'open'.

Thanks, will do.


>  > mgdiff 8.2-RELEASE/src/usr.sbin/powerd/powerd.c \
>  > 	/pub/FreeBSD/branches/-current/src/usr.sbin/powerd/powerd.c
>  > does not show a lot of difference.
>  >
>  > >From
>  > http://www.freebsd.org/cgi/cvsweb.cgi/src/usr.sbin/powerd/powerd.c
>  >    I added a few people to CC particularly mav@ has an interesting comment
>  > 	Wed Jun 16 15:09:45 2010 UTC (
>  > 	Freq sysctls are quite heavy due to set of malloc()/free()
>  > 	calls. Avoid reading current frequency on every period.
>  > 	Instead do it only after changing and periodically from
>  > 	time to time if somebody else change it.
>  >
>  > 	Also dynamically decrease sampling frequency up to 4 times
>  > 	on inactivity,
>  >
>  >    Gary J: there's a comment at Fri Jan 9 22:10:07 2009  re. more then 2 CPUs
>  >
>  >    I added Clive who may have some URL to CPU temps.
>  >
>  > To
>  > 	 /boot/loader.conf
>  > I just added
>  > 	 acpi_hp_load="YES"
>  > (after reboot) does not produce /dev/hpcmi
>
> I don't see any mention of active cooling (ie, fan/s) in your sysctls,
> including acpi_hp.

Yes, been puzzling me that, There is one little fan slot, doesnt
seem to blow hot right now, when under case too hot to hold.
Yes I cant see revs/min

>  Here I'm running a custom script to control CPU fan
> via acpi_ibm (the auto fan didn't cut in till over 65C, then pumped it
> down to ~45C), but it seems you may not have access to fan control?

I dont know how to control the fan. I'd like to see your script please,
or at least commands you'r running.

kldload acpi_ibm ; kldstat
	kernel sound.ko snd_hda.ko acpi_hp.ko acpi_wmi.ko linux.ko
	linux_adobe.ko radeon.ko drm.ko acpi_ibm.ko

> You could try setting hw.acpi.thermal.user_override=1 and then set
 hw.acpi.thermal.tz0._PSV to something lower than 90C, perhaps much lower
> to see if it helps, especially if 'crashing' occurs closer to 90C than
> not, however:

sysctl hw.acpi.thermal.tz0._PSV
	hw.acpi.thermal.tz0._PSV: 90.0C
sysctl hw.acpi.thermal.user_override
	hw.acpi.thermal.user_override: 0
sysctl hw.acpi.thermal.user_override
sysctl hw.acpi.thermal.tz0._PSV=60.0C
sysctl -a | grep acpi.thermal
	hw.acpi.thermal.min_runtime: 0
	hw.acpi.thermal.polling_rate: 10
	hw.acpi.thermal.user_override: 1
	hw.acpi.thermal.tz0.temperature: 69.0C
	hw.acpi.thermal.tz0.active: -1
	hw.acpi.thermal.tz0.passive_cooling: 1
	hw.acpi.thermal.tz0.thermal_flags: 1
	hw.acpi.thermal.tz0._PSV: 60.0C
	hw.acpi.thermal.tz0._HOT: 95.0C
	hw.acpi.thermal.tz0._CRT: 100.0C
	hw.acpi.thermal.tz0._ACx: -1 -1 -1 -1 -1 -1 -1 -1 -1 -1
	hw.acpi.thermal.tz0._TC1: 2
	hw.acpi.thermal.tz0._TC2: 3
	hw.acpi.thermal.tz0._TSP: 40

I think that's forced the frequency down,  Xterm to machine is sluggish
& powerd -v reports:
	changing clock speed from 99 MHz to 1592 MHz
	load 177%, current freq   99 MHz (11), wanted freq 3184 MHz
	changing clock speed from 99 MHz to 1592 MHz
	load 179%, current freq   99 MHz (11), wanted freq 3184 MHz
	changing clock speed from 99 MHz to 1592 MHz
	load 151%, current freq   99 MHz (11), wanted freq 3184 MHz

sysctl hw.acpi.thermal.tz0._HOT=62.0C
	I dont hear or feel fan faster.
	... just crashed.
>  > Running 80% idle (just a fsck_ufs) I see:
>  > 	hw.acpi.thermal.tz0.temperature: 67.0C
>  > 	dev.acpi_hp.0.hdd_temperature: 4
>
> 67C isn't really hot on a dual core laptop with 100W rating at 1592MHz.
> Still, if you had it drop back immediately on idle to 796MHz, you'd be
> saving about 60W, which may help considerable.
>
> I expect you've done the usual check/clean airways, thermal grease etc?

New notebook, used about 2 hours by mother in a clean office,
then by me ditto, however yes, might be manufacturing error & lack of grease.
Not opened it yet.


> Just a few quick notes, I've no time for deep diving lately .. HTH.
> cheers, Ian

Thanks Ian, you gave me a Lot of ideas to investigate :-)


Tino Engel <tino.engel at porno-muenchen.de> wrote: 


> I have put my laptop on a poer-set-box, so the ventilators are lying free. 
> That also help sometimes.

Yes, Thanks, I've put mine on extra rubber feet, & sometimes a fan
blowing under the back when on load. I'll try local shops eg
http://www.conrad.de/ce/de/FastSearch.html;jsessionid=30CC9116DFD7E7BDC51220C2755735E0.ASTPCCP11?search=laptop+unter+kuhl+luft&initial=true&categorycode=

English equivalent for globale readers:
http://http://www.conrad.com/websale7/?Ctx=%257bver%252f7%252fver%257d%257bst%252f417%252fst%257d%257bcmd%252f0%252fcmd%257d%257bm%252fwebsale%252fm%257d%257bs%252fconrad%252dint%252fs%257d%257bl%252fint%252fl%257d%257bp1%252f9c24b341a5c38cea506a342ea52db4cb%252fp1%257d%257bmd5%252f3b4f37d756fcc437913494526895d6cf%252fmd5%257d&dummychar=%3F&dp2=ff_search&search_input=Notebook+cooling+pad

Or lash up something out of Meccano with custom placement of fan outputs.
which would be OK for in office, but I want to solve the problem
so I can travel with this notebook (/ "laptop burner ;-)" even if
I need to run at lower frequency or force fan faster somehow.

If I failed to cover something, please let me know, 
If nothing else I have more reading to do, then perhaps to resort to acpi@ archives & list.

Thanks Ian, Hajimu, Tino !

Cheers,
Julian
-- 
Julian Stacey, BSD Unix Linux C Sys Eng Consultants Munich http://berklix.com
 Reply below not above, cumulative like a play script, & indent with "> ".
 Format: Plain text. Not HTML, multipart/alternative, base64, quoted-printable.


More information about the freebsd-mobile mailing list