Есть ли способ заставить ваш процесс использовать меньше ресурсов процессора?

3

Я хочу, чтобы мое устройство использовало меньше ресурсов процессора для экономии заряда аккумулятора. У меня есть программа, которая использует большое количество этого. niceне поможет, так как все, что он делает, это планирование изменений, когда процессор на 100%, в то время как я не хочу, чтобы это было так высоко

Джон
источник
Использование некоторого сценария для killпроцессов, потребляющих огромное использование процессора
Рамеш
На какой ОС вы работаете? Linux?
Братчли
1
Многие вопросы уже обсуждались в этом вопросе-ответе: Запустить программу на более низкой скорости процессора? , Там я подробно расскажу о cpulimit, а Жиль описывает набор задач.
slm

Ответы:

1

Чтобы ваш процессор потреблял меньше энергии, он должен работать медленнее. Общее количество инструкций ЦП, необходимых для выполнения вашей программы, не зависит от скорости, с которой она выполняется, поэтому ограничение доли времени ЦП, используемой вашей программой, заставит ее использовать больше ЦП, а не меньше. Когда ваш процессор ничего не делает вместо запуска вашей программы, он все еще использует энергию. В лучшем случае паузы, во время которых процессор ничего не делает, будут достаточными для перехода в состояние энергосбережения; но даже тогда вы заплатите штраф за переходы состояния дополнительной мощности.

Ограничение доли процессорного времени, используемого вашим процессом, может иметь косвенный эффект, заставляя ядро ​​переключаться на менее быструю тактовую частоту процессора. То, произойдет ли это, зависит от выбора регулятора частоты процессора и точных цифр. Это произойдет с регулятором по умолчанию (ondemand), но скорость трудно контролировать.

Если вы хотите сэкономить электроэнергию, лучшая стратегия состоит в том, чтобы ваша программа использовала 100% доступной мощности ЦП (чтобы она заканчивалась как можно быстрее), но переключала ваш ЦП на работу как можно медленнее (поскольку количество энергии расходуется на инструкцию увеличивается с увеличением скорости процессора).

Вы можете настроить частоту ЦП через параметры в /sys/devices/system/cpu/cpu0/cpufreqи его двоюродных братьях или с различными пользовательскими интерфейсами. В утилитах CPUfreq обеспечивают два инструмента командной строки: cpufreq-info, cpufreq-set. Существует более продвинутый набор инструментов под названием cpupower, который теперь включен в исходные коды ядра. Если вы используете Gnome, вы можете использовать его апплет Cpufreq. Есть и другие графические интерфейсы.

Чтобы сэкономить как можно больше батареи, запускайте процессор на минимальной частоте. Запустите cpufreq-infoдля отображения доступных частот. Запуск, cpufreq-set -c 0 -g powersaveчтобы всегда запускать CPU 0 на его минимальной частоте (повторите с увеличением значений для -cдругих процессоров).

жилль
источник
некоторые регуляторы могут быть настроены так, чтобы не увеличивать частоту процессора для хороших процессов.
Ctrl-Alt-Delor
0

Вы можете использовать cpulimit для конкретного PID, например

 sudo cpulimit -b -l 80 -p 1183

Renice:

renice +19 1183

это установит приоритет на минимально возможный для 1183

Клерк
источник
Это не сильно поможет, если вообще. Установка предела ЦП ниже 95% может привести к замедлению ЦП под регулятором ЦП по умолчанию (по требованию), что будет экономить энергию, но паузы выполнения будут потреблять энергию даром, что может компенсировать эту экономию.
Жиль
-2

Я не знаю, есть ли элегантное решение для этого, но вы можете остановить и перезапустить процесс с помощью сигналов:

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
Хауке Лагинг
источник
Это не изменит, сколько энергии потребляет процесс. (На самом деле он потребляет немного больше энергии из-за дополнительного планирования.)
Жиль
@Gilles Это верно, только если немодифицированный процесс потребляет меньше, чем легко адаптируемое соотношение $ run_time / $ stop_time. Конечно, процессор с паузой (не в (реальном) состоянии энергосбережения!) Действительно потребляет меньше энергии, чем работающий. Это не полезная стратегия вместо, а только после ограничения частоты (которое имеет соответствующий нижний предел).
Хауке Лагинг