Contenido


Reducción del consumo de energía de Linux, Parte 2

Configuraciones generales y específicas de reguladores

Conozca las configuraciones posibles y la forma en que éstas controlan el uso de energía

Comments

Contenido de la serie:

Este contenido es la parte # de # de la serie: Reducción del consumo de energía de Linux, Parte 2

Manténgase en contacto por contenidos adicionales de esta serie.

Este contenido es parte de la serie:Reducción del consumo de energía de Linux, Parte 2

Manténgase en contacto por contenidos adicionales de esta serie.

Configuraciones generales de CPUfreq

En primer lugar, demostraremos cuán sencillo es comenzar a usar el subsistema Linux CPUfreq detallando las configuraciones de uso y mostrando algunas opciones de interfaz. Comenzaremos por las siguientes configuraciones generales:

  • La interfaz /sys
  • El archivo de configuraciones cpuspeed
  • cpufreq-utils

Uso de la interfaz /sys

El sistema de archivos /sys proporciona una interfaz de usuario para CPUfreq que se inicia en /sys/devices/system/cpu/. Algunos de estos archivos son editables (por root) y otros son de sólo lectura.

Primero, dé una mirada a /sys/devices/system/cpu/. Allí encontrará un directorio para cada CPU lógico, el configurable sched_mc_power_savings y, si está disponible en su sistema, el configurable sched_smt_power_savings, al cual me referiré más adelante.

Listado 1. Revisión del contenido de /sys/devices/system/cpu/
[root@systemx ~]#cd
                    /sys/devices/system/cpu/
[root@systemx cpu]# ls
cpu0 cpu1 cpu2 cpu3 cpu4 cpu5 cpu6 cpu7 sched_mc_power_savings

Dentro del directorio de cada procesador hay un directorio cpufreq, el cual contiene la interfaz CPUfreq:

Listado 2. Revisión del directorio cpufreq
[root@systemx cpu]# 
					cd
                cpu0/cpufreq/ [root@systemx cpufreq]#ls -l
				total 0 -r--r--r-- 1 root root
                4096 Oct 31 14:53 affected_cpus -r-------- 1 
				root root 4096 Oct 31 14:53
                cpuinfo_cur_freq -r--r--r-- 1 root root 
				4096 Oct 31 14:53
				cpuinfo_max_freq
                -r--r--r-- 1 root root 4096 Oct 31 
				14:53 cpuinfo_min_freq -r--r--r-- 1 root root
                4096 Oct 31 14:53 scaling_available_frequencies 
				-r--r--r-- 1 root root 4096 Oct 31
                14:53 scaling_available_governors -r--r--r-- 1 
				root root 4096 Oct 31 14:53
                scaling_cur_freq -r--r--r-- 1
				root root 4096 Oct 31 14:53 
				scaling_driver -rw-r--r--1 root root 0 
				Nov 5 11:44 scaling_governor -rw-r--r-- 1 
				root root 4096 Oct 31 14:53
                scaling_max_freq -rw-r--r-- 1 
				root root 4096 Oct 31 14:53 scaling_min_freq

Si el regulador está establecido en conservative o ondemand, aquí también verá un directorio del nombre del regulador. Más adelante explicaré cómo cambiar el regulador.

Estos archivos están disponibles para todos los reguladores. Primero veremos qué significa cada configuración y cómo cambiar algunas de ellas; luego nos referiremos a una serie de configuraciones específicas de cada regulador que se encuentran fuera de esta interfaz. Considere que las configuraciones del directorio cpufreq pueden diferir en cada procesador. Para obtener una política uniforme en todos los procesadores, deberá cambiar el valor de la configuración de cada procesador como se explica en las siguientes secciones.

Primero,affected_cpus muestra los procesadores que se ven afectados por los cambios de frecuencia. Ciertos procesadores dependen de la frecuencia de otros debido a la coordinación de su hardware, software o ambos y sus frecuencias deben cambiar al mismo tiempo. Por ejemplo, usted podría ver una configuración de este tipo:

Listado 3. Revisión de los procesadores afectados por los cambios de frecuencia
[root@systemx
                    ~]#cd /sys/devices/system/cpu[root@systemx cpu]# grep .
                    cpu*/cpufreq/affected_cpus cpu0/cpufreq/affected_cpus:0 1
                cpu1/cpufreq/affected_cpus:0 1 cpu2/cpufreq/affected_cpus:2 3
                cpu3/cpufreq/affected_cpus:2 3

Por otra parte, cpuinfo_cur_freq muestra la frecuencia operativa actual del procesador. El archivo scaling_cur_freq lista la frecuencia de escalamiento actual de los reguladores.

