Script que permite apagar los Cores de una cpu

Hola a todos ayer por la noche antes de irme a dormir me dio por crear un script y creo que puede ser útil para los demás.


https://github.com/guillerg86/Bash/blob ... leCores.sh

Permite apagar los Core en linux de forma sencilla convirtiendo tu portátil en un single core, dual core.. De manera que se pueda ahorrar batería en los portátiles.

Si queréis tenerlo disponible desde cualquier carpeta en vuestro linux meterlo dentro de vuestras carpetas que hay mapeadas en el path, como por ejemplo /bin/ y si queréis quitarle el .sh quedara mas bonito

Para usarlo ./enableCores.sh 2

Donde 2 es el numero de Cores que queréis tener encendidos.
Ostia puta, no sabía que Linux ofrecía esa posibilidad.

Gracias
Dejo los mío por si gustan :)

Este lo tengo habilitado por defecto para desactivar el turbo_boost desde el inicio.

#!/bin/bash
echo 1 > /sys/devices/system/cpu/intel_pstate/no_turbo


Luego se debe crear un servicio y habilitarlo lo guardan en /etc/systemd/system/nombre_que_quieras.service

[Unit]
Description=Management Intel Turbo Boost
[Service]
ExecStart=/aqui_la_ruta_donde_lo_tengas

[Install]
WantedBy=multi-user.target


Luego este para bajar frecuencia o cambiar el modo del governor , apagar/prender el turbo_boost
#!/bin/bash

[[ $(id -u) != "0" ]] && echo "debes ser root..." && exit

TBOOST=$(cat /sys/devices/system/cpu/intel_pstate/no_turbo)
MODELO=$(awk 'BEGIN{FS=":"} /model name/ { print $2; exit }' /proc/cpuinfo | sed 's/ @/\n/' | head -1)
GOVERNOR="/sys/devices/system/cpu/cpu[0-9]"

while [[ $op != 6 ]];
do

echo "Modelo CPU :" $MODELO
[[ $TBOOST = 1 ]] && echo "Turbo Boost : Apagado" || echo "Turbo Boost : Encendido"
echo "Actual Governor : " $(cat $GOVERNOR/cpufreq/scaling_governor | head -n 1)
#echo -e "\nActuales Frequencias por Core : \n"
#cat $GOVERNOR/cpufreq/cpuinfo_cur_freq

echo -e '\n*************************
1-Cambiar a Modo Performance
2-Cambiar a Modo Powersave
3-Desactivar Turbo Boost
4-Activar Turbo Boost
5-Bajar Frecuencia Cpu 1200MHZ (ideal ahorro energía)
6-Salir
*************************\n'
read -p "Ingresar opcion: " op

case $op in
1)
for cpu in $GOVERNOR; do
echo performance > $cpu/cpufreq/scaling_governor
done
read -p "presione enter para continuar.." && clear
;;
2)
for cpu in $GOVERNOR; do
echo powersave > $cpu/cpufreq/scaling_governor
done
read -p "presione enter para continuar.." && clear
;;
3)
echo 1 > /sys/devices/system/cpu/intel_pstate/no_turbo
read -p "presione enter para continuar.." && clear
;;
4)
echo 0 > /sys/devices/system/cpu/intel_pstate/no_turbo
read -p "presione enter para continuar.." && clear
;;
5)
for cpu in $GOVERNOR; do
echo 1800000 > $cpu/cpufreq/scaling_max_freq
done
;;
6) exit;;
*)echo -e "\e[31mopcion no valida ingresa una opcion valida\e[0m"
esac

done

Saludos :)
Por saber..., aprender...
Apagar cores no hara que el resto tenga que trabajar a mas frecuencia para terminar las tareas aumentando esto el consumo?.
Aun asi si lo desactivas creo que solo su uso, no puedes apagarlo digamos ya que la energia llegara a todos ellos (con un consumo solo ligeramente menor al no escalar mayores frecuencias... a menos que estas también vengan ligadas a todos :/).

Para algo se diseñaron los rangos de frecuencias dinámicas que en gnu/linux fácilmente puedes especificar al mínimo... sino cosas asi vendrian de serie ahi y en otros sistemas pero normalmente solo se llevan esas tareas con hardware independiente sean cpu (en servers grandes o arm), graficas, discos duros, etc.
blackgem escribió:Por saber..., aprender...
Apagar cores no hara que el resto tenga que trabajar a mas frecuencia para terminar las tareas aumentando esto el consumo?.
Aun asi si lo desactivas creo que solo su uso, no puedes apagarlo digamos ya que la energia llegara a todos ellos (con un consumo solo ligeramente menor al no escalar mayores frecuencias... a menos que estas también vengan ligadas a todos :/).

