Información blog

Linux, tutoriales, noticias, sistemas, redes y seguridad informática, entre otras cosas.

miércoles, 10 de mayo de 2017

Cómo manipular el rendimiento de la CPU en Linux

El rendimiento de la CPU es algo que, dependiendo de la situación, puede resultar de vital importancia... A veces necesitamos que ésta actué de una forma distinta a la habitual y queremos sacarle el máximo partido para que se adapte a nuestras necesidades de la mejor forma posible... En el último artículo he hablado sobre la priorización y reserva de núcleos del procesador, cosa que nos puede resultar útil para sacarle el máximo partido, pero en este caso voy a hacer referencia a otro punto... A la manipulación frecuencia de las CPU dentro de Sistemas GNU/Linux.

CPU_Portada

La CPU puede trabajar a mayor o menor rendimiento si bien dependiendo la configuración que tengamos implantada en el equipo podemos tener una CPU a la que no estemos sacando partido, una CPU que está trabajando siempre a pleno rendimiento sin necesidad o una CPU cuya frecuencia varíe dependiendo del uso de la "demanda" del sistema. Cada una tiene sus ventajas y desventajas... A veces nos interesa tener la CPU trabajando siempre al mínimo, ya que puede ser que estemos usando un portátil y queramos que el consumo de batería sea bajo, además de que el tener la CPU en  un sistema de refrigeración "pobre" como el de un portátil (por ejemplo) hace que uno tema sobre-calentarla.

Todo esto es posible en cualquier sistema Linux, si bien dependiendo de las características del equipo que estemos manipulando, podremos hacer una serie de modificaciones u otras. Para poder hacer estas modificaciones tendremos que tener instalado el paquete cpufrequtils, el cual puede ser instalado desde los repositorios tal que así:

apt-get install cpufrequtils

Con este paquete y sus correspondientes dependencias instaladas, podríamos pasar a la manipulación de la CPU, cosa que no depende de comandos, sino del propio sistema, ya que los ficheros encargados de las tareas de la CPU estarían en: /sys/devices/system/cpu/cpuX/cpufreq/. Allá donde X haría referencia del número de núcleo que queremos modificar, pues esta modificación debe de ser hecha núcleo por núcleo... Si tuviese un sólo núcleo tendríamos solo cpu0, si tuviésemos dos cpu0 y cpu1 y así sucesivamente...

En este directorio veremos varios ficheros, de los cuales hay dos en especial que nos interesarían: scaling_governorscaling_available_governors.

El primer fichero contendría el comportamiento actual del procesador, mientras que el segundo mostraría todos los comportamientos disponibles para el susodicho... Aquí, tal y como he comentado antes, podemos encontrar diferentes opciones dependiendo de nuestro equipo, pero... ?Qué opciones tenemos y qué significa cada una de éstas? He aquí una explicación de cada comportamiento:


  • performance: Con esta opción lo que haríamos sería que el equipo trabajase con la CPU siempre con la frecuencia máxima. Esto no es demasiado recomendable a menos que se tenga un equipo alimentado a la corriente eléctrica y que tenga un buen sistema de refrigeración.
  • powersafe: Esta opción suele estar puesta por defecto en el scaling_governor de los portátiles, ya que tiene como objetivo que la CPU tenga la menor frecuencia posible y así consuma la menor batería posible al mismo tiempo que el equipo tendría menor riesgo de sobrecalentamiento.
  • ondemand: Sube o baja la frecuencia de la CPU dependiendo del uso de ésta... A mayor el uso de procesador, mayor la frecuencia y viceversa. Es la opción más popular y fiable de todas.
  • conservative: Actúa igual que Ondemand, con la diferencia de que este último realiza el cambio de frecuencia de forma paulatina, mientras que el anterior realiza el cambio de golpe.
  • userspace: Permite que un usuario con privilegios (como root) manipule a mano la frecuencia de la CPU... Esta opción no es demasiado fiable ya que da pie a que alguien introduzca un valor erróneo o un valor que empeore el rendimiento global del sistema.

Para cambiar el comportamiento de la CPU, solamente habría que introducir uno de los mencionados arriba en el fichero scaling_governor. Por ejemplo, si deseásemos que la CPU siempre trabajase al máximo y dicha opción apareciese en scaling_available_governors, ejecutaríamos el siguiente comando como root:

for i in /sys/devices/system/cpu/cpu[0-$(cat /proc/cpuinfo |grep 'processor' |wc -l)]/cpufreq; do echo 'performance' > $i/scaling_governor; done

Con este comando haríamos el cambio en todos los núcleos al mismo tiempo en vez de ir uno por uno realizando el cambio con el riesgo de dejarnos alguno por el camino. El problema que tiene el realizar el cambio de dicha forma es que en caso de reiniciar el equipo, los cambios realizados se perderían, cosa que generalmente no desearemos... Para evitar dicho problema, tendremos que hacer dicho cambio persistente, lo cual afortunadamente es muy sencillo, pues simplemente habría que crear un fichero llamado cpufrequtils dentro del directorio /etc/default y he introducir allí el valor GOVERNOR="comportamiento_deseado"; por ejemplo podríamos hacer:

  1. touch /etc/default/cpufrequtils
  2. echo 'GOVERNOR="ondemand"' > /etc/default/cpufrequtils

Gracias a esto, el comportamiento de la CPU sería el especificado por dicho fichero.

Si queremos saber exactamente a qué frecuencia estaría actualmente trabajando la CPU tendríamos que revisar el fichero cpuinfo_cur_freq dentro del mismo directorio que los dos ficheros anteriores, es decir en: /sys/devices/system/cpu/cpuX/cpufreq/. Dicho fichero mostraría la frecuencia en la que está trabajando el núcleo en MHZ, y se podrían consultar los ficheros correspondientes a todos los núcleos con el comando:

for i in /sys/devices/system/cpu/cpu[0-$(cat /proc/cpuinfo |grep 'processor' |wc -l)]/cpufreq; cat $i/cpuinfo_cur_freq; done

Si modificáis el valor de scaling_governor y luego consultáis el fichero cpu_cur_freq, veréis que su valor varía dependiendo del comportamiento introducido en el primer fichero, con lo que con cada modificación que se haga, uno se puede hacer una idea de a qué frecuencia se trabaja dependiendo del comportamiento seleccionado.

Como veis, la manipulación de la frecuencia de la CPU no es tan complicada como parece, simplemente hay que conocer los diferentes comportamientos y decidir cual de ellos se ajusta mejor a nuestras necesidades.

Espero que os haya resultado útil.

Saludos.

No hay comentarios :

Publicar un comentario