Listado 4. Revisión de las frecuencias
[root@systemx cpufreq]# cat cpuinfo_cur_freq 2997000
                [root@systemx cpufreq]# cat scaling_cur_freq 2997000

Todas las frecuencias listadas en esta interfaz están expresadas en KHz.

A continuación se muestran algunos archivos que proporcionan información acerca de las frecuencias de procesadores disponibles. Los archivos cpuinfo_max_freq y cpuinfo_min_freq mantienen disponibles las frecuencias máxima y mínima para el sistema; scaling_available_frequencies muestra todas las frecuencias disponibles.

Listado 5. Revisión de las frecuencias máxima y mínima y las frecuencias disponibles
[root@systemx
                    cpufreq]# cat cpuinfo_max_freq 2997000 [root@systemx cpufreq]#cat
                    cpuinfo_min_freq 1998000 [root@systemx cpufreq]#  cat
                    scaling_available_frequencies 2997000 2664000 2331000 1998000

El archivo scaling_available_governors lista todos los reguladores disponibles. Si usted no ve los cinco reguladores, verifique que todos los reguladores estén activados en su archivo config y que el módulo de reguladores esté cargado de acuerdo con las instrucciones proporcionadas en la Parte 1.

Listado 6. Revisión de los reguladores disponibles
 [root@systemx cpufreq]# cat
                    scaling_available_governors ondemand powersave conservative userspace
                performance

El archivo scaling_driver le indicará en qué driver cpufreq se está ejecutando su sistema. Algunos drivers comunes sonacpi, speedstep-smi, speedstep-centrino,powernor_k8,powernow_k7,longhaul, etc. Si desea cambiar el driver, deberá desinstalar el driver en uso antes de cargar uno nuevo. Además, no olvide verificar que el driver que desea instalar funcione con su procesador antes de intentar usarlo.

Listado 7. Revisión del driver cpufreq en uso
[root@systemx cpufreq]# cat
                scaling_driver centrino

El resto de los archivos de este directorio son editables por root y brindan al usuario la capacidad de modificar algunas configuraciones cpufreq. Estos archivos son la única configuración que se le permite cambiar al usuario en los reguladores powersave y performance. Los otros reguladores poseen configuraciones adicionales que abordaremos en la próxima sección.

El archivoscaling_governormuestra el regulador que se encuentra actualmente activado. Para cambiar de regulador, simplemente use el comandoechocon el nombre del regulador nuevo hacia este archivo. Considere que esta acción debe realizarse con todos los procesadores para obtener una política uniforme. Por ejemplo:

Listado 8. Revisión del regulador activado y cambio de reguladores
[root@systemx ~]#cd
                    /sys/devices/system/cpu/ [root@systemx cpu]# ls 
					cpu0 cpu1 cpu2 cpu3 cpu4
                cpu5 cpu6 cpu7 sched_mc_power_savings [root@systemx cpu]# cat
                    cpu0/cpufreq/scaling_governor 
					performance [root@systemx cpu]# echo
                    conservative > cpu0/cpufreq/scaling_governor 
					[root@systemx cpu]# cat
                    cpu0/cpufreq/scaling_governor conservative

Los archivosscaling_max_freq y scaling_min_freq muestran las frecuencias máxima y mínima disponibles para el regulador. El usuario puede cambiar el rango de frecuencias disponible para el regulador usando el comando echo con una frecuencia disponible hacia estos archivos. Tome en cuenta que la frecuencia debe estar incluida en la lista scaling_available_frequencies, ya que la lista muestra todas las frecuencias de procesadores disponibles para el sistema. Nuevamente, considere que deberá realizar esta acción para todos los procesadores. Por ejemplo:

Listado 9. Cambio de las frecuencias disponibles para un regulador
[root@systemx ~]#cd
                    /sys/devices/system/cpu/[root@systemx cpu]# cat
                    cpu0/cpufreq/scaling_available_frequencies
					2997000 2664000 2331000 1998000
                [root@systemx cpu]# cat cpu0/cpufreq/scaling_max_freq 
				2997000 [root@systemx
                    cpu]# cat cpu0/cpufreq/scaling_min_freq1998000 
					[root@systemx cpu]# echo
                    2331000 > cpu0/cpufreq/scaling_min_freq
					[root@systemx cpu]# cat
                    cpu0/cpufreq/scaling_min_freq 2331000

Uso del archivo de configuraciones cpuspeed

