2 de julio de 2013

Las novedades de Linux 3.10

Ya se ha anunciado la versión 3.10 del kernel Linux. Esta versión incluye soporte para bcache, que permite usar discos SSDs como cache de discos duros tradicionales; una mejora del formato de Btrfs que reduce el tamaño del árbol dedicado a mantener la información sobre extents un 30-35%; soporte para checksums de metadatos en XFS; multitarea sin temporizador; mejoras de escalabilidad y rendimiento en SySV IPC y los sistemas de bloqueos rwsem y mutex; soporte del sistema de virtualización KVM en la arquitectura MIPS, soporte de la arquitectura ARM big.LITTLE que mezcla CPUs de diferentes tipos; y snapshots de trazas en la funcionalidad de trazado. 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.  

 · Multitarea sin temporizador: En la prehistoria de la computación, los ordenadores sólo podían tener una tarea ejecutándose, para iniciar otra había que esperar a que terminase la primera. Pero la gente quería poder arrancar varias tareas sin esperar a que terminase la primera, e incluso cambiar entre tareas, y así fue como nació la multitarea. Al principio la multitarea fue "colaborativa", un proceso se ejecutaba hasta que decidía, voluntariamente, dar paso a otras tareas. Pero era posible implementar la multitarea mejor: el hardware podía incluir un temporizador que se despertase a intervalos regulares; este temporizador podría parar cualquier tarea y ejecutar una rutina del sistema operativo que decidiera qué tarea debía ejecutarse a continuación. Esto se llama multitarea apropiativa, y es lo que hacen los sistemas operativos modernos.

Pero la multitarea apropiativa tiene algunos efectos secundarios en el hardware moderno. Las CPUs de portátiles y teléfonos requieren inactividad para entrar en modos de consumo reducido. Como la multitarea apropiativa activa el temporizador a menudo -1000 veces por segundo en Linux normalmente-, la CPU no podía entrar en esos modos de consumo reducido tanto como quisiera. En 2.6.21, publicado en Abril de 2007, Linux resolvió este problema: el temporizador se activaría 1000 veces por segundo cuando el sistema estuviese ejecutando tareas, pero lo pararía cuando el sistema no estuviese haciendo nada. Pero esto no es suficiente. Hay actividades, como el cálculo científico intensivo, o los usuarios de los parches de tiempo real, cuya latencia y rendimiento sufre daños por el hecho de tener que ser pausados 1000 veces por segundo.

Esta versión de Linux añade soporte para no activar el temporizador incluso cuando se están ejecutando tareas. Con algunas notas: en esta versión aun se sigue activando el temporizador una vez por segundo; el modo sin temporizador sólo se activa cuando hay una sola tarea, cuando hay varias se vuelve al modo normal; y se debe mantener una CPU funcionando normalmente con temporizador para que el resto pueda funcionar sin temporizadores. Para más detalles, este artículo de LWN y la documentación.

 · Bcache, un cache para acelerar el rendimiento utilizando discos SSD como cache: Desde que los dispositivos SSD se volvieron populares, mucha gente los ha utilizado como caché para los discos mecánicos tradicionales. Bcache es una implementación de esta funcionalidad, permitiendo usar SSDs como caché de otros dispositivos de bloque. Para más detalles ver la documentación, visitar el wiki o leer este artículo de LWN.

 · Btrfs: árbol de extents más pequeño y eficiente: Btrfs ha incorporado a su formato de disco un nuevo tipo de clave para la gestión de extents  que usa el espacio más eficientemente, reduciendo el tamaño de las referencias de extents de 51 a 33 bytes. En la práctica, esto implica una reducción del tamaño del b-tree de extents en un 30-35%, lo cual significa menos operaciones de copy-on-write, más referencias de extents en memoria y mayor eficiencia en las operaciones de metadatos.

Este cambio de formato no es automático, debe ser activado en tiempo de mkfs
o con btrfstune -x.

 · Checksums de metadatos en XFS: En esta versión, XFS tiene una implementación experimental de checksums CRC32c de metadatos. Estos checksums son parte de un proyecto más ambicioso que pretende implementar lo que los desarrolladores de XFS llaman "metadatos auto-descriptivos", que tiene como objeto resolver el problema de la escalabilidad de la verificación del sistema de archivos (fsck necesita demasiado tiempo para verificar sistemas de archivos de varios petabytes). Esto requiere un cambio de formato que añadirá a cada objeto de metadatos de XFS cierta información que permitirá determinar si el metadato está intacto y puede ser ignorado para propósitos de análisis forense.

Esta característica es experimental y requiere el uso de una versión experimental de xfsprogs. Para más información, puedes leer la documentación sobre metadatos auto-descriptivos.

 · Mejoras de escalabilidad de SysV IPC: La escalabilidad de los semáforos IPC de Linux era lamentable. En esta versión se han añadido varias mejoras de escalabilidad al código, como consecuencia algunos microbenchmarks muestran mejoras mayores del 10x en algunos casos.

 · Mejoras de escalabilidad del sistema de bloqueo rwsem: rwsem es un sistema de bloqueo utilizado en muchas partes del kernel que tenía problemas de escalabilidad por una serialización FIFO estricta de los usuarios del bloqueo. En Linux 3.9, se añadió una mejora llamada "robo oportunista del bloqueo", pero sólo en la ruta de código lenta. En esta versión se ha añadido un cambio similar en la ruta de código rápida, mejorando el rendimiento de pgbench con dos digitos en algunos casos.

 · Mejoras de escalabilidad del sistema de bloqueo mutex: El sistema de bloqueo mutex, utilizado ampliamente en el kernel, ha mejorado su rendimiento gracias al menor uso de operaciones atómicas y algunos cambios en el encolamiento que reducen la contención en líneas de caché de la CPU.

 · Optimización de TCP: Tail Loss probe: Esta versión añade el algoritmo TCP Tail loss probe. Su objetivo es reducir la latencia de transacciones cortas. Lo logra convirtiendo timeouts de retransmisión (RTOs) que ocurren al final de una transacción en una recuperación rápida. Más detalles sobre el algoritmo aquí.

 · Soporte de la arquitectura ARM big.LITTE: La arquitectura big.LITTLE es una solución SMP que, en lugar de añadir varios procesadores similares, avanza hacia un nuevo concepto uniendo dos sistemas SMP: uno compuesto de procesadores grandes y rápidos y otro de procesadores pequeños y energéticamente eficientes. Artículo LWN recomendado.

 · Soporte de KVM para MIPS: Otra arquitectura Linux ha añadido soporte para el sistema de virtualización KVM. En este caso se trata de MIPS. Se soportan los chips a partir del MIPS32R2.

 · tracing: snapshots de trazas, trazas de pila: El sistema de trazado/tracing ha incorporado la capacidad de tener varios buffers de traceo, lo cual permite crear snapshots del buffer de trazado principal. Estos snapshots pueden ser activados manualmente o con sondas en funciones. Es también posible obtener un volcado de pila cuando se llame a una determinada función.

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

4 comentarios:

  1. ARM big.LITTE, suena a cierto I9500.

    Muchas ganas de probar otra vez XFS.

    ResponderEliminar
  2. Anónimo8:18 p. m.

    Has puesto un "versión 3.9" en la primera línea ;)
    Gracias por el resumen, tengo pendiente probar Bcache.

    ResponderEliminar
  3. woo en verdad el kernel linux es una maravilla de la informática, increíble las tecnologías y la gran cantidad de personas en su desarrollo, siguiendo esta guía (http://www.cyrius.com/debian/nslu2/index.html) pude instalar debian en un dispositivo (nslu2) del tamaño de un ratón de computadora y quede maravillado igual de los router con tomato o dd-wrt. Muchas gracias me encanta este tipo de entradas :D

    ResponderEliminar