Я хочу, чтобы мое устройство использовало меньше процессора для экономии батареи. У меня есть программа, которая использует его в больших количествах. nice
не поможет, так как все, что она делает, это меняет расписание, когда процессор загружен на 100%, а я не хочу, чтобы он был так загружен
решение1
Чтобы заставить ваш процессор использовать меньше батареи, вам нужно, чтобы он работал медленнее. Общее количество инструкций процессора, необходимых для выполнения вашей программы, не зависит от скорости, с которой она выполняется, поэтому ограничение доли процессорного времени, используемого вашей программой, заставит ее использоватьболееCPU, не меньше. Когда ваш CPU ничего не делает вместо того, чтобы запускать вашу программу, он все равно потребляет энергию. В лучшем случае паузы, во время которых CPU ничего не делает, будут достаточно длинными, чтобы он перешел в состояние энергосбережения; но даже в этом случае вы заплатите штраф за дополнительные переходы состояний питания.
Ограничение доли процессорного времени, используемого вашим процессом, может иметь косвенный эффект, вызывая переключение ядра на менее высокую тактовую частоту процессора. Произойдет ли это, зависит от выбораРегулятор частоты ЦПи точные цифры. Это произойдет с регулятором по умолчанию (ondemand), но скорость трудно контролировать.
Если вы хотите сэкономить электроэнергию, лучшая стратегия — позволить вашей программе использовать 100% доступной мощности ЦП (чтобы она завершилась как можно быстрее), но переключить ЦП на максимально медленную работу (поскольку количество энергии, затрачиваемое на инструкцию, увеличивается с ростом скорости ЦП).
Частоту процессора можно настроить с помощью параметров в /sys/devices/system/cpu/cpu0/cpufreq
и его собратьях или с помощью различных пользовательских интерфейсов.утилиты cpufreqпредоставляют два инструмента командной строки:cpufreq-info
,cpufreq-set
. Eстьболее продвинутый набор инструментовназываетсямощность процессоракоторый теперь включен в исходники ядра. Если вы используете Gnome, вы можете использовать его апплет Cpufreq. Есть и другие GUI.
Чтобы максимально сэкономить заряд батареи, запустите процессор на минимальной частоте. Запустите cpufreq-info
для отображения доступных частот. Запустите cpufreq-set -c 0 -g powersave
, чтобы всегда запускать процессор 0 на минимальной частоте (повторите с увеличением значений для -c
других процессоров).
решение2
например, вы можете использовать cpulimit для определенного PID
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