Otra alternativa que tiene el usuario en lugar de usar el comandoecho para ingresar los valores de las configuraciones es usar el archivo de configuraciones cpuspeed para cambiar el driver, el regulador, las velocidades mínima y máxima, los límites de utilización y la configuración ignore_nice_load. RHEL 5.2 incluye cpuspeed, pero otras distribuciones de Linux podrían no contener este paquete. Si cpuspeed no está incluido en su distribución, puede descargar la versión carlthompson.net; el archivo README proporciona las instrucciones de instalación. Para usar la versión RHEL 5.2 de cpuspeed, simplemente edite el archivo /etc/sysconfig/cpuspeed, asigne un valor a cualquiera de las variables de configuración de este archivo y ejecute el siguiente comando:

/etc/init.d/cpuspeed restart

Este comando aplicará las nuevas configuraciones. Recuerde que debe tener cargado el módulo de regulador correspondiente para poder empezar a usar el regulador, a menos que éste ya estuviera incorporado.

Uso de cpufreq-utils

RHEL 5.2 y otras distribuciones incluyen además el paquete cpufreq-utils, el cual habilita otra interfaz de usuario al subsistema CPUfreq. La mayoría de las distribuciones incluyen este paquete. Al instalar cpufreq-utils rpm, obtendrá dos utilidades denominadas cpufreq-info y cpufreq-set.

La utilidad cpufreq-info lista la siguiente información acerca de los procesadores y sus configuraciones CPUfreq: la frecuencia actual, los límites de frecuencia, el driver CPUfreq, la política actual, el regulador actual y la listaaffected-cpus.

La utilidad cpufreq-set permite al usuario cambiar el rango de frecuencias disponibles de cada regulador, el regulador en funcionamiento, y la frecuencia de ejecución actual al activar el regulador userspace. Para obtener más información, consulte las páginas man de cpufreq-info y cpufreq-set.

Configuraciones específicas de los reguladores

Ahora pasemos a las configuraciones de los reguladores internos del kernel que puede cambiar el usuario.

Los reguladores powersave y performance

Estos reguladores establecen estadísticamente la frecuencia de procesadores a las frecuencias mínima y máxima, respectivamente. Las únicas configuraciones que puede cambiar el usuario son las mencionadas en la sección anterior.

Regulador userspace

En adelante, nos referiremos a las configuraciones específicas de los reguladores. Si usted activa el regulador userspace, verá además un archivo llamado scaling_setspeed, el cual es editable por root en el directorio cpufreq. Este regulador permite al usuario o a un programa de userspace cambiar interactivamente la frecuencia de procesadores. El usuario tiene la capacidad de usar el comando echo con la frecuencia deseada hacia este archivo y permitir que un daemon de userspace establezca este valor. Al igual que con los archivos antes explicados, deberá modificar el archivoscaling_setspeed de cada procesador.

Existen muchos daemons que trabajan con el regulador userspace para ajustar la frecuencia de procesadores; algunos de ellos son:

  • cpudyn(CPU dynamic frequency control – control de la frecuencia dinámica de la CPU): este daemon basa los cambios de frecuencia fuera de la carga del procesador y, también tiene la capacidad de poner discos en espera cuando se agota la actividad y no es posible guardar más energía.
  • cpufreqd: este daemon se puede configurar para reaccionar ante factores como: nivel de bacteria, estado AC, temperatura, programas en ejecución, uso de procesadores, etc.
  • cpuspeed: este daemon cambia frecuencias en base a la demanda de procesadores, los cambios de suministros de energía, la temperatura, etc.
  • powernowd: este daemon de regulador basa los cambios de frecuencia fuera de la carga del procesador y ofrece cuatro modos de comportamiento distintos a elección del usuario.

Ondemand governor

Si carga el regulador ondemand, verá un directorio llamado ondemand en el directorio cpufreq. Este directorio incluye muchas configuraciones ajustables. Todos los archivos editables (por root) pueden modificarse usando el comandoecho con los valores nuevos como se mostró anteriormente. Considere que todo cambio de las configuraciones de ondemand se aplicará en todo el sistema, por lo tanto, no será necesario cambiar la configuración de cada procesador.

Listado 10. Revisión de las configuraciones ajustables de ondemand
[root@systemx ~]#cd
                    /sys/devices/system/cpu/cpu0/cpufreq/ondemand/
					[root@systemx ondemand]#ls
                    -l total 0 -rw-r--r-- 1 root 
					root 4096 Nov 19 10:30 ignore_nice_load
                -rw-r--r-- 1 root root 4096 Nov 19 10:30 
				powersave_bias -rw-r--r-- 1 root root 4096
                Nov 19 10:30 sampling_rate -r--r--r-- 1 root root 
				4096 Nov 19 10:30
                sampling_rate_max -r--r--r-- 1 root root 
				4096 Nov 19 10:30 sampling_rate_min
                -rw-r--r-- 1 root root 4096 Nov 19 10:30 up_threshold

