19 de febrero de 2013

Las novedades de Linux 3.8

Ya se ha anunciado la versión 3.8 del kernel Linux. Esta versión incluye soporte en Ext4 para empotrar pequeños archivos dentro del inodo, que mejora el rendimiento para esos archivos y permite ahorrar algo de espacio. Hay también una nueva característica de Btrfs que permite el reemplazado rápido de un disco por otro, un nuevo sistema de archivos F2FS optimizado para SSDs, soporte de diferentes espacios de nombre para procesos ejecutados por usuarios sin privilegios, contabilidad de la memoria de pila y del slab en el controlador de recurso de memoria, checksums en el journal de XFS, un rediseño de las políticas para arquitecturas NUMA y, por supuesto, el muy mencionado fin de soporte de los procesadores 386. 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.

  • Ext4 empotra los archivos pequeños en el inodo: Cada archivo en Ext4 tiene su correspondiente inodo que almacena información variada -tamaño, fecha de creación, propietario, etc- sobre el archivo (puede verse esa información con el comando stat(1)). Pero el inodo no almacena los datos del archivo, sólo información sobre dónde encontrarlos.

    El tamaño utilizado por cada inodo queda predeterminado a la hora de crear el sistema de archivos con mkfs.ext4(8), y por defecto son 256 bytes. Pero ese espacio no se utiliza siempre del todo (a pesar de que los atributos extendidos pequeños hacen uso de él), y hay millones de inodos en un sistema de archivos típico, así que se pierde un poco de espacio. Al mismo tiempo, cada archivo de datos necesita asignarse al menos un bloque (por defecto de 4KB de tamaño), incluso si el archivo sólo va a usar unos pocos bytes. Y se producen movimientos del brazo del disco para leer esos pocos bytes, porque los bloques de datos no se ubican contiguos a los inodos.

    Ext4 ha añadido el soporte para almacenar archivos muy pequeños en el espacio sin utilizar de los inodos. Con esta característica se utiliza el espacio sin usar de los inodos, no se asigna un bloque de 4KB para los datos del archivo, y leer esos archivos es más rápido, porque una vez que se lee el inodo también están disponibles los datos, sin necesidad de movimientos del brazo de disco. Algunas pruebas simples muestran que con las fuentes de un Linux 3.0, el nuevo sistema puede ahorrar más de un 1% del espacio de disco. En un directorio /usr de prueba, se ahorró más del 3% del espacio. El rendimiento para los archivos pequeños también se ha incrementado. Los archivos que pueden ser empotrados pueden configurarse indirectamente incrementando el tamaño del inodo (opción -I de mkfs.ext4(8)) - cuando más grande sea el inodo, más grandes los archivos que pueden empotrarse (pero si la carga utilizada no hace uso extensivo de pequeños archivos, ese espacio se gastará). 
  • Btrfs: reemplazo rápido de dispositivos: Como sistema de archivos capaz de expandirse sobre múltiples discos, Btrfs puede eliminar un disco fácilmente, ya sea porque quieres reducir el tamaño de tu pool de almacenamiento, o simplemente porque el disco está fallando y quieres sustituirle:

       # btrfs device add new_disk

       # btrfs device delete old_disk


    Pero este proceso no es tan rápido como podría ser. Btrfs ha añadido una operación para reemplazar un disco, que es mucho más rápida:

        # btrfs replace mountpoint old_disk new_disk

    La copia normalmente procede al 90% de la velocidad del disco, mientras no haya otras operaciones simultáneamente. La operación puede llevarse a cabo en un sistema en funcionamiento, no requiere desmontar el sistema de archivos o detener procesos, y no es un problema que se apague el ordenador por corte de energía durante la operación; el proceso continuará en el próximo montaje. Es posible usar el comando btrfs replace status para comprobar la evolución de la operación, o btrfs replace cancel para cancelarla.
  • F2FS, un sistema de archivos para SSDs: F2FS es un sistema de archivos experimental, aportado por Samsung, que está optimizado para dispositivos de almacenamiento basados en memoria flash. Linux ya tiene varios sistemas de archivo -logfs, ubifs, jffs2- para memoria flash, pero están diseñados para dispositivos flash "nativos" que exponen la memoria flash directamente  al ordenador. Gran parte de los dispositivos de memoria flash que existen en el mercado no son "nativos", sino que tienen un firmware que emula una interfaz de bloques (FTL), como la de los dispositivos tradicionales, lo cual permite utilizar los sistemas de almacenamiento y sistemas de archivo tradicionales. Estos sistemas de archivo tienen algunas optimizaciones para estos SSDs, pero el sistema de archivos y su formato es el mismo de siempre.

    F2FS es un sistema de archivos diseñado para SSDs que tiene en cuenta la existencia de una capa de traducción a bloques e intenta hacer el mejor uso posible de ella. Para más información se recomienda este artículo: An f2fs teardown.
  • Completado el soporte de espacios de nombres para usuarios sin privilegios: Los espacios de nombre para cada proceso permiten tener espacios de nombre diferentes para varios recursos. Por ejemplo, un proceso puede ver una serie de puntos de montaje, números de PID y estado de la pila de red, y un proceso en otro espacio de nombres podría ver otros. El soporte para espacios de nombres para cada proceso ha estado en desarrollo desde hace años: El comando unshare(1), disponible en distribuciones de Linux modernas, permite iniciar un proceso con los espacios de nombres de puntos de montaje , UTS, IPC o pila de red "no compartidos" con su padre; y systemd utiliza espacios de nombre de los puntos de montaje para las opciones de configuracion de unidades ReadWriteDirectories, ReadOnlyDirectories o InaccessibleDirectories; y para systemd-nspawn. Pero el uso de espacios de nombres estaba limitado a root.

    Esta versión añade la capacidad de usar espacios de nombres para cada proceso por usuarios sin privilegios, con seguridad. Los recursos con espacios de nombres disponibles son los puntos de montaje, UTS, IPC, PIDs, y pila de red. Para más detalles sobre los espacios de nombres en Linux, qué son, cómo funcionan, detalles sobre la API y programas de ejemplo, es recomendable leer estos artículos: Namespaces in operation, part 1: namespaces overview, part 2: the namespaces API, part 3: PID namespaces, part 4: more on PID namespaces
  • Checksums en el journal de XFS: XFS está planeando añadir checksums de metadatos en el futuro. Como parte de esa iniciativa, esta versión añade soporte de checksums en el journal.
  • "Página cero" para las páginas de memoria gigantescas: Las páginas gigantes son un tipo de páginas proporcionadas por la CPU, y son mucho más grandes de lo normal. Suelen ser usadas por grandes bases de datos y aplicaciones que usan grandes porciones de memoria. Por otro lado, la "página cero" es una página de memoria llena de ceros. Esta página es utilizada por el kernel para ahorrar memoria: algunas aplicaciones asignan grandes porciones de memoria llenas de ceros pero no escriben en toda esa memoria, así que en lugar de asignar toda esa memoria, el kernel hace que toda esa memoria apunte a una sola página llena de ceros. La página cero estaba disponible solamente para tamaños de página de memoria normales (4KB en x86), esta versión añade una página cero gigante para aplicaciones que usan páginas gigantes.
  • El controlador de memoria soporta la contabilidad de memoria del kernel: El controlador de memoria de Linux es un control group que puede limitar, contabilizar e isolar el uso de memoria para grupos arbitrarios de procesos. En esta versión, el controlador de memoria tiene soporte para contabilizar dos tipos de memoria de kernel: la pila, y el uso de slabs. Estos límites pueden utilizarse para cosas como para bombas fork.
  • Balanceo de NUMA automático: Muchas máquinas modernas son de arquitectura "non uniform memory access" (NUMA), es decir, acceso de memoria no uniforme: tienen controladores de memoria en cada procesador, y acceder a la memoria del procesador local es mucho más rápido que acceder a la memoria de un procesador remoto, de modo que la ubicación de la memoria en el mismo nodo donde se ejecute el proceso que la referencie es crítico para el rendimiento. Esto es especialmente cierto en grandes servidores con docenas o centenas de procesadores.

    La implementación NUMA de Linux tenía algunas deficiencias. En esta versión se incluye una nueva fundación para NUMA que permitirá construir políticas NUMA más inteligentes y que proporcionen mejor rendimiento. Para más detalles, NUMA in a hurry,
  • Eliminación del soporte de 386: Tal y como se ha comentado en muchos sitios, esta versión de Linux deja de soportar por primera vez el procesador Intel 386 (el 486, sin embargo, aun se soporta)
  Y eso es todo. La lista completa de cambios en inglés, aquí

