これは日々の作業を通して学んだことや毎日の生活で気づいたことをを記録しておく備忘録である。
HTML ファイル生成日時: 2024/11/21 17:40:55.112 (台灣標準時)
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." という記述があるでござる。
|
---|
なれど、 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 がほとんど利用されていないときには、動作 周波数を落として、温度を低く保ってほしいでござる。
|
---|
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/ に説明があるでござる。
|
---|
まず、 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 になったでござる。おおよそ期待通りに動いてくれているようでござる。