10 de marzo de 2017

Las novedades de Linux 4.9

(Nota: esta es una entrada atrasada sobre la versión de kernel anterior a la actual)

Ya se ha anunciado la versión 4.9 de Linux. Esta versión añade soporte para extents compartidos (soporte de cp --reflink) y soporte de copy-on-write para XFS; soporte para mapear la pila del kernel en memoria virtual; mejoras de BPF que ponen las capacidades de Linux a nivel de Dtrace; un nuevo algoritmo de congestión TCP llamado BBR; llamadas al sistema para usar la característica "protected keys" de Intel; soporte para el bus Greybus del Proyecto Ara; y un detector de latencias creadas por el firmware. 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.

· Extents de datos compartidos + soporte de copy-on-write en XFS

Esta versión incorpora varias características a XFS, basadas en el "mapeado inverso" introducido en la anterior versión. Se añade el soporte para que dos extents de datos sean compartidos entre dos archivos. Es decir, se añade soporte para cp --reflink=always. Como consecuencia, también se añade soporte para deduplicacion de datos, y la posibilidad de descompartir datos mediante la interfaz FALLOC_FL_UNSHARE de fallocate(2).

Esta versión también añade soporte de copy-on-write para datos: En lugar de sobreescribir los bloques existentes usados por un archivo, se copian los datos a un bloque nuevo y, una vez copiados los datos, se modifican los metadatos para que apunten a los nuevos bloques. 

Todas estas características suponen una gran cantidad de funcionalidad experimental que conllevan novedades en el formato de disco y en la infraestructura interna.

· Pilas mapeadas virtualmente

Linux siempre ha mapeado la memoria utilizada por la pila del kernel directamente, algo que hace que en algunas situaciones con poca memoria pueda ser difícil crear nuevas pilas, y además no tiene protección de ningún tipo si el kernel excede el tamaño de la pila. Esta versión permite que la pila del kernel sea mapeada en memoria virtual, lo cual permite asignar memoria para nuevas pilas incluso en situaciones con poca memoria, y además añade una página de memoria virtual falsa a continuación de las de la pila, para que sea posible detectar si el kernel intenta sobrepasar los límites de la pila.

· Análisis BPF más eficiente
Esta versión incluye la infraestructura necesaria para permitir que los programas BPF sean asociados a eventos perf de hardware y software, lo cual permite hacer análisis más complejos y eficientes que ponen las capacidades de análisis de Linux al nivel de DTrace, de acuerdo con Brendan Gregg (ver su blog para más información)

· Algoritmo BBR para el control de la congestión TCP
Esta versión incorpora otro algoritmo de control de congestión TCP: BBR (Bottleneck Bandwidth and RTT). Generalmente, los algoritmos de control de congestión utilizan heurísticas basadas en la detección de pérdidas de paquetes. De acuerdo con los autores de BBR, este sistema ya no es válido para las redes modernas. En el Internet de hoy, los algoritmos basados en la detección de pérdidas de paquetes contribuyen a magnificar los problemas causados por el famoso "bufferbloat", provocando un rendimiento deficiente debido a que la existencia de grandes búfers en la red provocan sobrerreaciones y alteraciones bruscas del tráfico. El algoritmo BBR, en cambio, intenta establecer el ancho de banda máximo, sin prestar atención a las pérdidas de paquetes. El algoritmo BBR ha aumentado el rendimiento y reducido la latencia en las redes internas de Google, la página google.com y los servidores de Youtube.

· Llamadas de sistema para la característica "protection keys"

"Protection keys" es el nombre de un sistema de protección de memoria por hardware que fue incluído en Linux 4.6. Pero en esa versión, el uso de esta característica estaba limitado a que el kernel lo utilizara automáticamente, sin petición explícita de los programas, en APIs de alto nivel como mmap(..., PROT_EXEC) y mprotect(ptr, sz, PROT_EXEC).

En esta versión se incorporan llamadas al sistema que ofrecen una API completa que permite utilizar las "protection keys". Para más detalles, ver este artículo o la documentación.

· Soporte del bus Greybus


Esta versión añade Greybus, un nuevo subsistema que da soporte al bus Greybus: un bus diseñado para el hardware modular, hot-pluggable, del difunto Proyecto Ara. A pesar de la muerte del proyecto, el código aun está siendo usado. Para más detalles, ver este artículo: Greybus

· Trazado de la latencia del hardware

El trazador de latencia del hardware es una herramienta diseñada para detectar grandes latencias provenientes de interrupciones causadas por el firmware (BIOS/EFI, SMI, etc), que el kernel desconoce por completo. El sistema funciona simplemente creando un proceso que ejecuta un bucle sin fin mientras mide el tiempo que transcurre, e intenta detectar lapsos de tiempo no esperados. Esta herramienta tiene como propósito comprobar si un sistema es adecuado para tareas de tiempo real


Y eso es todo. Como siempre, pueden encontrar la lista completa, y en inglés, en esta página.