3 de septiembre de 2013

Las novedades de Linux 3.11

Ya se ha anunciado la versión 3.11 del kernel Linux. Esta versión incorpora soporte para una nueva bandera O_TMPFILE en open(2) que permite la creación sencilla de archivos temporales seguros, soporte de gestión de energía dinámica para todas las GPUs Radeon desde la r600, soporte preliminar de NFS 4.2 y de etiquetado SELinux en NFS, soporte experimental de clientes del sistema de archivos distribuido Lustre, seguimiento detallado de las páginas a las que escribe un proceso, soporte de huge pages en ARM y soporte de KVM y Xen en ARM64, mejoras de escalabilidad de la cola de mensajes SYSV IPC, polling de tarjetas de red con latencia baja y un cache de swap comprimido. 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.


· Nueva flag O_TMPFILE para open(2) para reducir las vulnerabilidades de archivos temporales

O_TMPFILE es una flag nueva para open(2)/openat(2) que facilita la creación de archivos temporales seguros. Los archivos que sean abiertos con O_TMPFILE son creados, pero no son visibles en el sistema de archivos. Y tan pronto como se cierre el descriptor de archivo, es eliminado, al igual que ocurriría con un archivo que hubieras abierto y desenlazado.

Hay dos usos para este tipo de archivos. El primero es la creación de archivos temporales sin condiciones de carrera (se elimina cuando se cierra; nunca es accesible desde ningún directorio, no hay necesidad de crearlos con un nombre de archivo único - básicamente, un tmpfile(3) bien hecho). Otro uso es crear un archivo inicialmente imposible de acceder, escribir lo que quieras en él, hacer fchmod()/fchown()/fsetxattr() como desees, y entonces enlazarlo al sistema de archivos atómicamente, ya preparado.

 · Soporte experimental de gestión de energía dinámica en tarjetas gráficas AMD Radeon

Los drivers para tarjetas gráficas AMD han incorporado soporte para la gestión dinámica de energía para todas sus GPUs, de la r600 hasta el día de hoy. Este código es experimental, y está desactivado por el momento. Para activarlo es necesario pasar el parámetro radeon.dpm=1 al módulo.

· Soporte experimental como cliente del sistema de archivos Lustre

Lustre es un sistema de archivos distribuido que soporta múltiples clústers de computación con cientos de miles de nodos clientes, decenas de Petabytes de almacenamiento en cientos de servidores, y más de un Terabyte por segundo de E/S agregada. Es el sistema de archivos para clusters más popular en la computación de alto rendimiento: seis de los 10 mejores y 60 de los 100 mejores supercomputadores del mundo usan Lustre.

Esta versión añade soporte como cliente, pero es experimental, el código no está muy limpio y necesita estar un tiempo en drivers/staging. Ver drivers/staging/lustre/TODO para más detalles. Para más detalles sobre Lustre, visitar http://lustre.org.

· Soporte preliminar de NFS 4.2 y SELinux Labeled NFS

Esta versión incorpora soporte preliminar para clientes de NFS 4.2, una nueva versión del estándar NFS que está siendo desarrollada. Para más detalles sobre qué novedades incorpora este nuevo estándar, vea este post.

Esta versión también ha incorporado soporte para Labeled NFS, que añade soporte completo de SELinux a NFS. Hasta ahora, los montajes NFS eran tratados como una única etiqueta de SELinux, típicamente nfs_t; o como mucho permitían al administrador cambiar la etiqueta por defecto con la opción --context de mount. Con Labeled NFS, es posible tener muchas etiquetas diferentes. Esto es útil para asegurar las aplicaciones de virtualización con una etiqueta en la imagen virtualizada. También es útil para exportar directorios home desde NFS, y así poder confinar aplicaciones para que sólo puedan escribir en ciertos lugares, en lugar de tener permisos para escribir en cualquier directorio.

· Seguimiento detallado de qué páginas escribe una aplicación


Esta versión incorpora un mecanismo que ayuda a seguir qué páginas escribe una aplicación. Esta característica es utilizada principalmente por el proyecto checkpoint-restore, pero puede ser usado para conseguir mejores estadísticas y construir mejores aplicaciones de profiling. Para más detalles, ver Documentation/vm/soft-dirty.txt

· Soporte de huge pages en ARM, soporte de KVM y Xen en ARM64

La arquitectura ARM ha incorporado soporte de huge pages tanto para las CPUs de 32 bits como para las de 64 bits. Esta implementación permite el mapeado de secciones de 2MB; la configuración de páginas de 64K no está soportada. También añade soporte para huge pages transparentes; cuando estén activadas, el kernel intentará mapear páginas anónimas en secciones de 2MB cuando sea posible.

Esta versión también incorpora soporte de virtualización KVM y Xen para la arquitectura ARM64.

· Mejoras de escalabilidad de la cola de mensajes SYSV IPC

Esta mejora continúa el trabajo que comenzó con las mejoras de escalabilidad en los semáforos SYSV que fue incluído en Linux 3.10.

Como los semáforos, la lista de mensajes también abusa del bloqueo utilizado por el código SYSV IPC, sosteniéndolo para operaciones como comprobaciones de seguridad y de permisos, lo que daña la escalabilidad y el rendimiento. En esta versión, se han utilizado una mezcla de algoritmos sin bloqueos, secciones críticas acortadas, estadísticas individuales para cada semáforo y ajustes del uso del caché de CPU para hacer la lista de mensajes más veloz y escalable.

· Polling de red con baja latencia

Los drivers de Linux modernos no notifican al sistema de la llegada de nuevos paquetes con interrupciones, porque con los actuales requisitos de ancho de banda se generarían cientos de miles de interrupciones por segundo, que no pueden gestionarse sin degradación del rendimiento. Por esa razón se utiliza un sondeo periódico a la tarjeta (polling), llamado NAPI en Linux. Sin embargo, el intervalo del sondeo añade latencia. Esta versión permite a las aplicaciones requerir en cada socket un intervalo de sondeo menor.

· Zswap: un caché de swap comprimido

Citando de este artículo de LWN recomendado:

"Zswap es un caché para páginas de swap. Toma las páginas que están en proceso de ser enviadas al espacio de intercambio e intenta comprimirlas en un espacio de memoria RAM. Si este proceso tiene éxito, se retrasa el proceso de escritura al espacio de intercambio y, en muchos casos, se evita completamente. Las consecuencias son una reducción de E/S y ganancias de rendimiento en los sistemas que utilizan a menudo el espacio de intercambio". Para mas detalles y mediciones, ver el artículo de LWN recomendado. (Nota: esto viene a ser el equivalente Linux de la compresión de memoria de OS X 10.9)


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

1 comentario:

  1. zswap viene usándose en versiones no oficiales de Android desde hace tiempo, con muchos problemas. Ojalá el soporte upstream ayude con esto.

    Y por otro lado, qué extraño que no hayas siquiera mencionado todo el asunto del Linux for Workgroups y el logo nuevo, era como la noticia de 3.11 :P

    ResponderEliminar