5 de enero de 2012

Las novedades de Linux 3.2

Ya se ha anunciado la disponibilidad de la versión 3.2 del kernel Linux. Novedades: Soporte para tamaños de bloque de Ext4 mayores que 4KB y hasta 1MB. Btrfs realiza el proceso de scrubbing más rápido, hace copias de seguridad automáticas de metadatos críticos y añade capacidad de inspeccionar manualmente el sistema de archivos. El gestor de procesos ha añadido soporte para poner límites máximos al tiempo de CPU que pueden usar los progresos. La respuesta del escritorio en presencia de fuertes escrituras de disco ha mejorad. TCP incluye un algoritmo que mejora la recuperación de las conexiones tras pérdidas de paquetes. La herramienta de análisis "perf top" ha añadido soporte para inspección en vivo de procesos y librerías y explorar ensamblador con código anotado. El Device Mapper soporta "thin provisioning" de espacio de almacenamiento. Y se ha añadido soporte para una nueva arquitectura, el Hexagon DSP de Qualcomm. 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: Tamaños de bloque mayores de 4KB y hasta 1MB: El tamaño máximo de un bloque del sistema de archivos siempre ha sido de 4KB en sistemas x86. Pero la capacidad de almacenamiento de los discos modernos es enorme y sigue creciendo a gran velocidad, y a medida que crece la sobrecarga de tener que dividir discos tan grandes en unidades tan pequeñas aumenta. Los bloques pequeños benefician a los usuarios que tienen archivos pequeños, porque el espacio se utilizará con más eficiencia, pero las personas que manejan grandes archivos se beneficiarían de tamaños de bloque más grandes.

Ext4 soporta ahora tamaños de bloque de hasta 1MB, lo cual disminuye considerablemente el tiempo que se tarda en hacer asignaciones de bloques, y se mejora la fragmentación. Estos nuevos tamaños de bloque pueden configurarse en tiempo de creación del sistema de archivos, utilizando la opción -C de mkfs (requiere e2fsprogs 1.42). Esta característica no es compatible hacia atrás con kernels antiguos.


· Btrfs: scrubbing más veloz, copia de seguridad automática de metadatos críticos, mensajes de corrupción detallados, inspección manual de los metadatos:

 · Scrubbing más veloz: el proceso de scrubbing -comprobación de todos los checksums del sistema de archivos- es más veloz debido al uso de técnicas de "read-ahead". En un volumen de prueba, la utilización del ancho de banda del disco aumentó de 70% al 90%. En otro volumen, el tiempo para ejecutar una prueba de scrub pasó de 89 segundos a 43.

 · Copia de seguridad automática de metadatos críticos: Btrfs almacena en el superbloque del sistema de archivos las raíces de los árboles "B-Tree" de los últimos cuatro commits (debido al diseño COW, varias de esas raíces cambian en cada commit). Se ha añadido una opción de montaje "-o recovery" para permitir que el usuario utilice esas copias de seguridad cuando el sistema de archivos no pueda leer las raíces por algún problema.

 · Mensajes de corrupción detallados: Btrfs siempre ha tenido en sus estructuras internas "referencias inversas" que permiten hallar qué archivos o B-trees referencian a un bloque determinado, pero hasta ahora había que "caminar" esas referencias manualmente. En esta versión se ha añadido código, permitiendo como resultado la mejora de los mensajes de error de corrupción. Ahora, en lugar de decir que el bloque xxyyzz es erróneo, imprimirá esto:

  btrfs: checksum error at logical 5085110272 on dev /dev/sde, sector 2474832, root 5, inode 32583, offset 0, length 4096, links 1 (path: default/kernel-0/Makefile)
 · Inspección manual del sistema de archivos: Como parte de la característica anterior, se ha añadido código que permite la inspección manual del sistema de archivos desde espacio de usuario Para encontrar el archivo que pertenece al extent 5085110272, puedes ejecutar:

  btrfs inspect logical 5085110272 /mnt

  O, para encontrar el nombre de archivo perteneciente al inodo número 32583:

  btrfs inspect inode 32583 /mnt

 · Controlador de tiempo de CPU de procesos que permite poner límites máximos de CPU: El gestor de procesos divide la CPU disponible entre cada proceso si hay tiempo libre, porque se supone que todos los procesos desean tanto tiempo de CPU como sea posible. Pero en algunas compañías como Google esta asignación descontrolada de tiempo puede conducir a variaciones de utilización de CPU y latencia inaceptables.