11 comentarios:

  1. Al inicio tienes un error, donde dices.
    "Ya se ha anunciado la versión 3.7 del kernel Linux."
    Al inicio de todo, no sera.
    Ya se ha anunciado la versión 3.8 del kernel Linux.?

    ResponderEliminar
  2. El empotrar archivos pequeños en inodos en ext4, ¿cambia el formato de disco?, o mejor dicho: ¿requiere reformatear el sistema, o con una simple actualización del kernel ya funcionaría? ¿se puede volver atrás?

    Saludos !

    ResponderEliminar
    Respuestas
    1. Si, añade un cambio en el formato de disco. No estoy seguro de si se activa sólo o no.

      Eliminar
  3. Anónimo10:19 a. m.

    Lo de empotrar archivos pequeños en inodos en ext4 me parece un poco peligroso. No veo claro el tema de que si kernels anteriores (con ext4) acceden a esa partición podrán leer esos datos o no lo van a borrar un fsck.

    ResponderEliminar
    Respuestas
    1. No tiene mucho de peligro. De hecho, gracias a que Ext4 soporta checksums de metadatos, esos archivos pasan a tener integridad garantizada. Si hubiera algún problema de corrupción, se detectaría más fácilmente corrompiendo la tabla de inodos que corrompiendo datos.

      Los kernels anteriores no pueden leer esos archivos, y el fsck tampoco va eliminarlos.

      Eliminar
  4. Anónimo11:46 a. m.

    Hola:

    ¿Qué sistema de archivos recomendarías para una nueva instalación de Linux (Debian, en concreto)? ¿Ext4 o btrfs?

    ResponderEliminar
    Respuestas
    1. Ext4, Btrfs aun no ha pasado la prueba de ser el sistema de archivos por defecto de una gran distro.

      Eliminar
    2. Anónimo10:43 p. m.

      ¿Que tal va ext4 para discos SSD?. ¿Hay algún sistema de ficheros mejor?

      Eliminar
  5. Hola Diego, me gustaría saber tus impresiones sobre todo lo que está pasando en el mundo móvil, FirefoxOS, Jolla Sailfish, pero especialmente con Ubuntu Touch, y su reciente decisión de descartar Xorg y Wayland por un servidor propio y pasarse a Qt/QML.

    Saludos!

    ResponderEliminar
  6. Anónimo10:00 a. m.

    ¿Y esto?
    http://www.omgubuntu.co.uk/2013/03/canonical-announce-custom-display-server-mir-not-wayland-not-x

    ResponderEliminar