El archivoignore_nice_load puede fijarse en 0 o 1 (su valor predeterminado es 0). Cuando este parámetro está fijado en 1, todos los procesos con valor "nice" no se considerarán en el nivel de utilización de procesadores general. Con la opción 0, todos los procesos se incluirán en el nivel de utilización. Esta configuración resulta útil cuando se está ejecutando un proceso que requiere de una gran porción de procesador y no importa su tiempo de ejecución. Si aplica la configuración "nice" al proceso, evitará que éste influya sobre las decisiones de frecuencia.

El archivopowersave_bias es una configuración que se creó para modificar levemente el comportamiento del regulador ondemand y lograr un ahorro mayor de energía cuando el usuario no se centra tanto en el rendimiento y reduce su frecuencia meta en un porcentaje específico. Esta configuración puede fijarse en un valor entre 1 y 1000 y resultará en una reducción del 0,1 por ciento al 100 por ciento de la frecuencia.

sampling_rate, medido en microsegundos, determina la asiduidad con que el regulador revisará el nivel de utilización de procesadores para decidir la frecuencia a establecer. Para esta configuración debe establecerse un valor que se encuentre entre los valores sampling_rate_min y sampling_rate_max.

Por último, la configuración up_thresholdpermite al usuario cambiar el límite máximo de utilización del procesador que activa un cambio en las frecuencias de procesador. El valor predeterminado de up_threshold es 80. Esto significa que cada sampling_rate, el kernel verificará el nivel de utilización de procesadores y, si éste supera el 80 por ciento de utilización, el regulador aumentará la frecuencia a la frecuencia máxima disponible.

Regulador conservative

Si carga el regulador conservative, verá un directorio llamado conservative en el directorio cpufreq. Este directorio incluye varias configuraciones ajustables. Todos los archivos editables (por root) pueden modificarse usando el comandoecho con el valor nuevo como se mostró anteriormente. Considere que todo cambio de las configuraciones de conservative se aplicará en todo el sistema, por lo tanto, no será necesario cambiar la configuración de cada procesador.

Listado 11. Revisión de las configuraciones ajustables de conservative
[root@systemx ~]# cd
                    /sys/devices/system/cpu/cpu0/cpufreq/conservative/
					[root@systemx
                    conservative]# ls -l total 0 
					-rw-r--r-- 1 root root 4096 Nov 19 11:31
                down_threshold -rw-r--r-- 1 root root 
				4096 Nov 19 11:31 freq_step -rw-r--r-- 1 root
                root 4096 Nov 19 11:31 ignore_nice_load -rw-r--r-- 1
				root root 4096 Nov 19 11:31
                sampling_down_factor -rw-r--r-- 1
				root root 4096 Nov 19 11:31 sampling_rate
                -r--r--r-- 1 root root 4096 Nov 19 11:31 
				sampling_rate_max -r--r--r-- 1 root root
                4096 Nov 19 11:31 sampling_rate_min -rw-r--r-- 1 
				root root 4096 Nov 19 11:31
                up_threshold

Las configuraciones de ignore_nice_load,sampling_rate,sampling_rate_max,sampling_rate_minyup_threshold son iguales a las antes descriptas para el regulador ondemand.

El regulador conservative también permite al usuario establecer eldown_threshold. Por ejemplo, el valor predeterminado dedown_threshold es 20. Esto significa que cadasampling_rate, el kernel verificará el nivel de utilización de procesadores y si éste es menor al 20 por ciento de utilización, el regulador reducirá la frecuencia.

La configuración freq_step cambia el tamaño del escalón de frecuencia que usa el regulador para cambiar la frecuencia de CPU en cualquier dirección. El valor predeterminado es 5, lo cual significa que el regulador cambiará la frecuencia en un 5 por ciento de la frecuencia máxima o mínima cada vez que tome la decisión de cambiar frecuencias. Si fija este valor en 100, el regulador actuará exactamente igual que el regulador ondemand.

Finalmente, sampling_down_factor funciona como un multiplicador con sampling_rate para reducir la asiduidad de verificación del nivel de utilización de procesadores. Por ejemplo, si sampling_rate se fija en 10.000 y sampling_down_factor en 2, el kernel verificará el nivel de utilización de procesadores cada 20.000 microsegundos.

Configurables del planificador

Ahora analizaremos los dos configurables del planificador:—

  • sched_mc_power_savings sirve para planificar procesos en núcleos.
  • sched_smt_power_savings sirve para planificar procesos en hiperencadenamientos dentro de un núcleo.

