Notebook

これは日々の作業を通して学んだことや毎日の生活で気づいたことをを記録しておく備忘録である。

HTML ファイル生成日時: 2024/12/21 11:44:57.596 (台灣標準時)

estd を使った CPU の動作周波数の管理

Intel の i5-8400 という CPU を NetBSD で使っているのでござるが、動作周 波数について、以下を選択することができるでござる。


% sysctl -a | grep freq
machdep.dmi.processor-frequency = 2800 MHz
machdep.tsc_freq = 2808003000
machdep.cpu.frequency.target = 2800
machdep.cpu.frequency.current = 2800
machdep.cpu.frequency.available = 2801 2800 2700 2500 2400 2200 2100 1900 1800 1700 1500 1400 1200 1100 900 800

2801 MHz を選ぶことができるのでござるが、これは、周波数を自動調整して くれるものとのことでござる。 https://www.netbsd.org/docs/guide/en/chap-power.html#chap-power-adjusting-cpu-freq に、 "Many modern hardware supports an "automatic adjustment" frequency, usually this will be a reported frequency that ends in 1. On systems without this functionality, sysutils/estd can be installed from pkgsrc to perform automatic adjustment depending on load in software, although it will be less efficient than hardware scaling." という記述があるでござる。

fig_202408/netbsd_cpu_freq_00.png

なれど、 2801 を選んでいると、 CPU の温度が常に 100 deg C くらいになっ ているでござる。 https://www.intel.com/content/www/us/en/products/sku/126687/intel-core-i58400-processor-9m-cache-up-to-4-00-ghz/specifications.html を見てみると、 T_JUNCTION の値は 100 deg C となっているでござる。 T_JUNCTION についての説明は、 "Junction Temperature is the maximum temperature allowed at the processor die." なので、 100 deg C までなら、問題ないようでござる。けれども、 "automatic adjustment" ならば、 CPU がほとんど利用されていないときには、動作 周波数を落として、温度を低く保ってほしいでござる。

fig_202408/netbsd_cpu_freq_01.png

https://www.netbsd.org/docs/guide/en/chap-power.html#chap-power-adjusting-cpu-freq には、 pkgsrc に含まれている sysutils/estd を使うという選択肢もある、 ということなので、 estd を使ってみることにするでござる。

estd の使い方については、 https://wiki.netbsd.org/tutorials/cpu_frequency_scaling/ に説明があるでござる。

fig_202408/netbsd_cpu_freq_02.png

まず、 pkgsrc を使って estd をインストールするでござる。


# cd /usr/pkgsrc/sysutils/estd
# make install

estd が動くかどうか試してみるでござる。


# estd -f
Supported frequencies (Rockchip Mode):
Domain 0: cpu0 cpu1 cpu2 cpu3 cpu4 cpu5
800 MHz
900 MHz
1100 MHz
1200 MHz
1400 MHz
1500 MHz
1700 MHz
1800 MHz
1900 MHz
2100 MHz
2200 MHz
2400 MHz
2500 MHz
2700 MHz
2800 MHz
2801 MHz

次に、 estd を起動するためのスクリプトを /etc/rc.d にコピーするでござる。


# cp -pi /usr/pkg/share/examples/rc.d/estd /etc/rc.d
# ls -lF /etc/rc.d/estd
-rwxr-xr-x  1 root  wheel  331 Aug  6 08:41 /etc/rc.d/estd*

次に、 /etc/rc.conf を編集するでござる。以下のような記述を /etc/rc.conf に追加すればよいようでござる。


estd=YES
estd_flags="-d -s -p 3000000 -g 1000000 -l 35 -h 85 -m 800 -M 2801"

