[FreeBSD-users-jp 95230] Re: powerd with high frequency when idling

Hajimu UMEMOTO ume at mahoroba.org
Mon Jul 7 15:24:18 UTC 2014


梅本です。

>>>>> On Mon, 07 Jul 2014 02:32:41 +0900 (JST)
>>>>> Kazumaro Aoki <ka at flu.if0.org> said:

ka> 今まで数年間以下に書くやりたいことが出来ていたのですが、何かのタイミン
ka> グでうまくいかなくなったというようです。

夏場になってきて暑くなってきたからとか、ファンの調子が悪くなっていると
か、エアフローが変わったとかではないですか?

ka> やりたいこととしては、
ka> 1. CPUの温度が高くなり過ぎないようにCPUの動作周波数を調整したい
ka> 2. CPUのidle時には動作周波数を落したい。もちろん、必要な時は動作周波数
ka>    をあげたい。
ka> 上記1の優先順位を2より高く設定したいと考えています。

この要求はデザインに反しています。わざわざ、1 の優先順位を上げて実装し
ています。
CPU 温度が高い状態は critical であり、高い優先度で確実に落とすため、
passive cooling を kernel で実装しています。この緊急時に userland から
介入されては困るのです。

ka> これまでは、sysctlで
ka> hw.acpi.thermal.user_override=1
ka> hw.acpi.thermal.tz0._PSV=65C
ka> hw.acpi.thermal.tz0._TC1=0
ka> hw.acpi.thermal.tz0._TC2=1
ka> hw.acpi.thermal.tz0._TSP=60
ka> hw.acpi.thermal.tz0.passive_cooling=1
ka> として、optionなしでpowerdを使っていたら上記内容が実現されていました。

passive cooling はそのような希望を叶えるためのものでは決してありません。
_PSV, _TC1, _TC2 _TSP の値は、本来 ACPI BIOS から得られるもの、つまり、
ベンダがそのハードに合わせた値です。これらの値は、変にいじると、
passive cooling が想定された動作をせず、熱暴走させる危険性があります。
元々、これらの値は read only でした。しかし、残念ながら、この値が適切で
ないハードがあることも確認されており、それらを救済するために、やむなく
変更できるようにしているだけです。しかし、単に更新できるだけでは安易に
変更される危険性があるので、user_override を指定しなければ変更できない
ようにしています。

ka> 現在では、loadが0でもpassive coolingが効いてpowerdによる周波数制御が効
ka> いてないということのようです。

powerd が idle を検知して freq を下げられるような状況で、passive
cooling が動作していることがそもそも変です。
_PSV の値が低すぎるのではないでしょうか。

ka> powerd -M 800
ka> として、passive coolingが始まってしまう前にpowerdでCPUの温度が上がらな
ka> いようにして動作周波数制御するしかないのかなぁと思い始めましたが、何か

powerd は温度管理はやらないので、『powerdでCPUの温度が上がらないように
して』という意味は分かりかねますが、passive cooling の動きとして、温度
が _PSV より下がれば、段階的に、passive cooling 動作開始時の freq にま
で戻します。つまり、passive cooling では、元の freq より高くするような
ことはしません。

-- 
梅本 肇    http://www.mahoroba.org/~ume/
ume at mahoroba.org  ume@{,jp.}FreeBSD.org
プログラムは書いた人の意図ではなく書かれた通り動く  I hate Modula-3 :-)


More information about the freebsd-users-jp mailing list