몇 가지 계산을 수행하는 프로세스가 있습니다. 이로 인해 시스템의 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