6 de abril de 2014

Las novedades de Linux 3.14

Ya se ha anunciado la versión 3.14 de Linux. Entre las novedades de esta versión destacan un planificador de procesos para tareas que tengan requisitos de tiempo real, la estabilización de un sistema de compresión de memoria, un port del validador de bloqueos a espacio de usuario, la habilidad para almacenar propiedades en inodos en Btrfs, soporte para ejecutar comandos tras un evento en la infraestructura de trazado, aleatorización del espacio de direcciones del kernel, fusión automática de paquetes en cierta clase de conexiones TCP, y un nuevo planificador de paquetes de red para luchar contra el bufferbloat. También se han incluido drivers nuevos y muchas otras mejoras y pequeños cambios. La lista completa de cambios, en inglés, puede encontrarse aquí, como siempre.

· Planificador de procesos "deadline" para planificación de tiempo real
Normalmente los sistemas operativos proporcionan prioridades en el planificador de procesos, cuanta más prioridad tiene un proceso, más tiempo de ejecución puede conseguir ese proceso respecto a otros con prioridades menores. En Linux, los usuarios configuran las prioridades con valores de -20 a 19 utilizando la herramienta nice(2). Adicionalmente, Linux soporta la noción de "clases de planificación", en cada clase hay una política de planificación diferente, por ejemplo, hay una clase SCHED_FIFO con una política FIFO "el primero que entra, el primero que sale", y una política round-robin en  SCHED_RR.

Este sistema de prioridades no es, sin embargo, el más apropiado para tareas que requieren tiempo real. En esta versión Linux implementa una alternativa que está diseñada sobre ideas que parten de la investigación en sistemas de tiempo real: planificación "deadline" ("plazos" de tiempo), que ha sido implementada como una nueva política de planificación, SCHED_DEADLINE.

La planificación "deadline" deja atrás la noción de prioridades. En su lugar, los procesos proporcionan tres parámetros: tiempo de ejecución, periodo y plazo. A una tarea que esté planificada bajo la política SCHED_DEADLINE, se la garantiza que obtendrá "tiempo de ejecución" microsegundos de ejecución cada "periodo" microsegundos, y ese "tiempo de ejecución" estará disponible dentro de "plazo" microsegundos desde el inicio del periodo. El planificador de tareas utiliza esa información para ejecutar el proceso con el plazo más cercano al momento actual, un comportamiento más cercano a los requerimientos de los sistemas de tiempo real. Para más detalles sobre los algoritmos de planificación, ver la documentación.

· zram: compresión de memoria considerada estable
zram crea dispositivos de bloques en la memoria RAM. Todo lo que escrito a esos dispositivos de bloques es comprimido. Si los dispositivos de bloque zram son utilizados como espacio de intercambio, cuando el sistema intente mover liberar memoria enviando porciones al espacio de intercambio, en realidad lo estará moviendo de una zona de la memoria a otra, excepto que los datos movidos habrán sido comprimidos antes de ser copiados a su destino. Esto funciona en la práctica como un sistema de compresión de memoria capaz de mejorar la respuesta en sistemas con cantidades de memoria limitadas. Zram está siendo utilizado por compañías de TV, Android 4.4, Cyanogenmod, Chrome OS, Lubuntu...

Zram ha estado en "staging" desde Linux 2.6.33. En esta versión, zram ha sido movido fuera de staging, a drivers/block/zram.

· Btrfs: Propiedades de inodo
Esta versión añade infraestructura para añadir parejas nombre/valor como xattrs a los inodos en Btrfs. El propósito de estas parejas es almacenar propiedades para los inodos, tales como la compresión. Estas propiedades pueden heredarse; esto significa que cuando el inodo de un directorio tiene la propiedad compresión activada, todos los inodos que sean creados en ese directorio serán también comprimidos. Los subvolúmenes pueden tener también propiedades asociadas, y pueden hederarse del subvolumen padre. Esta versión añade una implementación de propiedades, llamada "compresión", cuyos valores pueden ser "lzo" o "zlib".

· Soporte para ejecutar comandos en los eventos de trazado
La infraestructura de trazado en Linux permite registrar sondas en las funciones del código como eventos (para más detalles, ver Documentation/trace/events.txt). Esta versión permite que estos eventos desencadenen la ejecución de comandos. Estos comandos pueden tener varias formas, por ejemplo podrían activar o desactivar otros eventos o invocar el volcado de pila. Cualquier comando puede tener incorporado además un filtro de eventos, de ese modo el comando será invocado solamente si el evento pasa por el filtro asociado

Por ejemplo, este comando causa el volcado de pila las primeras cinco veces que hay una petición de kmalloc que pide >= 64KB de memorua: # echo 'stacktrace:5 if bytes_req >= 65536' > \ /sys/kernel/debug/tracing/events/kmem/kmalloc/trigger

Para más detalles, ver Sección 6 de Documentation/trace/events.txt

· Las sondas de espacio de usuario tienen acceso a todos los argumentos
Las sondas de espacio de usuario son una característica de Linux 3.5 que permite activar sondas en programas de espacio de usuario. Esta versión permite que las sondas de espacio de usuario (uprobes) tengan acceso a todo tipo de argumentos en las funciones de los programas: pila de memoria, deference, bitfield, retval y offset de archivo. Para más detalles, aquí.

· Validador de bloqueos en espacio de usuario
El kernel Linux ha tenido (desde 2.6.18) un validador de bloqueos que permite encontrar fallos en la programación de los bloqueos en tiempo de ejecución. Esta versión permite ejecutar el validador de bloqueos de Linux en espacio de usuario, haciendo posible depurar problemas de bloqueo en espacio de usuario.

· Espacio de direcciones del kernel aleatoria
Esta versión permite aleatorizar la dirección física y virtual en la que se descomprime la imagen del kernel, lo cual ayuda a bloquear ciertos tipos de exploits que confían en conocer la localización de las direcciones del kernel.

· TCP automatic corking
Cuando las aplicaciones hacen llamadas pequeñas y consecutivas a write()/sendmsg(), el kernel intenta fusionarlas, para disminuir el número de paquetes enviados en total, esta característica se llama "automatic corking". Las aplicaciones aun pueden usar TCP_CORK para conseguir un comportamiento óptimo cuando sepan cómo o cuando tengan que "uncork" sus sockets. Se añade una nueva sysctl (/proc/sys/net/ipv4/tcp_autocorking), que por defecto está activada. Para benchmarks y más detalles, ver commit

· Antibufferbloat: planificador de paquetes "Proportional Integrarl controller Enhanced"
Bufferbloat es un fenómeno consistente en la creación de demasiados búffers en la red, lo cual causa excesiva latencia y fluctuaciones. A medida que más aplicaciones interactivas (VoIP, streaming de vídeo, transacciones financieras) funcionan sobre Internet, esos defectos empeoran el rendimiento de la aplicación. Ha habido varias mejoras y características en las últimas versiones de Linux que tratan de frenar ese problema.

Esta versión añade un nuevo planificador de paquetes: PIE(Proportional Integral controller Enhanced), que puede controlar la latencia media de la cola a un valor determinado. Los resultados han demostrado que PIE puede asegurar latencia baja  y conseguir una utilización alta de los enlaces en situaciones de congestión. El diseño añade una sobrecarga mínima. Para más información, ver este papel técnico sobre PIEo este borrador del IETF. Todo el código, documentación y scripts y resultados puede encontrarse en ftp://ftpeng.cisco.com/pie/


Y eso es todo. La lista completa de cambios en inglés, aquí.

No hay comentarios:

Publicar un comentario en la entrada