Ver Mensaje Individual
  #1  
Viejo 04/04/12, 13:35:32
Array

[xs_avatar]
zadock zadock no está en línea
Equipo de HTCMania
· Votos compra/venta: (5)
 
Fecha de registro: feb 2011
Mensajes: 50,549
Modelo de smartphone: Mi 9T Pro
Tu operador: Movistar
Post Governors, I/O Schedulers y configuraciones de los governors

El objetivo de este hilo es aprender un poco más acerca de la configuración de los kernels y de sus parámetros.

Viendo que por estos lugares no tenemos nada referente a las configuraciones de los diferentes governos que vienen en los kernels, me he decidido a terminar con esto y que todo el mundo pueda tener una noción básica al respecto.

En primer lugar hay que decir que la información la he sacado de este hilo de XDA creado por droidphile y que todo el mérito va para él principalmente. Yo simplemente me he limitado a traducirlo como buenamente he podido, y puede que haya alguna cosa que no esté del todo clara.

El hilo está dividido en tres partes (desde aquí se puede ir a cualquiera de ellas):

No pretende ser un tutorial, ni un hilo en el que preguntar qué es un governor o un scheduler o para cómo se configura un kernel, etc. Simplemente es una guía para entender y tener claros algunos de los parámetros que nos brindan los kernels para poder configurarlos a nuestros gusto y exprimir al máximo el potencial de los mismos, y de nuestros teléfonos.


GOVERNORS

Primeramente vamos a hablar de los governors más conocidos, los que suelen incluir la mayoría de los kernels. Un kernel no tiene por que incluir todos estos, eso depende del desarrollador. Son los siguientes:


1) Ondemand
2) Ondemandx
3) Conservative
4) Interactive
5) Interactivex
6) Lulzactive
7) Smartass
8) SmartassV2
9) Intellidemand
10) Lazy
11) Lagfree
12) Lionheart (*)
13) LionheartX (*)
14) Brazilianwax (*)
15) SavagedZen
16) Userspacce
17) Powersave
18) Performance

(*) Los menciono pero no voy a hablar de ellos, ya que no se suelen utilizar.



1) Ondemand

Es el governor por defecto en la mayoría de los kernels stock. Uno de los objetivos principales del Ondemand es que cambia a la máxima frecuencia tan pronto como haya actividad en la CPU para asegurar la capacidad de respuesta del sistema, para que se entienda funciona en plan “lo importante es el rendimiento aquí y ahora”. Por lo tanto, escala a la máxima frecuencia cuando la CPU está trabajando y decrece gradualmente cuando la CPU se va quedando más libre. A pesar de que muchos consideran Ondemand como un governor fiable, se queda a mitad de camino entre ofrecer un buen rendimiento del teléfono y un ahorro de batería.


2) Ondemandx

Este governor se supone que es mejor que el Ondenand en cuanto a gasto de batería. Cuando la pantalla está apagada, la frecuencia máxima está limitada a 500 mhz. Aunque Ondemand es el governor por defecto en varios kernels y es considerado como seguro y estable, el soporte para Ondemand/OndemandX depende de la capacidad de la CPU para hacer rápidas variaciones de frecuencia.


3) Concervative

Es un Ondemand más lento que escala frecuencias más lentamente para ahorrar batería. Funciona como aquel, al ajustar dinámicamente las frecuencias según la utilización del procesador. Sin embargo, el Conservative aumenta y disminuye la velocidad de la CPU más gradualmente. Más fácil de entender, este governor aumenta la frecuencia de la CPU paso por paso (100mhz>200mhz>400mhz>etc), y salta a la frecuencia más baja cuando la CPU entra en idle (1000mhz>100mhz).


4) Interactive

Se puede considerar con un Ondemand rápido. Al ser más rápido gasta más batería. Tiene las siguientes ventajas:
  • Escala frecuencias de manera más consistente, debido a que los otros governors hacen su muestreo de carga de la CPU en un contexto de espera (primero uno, hasta que no acabe con ese no pasa el siguiente), pero el Interactive asigna unos tiempos a cada muestreo haciéndolo más consistente.
  • Mayor prioridad para el incremento de frecuencia de la CPU, dando así un mayor beneficio al incremento de rendimiento.

5) Interactivex

Es un Interactive con un perfil de arranque. Más ahorro de la batería que el Interactive.


6) Lulzactive

Está basado en los governors Interactive y Smartass y es uno de los más usados.

Versión antigua
Cuando la carga de la CPU es igual o superior al 60%, el governor hace que la CPU aumente hasta la siguiente frecuencia. Cuando la carga es inferior al 60%, el governor hace que la CPU disminuya hasta la frecuencia anterior a la que está. Cuando la pantalla está apagada, la frecuencia es la mínima a la que esté configurada la CPU.