El controlador de tiempo de CPU resuelve este problema permitiendo asignar un límite máximo de tiempo de CPU. El tiempo de CPU permitido para un grupo de procesos es especificado mediante una "cuota" y un "periodo". Durante cada "periodo" (en microsegundos), se permite a un grupo consumir la cantidad de microsegundos indicados en "cuota". Una vez superada la cuota, no se permite a los procesos que vuelvan a ejecutarse hasta el próximo periodo.

 · Provisionamiento fraccionario ("thin provisioning") y snapshots recursivos en el Device Mapper: Habitualmente, provisionar espacio de almacenamiento para múltiples usuarios puede ser ineficiente. Por ejemplo, si 10 usuarios necesitan 10 GB cada uno, necesitarás provisionar 100 GB de almacenamiento en total. Esos usuarios, sin embargo, probablemente no utilizarán todo ese espacio. Vamos a suponer que, de media, utilicen sólo el 50% de su espacio asignado: sólo utilizarán 50GB, dejando otros 50GB sin utilizar.

El "thin provisioning" o provisionamiento fraccionario permite asignar a todos los usuarios más espacio del que realmente hay. En el caso anterior, podrías comprar sólo 50 GB de almacenamiento, permitir a cada usuario tener 10 GB de almacenamiento máximo teórico y no tener problemas, porque los 50GB que comprastes son suficientes para atender las demandas reales. Y si los usuarios incrementan la demanda de espacio, puedes añadir más capacidad. Gracias al provisionamiento fraccionario, se puedes optimizar la inversión en almacenamiento y evitar sobre-provisionar.

Linux 3.2 añade soporte experimental para provisionamiento dinámico en la capa de Device Mapper. Los usuarios podrán crear un pool de almacenamiento y crear múltiples volúmenes provisionados fraccionadamente. Otra gran característica incluído en este "DM target" de provisionamiento fraccionario es el soporte para snapshots con recursión de profundidad arbitraria, y que evitan la degradación con la profundidad.

 · Mejora de la función de writeback de la VM: "writeback" es el proceso de escribir datos de la RAM al disco. Una parte crítica del proceso de "writeback" es decidir cuántos datos sin escribir puede mantener un proceso en la RAM. En este kernel, los algoritmos para tomar esa decisión han sido reescritos. Como resultado, los movimientos de brazo del disco duro y el uso de CPU se han reducido, los usuarios notarán un comportamiento más suave en cargas que utilizan write() en un loop, y también en NFS, JBOD y dd's concurrentes. La contención de bloqueos y el "cache bouncing" en cargas concurrentes ha mejorado.

· TCP Proportional Rate Reduction: TCP intenta alcanzar el máximo ancho de banda en una conexión incrementando el ratio de transferencia hasta que empieza a perder paquetes. Cuando un paquete se pierde, TCP enlentece la conexión y la aumenta poco a poco de nuevo.

Este sistema funciona bien, pero hay algunos casos en los que se pierden paquetes, se tarda demasiado tiempo en recobrar la máxima velocidad. Google ha desarrollado un algoritmo de recuperación mucho mejor, llamado "Proporcional Rate Reduction", que mejora la latencia y el tiempo de recuperación en esos casos.

· Mejora de la herramienta de análisis "perf top": La herramienta de análisis en vivo "perf top" ha sido reescrita y mejorado. Más allá de las mejoras visuales, también ha adquirido la capacidad de navegar mientas la captura de datos está ocurriendo, y puede hacer zoom a librerías y procesos particulares, así como ver, incluso, el ensamblador con anotaciones de código, todo ello en vivo.


· Cross Memory Attach: "Cross Memory Attach" añade dos llamadas al sistema -process_vm_readv, process_vm_writev-, que permiten leer/escribir de/a el espacio de dirección de otro proceso. La idea detrás de este mecanismo es facilitar la función de los programas MPI.

· Nueva arquitectura: Hexagon: El procesador Hexagon es un procesador DSP de propósito general diseñado para alto rendimiento y bajo consumo. Mezcla el soporte numérico, paralelismo y capacidades de un procesador DSP, con la arquitectura avanzada de los procesadores modernos.


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

4 comentarios: