いくつかの計算を実行するプロセスがあります。これにより、システムのCPUが熱くなり、ファンが速く回転します。
プロセスを実行したいのですが、優先順位は低いです。システムが熱くなり、ファンが回転したくありません。この目標を達成することは可能ですか?
重要な場合は、私のCPUはAMD Ryzen 5 3500Uで、プロセスはブラウザタブです(Chromiumで実行していますが、役に立つ場合はブラウザを変更します)。役に立つ場合は、仮想マシンでブラウザ全体を実行することもあります。
私が試したことと失敗した理由:
これまでに発見された最善の解決策は、最大CPU周波数を制限することです。
echo 0 > /sys/devices/system/cpu/cpufreq/boost cpupower frequency-set -u 1200MHz
動作しますが、他のプロセスも影響を受けます。つまり、コンパイル、(圧縮)圧縮などの時間が長くなります。
また、CPU温度は、プロセスが実行されていないときよりも高く維持されます。許容温度に達したにもかかわらず。CPU制限ターゲットプロセスのパフォーマンスを低下させます。
許容 CPU 率を 50%( ) に設定すると、計算cpulimit -l 50 -p ...
が通常よりはるかに遅くなります(10 倍遅くなります。正確な速度低下を測定する良い方法はありません)。私はcgroupsで遊んだが、何の結果も得られなかった。
ニースは確かに影響を与えません。
私が試すべき他のものはありますか?
答え1
一部のガバナー(注文型と保守的)は、拡張または縮小を選択したときに肯定的なnice値を持つプロセスを無視するフラグをサポートしていることがわかりました。
nice_loadを無視:
このパラメーターの値は「0」または「1」です。 「0」(デフォルト)に設定すると、すべてのプロセスが「CPU使用率」の値として計算されます。 「1」に設定すると、「nice」値で実行されるプロセスは、全体使用量計算では計算されません(したがって無視されます)。これは、ラップトップでCPU集約的な計算を実行して完了するのにかかる時間が重要でない場合に便利です。これは、「最適化」しているかどうかに関する意思決定プロセスに関与するのを防ぐことができるからです。 CPU周波数を上げるには
オンデマンドガバナーをロードし、対応するignore_nice_load
フラグを有効にしてから、優先順位の低い常に評価されるプロセスに適切な値を設定しました。
# load and enable the ondemand governor
sudo modprobe cpufreq_ondemand
sudo cpupower frequency-set -g ondemand
# enable ignore_nice_load
echo 1 | sudo tee /sys/devices/system/cpu/cpufreq/ondemand/ignore_nice_load
# set a nice value to the target process
renice -n 19 -p PID
コンピューティングプロセスが常にコアの100%を占めていても、私のすべてのコアは常にクールに保たれます(ファンは静かです)。他のタスクに多くのコンピューティングパフォーマンスが必要になるたびにすぐに拡張されます。
答え2
LinuxではCPUコアあたりの最大周波数を設定できるので、私があなたなら次のことをします。
echo 2100000 | sudo tee /sys/devices/system/cpu/cpu0/cpufreq/scaling_max_freq`
(他の可能な値は1700000と1400000です)
次に、このCPU集約的なタスクを最初のコアに固定します(Unixでは「CPUアフィニティ設定」とも呼ばれます)。
sudo taskset -cp 0 $PID