Linux 6.13 llega con nuevo modelo de Lazy preemption, soporte para escritura atómica y mucho mas
Después de dos meses de trabajo, Linus Torvalds ha dado a conocer el lanzamiento de la nueva versión del Kernel de Linux 6.13, el cual trae consigo importantes avances y novedades. Entre las principales novedades que presenta se destaca un modelo de Lazy preemption, que se posiciona entre los modos voluntary y full, la inclusión del soporte para escritura atómica en sistemas de archivos como XFS y Ext4.
Otros cambios incluyen el controlador virtual-cpufreq, la nueva API netlink net-shaper, y un modo de montaje de tmpfs que ahora distingue entre mayúsculas y minúsculas, junto con soporte para extensiones POSIX en SMB3, y un controlador optimizador de caché de AMD.
Esta nueva versión ha contado con la contribución de 2086 desarrolladores que realizaron un total de 14,172 correcciones, afectando 15,375 archivos y resultando en la adición de 598,707 líneas de código, con la eliminación de 406,294 líneas.
Principales novedades de Linux 6.13
El kernel 6.13, uno de los cambios más importantes es la introducción del mecanismo «fine-grained timestamps» que mejora la precisión en la obtención de datos sobre modificaciones o accesos a archivos, logrando una precisión superior a un milisegundo sin afectar negativamente el rendimiento.
Otra de las novedades que presenta el Kernel de Linux 6.13 es el soporte para escrituras atómicas, que garantiza que los datos mayores que el tamaño de un sector se escriban de forma atómica en dispositivos que soportan esta función. Actualmente, esta funcionalidad está disponible en sistemas de archivos como XFS, Ext4 en modo O_DIRECT, y en configuraciones de RAID 0/1/10 con md.
En lo que respecta a otros sistemas de archivos, Linux 6.13 marca la eliminación definitiva de ReiserFS, EROFS ahora admite las opciones SEEK_HOLE y SEEK_DATA en lseek(), mientras que F2FS ha añadido soporte para alias de dispositivos y XFS ha incorporado soporte para cuotas en dispositivos de tiempo real y ha mejorado la gestión de directorios de metadatos. Además, SMB3 ahora soporta extensiones POSIX necesarias para almacenar archivos especiales, como enlaces simbólicos y archivos de dispositivo.
En los servicios de memoria y el sistema, se ha introducido el nuevo modelo de preferencia diferida (PREEMPT_LAZY). Este modelo permite mantener las capacidades de preemption completa para las tareas en tiempo real, mientras que retrasa la preferencia de las tareas normales hasta el límite del tick. Además, el modelo simplifica la lógica del programador de tareas al eliminar los controladores de otras partes del kernel de su proceso de programación.
En cuanto a las optimizaciones de compilación, se ha integrado el soporte para optimizaciones AutoFDO al compilar con Clang, que utilizan perfiles de ejecución para ajustar el código y mejorar el rendimiento, han demostrado reducir la latencia en un 10%. También se ha añadido un nuevo indicador a la llamada al sistema madvise() con el propósito de mejorar la gestión de la memoria del proceso. El indicador MADV_GUARD_INSTALL permite reemplazar direcciones de protección de páginas específicas, evitando excepciones de acceso (SIGSEGV) sin necesidad de asignar nuevas áreas de memoria virtual.
IO_uring también ha recibido varias mejoras, incluyendo la capacidad de cambiar el tamaño de los buffers, enviar mensajes en modo síncrono entre buffers en anillo y clonar parcialmente los buffers. Además, se ha implementado un sondeo de E/S híbrido y se ha extendido la API para registrar buffers circulares y áreas de memoria.
En cuanto a las mejoras en hardware, se ha añadido la capacidad de detectar «split-locks» en CPUs AMD, un fenómeno que ocurre cuando los datos no están alineados correctamente en la memoria y atraviesan dos líneas de caché, lo que puede afectar gravemente al rendimiento. Para mitigar este problema, se ha integrado el controlador AMD Cache Optimizer, que aprovecha la tecnología AMD 3D V-Cache para mejorar el rendimiento de los núcleos individuales de la CPU, ya sea aumentando el tamaño de la caché L3 disponible o incrementando la frecuencia.
Para arquitecturas MIPS, se ha agregado soporte para sistemas con controladores de interrupciones de múltiples clústeres, lo que proporciona un controlador de interrupciones independiente para cada clúster de la CPU. También se ha implementado una nueva operación ioctl, PIDFD_GET_INFO, que permite obtener información sobre un proceso usando su identificador PIDFD, que permanece constante incluso si el PID asociado cambia cuando el proceso finaliza.
En ARM, se incluyen avances clave como soporte para ejecutar Linux en máquinas virtuales protegidas mediante la Arquitectura de Computación Confidencial Arm, así como compatibilidad con pilas de sombras en el espacio de usuario, mejorando la seguridad. También se implementa un nuevo mecanismo de conteo referenciado para archivos, logrando una mayor escalabilidad.
El programador de tareas ahora soporta un mecanismo de ejecución de proxy, resolviendo el problema de inversión de prioridad. Este mecanismo evita que tareas de baja prioridad retengan recursos necesarios por tareas de alta prioridad (en tiempo real), bloqueándolas. Además, se han separado los contextos de programación y ejecución de los procesos.
Por otra parte, se destaca la migración de cambios relacionados con el uso de Rust en el desarrollo de controladores y módulos del kernel. Aunque el soporte de Rust no está habilitado por defecto, se han agregado enlaces y estructuras de datos para permitir la escritura de controladores en este lenguaje, incluyendo soporte para eventos de seguimiento y el controlador Binder reescrito en Rust.
El subsistema BPF ha mejorado con la implementación de una pila separada para los programas BPF, lo que reduce el riesgo de desbordamientos al procesar grandes cadenas de llamadas. También se ha añadido la capacidad de enviar señales a otros procesos y de utilizar memoria compartida en mapas BPF, lo que facilita la comunicación de carga entre los controladores del programador de tareas.
Además, el seguimiento de excepciones ha sido mejorado para generar fallos de página cuando se activan puntos de seguimiento en las llamadas al sistema, lo que permite leer los parámetros pasados desde el espacio del usuario. También se ha añadido el parámetro transparent_hugepage_shmem para controlar el uso de páginas de memoria grandes en sistemas de archivos tmpfs y shmem.
En redes, se introduce soporte para la suspensión de NAPI durante inactividad, mejorando el consumo energético, y una nueva API de dispositivos de red que facilita la configuración avanzada del hardware de transmisión (TX). Asimismo, io_uring ha recibido varias optimizaciones que perfeccionan el manejo de operaciones asíncronas de entrada/salida.
Finalmente, se ha implementado soporte en tiempo real para la arquitectura Loongarch y nuevas extensiones para la arquitectura RISC-V, que permiten enmascarar punteros en el espacio de usuario. Para mejorar la compresión de imágenes del kernel, el algoritmo predeterminado se ha cambiado a lz4, reemplazando a lz4c.
Interesado en poder conocer mas al respecto, puedes consultar los detalles en el siguiente enlace.