Llevo siguiendo a Francisco Franco desde que tuve el Galaxy Nexus (qué horrorosa pantalla tenía) ya que fue y es uno de los mejores desarrolladores de kernel del panorama, ganó su fama en los foros de XDA, donde los usuarios "cocinan" sus propias ROM y kernels para dispositivos móviles.

Android 5.0 Lollipop no ha sido la mejor versión de Android según lo que he podido leer en varias comunidades online, pero fue la primera. Android 5.1 está causando furor a diferencia de la versión preliminar, sobre todo por su rendimiento. Los que tienen un Nexus 6 con Android 5.1 están alabando el rendimiento de su terminal tras la actualización pero, en realidad, no es sólo por la nueva versión del sistema operativo y sus mejoras en ART. Es el kernel.

Palabras de Francisco Franco extraídas de su perfil en Google+:

Android 5.1, además de todas las mejoras en ART y la posibilidad de que hayan limpiado y mejorado todo el código del framework tiene un cambio muy importante en el Nexus 6: ahora tiene sus cuatro núcleos funcionando siempre, lo que ayuda enormemente al task scheduler a distribuir la carga de trabajo a través de todos los núcleos del procesador, dando al usuario la percepción de no tener un dispositivo con esperas, o tardando en responder

Esto es muy importante, y es algo que en mi impresión se desconoce. Un procesador, aunque sea de 4, 8 o 32 núcleos no siempre los usa todos a la vez, depende de cómo lo gestione el kernel y el sistema operativo. Por eso hay procesadores de 2 núcleos infinitamente mejores que los de 8 núcleos (que en verdad son dos de cuatro núcleos). Pero claro, seguro que te preguntarás si ese extra de rendimiento afectará dramáticamente a la batería, continuemos.

Google ha deshabilitado sus rutinas de impulso de migración a otro hilo - si no sabes qué es, es un driver desarrollado por Qualcomm. Inc, que al recibir una notificación del task scheduler cuando un hilo de ejecución migra de un núcleo del procesador a otro, minimiza el lag que pueda percibir el usuario incrementando la frecuencia de trabajo del núcleo destino a la misma o mayor velocidad que el núcleo en el que originalmente se desarrollaba su carga de trabajo.

1. El hilo de ejecución pasa de núcleo (cpu0) al núcleo (cpu2). (por ejemplo)
2. El driver recibe la notificación de lo ocurrido.
3. Este driver lee la frecuencia actual a la que trabaja (cpu0).
4. Si la frecuencia actual de (cpu2) es menor que la frecuencia de (cpu0) en ese preciso instante, aumenta la frecuencia de (cpu2) a esa frecuencia. Si la frecuencia es menor que la frecuencia threshold (1.7Ghz), aumenta la velocidad a esa frecuencia.

Estas migraciones de hilo a diferentes núcleos ocurren docenas de veces por segundo. Uno de los cambios que realicé en mi kernel, Franco Kernel, fue deshabilitar este driver para conservar batería ya que con el chip del Nexus 6 no creo que sea necesario. Estoy seguro de que Google ha realizado cálculos de consumo y determinado que los beneficios del driver no compensan las perdidas en autonomía, así que han decidido deshabilitarlo y yo les aplaudo por ello.

  • Las citas han sido retocadas ligeramente para hacerlas más didácticas sin alterar su mensaje.

Como vemos, ambos cambios mejoran el rendimiento y no aumentan el consumo de batería, ya que debería equilibrarse la ganancia y perdida de cada uno. Es más, los usuarios están reportando una mejor autonomía y una gran mejora de rendimiento.

Por si fuera poco, los cambios no son exclusivos del Nexus 6 y todos los procesadores gama alta de Qualcomm deberían obtener dichas mejoras en las actualizaciones pertinentes. Además, varios usuarios reportan que se ha arreglado el grave fallo "memory leak" que afectaba Android 5.0 aunque no está confirmado ya que apenas lleva unas horas en distribución esta nueva build de Android.