Versión nueva
Existen tres nuevos parámetros configurables: inc_cpu_load, pump_up_step y pump_down_step. Esto dota de más control por parte del usuario. Podemos establecer el umbral en el que governor decide escalar hacia arriba o hacia abajo. De la misma manera, podemos fijar el número de frecuencias que se saltará hacia arriba o hacia abajo. Por ejemplo: cuando la carga esté por encima del 60% pasar de 200mhz a 800mhz.
Otro ejemplo
Considerad los siguientes parámetros:

inc_cpu_load=70
pump_up_step=2
pump_down_step=1

Si la frecuencia actual=200mhz, cuando la CPU tenga una carga del 70% escalará 2 frecuencias hasta llegar a los 800mhz.
Si la frecuencia actual=1200mhz, cuando la CPU tenga una carga menor al 70% bajará 1 frecuencia hasta llegar a los 1000mhz.

7) Smartass

Es el governor resultante de que Erasmux reescribiese completamente el código del Interactive. El principal objetivo es optimizar la duración de la batería sin comprometer el rendimiento. Aun así, el gasto de batería es algo mayor que el SmartassV2 dado que la frecuencia mínima con la pantalla encendida es mayor que las frecuencias utilizadas con la pantalla apagada. Salta a la máxima frecuencia en intervalos de tiempo muy cortos, y esta operación la repite continuamente.


8) SmartassV2

Es la Versión 2 del Smartass original de Erasmux. Otro de los favoritos de mucha gente. El objetivo de este governor es el de utilizar la frecuencia ideal, y subir de forma bastante agresiva hasta esa frecuencia, para después bajar más suavemente. Usa diferentes frecuencias ideales para perfiles de pantalla apagada/encendida, llamados awake_ideal_freq y sleep_ideal_freq. Este governor baja de frecuencia de CPU muy rápidamente (para alcanzar cuanto antes la sleep_ideal_freq) mientras la pantalla está apagada, y sube de frecuencia de la CPU rápidamente hasta la awake_ideal_freq cuando la pantalla se enciende. No hay un límite superior de frecuencia mientras la pantalla está apagada (a diferencia del Smartass). Por lo tanto, el governor tiene disponible todo el rango entero de frecuencias para usarlas durante los estados de pantalla apagada/encendida. El lema de este governor es un equilibrio entre rendimiento y batería.


9) Intellidemand

Intellidemand, o también conocido como Intelligent Ondemand es otro governor basado en el Ondemand. El Intellidemand original se comporta de manera diferente según el uso de la GPU. Cuando la GPU está realmente ocupada (por juegos, Maps, benchmarking, etc) Intellidemand se comporta como un Ondemand. Cuando la GPU está “idling” (al ralentí, por así decirlo), o no tan ocupada como antes, Intellidemand limita la frecuencia máxima en función de las frecuencias disponibles del dispositivo/kernel para ahorrar batería. Esto se denomina modo de navegación. Podemos apreciar aquí algunos aspectos del governor Interactive. La frecuencia con la que se toman las decisiones de escalar hacia arriba está basada en el tiempo de inactividad de la CPU. Un tiempo de inactividad bajo (<20%) hace que la CPU aumente la frecuencia actual. En resumen, se trata de un Ondemand inteligente que entra en el modo navegación para limintar la frecuencia máxima cuando la GPU entra en inactividad, y se comporta con un Ondemand cuando la GPU está ocupada para ofrecer rendimiento para juegos, por ejemplo. Intellidemand no salta a la frecuencia más alta cuando la pantalla está apagada.


10) Lazy

Este governor creado por Ezekeel es básicamente un Ondemand con unos parámetros adicionales min_time_state para especificar el tiempo mínimo que la CPU está en una frecuencia antes de subirla/bajarla. La idea es eliminar cualquier inestabilidad causada por el rápido cambio que usa Ondemand. Lazy también tiene un parámetro screenoff_mazfreq que cuando está activado hará que el governor siempre seleccione la máxima frecuencia cuando la pantalla está apagada.


11) Lagfree

Lagfree es similar al Ondemand. La única diferencia es que no está optimizado para mejorar el gasto de batería. La frecuencia aumenta y disminuye suavemente, a diferencia del Ondemand. Lagfree no omite ningún escalón en la frecuencia mientras la aumenta o la disminuye. Hay que tener presente que si hay un requerimiento repentino de energía Lagfree no puede satisfacerlo ya que tiene que pasar por todas y cada una de las frecuencias. Algunos usuarios han reportado que la reproducción de vídeo usando Lagfree da algunos pequeños tirones.


12)Lionheart 13) LionheartX 14) Brazilianwax


15) SavagedZen

Es otro governor basado en el SmartassV2. Logra un buen equilibrio entre rendimiento y batería, en comparación con al Brazilianwax.


16) Userspace

En lugar de determinar automáticamente las freuencias, deja a los usuarios elegirlas.


17) Powersave

Bloquea la frecuencia máxima a la mínima frecuencia. No se puede usar como un perfil de pantalla encendida o incluso apagada si la frecuencia mínima es demasiado baja.


