martes, 29 de marzo de 2011

El kernel de Linux ahora puede “hacer milagros”

Recientemente, Linus Torvalds libero la versión 2.6.38 del kernel de Linux, y está llegó con muchas novedades, entre las que se encuentran: agrupación automática de procesos (el llamado “parche que hace milagros”), mejoras de escalabilidad en el VFS, compresión LZO y snapshots de sólo lectura en Btrfs, el protocolo de redes Mesh B.A.T.M.A.N. (que ayuda a proveer de conectividad de red en presencia de desastres naturales, conflictos militares o censura de Internet), soporte gráfico para AMD Fusion, páginas grandes transparentes en lugar de a través de hugetblfs, y muchos otros cambios menores y nuevos drivers.

Agrupación automática de procesos

Con esta característica el sistema agrupará todos los procesos que tengan el mismo ID de sesión como una sola entidad. Ejemplo: Imaginemos seis procesos que están consumiendo CPU continuamente, los cuatro primeros con un mismo ID de sesión y los otros dos utilizando otras dos sesiones diferentes.

Sin agrupación automática: [proc. 1 | proc. 2 | proc. 3 | proc. 4 | proc. 5 | proc. 6]
Con agrupación automática: [proc. 1, 2, 3, 4 | proc. 5 | proc. 6 ]

El ID de sesión es una propiedad de los procesos en los sistemas Unix (poco conocida – puede verse con comandos como ps -eo session,pid,cmd). Los hijos lo heredan del padre tras fork, y pueden empezar una nueva sesión utilizando setsid. Bash crea una sesión nueva cada vez que se inicia, lo cual significa que con esta característica se puede ejecutar “make -j20″ dentro de una shell en un escritorio, sin que se note mientras se navega la web. Esta característica está implementada sobre la característica “group scheduling” (incluida en 2.6.24). Se puede desactivar en /proc/sys/kernel/sched_autogroup_enabled

Escalabilidad del VFS

Existen actualmente esfuerzos para hacer que la capa VFS (“Virtual File System”, el código que va entre las llamadas al sistema y el sistema de archivo) sea más escalable. En versiones anteriores ya se incluyeron algunos cambios preliminares, en esta versión tanto el dcache (“caché de directorios”) y el mecanismo entero de búsqueda de rutas se ha reescrito para ser más escalable (detalles en este artículo de LWN). Estos cambios hacen al VFS más escalable en cargas multihilo , pero lo más interesante (y es lo que le gusta a Linus Torvalds) es que también hacen las cargas con un sólo proceso más rápidas (debido a la eliminación de operaciones de CPU atómicas): En su $HOME, “find . -size” es un 35% más rápido. Ejecutar un “git diff” en un repositorio de kernel cacheado es un 20% más rápido (64 git diff en paralelo en 64 repositorios de kernel son un 26x más rápido). Todo lo que llame a stat con mucha frecuencia es más rápido.

Compresión LZO y snapshots de sólo lectura en Btrfs

Btrfs añade a su sistema de compresión transparente soporte para el algoritmo de compresión LZO, como alternativa a zlib. También se añade soporte para marcar un snapshot como de sólo lectura. Finalmente, los sistemas de archivos Btrfs que encuentren errores serán remontados automáticamente en modo de sólo lectura, lo cual es un paso adelante para hacer al código más resistente errores

Páginas grandes transparentes

Los procesadores manejan la memoria en pequeñas unidades llamadas páginas (que son de un tamaño de 4 KB en x86). Cada proceso tiene un espacio de direcciones de memoria virtual y hay una “tabla de páginas” donde se guardan todas las correspondencias entre la página del espacio de direcciones de memoria virtual de cada proceso y su página real de RA. El trabajo de buscar en la tabla de páginas para encontrar qué página RAM corresponde a cada dirección virtual es muy costoso, así que la CPU tiene un cache de traducciones recientes. Sin embargo, este caché no es muy grande y sólo soporta páginas de 4 KB, así que muchas cargas (bases de datos, KVM) tienen problemas de rendimiento porque no se pueden cachear todas sus direcciones virtuales. Para resolver este problema, los procesadores modernos añaden entradas de cache que soportan páginas mayores que 4 KB (como 2 ó 4 MB). Hasta ahora, la única manera que el espacio de usuario tenía de usar esas páginas era con hugetblfs. Esta versión añade soporte para usar esas páginas grandes automáticamente cuando sea posible. Las páginas grandes pueden configurarse para ser usadas siempre o sólo a medida que se pidan mediante madvise(MADV_HUGEPAGE), y su rendimiento puede cambiarse en tiempo de ejecución en /sys/kernel/mm/transparent_hugepage/enabled.

Tráfico saliente de red se expande automáticamente a varias CPUs con tarjetas de red multiqueue

Esta característica, apodada XPS, implementa un sistema que asigna una CPU a cada queue de la tarjeta de red, con lo cual se reparte la carta entre varios procesadores y se aumenta el rendimiento. Es algo análogo a RPS, pero para tráfico de entrada. En un benchmark de netperf con 500 instancias de netperf TCP_RR con 1 byte de petición en un sistema AMD con 16 cores salió que:

Con XPS (16 queues, 1 TX queue per CPU) 1234K al 100% CPU
Sin XPS (16 queues) 996K al 100% CP.

Protocolo B.A.T.M.A.N.

Es un alias para “Better Approach To Mobile Adhoc Networking”. Una red ad hoc es una red descentralizada que no se basa en infraestructuras previas, como routers o puntos de acceso. En su lugar, cada nodo participa en el enrutado siendo el mismo un router y enviando datos de otros, y de ese modo la determinación de las rutas se hace dinámicamente, basándose en la conectividad que va surgiendo. B.A.T.M.A.N. es una implementación de una de esas redes. Es útil para situaciones de emergencia como desastres naturales, conflictos militares o censura de Internet. Más información del proyecto en http://www.open-mesh.org/

Soporte gráfico de AMD Fusion

Interesante también el hecho de que se haya incluido compatibilidad con la plataforma AMD APU Fusion, que combina en el mismo encapsulado gráficos y CPU.

No hay comentarios: