Perdón por el imperdonable retraso en escribir este artículo, una semana después de lo debido. En mi defensa, señalaré que esta ha sido el periodo de desarrollo desde 2.6.14, hace más de 5 años.
Ya se ha anunciado la versión 2.6.39 del kernel Linux. Las novedades principales en esta versión son grandes mejoras de escalabilidad en Ext4, aumento de la ventana inicial de congestión de TCP, soporte de una nueva arquitectura de CPU llamada UniCore-32, una característica que permite la creación y gestión de grupos de recursos de red llamada IPset, pequeñas actualizaciones en Btrfs, una característica que permite almacenar la información de un cuelgue en el firmware para recuperarlo tras un reinicio, actualizaciones de perf, y muchos otros pequeños cambios y drivers nuevos. La lista completa de cambios, en inglés, puede encontrarse aquí, como siempre.
· Escalabilidad SMP de Ext4: La lista de cambios de 2.6.37 mencionó unas mejoras enormes de rendimiento de Ext4 en sistemas con múltiples CPUs. Sin embargo, esa característica no estaba preparada del todo y fue desactivada antes de la versión final, algo que la lista de cambios no mencionó. En esta versión se han corregido los problemas y esta característica se ha activado por defecto, algo
Esta es la descripción de aquella lista: "En esta versión, Ext4 enviará los datos al subsistema de dispositivos de bloques mediante una nueva capa llamada "bio". Esta capa "bio" (que es un alias de "block I/O": Se trata
de la parte del kernel que se encarga de enviar peticiones al I/O
scheduler) fue una de las primeras características que se incluyeron en
Linux 2.5.1, y fue un reemplazo de la capa que sustituía, llamada
"buffer", que tenía muchos problemas de escalabilidad y rendimiento: Al
usarla, Ext4 sólo podía hacer peticiones de 4KB cada vez; utilizando la
capa bio Ext4 puede enviar peticiones de 512KB cada vez. En el benchmark
FFSB ejecutado en un equipo con 48 procesadores AMD y con
almacenamiento de array RAID de 24 discos SAS, utilizando 192 threads
paralelos de ffsb, la mejora fue del 300%".
· Incrementar la ventana de congestión TCP a 10 paquetes: La ventana inicial del algoritmo anticongestión de TCP ha sido aumentada a 10 paquetes. Este es un cambio muy técnico, pero de una importancia considerable. Se trata de un cambio sugerido por Google, quien asegura que puede mejorar la latencia un 10% sin detrimento del rendimiento. Recomendado este artículo de LWN: Increasing the TCP initial congestion window.
· IPset: IPset (página web) permite crear grupos de recursos de red (direcciones IPv4/v6, puertos TCP/UDP, emparejamientos IP<->MAC, emparejamientos IP<->puerto) llamados "IP sets", que luego se utilizan para definir reglas de iptables. Estos sets son mucho más eficientes a la hora de clasificar paquetes que las reglas de iptables por si solas, aunque consumen más memoria. Existen diferentes algoritmos y diferentes estructuras para que el usuario escoja una solución óptima. Esta característica ha estado disponible durante mucho tiempo como un añadido en los parches xtables-addons.
· Actualizaciones de Btrfs: Btrfs permite aplicar diferentes configuraciones de compresión y copy-on-write a nivel de directorio. También se incluyen algunas mejoras de rendimiento, y tracepoints para el análisis en tiempo de ejecución.
· Pstore: almacenamiento de la ínformación de un crash: Pstore es una interfaz en forma de sistemas de archivo que permite almacenar y recuperar información de un cuelgue en lugares como el ERST -un lugar especificado por ACPI para almacenar esas cosas. De ese modo se puede recuperar un dmesg del equipo colgado, por ejemplo.
· Nueva arquitectura: UniCore32: UniCore-32 es una arquitectura de 32 bits que incluye una serie de diseños de chip RISC licenciados por PKUnity Ltd.
· Memoria 'trascendente': La memoria 'trascendente' (el nombre es un poco raro, aviso) es un nuevo tipo de memoria con un conjunto de características muy particular. De LWN: "la memoria trascendente puede concebirse como un disco RAM con unas características interesantes: nadie sabe cómo es de grande, las escrituras al disco podrían no ser exitosas, y los datos escritos al disco podrían desvanecerse antes de ser releídos". Aunque no lo parezca a primera vista, hay usos útiles para este tipo de memoria, como el caché de páginas, la memoria de intercambio, o virtualización. En esta versión esta memoria se utiliza para implementar un sistema de cacheado con compresión llamado zcache.
· BKL: Eso es todo, amigos: En 2.6.37 fue posible compilar, por primera vez, un kernel Linux sin soporte de BKL. En esta versión, el BKL se ha eliminado por completo de las fuentes del kernel, incluyendo las propias definiciones e implementaciones de lock_kernel() y unlock_kernel().
· Llamadas del sistema open-by-handle: Se han añadido dos nuevas llamadas al sistema, name_to_handle_at() y open_by_handle_at(). Estas llamadas al sistema devuelven un "handle" de archivo que puede ser útil para sistemas de archivo en espacio de usuario, software de copia de seguridad y otras herramientas de gestión de espacio de almacenamiento. Esos "handles" pueden utilizarse en la llamada al sistema open() junto con un nuevo flag: O_PATH.
· Actualizaciones de perf: Se permite filtrar eventos de cada cgroup en perf stat y perf record, utilizando la opción -G, una nueva UI basada en slang con anotación en vivo, comando perf top --tui, soporte para Intel SandyBridge, soporte de filtros en perf probe como por ejemplo perf probe -V schedule --externs --filter=cpu* y otras mejoras menores por el estilo.
Estas son las novedades principales. La lista completa de cambios, en inglés, puede encontrarse aquí, como siempre.
Como siempre, excelente, gracias.
ResponderEliminarEsta claro que unos cambios más o menos grandes en el software puede conseguir unos notables aumentos de rendimiento utilizando el mismo hardware.
ResponderEliminar¿Se ha encontrado el origen del problema con la gestión de energía encontrada en la versión anterior 2.6.38?
ResponderEliminar