Guía de administración de energía
Manejo del consumo de energía en Red Hat Enterprise Linux 6
Edición 1.0
Resumen
Capítulo 1. Vista preliminar
1.1. Importancia de administración de energía
- reducción general de consumo de energía para ahorrar costo
- reducción de calor para servidores y centros de cómputo
- reducción de costos secundarios que incluyen enfriamiento, espacio, cables, generadores y Sistema de alimentación ininterrumpida(UPS).
- extensión de vida de baterías para portátiles
- baja salida de dióxido de carbono
- cumplimiento de regulaciones gubernamentales o requisitos legales sobre Informática verde, por ejemplo Energy Star
- cumplimiento de reglamentación empresarial para nuevos sistemas
- P: ¿Debo optimizar?
- P: ¿Cuánto necesito optimizar?
- P: ¿La optimización reducirá el rendimiento del sistema a un nivel inaceptable?
- P: ¿El tiempo y los recursos utilizados para optimizar el sistema superarán las ganancias obtenidas?
1.2. Fundamentos de administración de energía
El kernel de Red Hat Enterprise Linux 5, utilizaba un temporizador periódico para cada CPU. Dicho temporizador evita que la CPU quede en realidad inactiva (lo cual sucede cada pocos milisegundos, según la configuración), independientemente de si se está ejecutando algún proceso o no. Una gran parte de la administración de energía efectiva implica la reducción de la frecuencia en la cual se crean los despertadores de CPU.
Esto es cierto especialmente para dispositivos que tienen partes móviles (tales como los discos duros). Además, algunas aplicaciones pueden dejar un dispositivo sin utilizar pero habilitado "abierto"; cuando esto se presenta, el kernel asume que el dispositivo está en uso, lo que puede impedir que el dispositivo entre en un estado de ahorro de energía.
Sin embargo, en muchos casos esto depende de un hardware moderno y de una configuración de BIOS correcta. Los componentes viejos del sistema, por lo general, no soportan las nuevas funciones que ahora podemos soportar en Red Hat Enterprise Linux 6. Asegúrese de utilizar el firmware oficial más reciente para sus sistemas y que estén habilitadas en la administración de energía o secciones de configuración de dispositivo de BIOS. Algunas funciones que se deben buscar son:
- SpeedStep
- PowerNow!
- Cool'n'Quiet
- ACPI (C state)
- Smart
Las CPU modernas junto con la Configuración avanzada e Interfaz de Energía (ACPI) proporcionan diferentes estados de energía. Los tres estados diferentes son:
- Dormido (Estados-C)
- Frecuencia (estados-P)
- La salida de calor (estados-T o "thermal states")
Obviamente, apagar los sistemas es una de las mejores formas de ahorrar energía. Por ejemplo, su compañía puede desarrollar una cultura corporativa enfocada a una conciencia de tecnología informática "verde" con una línea directriz para apagar las máquinas durante las horas de almuerzo, receso, o cuando termina la jornada laboral. También se podrían consolidar varios servidores físicos en un servidor más grande y virtualizarlos mediante la tecnología de virtualización que distribuimos con Red Hat Enterprise Linux 6.
Capítulo 2. Herramientas de administración y auditoría de energía
2.1. Vista preliminar de auditoría y análisis
2.2. PowerTOP
yum install powertop
powertop
aumentar el tiempo de reescritura sucia de VM
, y la tecla (W) para aceptar la sugerencia.
C4
es superior a C3
) y es un buen indicador de qué tan bien se ajusta el sistema al uso de CPU. Su meta debe ser la residencia de 90% o más en los estados superiores C o P cuando el sistema esté inactivo.
<
>
) entonces los despertadores estarán siempre asociados con un controlador específico que los genera. El ajuste de controladores suele requerir cambios de kernel que van más allá del objetivo de este documento. Sin embargo, los procesos de espacio de usuario que envían despertadores se administran con mayor facilidad. Primero, identifique si este servicio o aplicación debe ejecutarse en este sistema. Si no, simplemente, desactívelo. Para apagar este servicio de forma permanente, ejecute:
chkconfig nombre_ de_servicio off
ps -awux | grep nombre_ de_ componente
strace -p processid
aumentar el tiempo de reescritura sucia de VM
y la tecla (W) para aceptar la sugerencia. Estos cambios solo se activarán después del reinicio. Para ayudarle a hacer los cambios permanentes, PowerTOP desplegará el comando exacto que ejecuta para realizar esta optimización. Añada el comando a su archivo /etc/rc.local
con su editor preferido para que el cambio se efectúe cada vez que el computador arranque.
Figura 2.1. PowerTOP en operación
2.3. Diskdevstat y netdevstat
yum install systemtap tuned-utils kernel-debuginfo
diskdevstat
netdevstat
diskdevstat update_interval duración_total mostrar_histograma
netdevstat update_interval duración_total mostrar_histograma
- actualizar_intervalo
- El tiempo en segundos entre actualizaciones de la pantalla. Predeterminado:
5
- duración_total
- El tiempo en segundos para el total. Predeterminado:
86400
(1 día) - mostrar_histograma
- Indica si hacer histograma para todos los datos recolectados al final de la ejecución.
PID UID DEV WRITE_CNT WRITE_MIN WRITE_MAX WRITE_AVG READ_CNT READ_MIN READ_MAX READ_AVG COMMAND 2789 2903 sda1 854 0.000 120.000 39.836 0 0.000 0.000 0.000 plasma 15494 0 sda1 0 0.000 0.000 0.000 758 0.000 0.012 0.000 0logwatch 15520 0 sda1 0 0.000 0.000 0.000 140 0.000 0.009 0.000 perl 15549 0 sda1 0 0.000 0.000 0.000 140 0.000 0.009 0.000 perl 15585 0 sda1 0 0.000 0.000 0.000 108 0.001 0.002 0.000 perl 2573 0 sda1 63 0.033 3600.015 515.226 0 0.000 0.000 0.000 auditd 15429 0 sda1 0 0.000 0.000 0.000 62 0.009 0.009 0.000 crond 15379 0 sda1 0 0.000 0.000 0.000 62 0.008 0.008 0.000 crond 15473 0 sda1 0 0.000 0.000 0.000 62 0.008 0.008 0.000 crond 15415 0 sda1 0 0.000 0.000 0.000 62 0.008 0.008 0.000 crond 15433 0 sda1 0 0.000 0.000 0.000 62 0.008 0.008 0.000 crond 15425 0 sda1 0 0.000 0.000 0.000 62 0.007 0.007 0.000 crond 15375 0 sda1 0 0.000 0.000 0.000 62 0.008 0.008 0.000 crond 15477 0 sda1 0 0.000 0.000 0.000 62 0.007 0.007 0.000 crond 15469 0 sda1 0 0.000 0.000 0.000 62 0.007 0.007 0.000 crond 15419 0 sda1 0 0.000 0.000 0.000 62 0.008 0.008 0.000 crond 15481 0 sda1 0 0.000 0.000 0.000 61 0.000 0.001 0.000 crond 15355 0 sda1 0 0.000 0.000 0.000 37 0.000 0.014 0.001 laptop_mode 2153 0 sda1 26 0.003 3600.029 1290.730 0 0.000 0.000 0.000 rsyslogd 15575 0 sda1 0 0.000 0.000 0.000 16 0.000 0.000 0.000 cat 15581 0 sda1 0 0.000 0.000 0.000 12 0.001 0.002 0.000 perl 15582 0 sda1 0 0.000 0.000 0.000 12 0.001 0.002 0.000 perl 15579 0 sda1 0 0.000 0.000 0.000 12 0.000 0.001 0.000 perl 15580 0 sda1 0 0.000 0.000 0.000 12 0.001 0.001 0.000 perl 15354 0 sda1 0 0.000 0.000 0.000 12 0.000 0.170 0.014 sh 15584 0 sda1 0 0.000 0.000 0.000 12 0.001 0.002 0.000 perl 15548 0 sda1 0 0.000 0.000 0.000 12 0.001 0.014 0.001 perl 15577 0 sda1 0 0.000 0.000 0.000 12 0.001 0.003 0.000 perl 15519 0 sda1 0 0.000 0.000 0.000 12 0.001 0.005 0.000 perl 15578 0 sda1 0 0.000 0.000 0.000 12 0.001 0.001 0.000 perl 15583 0 sda1 0 0.000 0.000 0.000 12 0.001 0.001 0.000 perl 15547 0 sda1 0 0.000 0.000 0.000 11 0.000 0.002 0.000 perl 15576 0 sda1 0 0.000 0.000 0.000 11 0.001 0.001 0.000 perl 15518 0 sda1 0 0.000 0.000 0.000 11 0.000 0.001 0.000 perl 15354 0 sda1 0 0.000 0.000 0.000 10 0.053 0.053 0.005 lm_lid.sh
- PID
- El ID de proceso de la aplicación
- UID
- El ID de usuario bajo el cual se ejecutan las aplicaciones
- DEV
- El dispositivo en el cual la E/S tienen lugar
- WRITE_CNT
- El número total de operaciones de escritura
- WRITE_MIN
- El tiempo mínimo para dos escritos consecutivos (en segundos)
- WRITE_MAX
- El tiempo máximo para dos escritos consecutivos (en segundos)
- WRITE_AVG
- El tiempo promedio para dos escritos consecutivos (en segundos)
- READ_CNT
- El número total de operaciones de lectura
- READ_MIN
- El tiempo mínimo para dos lecturas consecutivas (en segundos)
- READ_MAX
- El máximo tiempo para dos lecturas consecutivas (en segundos)
- READ_AVG
- El tiempo promedio para dos lecturas consecutivas (en segundos)
- COMMAND
- El nombre del proceso
PID UID DEV WRITE_CNT WRITE_MIN WRITE_MAX WRITE_AVG READ_CNT READ_MIN READ_MAX READ_AVG COMMAND 2789 2903 sda1 854 0.000 120.000 39.836 0 0.000 0.000 0.000 plasma 2573 0 sda1 63 0.033 3600.015 515.226 0 0.000 0.000 0.000 auditd 2153 0 sda1 26 0.003 3600.029 1290.730 0 0.000 0.000 0.000 rsyslogd
WRITE_CNT
mayor que 0
, lo cual significa que realizan un forma de escritura durante la medición. De ellas, plasma fue el peor transgresor en un alto grado: realizó la mayoría de operaciones de escritura y por lo tanto el promedio de tiempo entre escrituras fue el más bajo. Por esa razón Plasma sería el mejor candidato para investigar si está interesado en aplicaciones ineficientes de energía.
strace -p 2789
strace
contenía un patrón repetitivo cada 45 segundos que abría para escribir el archivo cache del icono de KDE del usuario para escribir y luego lo cerraba inmediatamente. Esto llevaba necesariamente a una escritura física al disco duro cuando los metadatos del archivo (específicamente, el tiempo de modificación) habían cambiado. La corrección final era evitar llamadas innecesarias cuando no se presentaban actualizaciones de iconos.
2.4. Kit de herramientas de vida de batería
-a
.
office
escribe un texto, corrige cosas en él y hace lo mismo para una hoja de cálculo. Al ejecutar BLTK junto con PowerTOP o cualquiera otra herramienta de auditoría o análisis podrá probar si las optimizaciones que usted realizó tienen algún efecto cuando la máquina está activa en uso en lugar de cuando solo está en inactividad. Puesto que la misma carga de trabajo se puede ejecutar varias veces para diferentes configuraciones, usted podrá comparar resultados para diferentes configuraciones
yum install bltk
bltk carga_de_trabajo opciones
idle
por 120 segundos:
bltk -I -T 120
-I
,--idle
- El sistema está inactivo, usar una línea de base para comparar con otras cargas de trabajo
-R
,--reader
- Simula lectura de documentos (por defecto, con Firefox)
-P
,--player
- Simula ver archivos de multimedia desde una unidad de CD o DVD (por defecto, con mplayer)
-O
,--office
- Simula la edición de documentos con el paquete de OpenOffice.org
-a
,--ac-ignore
- Ignorar si energía de Corriente alterna está disponible (necesaria para usar escritorio)
-T número_de_segundos
,--time número_de_segundos
- El tiempo (en segundos) sobre el cual ejecutar la prueba; use esta opción con la carga de trabajo
idle
-F nombre_de_archivo
,--file nombre_de archivo
- Especifica un archivo para ser usado por una carga determinada, por ejemplo, un archivo para la carga de trabajo del
reproductor
para que se reproduzca en lugar de acceder a la unidad de CD o DVD -W aplicación
,--prog aplicación
- Especifica una aplicación para ser utilizada por una carga de trabajo particular, por ejemplo, un navegador diferente a Firefox para la carga de trabajo de
lector
bltk
.
/etc/bltk.conf
, ~/.bltk/workload.results.number/
. Por ejemplo, el directorio ~/.bltk/reader.results.002/
guarda los resultados de la tercera prueba con la carga de trabajo de lector
(la primera prueba no está numerada). Los resultados están esparcidos a través de varios archivos de texto. Para condensar estos resultados dentro de un formato fácil de leer, ejecute:
bltk_report ruta _a_directorio_de_resultados
Report
en el directorio de resultados. Para ver los resultados en un emulador de terminal, utilice la opción -o
:
bltk_report -o ruta_a_directorio_de_resultados
2.5. Tuned y ktune
yum install tuned
/etc/tuned.conf
y activa el perfil predeterminado.
service tuned start
chkconfig tuned on
-d
,--daemon
- Inicia tuned como daemon en lugar de en primer plano.
-c
,--conffile
- Usa un archivo de configuración con el nombre y ruta especificados, por ejemplo,
--conffile=/etc/tuned2.conf
. El predeterminado es/etc/tuned.conf
. -D
,--debug
- Usa el nivel superior de registro.
2.5.1. El archivo tuned.conf
tuned.conf
contiene las configuraciones de tuned. Por defecto, se localiza en /etc/tuned.conf
, pero puede especificar un nombre y dirección diferentes si iniciatuned con la opción --conffile
.
[main]
que define los parámetros generales para tuned. El archivo contiene una sección para cada complemento.
[main]
contiene las siguientes opciones:
interval
- El intervalo en el que tuned debe monitorizar y ajustar el sistema, en segundos. El predeterminado es el valor
10
. verbose
- Especifica si la salida debe ser detallada. El valor predeterminado es
Falso
. logging
- Especifica la prioridad mínima de mensajes que deben ser registrados. En orden descendente, los valores permitido son:
crítico
,error
,advertencia
,info
ydepuración
. El valor predeterminado esinfo
. logging_disable
- Especifica la prioridad máxima de mensajes a ser registrados; cualquier mensaje con esta prioridad o menor no será registrado. En orden descendiente, los valores permitidos son:
crítico
,error
,advertencia
,info
, ydepuración
. El valornotset
inhabilita esta opción.
[CPUTuning]
. Cada complemento puede tener sus propias opciones, pero lo siguiente se aplica a todos los complementos:
enabled
- Especifica si el complemento está habilitado o no. El valor predeterminado es
Verdadero
. verbose
- Especifica si la salida debe ser detallada. Si no se establece para este complemento, el valor se heredará de
[main]
. logging
- Especifica la prioridad mínima de mensajes a ser registrados. Si no se establece para este complemento, el valor se heredará de
[main]
.
[main] interval=10 pidfile=/var/run/tuned.pid logging=info logging_disable=notset # Disk monitoring section [DiskMonitor] enabled=True logging=debug # Disk tuning section [DiskTuning] enabled=True hdparm=False alpm=False logging=debug # Net monitoring section [NetMonitor] enabled=True logging=debug # Net tuning section [NetTuning] enabled=True logging=debug # CPU monitoring section [CPUMonitor] # Enabled or disable the plugin. Default is True. Any other value # disables it. enabled=True # CPU tuning section [CPUTuning] # Enabled or disable the plugin. Default is True. Any other value # disables it. enabled=True
2.5.2. Tuned-adm
tuned-adm
, pero también usted mismo puede crear, modificar o borrar perfiles.
tuned-adm list
tuned-adm active
tuned-adm profile profile_name
tuned-adm profile server-powersave
tuned-adm off
predeterminado
se activará. Red Hat Enterprise Linux 6 también incluye los siguiente perfiles predeterminados:
- default
- Es el perfil predeterminado de ahorro de energía. Tiene el más bajo impacto en ahorro de energía de los perfile disponibles y solo habilita CPU y complementos de disco de tuned.
- desktop-powersave
- Es un perfil de ahorro de energía dirigido a sistemas de escritorio. Habilita ahorro de energía ALPM para adaptadores de host SATA (consulte la Sección 3.6, “Administración de energía de enlace agresivo ”) y complementos de CPU, Ethernet, y disco de tuned.
- server-powersave
- Es un perfil de ahorro de energía dirigido a los sistemas de servidores. Habilita el ahorro de energía ALPM para adaptadores de host SATA, inhabilita polling de CD-ROM a través de HAL (consulte la página man hal-disable-polling) y activa la CPU y complementos de disco de tuned.
- laptop-ac-powersave
- Es un perfil de ahorro de energía de medio impacto dirigido a portátiles en AC. Habilita ahorro de energía ALPM para adaptadores de host SATA, ahorro de energía WIFI, como también complementos de CPU, Ethernet y disco de tuned.
- laptop-battery-powersave
- Es un perfil de ahorro de energía de alto impacto dirigido a portátiles que se ejecutan con batería. Activa todos los mecanismos de ahorro de energía de los perfiles anteriores y habilita el programador de ahorro de energía multi-núcleos para sistemas despertadores bajos,. Además, se asegura de que el gobernador ondemand esté activo y que el ahorro de energía AC97 esté habilitado. Este perfil se puede usar para ahorrar la máxima cantidad de energía en cualquier clase de sistema, no solo portátiles con batería. El sacrificio a cambio es un notable impacto en rendimiento, específicamente en latencia de disco y E/S de red.
- throughput-performance
- Es un perfil de servidor para ajuste de rendimiento. Inhabilita los mecanismos de ahorro de energía tuned y ktune, habilita la configuración de sysctl que mejora el rendimiento de procesamiento de su E/S de red y disco y cambia al programador de fecha límite.
- latency-performance
- Es un perfil de servidor para ajuste de rendimiento de latencia típica. Inhabilita los mecanismos de ahorro de energía de tuned y ktune habilita la configuración de sysctl para mejorar el rendimiento de latencia de su E/S de red.
/etc/tune-profiles
. Por lo tanto, /etc/tune-profiles/desktop-powersave
contiene todos los archivos y configuraciones necesarios para ese perfil. Cada uno de estos directorios contiene hasta cuatro archivos:
tuned.conf
- la configuración para el servicio ajustado como activo para este perfil.
sysctl.ktune
- la configuración sysctl utilizada por ktune. El formato es idéntico al archivo
/etc/sysconfig/sysctl
(consulte las páginas man sysctl y sysctl.conf).. ktune.sysconfig
- el archivo de configuración de ktune, típicamente
/etc/sysconfig/ktune
. ktune.sh
- un script de shell estilo init utilizado por ktune el cual puede ejecutar comandos específicos durante el inicio del sistema para ajustar el sistema.
laptop-battery-powersave
ya contiene un set de ajustes muy variados y es por lo tanto, útil como punto de partida. Simplemente copie todo el directorio al nuevo nombre de perfil así:
cp -a /etc/tune-profiles/laptop-battery-powersave/ /etc/tune-profiles/myprofile
# Disable HAL polling of CDROMS # for i in /dev/scd*; do hal-disable-polling --device $i; done > /dev/null 2>&1
2.6. DeviceKit de energía y devkit de energía
devkit-power
y las siguientes opciones:
--enumerate
,-e
- Presenta una ruta de objeto para cada dispositivo de energía en el sistema, por ejemplo:
/org/freedesktop/DeviceKit/power/devices/line_power_AC
/org/freedesktop/UPower/DeviceKit/power/battery_BAT0
--dump
,-d
- Presenta los parámetros para todos los dispositivos de energía en el sistema.
--wakeups
,-w
- Presenta los despertadores de CPU en el sistema.
--monitor
,-m
- Monitoriza el sistema para los cambios a los dispositivos de energía, por ejemplo, la conexión o desconexión de una fuente de alimentación de CA o el agotamiento de una pila. Presione Ctrl+C para detener la monitorización del sistema.
--monitor-detail
- Monitoriza el sistema para cambios a dispositivos de energía, por ejemplo, la conexión o desconexión de una fuente de alimentación de CA o el agotamiento de una pila. La opción
--monitor-detail
presenta más información que la opción--monitor
. Presione Ctrl+C para detener la monitorización del sistema. --show-info object_path
,-i object_path
- Presenta toda la información disponible para una ruta de objeto determinada. Por ejemplo, para obtener información sobre la batería de su sistema representada por la ruta de objeto
/org/freedesktop/UPower/DeviceKit/power/battery_BAT0
, ejecute:devkit-power -i /org/freedesktop/UPower/DeviceKit/power/battery_BAT0
2.7. El Gestor de energía de GNOME
- En energía de CA
- En energía de batería
- General
2.8. Otros medios de auditoría
- vmstat
- vmstat proporciona información detallada sobre procesos, memoria, búsqueda, E/S de bloque, trampas y actividad de CPU. Utilícelo para ver más de cerca lo que el sistema global hace y dónde está ocupado.
- iostat
- iostat es similar a vmstat, pero solo para dispositivos de bloque de E/S. También proporciona estadísticas y una salida más detallada.
- blktrace
- blktrace es un programa de rastreo de E/S de bloque. Analiza la información en bloques únicos asociados con aplicaciones. Es muy útil en combinación con diskdevstat.
Capítulo 3. Infraestructura central y mecánica
3.1. Estados de CPU inactivos
- C0
- El estado en operación o en ejecución. En este estado, la CPU está funcionando y no esta inactiva de ninguna manera.
- C1, Halt
- Un estado en el que el procesador no está ejecutando instrucciones, pero típicamente no está en un estado de energía bajo. La CPU puede continuar procesando sin ninguna demora. Todos los procesadores que ofrecen estados-C necesitan soportar dicho estado. Los procesadores Pentium 4 soportan un estado C1 mejorado llamado C1E que en efecto es un estado de bajo consumo energético.
- C2, Stop-Clock
- Un estado opcional en el que el reloj está congelado para este procesador, pero que mantiene un estado completo para sus registradores y memorias cache, por lo tanto, después de reiniciar el reloj puede inmediatamente reiniciar el procesamiento. Éste es un estado opcional.
- C3, Dormido
- Un estado opcional en el que el procesador se va a dormir y no necesita mantener su memoria cache actualizada. Despertar de este estado toma un tiempo considerablemente mayor que desde C2.
3.2. Uso de gobernadores CPUfreq
3.2.1. Tipos de gobernadores CPUfreq
El Gobernador de Rendimiento fuerza a la CPU a usar la frecuencia de reloj más alta posible. Esta frecuencia se establecerá de forma estática y no cambiará. Como tal, este gobernador no ofrece beneficio de ahorro de energía. Solamente es apropiado para horas de carga de trabajo pesado y aún así solo cuando la CPU está rara vez (o nunca) inactiva.
En contraste, el gobernador Powersave fuerza a la CPU a usar la frecuencia de reloj más baja posible. Esta frecuencia se establecerá de forma estática y no cambiará. Como tal, este gobernador ofrece ahorro máximo de energía, pero a expensas del rendimiento de CPU más bajo.
El gobernador Ondemand es un gobernador dinámico que permite a la CPU alcanzar la máxima frecuencia de reloj cuando el sistema está inactivo. Aunque esto permite al sistema ajustar el consumo de energía según la carga del sistema, lo hace a expensas de la latencia entre el cambio de frecuencia. Como resultado, la latencia puede alterar los beneficios de ahorro de energía /rendimiento ofrecidos por el gobernador Ondemand si el sistema cambia, con demasiada frecuencia, entre inactivo y carga de trabajo pesada.
El gobernador Userspace le permite establecer la frecuencia a programas de espacio de usuario (o cualquier proceso que esté ejecutándose como root). Este gobernador se utiliza junto con el daemon cpuspeed
. De todos lo gobernadores, Userspace es el más adaptable; y dependiendo de cómo se configure, puede ofrecer el mejor balance entre rendimiento y consumo para su sistema.
Al igual que el gobernador Ondemand, el gobernador Conservative ajusta la frecuencia de reloj según el uso. Sin embargo, mientras el gobernador Ondemand lo hace de una manera agresiva (es decir, desde lo máximo a lo mínimo y viceversa), el gobernador Conservative cambia de frecuencias gradualmente.
Nota
cron
. Esto le permite automáticamente establecer gobernadores específicos durante horas específicas del día. Como consecuencia, puede especificar un gobernador de baja frecuencia durante tiempos de inactividad (por ejemplo despues de horas de trabajo) y retornar a un gobernador de frecuencia más alta durante horas de carga de trabajo pesada.
3.2.2. Configuración de CPUfreq
Procedimiento 3.1. Cómo añadir el controlador CPUfreq
- Utilice el siguiente comando para ver cuáles controladores de CPUfreq están disponibles en su sistema:
ls /lib/modules/[versión de kernel]/kernel/arq/[arquitectura]/kernel/cpu/cpufreq/
- Use
modprobe
para añadir el controlador CPUfreq apropiado.modprobe [controlador de CPUfreq]
Al usar el comando anterior, asegúrese de eliminar el sufijo de nombre de archivo.ko
Importante
Al escoger un controlador CPUfreq apropiado, siempre elijaacpi-cpufreq
sobrep4-clockmod
. Aunque el uso del controladorp4-clockmod
reduce la frecuencia del reloj de una CPU, no reduce el voltaje. Por otra parte,acpi-cpufreq
reduce el voltaje junto con la frecuencia del reloj de la CPU, permitiendo menos consumo de energía y salida de calor para cada reducción de unidad en rendimiento.. - Una vez el controlador CPUfreq esté configurado, se podrá ver el sistema actual que está gobernando, mediante:
cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor
cat /sys/devices/system/cpu/[cpu ID]/cpufreq/scaling_available_governors
modprobe
para añadir los módulos de kernel necesarios para habilitar el gobernador CPUfreq específico que desee utilizar. Dichos módulos de kernel están disponibles en /lib/modules/[versión de kernel]/kernel/drivers/cpufreq/
.
Procedimiento 3.2. Cómo habilitar un gobernador CPUfreq
- Si el gobernador específico no aparece en la lista como disponible, utilice
modprobe
para habilitar el gobernador que desee utilizar. Por ejemplo, si el gobernadorondemand
no está disponible para su CPU, use el siguiente comando:modprobe cpufreq_ondemand
- Cuando un gobernador esté listado como disponible para su CPU, usted podrá habilitarlo mediante:
echo [gobernador] > /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor
3.2.3. Ajuste de la política CPUfreq y Velocidad
/sys/devices/system/cpu/[cpu ID]/cpufreq/
. Dichos ajustadores son:
cpuinfo_min_freq
— Muestra la frecuencia operativa mínima disponible de CPU' (en KHz).cpuinfo_max_freq
— Muestra la frecuencia operativa máxima disponible de CPU' (en KHz).scaling_driver
— Muestra qué controlador CPUfreq se utiliza para establecer la frecuencia en esta CPU.scaling_available_governors
— Muestra los gobernadores de CPUfreq disponibles en este kernel. Si desea utilizar un gobernador de CPUfreq que no esté listado en este archivo, consulte el Procedimiento 3.2, “Cómo habilitar un gobernador CPUfreq” en la Sección 3.2.2, “Configuración de CPUfreq” para obtener instrucciones sobre cómo hacerlo.scaling_governor
— Muestra el gobernador CPUfreq que está en uso. Para utilizar un gobernador diferente, utiliceecho [governor] > /sys/devices/system/cpu/[cpu ID]/cpufreq/scaling_governor
(consulte el Procedimiento 3.2, “Cómo habilitar un gobernador CPUfreq” en la Sección 3.2.2, “Configuración de CPUfreq” para obtener mayor información).cpuinfo_cur_freq
— Muestra la velocidad actual de la CPU (en KHz).scaling_available_frequencies
— Lista las frecuencias disponibles para la CPU, en KHz.scaling_min_freq
yscaling_max_freq
— Establecen los límites de política de la CPU, en KHz.affected_cpus
— Lista las CPU que requieren software de coordinación de frecuencia.scaling_setspeed
— Utilizado para cambiar la velocidad del reloj de la CPU, en KHz. Solo puede establecer una velocidad entre los límites de políticas de las CPU (como enscaling_min_freq
yscaling_max_freq
).
cat [tunable]
. Por ejemplo, para ver la velocidad actual de cpu0 (en KHz), use:
cat /sys/devices/system/cpu/cpu0/cpufreq/cpuinfo_cur_freq
.
echo [value]> /sys/devices/system/cpu/[cpu ID]/cpufreq/[tunable]
. Por ejemplo, para establecer la mínima velocidad de cpu0 a 360 KHz, use:
echo 360000 > /sys/devices/system/cpu/cpu0/cpufreq/scaling_min_freq
3.3. Suspender y reanudar
3.4. Kernel sin intervalos
3.5. Administrador de energía de estado activo
- default
- establece los estados de enlace de energía de PCLe según los predeterminados especificados por firmware en el sistema (por ejemplo, BIOS). Este es el estado predeterminado para ASPM.
- powersave
- Configura ASPM para ahorrar energía cuando sea posible, independiente del costo de rendimiento.
- performance
- Inhabilita ASPM para permitir que enlaces PCLe operen con el máximo rendimiento
/sys/module/pcie_aspm/parameters/policy
, pero también pueden especificarse en el momento de arranque con el parámetro de kernel pcie_aspm
, donde pcie_aspm=off
inhabilita a ASPM y pcie_aspm=force
habilita a ASPM, incluso en dispositivos que no soportan ASPM.
Aviso
pcie_aspm=force
, el hardware que no soporte ASPM puede hacer que el sistema deje de responder. Antes de configurar pcie_aspm=force
, verifique si todo el hardware PCIe en el sistema soporta ASPM.
3.6. Administración de energía de enlace agresivo
Este modo establece el enlace a su mínimo estado de energía, (LETARGO) cuando no hay E/S en el disco. Dicho modo es útil para cuando se espera un periodo extendido de tiempo de inactividad.
Este modo establece el enlace en el segundo estado más bajo de energía (PARCIAL) cuando no hay E/S en el disco. Dicho modo está diseñado para permitir transiciones en estados de enlace de energía (por ejemplo durante los momentos de alta carga de E/S intermitente y tiempo de inactividad de E/S) con el menor impacto posible en rendimiento.
medium_power
permite el enlace a la transición entre estados PARCIAL y TOTAL (es decir "ACTIVO"), dependiendo de la carga. Observe que no es posible la transición directa de un enlace PARCIAL a SLUMBER y viceversa; en este caso, ningún estado de energía puede pasar al otro sin haber hecho primero la transición al estado ACTIVO.
ALPM está inhabilitado; el enlace no entra a ningún estado de baja cuando no hay E/S en el disco.
/sys/class/scsi_host/host*/link_power_management_policy
existe.
3.7. Optimización de acceso de unidad de Relatime
atime
, y el mantenimiento de ésta requiere una serie constante de operaciones de escritura para almacenaje. Dichas escrituras mantienen dispositivos de almacenamiento y sus enlaces ocupados y encendidos. Puesto que pocas aplicaciones utilizan datos atime
, esta actividad de dispositivo de almacenamiento desperdicia energía. La escritura a almacenamiento se presenta incluso si el archivo no fue leído desde el almacenaje, sino desde la memoria cache. Por algún tiempo, el kernel de Linux ha soportado la opción noatime
para mount y no escribiría datos atime
a sistemas de archivos montados con esta opción. Sin embargo, la desactivación de esta funcionalidad es problemática, puesto que algunas aplicaciones dependen de los datos de atime
y fallarán si no está disponible.
relatime
. Relatime
mantiene datos atime
, pero no para cada vez que se acceda a un archivo. Con esta opción habilitada, los datos atime
se escriben al disco únicamente si el archivo ha sido modificado desde la última vez que los datos atime
fueron actualizados (mtime
), o si el archivo fue accedido por un periodo de tiempo mayor (por defecto, un día).
relatime
habilitada. Para suprimir esta función a través de todo el sistema, use el parámetro de arranque default_relatime=0
. Si relatime
está habilitada por defecto en un sistema, podrá suprimirla para un determinado sistema de archivos montando ese sistema de archivos con la opción norelatime
. Por último, para variar la longitud predeterminada antes de que el sistema actualice los datos atime
de un archivo, use el parámetro de arranque relatime_interval=
, especificando el periodo en segundos. El valor predeterminado es 86400
.
3.8. Límite de energía
El límite de energía dinámico es una función disponible en la selección de servidores ProLiant y BladeSystem que permite a los administradores de sistema limitar el consumo de energía de un servidor o un grupo de servidores. El límite es un límite definitivo que el servidor no superará, independientemente de su carga de trabajo actual. El límite no surte ningún efecto hasta que el servidor alcanza su límite de consumo de energía. En ese momento, el procesador de gestión ajusta estados de CPU P y la aceleración del reloj para limitar la energía consumida.
/hpilo/dev/d X ccb N
. El kernel también incluye una extensión de la interfaz de sysfs
hwmon
que soporta funciones de límite de energía y un controlador hwmon
para medidores de energía ACPI 4.0 que utilizan la interfaz sysfs
. Estas características permiten que el sistema operativo y las herramientas de espacio de usuario lean el valor configurado para el límite de energía, junto con el uso actual de energía del sistema.
El Administrador de nodos de Intel ,impone un límite de energía en sistemas, mediante el procesador de estados- P y estados-T para limitar el rendimiento de la CPU y, por tanto, el consumo de energía. Al establecer una política de gestión de energía, los administradores pueden configurar sistemas para consumir menos energía en momentos en que las cargas de sistema son bajas, por ejemplo, por la noche o los fines de semana.
3.9. Administración de energía en gráficas mejoradas
La Señal diferencial de bajo voltaje (LVDS) es un sistema para llevar señales electrónicas en alambre de cobre. Una aplicación importante del sistema es la transmisión de información pixel a pantalla de cristal líquido (LCD) en computadores notebook. Todas las pantallas tienen tasa de actualización — la tasa en la cual reciben datos actualizados desde un controlador gráfico y redirigen la imagen en la pantalla. Por lo general, la pantalla recibe datos actualizados sesenta veces por segundo (una frecuencia de 60 Hz). Cuando una pantalla y controlador gráfico están conectados por LVDS, el sistema LVDS utiliza energía en cada ciclo de actualización. Cuando está inactivo, la tasa de actualización de varias pantallas LCD pueden caer a 30 Hz sin ningún efecto perceptible (a diferencia de los monitores de tubo de rayos catódicos (CRT), en los cuales la reducción en la tasa de actualizaciones produce un parpadeo característico). El controlador Intel para adaptadores gráficos incorporado en el kernel utilizado en Red Hat Enterprise Linux 6 realiza automáticamente este downclocking y ahorra cerca de 0.5 W cuando la pantalla está inactiva.
Memoria de acceso aleatorio dinámico y sincrónico (SDRAM) — utilizada para memoria de vídeo en adaptadores gráficos — se recarga miles de veces por segundo para que las células de memoria individual retengan los datos que se almacenan en ellos. Aparte de su función principal de administrar datos cuando entran y salen de la memoria, el controlador de memoria es responsable de iniciar estos ciclos de actualización. Sin embargo, SDRAM también tiene un modo de auto actualización de baja energía. En dicho modo, la memoria utiliza un temporizador interno para generar su propios ciclos de actualización, lo cual permite al sistema apagar el controlador de memoria sin dañar los datos que están actualmente en memoria. El kernel utilizado en Red Hat Enterprise Linux 6 puede reactivar la auto-actualización de memoria en los adaptadores gráficos Intel cuando están en inactividad, lo cual ahorra cerca de 0.8 W.
Las unidades de procesamiento gráfico típicas (GPU) contienen relojes internos que gobiernan varias partes de su circuito interno. El kernel utilizado en Red Hat Enterprise Linux 6 puede reducir la frecuencia de algunos de los relojes internos en GPU Intel y ATI. Al reducir el número de ciclos que los componentes de GPU realizan en un tiempo determinado, se ahorra la energía que hubieran consumido en los ciclos que no tenían que actuar. El kernel reduce automáticamente la velocidad de estos relojes cuando la GPU está inactiva y la incrementa cuando la actividad de GPU aumenta. Al reducir los ciclos de reloj de GPU se pueden ahorrar hasta 5 W.
Los controladores gráficos Intel y ATI en Red Hat Enterprise Linux 6 pueden detectar cuando no hay un monitor conectado a un adaptador y por lo tanto, apagar completamente la GPU. Esta función es en particular importante para servidores que no tienen monitores conectados regularmente a ellos.
3.10. RFKill
/dev/rfkill
, el cual contiene el estado actual de todos los radiotransmisores en el sistema. Cada dispositivo tiene su estado RFKill actual registrado en sysfs
. Además, RFKill genera uevents para cada cambio de estado en un dispositivo RFKill-habilitado.
rfkill list
para obtener una lista de dispositivos, cada uno de los cuales tiene un número de índice asociado a este, iniciando en 0
. Se puede usar este número de índice para decirle a rfkill que bloquee o desbloquee un dispositivo, por ejemplo:
rfkill block 0
rfkill block wifi
rfkill block all
rfkill unblock
en lugar de rfkill block
. Para obtener una lista completa de las categorías de dispositivos que rfkill puede bloquear, ejecute: rfkill help
3.11. Optimizaciones en espacio de usuario
Red Hat Enterprise Linux 6 utiliza un kernel sin intervalo (consulte la Sección 3.4, “Kernel sin intervalos”), el cual permite a la CPU permanecer en los estados más profundos de inactividad por más tiempo. Sin embargo, el temporizador de intervalo no es la única fuente de despertadores de CPU excesivos y las llamadas de función desde aplicaciones pueden también evitar que la CPU entre o permanezca en estados de inactividad. Las llamadas de función innecesarias se redujeron en más de 50 aplicaciones.
La entrada o salida (E/S) para dispositivos de almacenamiento y las interfaces de red obligan a dispositivos a consumir energía. En dispositivos de almacenamiento y de red esa función reducía los estados de energía cuando estaban inactivos (por ejemplo, ALPM o ASPM), este tráfico puede impedir que el dispositivo entrar o permanecer en un Estado de inactividad y puede impedir que unidades de disco duro de girar hacia abajo cuando no esté en uso. Las demandas excesivas e innecesarias de almacenamiento de información han sido minimizadas en varias aplicaciones. En particular, aquellas demandas que impedían a unidades de disco duro girar hacia abajo.
Los servicios que se inicien automáticamente si se requieren o no tienen gran potencial para residuos de recursos del sistema. En su lugar, los servicios deben por defecto estar en "off" o "en demand" siempre que sea posible. Por ejemplo, el servicio de BlueZ que permite el soporte de Bluetooth previamente se ejecutaba automáticamente cuando se iniciaba el sistema, si el hardware de Bluetooth estaba presente o no. Initscript de BlueZ ahora comprueban que hardware Bluetooth está presente en el sistema antes de iniciar el servicio.
Capítulo 4. Casos de uso
4.1. Ejemplo — Servidor
Un servidor de Web necesita E/S de red y disco. Según la velocidad de conexión externa 100 Mbit/s podría ser suficiente. Si la máquina sirve en su mayoría páginas estáticas, el rendimiento de la CPU podría no ser importante. Las opciones de administración de energía por lo tanto incluirían:
- no hay complementos de disco o de red para tuned.
- ALPM encendido.
- Gobernador
ondemand
encendido. - tarjeta de red limitada a 100 Mbit/s.
Un servidor de cómputo principalmente necesita CPU. Las opciones de administración de energía podrían incluir:
- Según los trabajos y dónde se suceda el almacenamiento de datos, complementos de disco y red para tuned; o para sistemas de modo-batch, completamente activos tuned.
- según el uso,quizás el gobernador de
rendimiento
.
Un servidor de correo necesita la mayoría de las opciones de E/S de disco y CPU. Las opciones de administración de energía podrían incluir:
- Gobernador
ondemand
encendido, puesto que el último porcentaje de rendimiento de CPU no es importante. - no hay complementos de disco o de red para tuned.
- la velocidad de red no debe ser limitada, puesto que el correo a menudo es interno y puede, por lo tanto, beneficiarse de un enlace de 1 Gbit/s o 10 Gbit/s.
Los requisitos del Servidor de archivos son similares a los del servidor de correo, pero dependiendo del protocolo utilizado, podría requerir más rendimiento de CPU. Por lo general, servidores basados en Samba, requieren más CPU que NFS y, NFS requiere más de iSCSI. Incluso con esto. debería poder utilizar el gobernador ondemand
.
Un servidor de directorio generalmente tiene requisitos más bajos para E/S de disco, específicamente si está equipado con suficiente RAM. La latencia de red es importante aunque la E/S de red sea menor. Debería considerar el ajuste de latencia de red con una velocidad de enlace inferior, pero debería probarlo con cuidado en su red particular.
4.2. Ejemplo — Portátil
- Configure el BIOS del sistema para inhabilitar todo el hardware que no utilice. Por ejemplo, los puertos seriales y paralelos, los lectores de tarjeta, cámaras web, WiFi y Bluetooth entre otros candidatos.
- Atenúe el monitor en entornos más oscuros donde no sea necesaria la plena iluminación para leer la pantalla cómodamente. Utilice Gestor de energía de GNOME o xbacklight en la línea de comandos; o las teclas de función de su portátil.+ → en el escritorio de GNOME, + + + → en el escritorio de KDE o
- Use el perfil de
laptop-battery-powersave
de tuned-adm para habilitar todo un set de mecanismos de ahorro de energía. Observe que el rendimiento y la latencia para el disco duro y la interfaz de red se ven afectados.
- usar el gobernador
ondemand
(activado por defecto en Red Hat Enterprise Linux 6) - activar modo portátil (parte del perfil de
laptop-battery-powersave
):echo 5 > /proc/sys/vm/laptop_mode
- aumentar tiempo de descarga a disco (parte del perfil
laptop-battery-powersave
):echo 1500 > /proc/sys/vm/dirty_writeback_centisecs
- inhabilitar nmi watchdog (parte del perfil
laptop-battery-powersave
):echo 0 > /proc/sys/kernel/nmi_watchdog
- habilitar AC97 ahorro de energía de audio (habilitado por defecto en Red Hat Enterprise Linux 6):
echo Y > /sys/module/snd_ac97_codec/parameters/power_save
- habilitar ahorro de energía multi-núcleos (parte el perfil
laptop-battery-powersave
):echo 1 > /sys/devices/system/cpu/sched_mc_power_savings
- habilitar auto-suspensión de USB:
for i in /sys/bus/usb/devices/*/power/autosuspend; do echo 1 > $i; done
Observe que la auto-suspensión de USB no funciona correctamente en todos los dispositivos USB. - habilitar mínima configuración de energía para ALPM (parte del perfil
laptop-battery-powersave
):echo min_power > /sys/class/scsi_host/host*/link_power_management_policy
- montar sistema de archivos mediante relatime (por defecto en Red Hat Enterprise Linux 6):
mount -o remount,relatime mountpoint
- activar el mejor modo de ahorro de energía para discos duros (parte del perfil
laptop-battery-powersave
):hdparm -B 1 -S 200 /dev/sd*
- desactivar CD-ROM de polling (parte del perfil de
laptop-battery-powersave
):hal-disable-polling --device /dev/scd*
- reducir brillo de pantalla a
50
o menos, por ejemplo:xbacklight -set 50
- activar DPMS para inactividad de pantalla:
xset +dpms; xset dpms 0 0 300
- reducir niveles de energía Wi-Fi (parte del perfil
laptop-battery-powersave
profile):for i in /sys/bus/pci/devices/*/power_level ; do echo 5 > $i ; done
- desactivar Wi-Fi:
echo 1 > /sys/bus/pci/devices/*/rf_kill
- limitar red de cable a 100 Mbit/s (parte del perfil de
laptop-battery-powersave
):ethtool -s eth0 advertise 0x0F
Apéndice A. Consejos para desarrolladores
- el uso de hilos.
- los despertadores de CPU innecesarios y el uso ineficiente de despertadores. Si debe despertar, haga todo al mismo tiempo (carrera a ralentí) y tan pronto como sea posible.
- el uso innecesario de
[f]sync()
. - el polling activo innecesario o uso de plazos cortos o regulares. (Reaccionar a eventos en su lugar)
- no usar eficientemente despertadores.
- acceso ineficiente de disco. Usar grandes buffers para evitar el acceso frecuente a disco. Escribir un gran bloque a la vez.
- el uso ineficiente de temporizadores. Temporizadores de grupo a través de aplicaciones (o incluso a través de sistemas) si es posible.
- excesiva E/S. consumo de energía o uso de memoria (incluyendo filtraciones de memoria)
- realización innecesaria de computos.
A.1. Uso de hilos
Python usa el Global Lock Interpreter[1], por lo tanto, el uso de hilos es solo útil para operaciones de E/S mayores. Unladen-swallow [2] es una aplicación de Python más rápida con la cual puede optimizar su código.
Los hilos de Perl fueron creados originalmente para aplicaciones que se ejecutan en sistemas sin bifurcaciones (como los sistemas con sistemas operativos de Windows de 32 bits). En hilos de Perl, los datos se copian para cada hilo (Copia en Escritura). Los datos no son compartidos de forma predeterminada, puesto que los usuarios deben definir el nivel de datos compartidos. Para compartir datos, el módulo threads::shared tiene que estar incluido. Sin embargo, los datos no son solamente copiados (Copia en Escritura), sino que el módulo también crea variables vinculadas para los datos, lo cual toma aún más tiempo y es aún mucho más lenta. [3]
Los hilos C comparten la misma memoria, cada hilo tiene su propia pila y el kernel no tiene que crear nuevos descriptores de archivo ni asignar nuevo espacio de memoria. C puede usar el soporte de más CPU para más hilos. Por lo tanto, para maximizar el rendimiento de sus hilos, utilice un lenguaje de bajo nivel como C o C ++. Si utiliza un lenguaje de scripts, considere escribir un vínculo C. Use perfiladores para identificar las partes de su código que se ejecutan pobremente. [4]
A.2. Despertadores
int fd; fd = inotify_init(); int wd; /* checking modification of a file - writing into */ wd = inotify_add_watch(fd, "./myConfig", IN_MODIFY); if (wd < 0) { inotify_cant_be_used(); switching_back_to_previous_checking(); } ... fd_set rdfs; struct timeval tv; int retval; FD_ZERO(&rdfs); FD_SET(0, &rdfs); tv.tv_sec = 5; value = select(1, &rdfs, NULL, NULL, &tv); if (value == -1) perror(select); else { do_some_stuff(); } ...
/proc/sys/fs/inotify/max_user_watches
y aunque se puede cambiar, no es recomendable. Además, si inotify falla, el código tiene que resguardarse a un método de verificación diferente, lo cual suele significar muchas apariciones de #if #define
en el código fuente.
A.3. Fsync
Fsync
se conoce como una operación de E/S costosa, pero esto no es totalmente cierto. Por ejemplo, consulte el artículo de Theodore Ts No le tema a fsync! [5] y la discusión que lo acompaña.
fsync
y debido a las configuraciones del sistema de archivos (principalmente ext3 con datos en modo ordenado), había más latencia cuando nada sucedía. Esto podía tardar un largo tiempo (más de 30 segundos) si otro proceso estaba copiando un archivo grande al mismo tiempo.
fsync
wasn't no se utilizaba, se presentaban problemas con el cambio al sistema de archivos ext4. Ext3 se establecía de modo datos-ordenados, lo cual borraba la memoria cada pocos segundos y le ahorraba al disco. Sin embargo, con ext4 y modo_portátil, el intervalo entre almacenamiento utilizaba más tiempo y los datos podían perderse cuando el sistema inesperadamente era apagado. Ahora ext4 está corregido, pero debe aún considerarse cuidadosamente el diseño de sus aplicaciones y usar fsync
como es apropiado.
/* open and read configuration file e.g. ~/.kde/myconfig */ fd = open("./kde/myconfig", O_WRONLY|O_TRUNC|O_CREAT); read(myconfig); ... write(fd, bufferOfNewData, sizeof(bufferOfNewData)); close(fd);
open("/.kde/myconfig", O_WRONLY|O_TRUNC|O_CREAT); read(myconfig); ... fd = open("/.kde/myconfig.suffix", O_WRONLY|O_TRUNC|O_CREAT); write(fd, bufferOfNewData, sizeof(bufferOfNewData)); fsync; /* paranoia - optional */ ... close(fd); rename("/.kde/myconfig", "/.kde/myconfig~"); /* paranoia - optional */ rename("/.kde/myconfig.suffix", "/.kde/myconfig");
Apéndice B. Historial de revisiones
Historial de revisiones | |||
---|---|---|---|
Revisión 1.0-10.400 | 2013-10-31 | ||
| |||
Revisión 1.0-10 | 2012-07-18 | ||
| |||
Revisión 1.0-2 | Fri Oct 22 2010 | ||
| |||
Revisión 1.0-1 | Thu Oct 7 2010 | ||
| |||
Revisión 1.0-0 | Thu Oct 7 2010 | ||
|