Quiero que mi dispositivo use menos CPU para ahorrar batería. Tengo un programa que usa una gran cantidad. nice
no ayudará ya que todo lo que hace es cambiar la programación cuando la CPU está en %100, aunque no quiero que llegue a ese nivel
Respuesta1
Para que su CPU consuma menos batería, necesita que funcione más lento. La cantidad total de instrucciones de CPU necesarias para ejecutar su programa no depende de la velocidad a la que se ejecuta, por lo que limitar la proporción de tiempo de CPU utilizado por su programa haría que usemásCPU, nada menos. Cuando su CPU no hace nada en lugar de ejecutar su programa, todavía está usando energía. En el mejor de los casos, las pausas durante las cuales la CPU no hace nada serán lo suficientemente largas como para que entre en un estado de ahorro de energía; pero incluso entonces pagarás una multa por las transiciones de estado de energía adicional.
Limitar la proporción de tiempo de CPU utilizado por su proceso puede tener el efecto indirecto de hacer que el kernel cambie a una velocidad de reloj de CPU menos rápida. Que esto suceda depende de la elección degobernador de frecuencia de la CPUy los números exactos involucrados. Sucederá con el gobernador predeterminado (ondemand), pero la tasa es difícil de controlar.
Si desea ahorrar energía, la mejor estrategia es dejar que su programa use el 100% de la potencia disponible de la CPU (para que finalice lo más rápido posible), pero cambie su CPU para que funcione lo más lento posible (porque la cantidad de energía gastado por instrucción aumenta con la velocidad de la CPU).
Puede configurar la frecuencia de la CPU a través de parámetros en /sys/devices/system/cpu/cpu0/cpufreq
y sus primos, o con varias interfaces de usuario. Elutilidades cpufreqProporciona dos herramientas de línea de comando:cpufreq-info
,cpufreq-set
. Hay unconjunto de herramientas más avanzadollamadopotencia de la CPUque ahora está incluido en las fuentes del kernel. Si usa Gnome, puede usar su subprograma Cpufreq. Hay otras GUI.
Para ahorrar la mayor cantidad de batería posible, ejecute su CPU a su frecuencia mínima. Ejecute cpufreq-info
para mostrar las frecuencias disponibles. Ejecute cpufreq-set -c 0 -g powersave
para ejecutar siempre la CPU 0 a su frecuencia mínima (repita con valores crecientes para -c
las otras CPU).
Respuesta2
puedes usar cpulimit para PID específico, por ejemplo
sudo cpulimit -b -l 80 -p 1183
re bueno:
renice +19 1183
esto establecerá la prioridad al más bajo posible para 1183
Respuesta3
No sé si existe una solución elegante para esto, pero puedes detener y reiniciar el proceso con señales:
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