Para algo se diseñaron los rangos de frecuencias dinámicas que en gnu/linux fácilmente puedes especificar al mínimo... sino cosas asi vendrian de serie ahi y en otros sistemas pero normalmente solo se llevan esas tareas con hardware independiente sean cpu (en servers grandes o arm), graficas, discos duros, etc.


En eso no tengo idea....
Lo que yo hago al menos me funciona y las frecuecias no suben, vamos que lo hice con el fin de no llegar a grandes temperaturas. Y hasta ahora me funciona bien. Cuando hay tareas más pesadas no se me sube la frecuencia ni las temperaturas que era lo que tanto quería y si bajo las frecuencias es cuando tengo mi laptops sin bateria.
blackgem escribió:Por saber..., aprender...
Apagar cores no hara que el resto tenga que trabajar a mas frecuencia para terminar las tareas aumentando esto el consumo?.

Tal caso sería solo si tuvieras varias tareas de trabajo medio (o sea, tareas que chupen la mitad de un core cada una), pero eso no es frecuente.

Lo normal es tener tareas de trabajo bajo (gui) y 1-2 tareas de trabajo alto (juegos, codificación de vídeo, etc... todas estas tienden a ocupar el core entero).

blackgem escribió:Aun asi si lo desactivas creo que solo su uso, no puedes apagarlo digamos ya que la energia llegara a todos ellos (con un consumo solo ligeramente menor al no escalar mayores frecuencias... a menos que estas también vengan ligadas a todos :/).

Ligeramente menor no, bastante menor.

Para que te hagas una idea, la cpu al 5% se queda en ~ 40ºC. La CPU al 25% ya se me queda en 65º (tengo 4 cores).

Es verdad que también se podría conseguir el mismo efecto diciéndole al programa que usara menos hilos (dejando así, unos cuantos cores desocupados). Tal caso sería lo mejor.
bueno y tampoco teneis encuenta las optimizaciones internas del procesador, ejemplo, si la cpu detecta que hay una parte de ella que no se está usando (mmm.. el machacador de floats, registros vectoriales...) desactiva esta parte.

Luego habría que ver, que es mejor, 4 cores a 800 mhz o un core entre 800-xxxx mhz. Y ya tambien dependiendo del trabajo que estes haciendo, tal vez te de igual que vaya "algo" lento el pc con tal que te dure 1 hora mas la bateria.
Hay un programa en android, Psynapse, en el cual, tiene varias opciones, aunque tambien depende del kernel. Mirando su codigo fuente, se pueden sacar cosas muy buenas.

https://github.com/AndreiLux/Synapse/wiki

Aunque, para ahorrar energia, tambien hay que mirar los amperes que van a los distintos puertos que no estan en uso, tales como usb, displayport,dvi,vga,hdmi y cosas por ese estilo. Aparte, tambien, la velocidad del fan del cpu y de paso, el brillo y velocidad del disco duro. Son varias cosas a la vez que habria que meter mano, si nos vamos al ahorro extremo de bateria.

Si mal no recuerdo, con este programa, se hace mucho de esas cosas

[bye]
Bueno en mi caso quizá la batería no se ha resentido mucho, pero si que he notado que el portátil se calienta menos que con todos los core (4 + HT) encendidos (sin haberle aplicado todavía el freq-scale a 800).

Tambien dispongo de los paquetes comentados arriba como

cpufreq-set, laptop-mode-tools, tlp

Obviamente la idea que yo he tenido es para cuando lo único que necesito es navegar por un foro o poca cosa que necesite poca cpu, de manera que apago los cores que no me hacen falta (dejo 1+HT) encendido y bajo la frecuencia de la cpu a 800Mhz

Llevo tiempo intentando alargar la batería de mi portatil en linux pero no hay forma de hacer que aguante tanto o mas como en windows... así que si se os ocurre alguna forma de conseguir que realmente la bateria mejore notablemente es de agradecer.

En Windows podría decir que haciendo 1 uso normal del pc (navegar, word, wifi) de la batería me llega a durar entre 3-5 horas. En Linux da gracias si llega a las dos horas.

- Bajo el brillo al mínimo
- Apago cpus innecesarias
- Bajo freq de cpu
- Apago bluetooth

Desactivar el wifi no es una opción.

Y por último me apetecía compartir algo jejeje
8 respuestas