Un usuario ha hecho un script en Scripts para regular la frecuencia del procesador en función de la temperatura para gestionar la actividad del procesador en torno a la temperatura… ¿Pero eso no se supone que lo hacen los drivers en Linux? por ejemplo el Intel-ucode para Intel y otras piezas mas que irían en el kernel.
Sí, y no lo sustituye.
Por defecto, el kernel establece la frecuencia máxima y mínima de cada núcleo del procesador, además de una “máxima” dinámica y la frecuencia actual, etntre otras cosas.
Para ser sincero, no sé muy bien qué parte la hace el kernel, qué el microcódigo del procesador, qué papel cumple ACPI (a través de BIOS o UEFI) y qué parte está limitado por hardware.
El script sólo cambia la máxima dinámica, lo que reduce la frecuencia efectiva sólo si ésta era más alta; si ya era baja porque había poca carga de trabajo, pues nada. Es un método muy de andar por casa, pero funciona, y por lo que sé no supone ningún peligro.
Puedes ver qué valores tiene establecidos tu procesador con el siguiente comando:
cat /sys/devices/system/cpu/cpu0/cpufreq/*
Y a qué valores se refieren con:
ls -l /sys/devices/system/cpu/cpu0/cpufreq/
El valor que altera el script es scaling_max_freq.
Olvidé mencionarlo: Los comandos que vi antes muestran el valor general del procesador (cpu0), pero no de los núcleos individuales. Según el procesador que tengas, puede ser sólo uno o haber muchos: cpu1, cpu2, cpu3…
Puedes cambiar ese valor con un simple comando para todos: sudo echo VALOR | tee /sys/devices/system/cpu/cpu*/cpufreq/scaling_setspeed > /dev/null
Fíjate dónde está puesto el asterisco (*): Eso es as’para que ajecte a todos los núcleos por igual. Ahora, con los nuevos equipos con varios núcleos distintos (de alto y bajo rendimiento), no sé cómo podría hacer el mismo script.
El valor es en kHz. Si tu procesador admite, por ejemplo, 3,2Ghz, ese valor debería ser 3200000 como máximo (si pones más, se verá limitado por cpuinfo_max_freq, que no se puede cambiar; no vale para hacer overclocking). Si pones, por ejemplo, 800000 (0,8Ghz, 800Mhz) notarás que el ordenador va lento al pedirle tareas pesadas.
Los valores que he usado de ejemplo son los de mi procesador. El script lee los valores cpuinfo_max_freq y cpuinfo_min_freq y los toma como referencia para sus cálculos.
Aún no he comprobado si en micros AMD funciona igual, o si los de arquitectura ARM u otros siguen la misma lógica. Tengo que hacer pruebas en otros equipos, pero tengo los que tengo…