18) Performance

Ajusta la mínima frecuencia a la máxima frecuencia. ¡Úsalo mientras haces un benchmarking! :P



PREGUNTAS

P. “Muy bien, basta de explicaciones. Dime qué governor es mejor para rendimiento y cual es mejor para la batería.”

R. Lulzactive y SmartassV2 para un equilibrio entre rendimiento y batería. Para tareas ligeras, Lulzactive debería ser mejor en cuanto a batería, y para tareas más pesadas, Lulzactive debería ser mejor para rendimiento también. Para obtener un rendimiento máximo usa un Ondemand retocado o un Conservative, pero nunca te quejes de la batería entonces. NOTA: no es fácil hacerse con el Lulzactive. Si no estás seguro de cómo configurarlo sigue leyendo los siguientes posts.


P. “Casi lo olvido, ¿cómo puedo cambiar los governors?"

R. La mejor manera es usando un script en init.d si tu kernel está preparado para ello. Otra opción, mucho más fácil, es usando aplicaciones como NSTools, Voltage Control, Pimp my CPU, etc.


P. “¿Cómo se qué governor es el mejor para mí?”

R. Depende de lo que necesites según el uso que le des al teléfono a diario: rendimiento o batería. La mejor elección es un governor que tenga un equilibro entre las dos opciones. O modificar un governor para obtener un mayor rendimiento en detrimento de la batería. Siempre podemos recargar la batería: en el coche cuando vamos al trabajo, en casa por la noche. Lo que no podemos es recargar el rendimiento. Si, como lo oyes. Prueba a disfrutar del teléfono, no le pongas barreras con tal de que gaste menos y te dura la batería 2 o 3 días. Si la batería te aguanta desde que te levantas hasta que te acuestas dale caña.


P. “Bien, he elegido me governor favorito para cuando se enciende la pantalla y otro para cuando se apaga. ¿Por qué el teléfono no se enciende al salir del reposo? Tengo que reiniciarlo pulsando el botón power durante unos 10 segundos…¿He tenido un SOD (sleep of death)?”

R. Si. No uses dos governos distintos para pantalla apagada/encendida si ambos tienen limitada la frecuencia máxima para la pantalla apagada. ¿No lo has entendido?
  • Ejemplo de mala combinación (pantalla encendida/apagada): OndemandX-SmartassV2.
  • Ejemplo de buena combinación: Ondemand-SmartassV2, Lulzaactive-SmartassV2.

P. "Noto cierto lag con un governor. Por ejemplo cuando hago scroll en el menú de aplicaciones o en el navegador web, etc. Me encanta este governor y no me digas que use otro…¿Puedo deshacerme del lag?"

R. Si…puedes. Básicamente lo que tenemos que hacer es que el governor muestree con menos frecuencia cuándo bajar la velocidad de la CPU. Incrementar el tiempo de muestro para bajar la frecuencia hace que la CPU esté durante más tiempo en una misma frecuencia antes de disminuirla. Esto podría eliminar el lag.


P. “Ok, quiero modificar el governor según mi uso habitual, porque no estoy a gusto con la configuración predetermianda.”

R. Se pueden modificar los governors usando un script en init.d, por ejemplo: /sys/devices/system/cpu/cpufreq/name-of-active-governor/name-of-the-paramater-to-tweak. La manera más fácil y cómoda, sin duda, es usando la aplicación NSTools, la cual permite ajustar los parámetros de todos los governors que lo permitan.


P. “Voy a elegir como frecuencia mínima 100 mhz porque mi kernel me da la opción. Espero que no haya nada malo en hacer esto.”

R. ¡Espera! Posiblemente desees no usar la frecuencia mínima de 100 mhz con la pantalla apagada/encendida por tres razones:
  • 100 mhz consume más batería que 200 mhz. Según los test, 100 mhz consumen 1W/Ghz y 200 mhz consumen 0,7W/Ghz.
  • En 200 mhz se pueden hacer las mismas tareas más rápidamente que en 100 mhz y entrar antes en reposo.
Ojo: esta frecuencia mínima es la mejor para el SGS II. En el Motorola Milestone por ejemplo es 550 mhz. En el SGS no lo sé.


P. “¿Cómo hacer mi teléfono más ágil? Me importa la duración de la batería…”

R. Selecciona un rango de 500 mhz a 1200 mhz cuando la pantalla está encendida y uno de 200 mhz a 500 mhz cuando la pantalla está apagada. Usa un Performance o un Conservative/OndemanX modificados. La respuesta del teléfono será excelente y no te preocupes…un mínimo de 500 mhz con la pantalla encendida no gasta tanta batería como piensas.

Última edición por zadock Día 12/04/12 a las 00:12:35.
Responder Con Cita
Los siguientes 207 usuarios han agradecido a zadock su comentario:
[ Mostrar/Ocultar listado de agradecimientos ]