Resumen de las novedades más importantes del kernel Linux v2.6.32, que acaba de salir hoy: Reescritura de la parte de la VM encargada de enviar los datos al disco, considerables mejoras de Btrfs, muchas mejoras en los drivers gráficos, KSM (deduplicación de memoria en sistemas virtualizados), límites blandos en el controlador de memoria, soporte de la arquitectura S+Core, mejoras en la herramienta perf y otras muchas cosas. La lista completa, aquí, como siempre.
· Reescritura de la parte de la gestión de memoria encargada de escribir los datos al disco ("per-backing-device based writeback"): En el contexto de Linux, "writeback" puede definirse como el proceso de escribir la memoria "sucia" (memoria perteneciente a archivos modificados) del caché de páginas al disco. La cantidad de datos que pueden necesitarse escribir de una vez puede ser inmensa -cientos de MB, o incluso GB-, y el encargado de hacer el trabajo es un thread del kernel con el nombre de "pdflush", que inicia su actividad cuando se alcanzan los límites definidos en /proc/sys/vm/* o como reacción a ciertas condiciones. Sin embargo, el actual sistema, pdflush, tiene varias desventajas, que lo hacen ineficiente en máquinas con múltiples discos y cuando se necesitan escribir grandes cantidades de datos. Jens Axboe (Oracle) ha diseñado un nuevo sistema que se basa en la idea de tener un thread de kernel dedicado a cada dispositivo y que maneja otro tipo de estructuras de datos que le permiten tomar mejores decisiones. Los threads "pdflush" son reemplazados con otros llamados "flush-MAJOR" (Major es el id "major" del dispositivo), que se crean cuando se escribe algo al disco y desaparecen automáticamente si no hay nada que hacer.
Este sistema tiene mejor rendimiento en muchos tipos de carga. En un benchmark de dos procesos haciendo escrituras secuenciales en un archivo de 32 GB ubicado en un volumen LVM con 5 discos "stripped", XFS fue un 40% más rápido, y Btrfs 26% más rápido. Una carga basada en el benchmark ffsb que hace escrituras aleatorias fue un 8% más rápido sobre una sola unidad SATA típica. En un test en discos SSD sobre XFS fue un 20% más rápido, con un ratio de transferencia que se mantiene estable en 1GB/segundo, mientras que pdflush solo conseguía hacer 750 MB/s y con continua fluctuación de la velocidad. Las escrituras aleatorias a múltiples archivos tambien han mejorado, asi como las escrituras aleatorias mediante mmap(). En un test de un proceso escribiendo secuencialmente vs otro haciéndolo aleatoriamente pasó de unos pocos MB/s a 120 MB/s. Resumiendo, que el rendimiento mejora en muchos campos.
· Mejoras de Btrfs: En esta versión hay mejoras considerables en Btrfs:
· -ENOSPC: Hasta ahora, Btrfs no ha tenido verdadera capacidad de gestionar correctamente las situaciones en que el sistema se queda sin espacio libre (error -ENOSPC en varias funciones POSIX), debido a que estas situaciones son más dificiles de manejar en un sistema de archivos basado en técnicas COW que en uno tradicional donde simplemente se reescriben los bloques. En esta versión, Josef Bacik (Red Hat) ha añadido la infraestructura necesaria para solucionar ese problema. Nota: El sistema de archivos podría llenarse y, aun así, mostrar una cantidad considerable de espacio libre. Ese espacio viene de chunks de metadatos/datos que no pueden terminarse de llenar porque no hay espacio para crear su equivalente chunk de datos/metadatos. Este problema no tiene que ver con la gestión correcta de -ENOSPC, y será solucionada en futuras versiones
· Soporte adecuado de eliminación de snapshots y subvolúmenes: Usando la última versión de btrfs-progs se pueden encontrar herramientas para eliminar y renombrar snapshots y subvolúmenes sin tener que recurrir a rm -r. Este sistema es mucho más rápido, porque se hace la eliminación "caminando" el Btree. La implementación viene de manos de Yan Zheng (Oracle).
· Mejoras de rendimiento: Las escrituras secuenciales en hardware veloz se quedaban limitadas por el uso de CPU sobre los 400 MB/s, Chris Mason (Oracle) ha mejorado el código de manera que ahora es capaz de llegar a 1GB/s con la misma utilización de CPU que XFS (descontando los checksums). Hay tambien mejoras de velocidad en la escritura de grandes extents, y tambien en muchas otras cargas. Las configuraciones con múltiples dispositivos son tambien mucho más rápidas debido a los cambios en el sistema de writeback. La velocidad de fsync() tambien se ha mejorado considerablemente (soluciona un problema de lentitud de yum en Fedora 11)
· KSM (Kernel Samepage Merging), deduplicación de memoria en sistemas virtualizados: En los sistemas virtualizados, cada copia VM consume su memoria independientemente de las demás, y no puede compartirse a pesar de que una parte muy considerable es la misma en todas las instancias de un mismo SO. KSM es un sistema para compartir esa memoria. El thread del kernel ksmd escanea periódicamente areas de memoria, trata de identificar las que son idénticas, elimina las copias y solo conserva una. No toda la memoria es escaneada, solo las áreas especificadas por las utilidades de espacio de usuario mediante la llamada del sistema madvise(2) con el flag MADV_MERGEABLE.
El resultado es un dramático descenso de la memoria utilizada. En una prueba en un servidor de virtualización con KSM y 16 GB de RAM, Red Hat llegó a hacer funcionar 52 VMs con Windows XP y 1GB de memoria cada una. Este sistema fue diseñado para KVM, pero es agnóstico y puede utilizarse con cualquier otro sistema de virtualización, o incluso sin virtualización, por ejemplo en aplicaciones que por alguna extraña razón tengan varios procesos usando cada uno grandes cantidades de memoria que puede ser compartida en gran medida.
· Mejoras al subsistema gráfico: El aterrizaje de GEM y KMS en anteriores versiones ha marcado el inicio de una necesitada renovación en los drivers gráficos de Linux. En esta versión se añaden varias mejoras.
· Radeon: Soporte de KMS y aceleración 3D en r600/r700: Se Basado en las especificaciones liberadas por AMD (¡gracias!). El rendimiento 3D está lejos de ser óptimo, pero funciona lo suficientemente bien como para ser utilizado en el típico escritorio con efectos, puede tener problemas con los juegos. Con este driver incluso las últimas gráficas de AMD/ATI están soportadas, lo que significa que son las gráficas más rapidas que disponen de un driver libre. Solo Nvidia requiere aun un driver binario (algo que esperemos que solucione pronto Nouveau)
· Radeon: Soporte inicial de Salida de TV
· Radeon: Comprobador de comandos en rn50/r100/r200 (mejora la seguridad)
· Intel: Reseteo automático de la GPU en i965: La GPU es reseteada automáticamente cuando el driver detecta que ha habido un cuelgue de la misma.
· Intel: Compresión del framebuffer: Ahorra 0.5W cuando el sistema no está haciendo nada
· Intel: Control dinámico de la frecuencia del reloj: Cuando los gráficos no están haciendo gran cosa, el ratio de refresco LVDS y el de la GPU puede reducirse, y el autorefresco de la memoria puede ser inducido a un estado de energía menor.
· Intel: Mejorar la respuesta del sistema bajo presión de memoria: Cuando el sistema se está quedando sin memoria, el driver puede liberar algunos de sus buffers.
· VGA Arbitration: En sistemas multiseat (varios usuarios accediendo a un mismo servidor que tiene múltiples tarjetas gráficas y múltiples monitores) no existe un sistema para arbitrar el acceso concurrente entre múltiples procesos, el "árbitro VGA" soluciona ese problema.
· Modo de baja latencia en CFQ: En esta versión, el IO scheduler CFQ (el que se utiliza por defecto) tiene una nueva característica que lo ayuda a limitar en gran medida el impacto que un proceso escribiendo puede tener en la interactividad del sistema. El resultado final es que la experiencia en el escritorio debería estar menos impactada por el IO del sistema, pero puede causar problemas de rendimiento en los servidores, asi que la gente a la que solo la importa el rendimiento (servidores) pueden probar a desactivarla -está activada por defecto- escribiendo un 0 a /sys/class/block//queue/iosched/low_latency.
· Mejoras en perf, perf tracepoints, perf timechart, perf sched: La herramienta perf está recibiendo mucha atención y muchos parches. En los últimos meses ha sobrepasado su carácter inicial de sistema de contador de registros de rendimiento de hardware, y se ha convertido en una herramienta mucho más genérica para la enumeración, reporte, logeo, monitorización y análisis de eventos, asi que la herramienta ha sido renombrada de "Contadores de rendimiento" a "Eventos de rendimiento"
· Trapoints: En esta versión se incluye soporte para "probear" los puntos de traceado estáticos (para entendernos: una especie de printk()s ocultos con nombre y que se pueden activar y desactivar individualmente) que han sido añadidos a muchos subsistemas del kernel (tambien se pueden analizar desde systemtap). Ahora es posible analizar cargas mucho más fácilmente. Cuando debugfs está montado, perf list muestra una sección con todos los puntos de trazado disponibles en el sistema, de modo que puedes hacer cosas como perf record -e i915:i915_gem_request_wait_begin -c 1 -g para conseguir una traza inversa de las llamadas que causan una pausa en las GPUs Intel, o perf stat -a -e ext4:* --repeat 10 ./somebenchmark para tener unas estadísticas media de todos los puntos de trazado de Ext4 a lo largo de 10 ejecuciones de algún benchmark. Tambien puedes analizar llamadas de sistema, por ejemplo puedes hacer perf stat -e syscalls:sys_enter_blah, lo cual sería una especie de strace, pero con unas características adicionales que lo hacen aun más potente que éste. Puedes leer [http://git.kernel.org/?p=linux/kernel/git/torvalds/linux-2.6.git;a=blob;f=Documentation/trace/tracepoint-analysis.txt;h=5eb4e487e667d1396bcede6af11e0bd5c60f0711;hb=bb72222086260695d71afe60fa105649c1ea9463 Documentation/trace/tracepoint-analysis.txt] para tener un howto de como hacer análisis de rendimiento con puntos de trazado.
· Timechart: "perf timechart" es una herramienta basada en perf diseñada para ser un mejor analizador del arranque que bootchart. Genera un gran archivo SVG al que, a diferencia de bootchart, puede hacérsele zoom para tener un gran detalle de los eventos recogidos. En [http://blog.fenrus.org/?p=5 esta entrada de blog] puede encontrarse mucha más información sobre esta herramienta.
· perf sched: Una nueva herramienta ha sido añadida para trazar/medir propiedades del gestor de procesos.
· Nuevos tracepoints: En esta versión se han añadido tracepoints para llamadas al sistema, carga/descarga de módulos, asignación y uso de skb's (socket buffer), KVM, los algoritmos de gestión de memoria, los temporizadores, el driver i915, ciertas partes de Ext4 y JBD2, y soporte de perf en SPARC.
· Límites blandos en el controlador de memoria: Los grupos de control son una especie de contenedores virtuales que se crean como directorios en un sistema de archivos virtual especial (normalmente, con la ayuda de [http://libcg.sourceforge.net/ herramientas]), y puedes añadir una cantidad arbitraria de procesos a ese grupo de control y configurarlo para que tenga una serie de características ó límites determinados de CPU y memoria para los procesos que contiene.
En esta versión se añaden soporte para límites "blandos" (o tolerantes) de memoria: El proceso puede sobrepasar el límite blando mientras haya memoria (y no excedan su límite "duro"), pero si el sistema necesita memoria, extraerá memoria de los grupos que sobrepasaron su límite blando.
· Suspensión de dispositivos en tiempo de ejecución: Esta característica permite que cada dispositivo sea puesto en modo de bajo consumo o que sea "suspendido" individualmente tras un periodo de inactividad, algo que antes se hacía solamente al suspenderse el sistema. Cuando se vuelve a registrar actividad, se reactivan. Por lo general, se requiere soporte de hardware para que esta característica funcione, y los diferentes tipos de bus son quienes realmente se encargan de gestionar las peticiones de suspensión de cada dispositivo.
· Soporte de la arquitectura S+core: Esta versión añade soporte para una nueva arquitectura, [http://w3.sunplus.com/products/S%2Bcore.asp S+core]. El conjunto de instrucciones de Score soporte instrucciones de 16bits, 32bits y 64bits. Los SOCs de Score han sido utilizados en máquinas de juegos y televisores LCD.
· Soporte de Intel Moorestown y SFI (Simple Firmware Interface) y ACPI 4.0: SFI es un método para exportar tablas estáticas del firmware de una plataforma al SO - algo análogo ACPI, pero como suele hacerse en otras arquitecturas, como PPC. Se utiliza en los dispositivos MID basados en la segunda generación de la plataforma Intel Atom, cuyo nombre código es Moorestown. SFI se utiliza en esas arquitecturas porque es más simple y ligero. Para más información, ver [http://simplefirmware.org este sitio web]
Al mismo tiempo, esta versión añade soporte para Moorestown, la plataforma Moblin basada en la arquitectura de bajo consumo de Intel. Moorestown consiste de dos chips: Lincroft (CPU, gráficos y controlador de memoria) y Langwell IOH. A diferencia de los PCs x86 standard, Moorestown no tiene muchos dispositivos "legacy" e.g. Moorestown no tiene i8259, i8254, HPET, legacy BIOS, ni la mayoría de puertos IO.
Tambien se ha añadido cierto soporte inicial para ACPI 4.0 (Linux es la primera plataforma en soportarlo