/etc/rc.conf の内容を確認してみるでござる。 CPU の動作周波数の調整につ いて、三つの選択肢があるようでござる。一つ目は aggressive で、演算性能 重視ならこれを選ぶとよいようでござる。 -a オプションを使うと、この aggressive が利用できるでござる。二つ目は smooth で、バランスのとれた 調整ということだそうでござる。 -s オプションを使うと、この smooth を利 用できるでござる。三つ目 battery で、電力消費を抑えたい場合にこれを選 ぶとよいようでござる。 -b オプションを使うと、この battery を利用でき るでござる。また、 -m で最小の周波数を、 -M で最大の周波数を指定するこ とができるでござる。


# tail -2 /etc/rc.conf
estd=YES
estd_flags="-d -s -p 3000000 -g 1000000 -l 35 -h 85 -m 800 -M 2801"

estd を起動してみるでござる。


# /etc/rc.d/estd start
Starting estd.

動作周波数を見てみるでござる。


% sysctl -a | grep freq
machdep.dmi.processor-frequency = 2800 MHz
machdep.tsc_freq = 2808003000
machdep.cpu.frequency.target = 800
machdep.cpu.frequency.current = 800
machdep.cpu.frequency.available = 2801 2800 2700 2500 2400 2200 2100 1900 1800 1700 1500 1400 1200 1100 900 800

load average を見てみるでござる。


% w | head -1
 9:55AM  up  1:33, 12 users, load averages: 0.23, 0.27, 0.17

負荷をかけてみるでござる。


% w | head -1
 9:57AM  up  1:35, 13 users, load averages: 1.82, 0.75, 0.36

動作周波数を見てみるでござる。


% sysctl -a | grep freq
machdep.dmi.processor-frequency = 2800 MHz
machdep.tsc_freq = 2808003000
machdep.cpu.frequency.target = 1700
machdep.cpu.frequency.current = 1700
machdep.cpu.frequency.available = 2801 2800 2700 2500 2400 2200 2100 1900 1800 1700 1500 1400 1200 1100 900 800

動作周波数が 1700 MHz まで上がってきたでござる。

更に負荷をかけてみるでござる。


% w | head -1
10:02AM  up  1:39, 14 users, load averages: 10.97, 4.71, 2.07

動作周波数を見てみるでござる。


% sysctl -a | grep freq
machdep.dmi.processor-frequency = 2800 MHz
machdep.tsc_freq = 2808003000
machdep.cpu.frequency.target = 2801
machdep.cpu.frequency.current = 2801
machdep.cpu.frequency.available = 2801 2800 2700 2500 2400 2200 2100 1900 1800 1700 1500 1400 1200 1100 900 800

2801 になったでござる。おおよそ期待通りに動いてくれているようでござる。



Frequently accessed files

  1. Computer___Python/20220518_0.html
  2. Computer___Network/20230726_00.html
  3. Misc___Taiwan/20240207_00.html
  4. Computer___Network/20230516_00.html
  5. Computer___FreeBSD/20220621_0.html
  6. Computer___Python/20220715_0.html
  7. Computer___Network/20230508_00.html
  8. Food___Taiwan/20220429_0.html
  9. Computer___Network/20240130_00.html
  10. Computer___NetBSD/20220817_3.html
  11. Computer___Python/20220410_0.html
  12. Computer___Network/20240416_00.html
  13. Computer___NetBSD/20230119_00.html
  14. Computer___Debian/20210223_1.html
  15. Computer___Python/20221013_0.html
  16. Computer___Python/20210124_0.html
  17. Computer___NetBSD/20220428_0.html
  18. Computer___NetBSD/20220818_1.html
  19. Computer___NetBSD/20240101_02.html
  20. Science___Math/20220420_0.html
  21. Computer___Python/20240101_00.html
  22. Computer___NetBSD/20220808_0.html
  23. Computer___TeX/20230503_00.html
  24. Science___Astronomy/20220503_0.html
  25. Computer___NetBSD/20230515_00.html
  26. Computer___Network/20220413_1.html
  27. Computer___NetBSD/20210127_0.html
  28. Computer___TeX/20231107_00.html
  29. Computer___Python/20220816_1.html
  30. Computer___Python/20230717_01.html


HTML file generated by Kinoshita Daisuke.