«Velocidad» bajo control


Introducción

Los procesadores modernos pueden controlar su frecuencia según sean las necesidades de los procesos que el sistema está corriendo. En general, las distribuciones Linux están configuradas para manejar esta frecuencia dinámicamente con un «governor» llamado «ondemand» el cual permite «acelerar» cuando es necesario e «irse a dormir» tan pronto como sea posible. Esto nos da la flexibilidad de usar todo el poder del procesador solo cuando realmente lo necesitamos, terminando los procesos lo más rápidamente posible para pasar inmediatamente a un estado de bajo consumo de recursos.

CPU «governors»

Existen varios governors disponibles, cada uno con sus características: conservative, userspace, powersave, ondemand, performance.

No entraré en detalles sobre el significado de cada uno de esos governors (pueden leer este enlace para más información), solo diré que sus nombres no suelen ser muy «representativos de la realidad» por lo que en la mayor parte de los casos powersave puede consumir más energía que ondemand.

En la mayor parte de los casos... pero no siempre.

Como se ha ya comentado, ondemand permite escalar la frecuencia del procesador para terminar los procesos lo más rápidamente posible y así pasar a idle cuanto antes. Este criterio resulta en un ahorro efectivo de energía cuando los procesos que demandan más recursos del sistema son breves, pero en situaciones en las que alguno de estos procesos es «largo» (por ejemplo, una vídeoconferencia de un par de horas en Skype) puede resultar en tener el procesador a full durante mucho tiempo, dando un excesivo recalentamiento del sistema, especialmente en portátiles.

En versiones anteriores de kde4, kpowersave permitía elegir el governor al crear un perfil de energía pero esta habilidad se ha perdido en el pasaje de hal a udev por lo que en estos momentos no existen para kde herramientas gráficas para controlar la velocidad del procesador.

¿Entonces? Pues hay que recurrir a la línea de comandos...

cpufrequtils

Este paquete, al menos en openSUSE, no suele estar instalado por defecto (si bien está disponible en los repositorios oficiales) por lo que hay que agregarlo manualmente.

Este programa ofrece varias herramientas de línea de comando que son simples de utilizar. La primera de ellas (que puede utilizarse como usuario normal) es

cpufreq-info

que da como resultado un texto donde se podrá leer cuáles governors están disponibles para cada uno de nuestros procesadores (si tenemos un «multicore») y cuál de ellos está en uso, entre otras cosas.

Para cambiar de un governor a otro debemos utilizar, esta vez como administrador, la instrucción cpufreq-set.

Debe tenerse presente que esta instrucción debe usarse una vez por cada «core» disponible. Por ejemplo, si tenemos un «dual core» y queremos pasar a powersave en ambos debemos aplicar:

cpufreq-set -c 0 -g powersave

cpufreq-set -c 1 -g powersave

(el primer procesador siempre está numerado como 0, el segundo como 1... el n-ésimo como n – 1). Para volver a ondemand (que, como hemos ya comentado es la opción mejor para la mayor parte de los casos) es solo necesario cambiar powersave por ondemand en las instrucciones anteriores.

Ciertamente es posible escribir un scrip para bash en modo tal de simplificar el trabajo, pero eso lo dejo como ejercicio para el lector...

Conclusión

En la abrumadora mayoría de los casos dejar el governor por defecto es quizás la decisión más sabia, pero en algunas situaciones podría resultar contraproducente: en vídeoconferencia con skype y con el governor ondemand, el procesador de mi pobre portátil pasaba rápidamente a más de 90 ºC lo cual no es muy recomendable para la vida útil de un sistema, sobre todo cuando no es nuevo... Pasar al governor powersave durante las vídeoconferencias ha reducido la temperatura de mi sistema en más de 30 ºC por lo que la pequeña utilidad presentada en este artículo es ciertamente de gran utilidad.

Más información (en inglés)

CPU Frequency Scaling - ArchWiki  

[KDE forums]KDE 4.5 RC1 - Power Management cpufreq governors