프로세스가 CPU를 덜 사용하도록 하는 방법이 있습니까?

프로세스가 CPU를 덜 사용하도록 하는 방법이 있습니까?

배터리를 절약하기 위해 장치에서 CPU를 덜 사용하고 싶습니다. 많은 양을 사용하는 프로그램이 있습니다. niceCPU가 %100일 때 스케줄을 변경하는 것뿐이므로 도움이 되지 않습니다. CPU가 그렇게 높아지는 것을 원하지 않습니다.

답변1

CPU가 배터리를 덜 사용하게 하려면 CPU가 더 느리게 실행되어야 합니다. 프로그램을 실행하는 데 필요한 CPU 명령의 총량은 실행 속도에 좌우되지 않으므로 프로그램에서 사용하는 CPU 시간의 비율을 제한하면 프로그램을 더 많이 사용하게 됩니다.CPU, 그 이하도 아닙니다. CPU가 프로그램을 실행하는 대신 아무것도 하지 않을 때에도 여전히 전력을 사용하고 있는 것입니다. 기껏해야 CPU가 아무 작업도 하지 않는 동안의 일시 중지 시간은 CPU가 절전 상태로 전환될 만큼 길어질 것입니다. 하지만 그런 경우에도 추가 전원 상태 전환에 대해 벌금을 지불하게 됩니다.

프로세스에서 사용하는 CPU 시간의 비율을 제한하면 커널이 덜 빠른 CPU 클럭 속도로 전환되는 간접적인 효과가 있을 수 있습니다. 이런 일이 발생하는지 여부는 선택에 따라 다릅니다.CPU 주파수 거버너그리고 관련된 정확한 숫자. 기본 거버너(온디맨드)를 사용하면 발생하지만 속도를 제어하기가 어렵습니다.

전력을 절약하려는 경우 가장 좋은 전략은 프로그램이 사용 가능한 CPU 전력의 100%를 사용하도록 하여(가능한 한 빨리 완료되도록) CPU를 가능한 한 느리게 실행하도록 전환하는 것입니다(에너지량이 너무 많기 때문에). 명령어당 지출되는 비용은 CPU 속도에 따라 증가합니다.

/sys/devices/system/cpu/cpu0/cpufreq매개변수 와 그 사촌 또는 다양한 사용자 인터페이스를 통해 CPU 주파수를 구성할 수 있습니다 . 그만큼CPUFreq 유틸리티두 가지 명령줄 도구를 제공합니다.cpufreq-info,cpufreq-set. 이있다고급 도구 모음~라고 불리는CPU 파워이제 커널 소스에 포함되었습니다. Gnome을 사용하는 경우 Cpufreq 애플릿을 사용할 수 있습니다. 다른 GUI도 있습니다.

가능한 한 많은 배터리를 절약하려면 CPU를 최소 주파수로 실행하십시오. 사용 가능한 주파수를 표시하려면 실행하세요 cpufreq-info. 항상 최소 빈도로 CPU 0을 실행하려면 실행합니다 ( 다른 CPU에 cpufreq-set -c 0 -g powersave대해 값을 늘려 반복 ).-c

답변2

예를 들어 특정 PID에 대해 cpulimit를 사용할 수 있습니다.

 sudo cpulimit -b -l 80 -p 1183

레니스:

renice +19 1183

그러면 1183에 대해 가능한 가장 낮은 우선순위가 설정됩니다.

답변3

이에 대한 우아한 해결책이 있는지는 모르겠지만 신호를 사용하여 프로세스를 중지했다가 다시 시작할 수 있습니다.

PID=1234
mode=running
run_time=0.1
stop_time=0.1
while true; do
  if [ running = "$mode" ]; then
    kill -STOP "$PID"
    mode=stopped
    sleep "$run_time"
  else
    kill -CONT "$PID"
    mode=running
    sleep "$stop_time"
  fi
done

관련 정보