ハードウェア - モニタ - powerd・熱対策

クラウディア 
1. 概要
2. カーネルモジュールのロード
3. 起動
4. 調整
5. 表示の違い

1. 概要

 モニタリングから、少々、逸脱しますが。  「FreeBSD」にもともと用意されているデーモンで、「システムの状態をモニタリングし、パワーコントロールオプションをセット」できるそうで。  「CPU の負荷に応じて、CPUのクロックを変更し、電力消費を抑えること」ができるそうなのです。  実は、ここでわたしの本来の目的は、「電力消費を抑える」ことではないのです。  持っているマシンで、スペック的には申し分ないのですが、少し古く、内部にほこりがたまったり、ファンがへたったりしているためか、発熱がものすごく出るマシンがあるのです。  重たい「ports」を「make」していると、熱暴走して止まります。  強制停止になるのは、いいことで、以前、人のものですが、自作のマシンが発熱して、煙が出始めて、あわや火事になるかという経験もありますのでね。  ただそれでは、「ports」の「make」ができません。  「powerd」でなんとかできないものかと思った次第です。  「BIOS」をいじることも必要になりますが、ここでは「BIOS」については、割愛します。  本ページは、下記のサイトを参考にさせていただきました。
On-line Manual of "powerd"」
「powerd による省電力設定」
「FreeBSD で CPU の発熱や消費電力を抑える」
「powerd

2. カーネルモジュールのロード

 「powerd」を使用するには、「cpufreq」というカーネルモジュールをロードする必要があります。  テンポラリにロードするのであれば。

kldload cpufreq
 ここで、「BIOS」が対応できていないと。

kldload: an error occurred while loading module cpufreq. Please check dmesg(8) for more details.
 てなことになっちゃいます。  逆に。

kldload: can't load cpufreq: module already loaded or in kernel
 と表示されれば、「kernel」に組み込まれているので、以下の処理は不要で、次項へ進めるようです。  「boot」時に組み込むのであれば

/boot/loader.conf
 に、下記の1行を組み込んで、起動します。

cpufreq_load="YES"
 テンポラリにロードした場合も、「bootloader」へ組み込んだ場合も、うまくロードできているか確認するには。  「root」ユーザ権限で。

kldstat
 結果が下記のように、表示されます、

Id Refs Address                Size Name
 1   38 0xffffffff80200000  1d34598 kernel
 2    1 0xffffffff81f35000     7718 cryptodev.ko
 3    1 0xffffffff81f3e000   37c540 vmm.ko
 4    1 0xffffffff822bb000   5d51c8 zfs.ko
 6    1 0xffffffff828a4000     36c8 coretemp.ko
 7    1 0xffffffff83220000     2200 acpi_dock.ko
 8    1 0xffffffff83223000     3250 ichsmb.ko
 9    1 0xffffffff83227000     2178 smbus.ko
10    1 0xffffffff8322a000     21dc nmdm.ko
11    1 0xffffffff8322d000     7798 if_bridge.ko
12    1 0xffffffff83235000     60e0 bridgestp.ko
 Id や順番はともかくとして)、上記であれば 「Id 6 coretemp.ko」の行が表示されていれば、うまくロードできています。

3. 起動

 うまく、カーネルモジュールをロードできたら、「powerd」を有効化して、起動します。

sysrc powerd_enable=YES

service powerd start
 下記で。

service powerd status

powerd is running as pid 1054.
 となれば(数値は、プロセスID なのでまちまち)、動いているはずです。  うまく機能すれば、状態に合わせて、温度や周波数が調整されるはずで、前ページのようにモニタリングしてみます。

4. 調整

 「powerd」をしばらく使ってみましたが、オプション使わないとダメそうです。  忙しい時に、周波数をあげて、ひまなときに下げるだけ。  結局、思い「ports」を「make」すると、発熱で停止してしまいます。  オプションをいじります。

vi /etc/rc.conf

powerd_enable="YES"
 の下に、下記の行をいれます。