sched_mc_power_savings

sched_mc_power_savings es un configurable del planificador ubicado en el directorio /sys/devices/system/cpu/ . No olvide establecer la opción del archivo de configuración CONFIG_SCHED_MC en y como se explicó en la sección de configuración (de la Parte 1) si desea usar este configurable.

Listado 12. Revisión de la ubicación de sched_mc_power_savings
[root@systemx ~]# cd
                    /sys/devices/system/cpu/[root@systemx cpu]# ls -l
					total 0 drwxr-xr-x 5
                root root 0 Nov 12 17:45 cpu0 drwxr-xr-x 5 
				root root 0 Nov 12 17:45 cpu1 drwxr-xr-x
                5 root root 0 Nov 12 17:45 cpu2 drwxr-xr-x 5 
				root root 0 Nov 12 17:45 cpu3
                drwxr-xr-x 5 root root 0 Nov 12 17:45 
				cpu4 drwxr-xr-x 5 root root 0 Nov 12 17:45
                cpu5 drwxr-xr-x 5 root root 0 Nov 12 17:45 
				cpu6 drwxr-xr-x 5 root root 0 Nov 12
                17:45 cpu7 -rwxrwxr-x 1 root root 4096 Nov 19 09:54 sched_mc_power_savings

El archivosched_mc_power_savings puede fijarse en 0 o 1; el valor predeterminado es 0. En 1, el planificador intenta planificar procesos en la menor cantidad de núcleos posible para que los otros puedan permanecer inactivos. En otras palabras, si todos los procesadores están poco ocupados,sched_mc_power_savings intenta consolidar el trabajo en la menor cantidad de procesadores posibles. A su vez, esto logra que algunos procesadores se mantengan inactivos por más tiempo, lo cual se traduce en un ahorro de energía, especialmente si el procesador soporta un estado de hibernación profunda, como los estados C, en el que se utilice muy poca energía en momentos de inactividad. Los ahorros de energía reales pueden variar en base a múltiples factores, como la cantidad de procesadores disponibles o el regulador CPUfreq que se esté ejecutando. Cuandosched_mc_power_savings se fija en 0, no se realiza ninguna planificación especial.

sched_smt_power_savings

El configurable sched_smt_power_savings es otro configurable del planificador que también se encuentra en el directorio /sys/devices/system/cpu/; sin embargo, esta opción de ajuste solamente está disponible en sistemas que soportan el hiperencadenamiento. No olvide establecer la opción del archivo de configuraciónCONFIG_SCHED_SMT en y , como se explicó en la sección de configuración (de la Parte 1) si desea usar este configurable.

Listado 13. Revisión de la ubicación de sched_smt_power_savings
[root@systemx ~]# 
					cd/sys/devices/system/cpu/[root@systemx cpu]#
					ls -l total 0 drwxr-xr-x 5
                root root 0 Nov 12 17:45 cpu0 drwxr-xr-x 5 
				root root 0 Nov 12 17:45 cpu1 drwxr-xr-x
                5 root root 0 Nov 12 17:45 cpu2 drwxr-xr-x 
				5 root root 0 Nov 12 17:45 cpu3
                drwxr-xr-x 5 root root 0 Nov 12 17:45 
				cpu4 drwxr-xr-x 5 root root 0 Nov 12 17:45
                cpu5 drwxr-xr-x 5 root root 0 Nov 12 17:45
				cpu6 drwxr-xr-x 5 root root 0 Nov 12
                17:45 cpu7 -rwxrwxr-x 1 root root 
				4096 Nov 19 09:54 sched_mc_power_savings
                -rwxrwxr-x 1 root root 
				4096 Nov 19 09:54 sched_smt_power_savings

Al igual que la configuración sched_mc_power_savings, el archivo sched_smt_power_savings puede fijarse en 0 o 1; el valor predeterminado es 0. En 1, el planificador intenta planificar procesos en la menor cantidad de hiperencadenamientos de un núcleo posible para que los otros puedan permanecer inactivos y así ahorrar energía usando estados de inactividad C.

Próxima parte

En la Parte 3, explicaré los efectos que cada regulador puede provocar sobre distintas cargas de trabajo y usaré dos cargas de trabajo de configuración conocidas.


Recursos para Descargar


Temas relacionados


Comentarios

Inicie Sesión o Regístrese para agregar comentarios.

static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=90
Zone=Linux
ArticleID=458907
ArticleTitle=Reducción del consumo de energía de Linux, Parte 2: Configuraciones generales y específicas de reguladores
publish-date=12282009