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

Kazumaro Aoki ka at flu.if0.org
Tue Jul 8 15:18:59 UTC 2014


青木です

いろいろ情報ありがとうございます。
なんとなく「こうかな」と思って使っていた機能の詳細な動きがわかり、大変
助かります。

From: Hajimu UMEMOTO <ume at mahoroba.org>
Subject: [FreeBSD-users-jp 95230] Re: powerd with high frequency when idling
Date: Tue, 08 Jul 2014 00:23:40 +0900

>>>>>> On Mon, 07 Jul 2014 02:32:41 +0900 (JST)
>>>>>> Kazumaro Aoki <ka at flu.if0.org> said:
> 
> ka> 今まで数年間以下に書くやりたいことが出来ていたのですが、何かのタイミン
> ka> グでうまくいかなくなったというようです。
> 
> 夏場になってきて暑くなってきたからとか、ファンの調子が悪くなっていると
> か、エアフローが変わったとかではないですか?

もちろんその可能性は否定できません。
健在化したのは夏場になってきて熱くなったというのは確かにありそうです。

ただPCの設置状況もいじっていませんし、部屋の模様替えもしていませんして
いないので、エアフローについては変化はおそらくないだろうと思っています。
ファンについては、CPUファンのみのPCで、それも計算していない時は多くの時
間は止まっています。その音も耳で聞く限りは変わっていないように思うので、
調子が悪くなっているとは思ってなかったのですが、毎日聞いている音なので、
ちょっとした変化の積み重ねであれば気がついてないかもしれません。

> ka> やりたいこととしては、
> ka> 1. CPUの温度が高くなり過ぎないようにCPUの動作周波数を調整したい
> ka> 2. CPUのidle時には動作周波数を落したい。もちろん、必要な時は動作周波数
> ka>    をあげたい。
> ka> 上記1の優先順位を2より高く設定したいと考えています。
> 
> この要求はデザインに反しています。わざわざ、1 の優先順位を上げて実装し
> ています。
> CPU 温度が高い状態は critical であり、高い優先度で確実に落とすため、
> passive cooling を kernel で実装しています。この緊急時に userland から
> 介入されては困るのです。

設計思想を理解しました。
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 を指定しなければ変更できない
> ようにしています。

passive_colingについての設計思想も理解しました。
この設定を入れる前(BIOSのdefault設定)はCPU温度が70〜75度程度まで上がる
ことがありました。確かにこれぐらいの温度ではCPUは壊れないとも思うのです
が、今までのいくつかの経験では70度を越えた辺りからCPU以外の回り物のがど
んどん壊れていくので、そこまではCPU温度をあげたくないと思って上記設定と
しました。

> ka> 現在では、loadが0でもpassive coolingが効いてpowerdによる周波数制御が効
> ka> いてないということのようです。
> 
> powerd が idle を検知して freq を下げられるような状況で、passive
> cooling が動作していることがそもそも変です。
> _PSV の値が低すぎるのではないでしょうか。

そうかもしれません。正確な数字は覚えていませんが、昔測定された温度から
して、BIOSとしては70〜75度が_PSVとして期待されている値と思われます。

> ka> powerd -M 800
> ka> として、passive coolingが始まってしまう前にpowerdでCPUの温度が上がらな
> ka> いようにして動作周波数制御するしかないのかなぁと思い始めましたが、何か
> 
> powerd は温度管理はやらないので、『powerdでCPUの温度が上がらないように
> して』という意味は分かりかねますが、passive cooling の動きとして、温度
> が _PSV より下がれば、段階的に、passive cooling 動作開始時の freq にま
> で戻します。つまり、passive cooling では、元の freq より高くするような
> ことはしません。

動作の細かな説明ありがとうございます。
もちろん、powerd自体が温度管理をしないことは認識しています。

いろいろいただいた情報で現在の動作が完全に理解できました。
  計算が始まる→loadが大きくなる→powerdにより動作周波数が上がる
  →CPU温度が上がる→passive coolingにより、動作周波数の上昇が下げられる
まではよいのですが、このあと
  計算が終る→loadが下がる
となった時に
  powerdにより動作周波数を下げて欲しい
のですが、passive coolingにより動作周波数が下げられているので、
  powerdにより動作周波数が下げられない
  passive coolingが動作開始時のCPU周波数に戻そうとする
    つまり動作周波数が上がる
  CPU温度が上がる、またpassive coolingによる動作周波数が落ちる
の繰返しになっていたようです。

何か、powerdに代わるdaemonでもportsにあったりすると嬉しいのですが、こ
れぐらいならpassive coolingを止めるか、本当に緊急時に動いてもらうとい
うことで75度程度に設定して、自分で希望動作のdaemonを作ってもよいかも、
と思い始めました。

青木和麻呂@国分寺市在住


More information about the freebsd-users-jp mailing list