powerd_flags="-a min"
 これは、「AC」電源接続時に「最も大きな省電力を得るために最低の性能値を選択」しています。  この状態で、2、3日ようすを見ました。  これまでは、重い「ports」を「make」していると、すぐに 100℃ を超えて、110℃ あたりになって、マシンが停止するという状況でしたが。  まず、すぐには温度が上昇せず、70℃ あたりで、ものすごく負荷がかかるときでも、90℃ あたりで止まっています。  「rust」を「make」しても止まりませんでした。  オプション的に、常時、交流電源に接続しているので「-a」なのですが。デフォルトが「-a adaptive」なので、モードの調整はできないようです。

sysctl dev.cpu.0.freq_levels

dev.cpu.0.freq_levels: 2300/45000 2200/42264 2100/40021 2000/37387 1900/35236 1800/33127 1700/30647 1600/28627 1500/26648 1400/24305 1300/22413 1200/20566
 「-a adaptive」で、最高周波数を抑えるか、「-a minimum」で最低周波数をあげるか。  常時、周波数をあげおくのもばかな話か。  「-a adaptive ーM 1200」から徐々にあげて、しきい値をさぐることにしますか。  対象のマシンでは、「1900」あたりが限界のようです。  最低ラインからは、だいぶ上なので、よしとします。  2024年6月19日、また、熱でこけたので「1800」へ下げます。  2024年6月21日、「rust」の「portupgrade」で何度やってもこける、とうとう、「1300」まで下げることになってしまいました。

5. 表示の違い

 「CPU」やマザーボードにより、周波数や温度の表示がものすごく異なるようです。  東芝「DYNABOOK」「CPU: Intel(R) Core(TM) i7-3610QM CPU @ 2.30GHz (2294.87-MHz K8-class CPU)」の場合。

$ sysctl dev.cpu.0.freq_levels
dev.cpu.0.freq_levels: 2300/45000 2200/42264 2100/40021 2000/37387 1900/35236 1800/33127 1700/30647 1600/28627 1500/26648 1400/24305 1300/22413 1200/20566

$ sysctl dev.cpu | grep freq:
dev.cpu.7.freq: 1200
dev.cpu.6.freq: 1200
dev.cpu.5.freq: 1200
dev.cpu.4.freq: 1200
dev.cpu.3.freq: 1200
dev.cpu.2.freq: 1200
dev.cpu.1.freq: 1200
dev.cpu.0.freq: 1200

$ sysctl dev | grep temperature
dev.cpu.7.temperature: 64.0C
dev.cpu.6.temperature: 63.0C
dev.cpu.5.temperature: 67.0C
dev.cpu.4.temperature: 67.0C
dev.cpu.3.temperature: 63.0C
dev.cpu.2.temperature: 63.0C
dev.cpu.1.temperature: 66.0C
dev.cpu.0.temperature: 66.0C
 てな感じ。  「MOUSE」「CPU: Intel(R) Core(TM) i7-10750H CPU @ 2.60GHz (2600.00-MHz K8-class CPU)」の場合。

$ sysctl dev.cpu.0.freq_levels
dev.cpu.0.freq_levels: 2600/-1

$ sysctl dev.cpu | grep freq:
dev.cpu.11.freq: 897
dev.cpu.9.freq: 897
dev.cpu.7.freq: 897
dev.cpu.5.freq: 897
dev.cpu.3.freq: 897
dev.cpu.1.freq: 897
dev.cpu.10.freq: 897
dev.cpu.8.freq: 897
dev.cpu.6.freq: 897
dev.cpu.4.freq: 897
dev.cpu.2.freq: 897
dev.cpu.0.freq: 897

$ sysctl dev | grep temp
dev.pchtherm.0.temperature: 63.0C
dev.pchtherm.0.t2temp: 114.0C
dev.pchtherm.0.t1temp: 111.0C
dev.pchtherm.0.t0temp: 108.0C
dev.pchtherm.0.pmtemp: 77.0C
 見え方だけでいうと、「DYNABOOK」の方が好きかな、「MOUSE」の方がはるかにスペックのいいマシンなのですが・・・。
ハイスピードプラン5G CONNECT健康サポート特集