logo linux

El kernel de Linux tendrá Lucid Sleep

Lucid Sleep es una característica que tiene ChormeOS, un sistema operativo basado en Linux. Sin embargo, el kernel de Linux no contaba con esta características hasta ahora. Pero, ¿qué es Lucid Sleep?

Tomeu Vizoso es un desarrollador del kernel que ha estado trabajando en traer características de Chrome OS al kernel de Linux. Su último desarrollo ha consistido en dar soporte para Lucid Sleep, una técnica que permite al sistema realizar ciertas operaciones mientras está suspendido (o dormido).

Hasta ahora cuando se suspende un ordenador, este cesa su actividad completamente. Si tenemos por ejemplo un cliente de correo electrónico que comprueba si hay mensajes nuevos periódicamente, durante el estado de suspensión no comprueba nada y cuando despertemos el sistema veremos que no ha cambiado nada desde la última vez.

Lucid Sleep permite realizar este tipo de operaciones mientras el equipo se encuentra en suspensión. Algunas de las actividades que puede realizar son estas:
· Asociarse con un punto de acceso WiFi conocido en cuanto se entra dentro del rango de la señal.
· Actualizar los datos del usuario en respuesta a un mensaje recibido.
· Sincronizarse con servidores cuando un programa lo pida.
· Realizar mantenimiento del sistema como comprobar el nivel de la batería o hacer gestiones en el disco.

En realidad los dispositivos móviles han sido capaces de hacer esto desde siempre pero no ha sido así con dispositivos más grandes. Esta técnica es similar a la que usa Microsoft llamada InstantGo (anteriormente conocida por Connected Standby).

Vizoso explica cómo funciona Lucid Sleep:
· Supongamos que estamos viendo un video en Youtube.
· Cerramos la tapa del portátil.
· El servicio de gestión de energía notifica al espacio de usuario que se va a producir la suspensión del sistema de forma inminente.
· El navegador pausa la reproducción.
· El compositor apaga la pantalla.
· El kernel congela el espacio de usuario, suspende los dispositivos y pone al procesador en idle.
· Pasa el tiempo.
· La alarma del RTC se dispara.
· El kernel reanuda los dispositivos y descongela el espacio de usuario.
· El espacio de usuario se da cuenta de que no ha habido actividad por parte del usuario desde que se durmió la última vez por lo que se pone en modo «reanudación oscura».
· El espacio de usuario hace las tareas que quiera y luego se suspende de nuevo.
· El kernel congela el espacio de usuario, suspende los dispositivos y pone al procesador en idle otra vez.
· Pasa el tiempo.
· El usuario abre la tapa del portátil.
· El kernel reanuda los dispositivos y descongela el espacio de usuario.
· El servicio de gestión de energía se da cuenta del evento ‘SW_LID’ (la tapa se ha abierto) así que notifica al espacio de usuario que esta vez se trata de una reanudación completa.
· El compositor enciende la pantalla.
· El navegador reanuda la reproducción del video.

De momento existen dos pequeños problemas con Lucid Sleep. El primero es que a veces, el evento de un dispositivo de entrada que ha despertado el sistema, se pierde antes de llegar al espacio de usuario de forma que no se puede saber si hay que estar en modo de «reanudación oscura» para hacer las tareas o si en realidad se trata de una reanudación completa.

El otro problema consiste en que cuando el sistema se despierta, suele haber muchas tareas esperando por parte del kernel y el espacio de usuario así que pueden pasar bastantes segundos hasta que la pantalla se encienda desde que el usuario levanto la tapa (o provocó algún evento para despertar el sistema).

Para conocer todos los detalles de Lucid Sleep puedes visitar el blog de Tomeu Vizoso. Vía Phoronix.