Después de dos meses de desarrollo, Linus Torvalds presentó el lanzamiento del núcleo Linux 6.13. Entre los cambios más notables se encuentran: el modo de expulsión perezosa en el programador de tareas, soporte para escritura atómica en XFS y Ext4, el mecanismo de «multigrain timestamps», modo adaptativo de activación de sondeo en el subsistema de red, posibilidad de compilación con optimizaciones AutoFDO, soporte para el mecanismo de protección ARM65 Guarded Control Stack, aislamiento de máquinas virtuales mediante la extensión ARM CCA, pilas separadas en BPF, eliminación de ReiserFS, controlador virtual-cpufreq, API netlink net-shaper, modo de montaje tmpfs con distinción entre mayúsculas y minúsculas, soporte para extensiones POSIX en SMB3, controlador AMD Cache Optimizer.
En la nueva versión se aceptaron 14172 correcciones de 2086 desarrolladores, el tamaño del parche es de 46 MB (los cambios afectaron a 15375 archivos, se añadieron 598707 líneas de código, se eliminaron 406294 líneas). En la edición anterior hubo 14607 correcciones de 2167 desarrolladores, el tamaño del parche fue de 37 MB. Aproximadamente el 52% de todos los cambios presentados en 6.13 están relacionados con controladores de dispositivos, aproximadamente el 13% de los cambios están relacionados con la actualización del código específico para arquitecturas de hardware, el 11% está relacionado con el stack de red, el 4% con sistemas de archivos y el 3% con subsistemas internos del núcleo.
Las principales novedades en el núcleo 6.13:
- Subsistema de disco, entrada/salida y sistemas de archivos
- Se añadió el mecanismo de «multigrain timestamps», que permite obtener información sobre el tiempo de modificación o acceso a archivos con una precisión superior a un milisegundo, pero sin efectos negativos en el rendimiento. Aumentar la precisión de las marcas conlleva costos adicionales debido a la mayor intensidad de escritura de metadatos en el disco, por lo que en la implementación propuesta, las marcas más precisas se generan no para todos los archivos, sino solo para aquellos para los cuales los procesos solicitan tales marcas a través de la llamada getattr().
- Se agregó soporte para operaciones de escritura atómica, donde la escritura de datos con un tamaño que supera el tamaño del sector se realiza de manera atómica en dispositivos de almacenamiento que ofrecen tal posibilidad. Actualmente, la escritura atómica está implementada para XFS, Ext4 en modo O_DIRECT (Direct I/O) y RAID 0/1/10 de md.
- Se propuso un nuevo mecanismo de conteo de referencias para archivos, que ofrece un aumento del rendimiento del 3-5% en cargas de trabajo con más de 255 hilos.
- Se eliminó la implementación del sistema de archivos ReiserFS, que fue declarado obsoleto hace dos años.
- Se ha añadido el parámetro de sysctl "fs.dentry-negative" para establecer en VFS la política de limpieza de las entradas "dentry" (representación interna de los elementos del directorio) después de eliminar los archivos relacionados. Para algunos tipos de carga, es óptimo dejar tales registros de archivos eliminados, y para otros, eliminarlos; por lo tanto, el núcleo proporciona la opción de elegir (por defecto, las "dentry" no se eliminan automáticamente).
- Se ha añadido la bandera STATMOUNT_OPT_ARRAY a la llamada al sistema statmount() para devolver una lista de las opciones del sistema de archivos como un array de cadenas terminadas en un carácter nulo y que no utiliza la secuencia de escape "\000". Se ha añadido soporte para devolver el subtipo del sistema de archivos (fs_subtype, para determinar el uso de FUSE), opciones de montaje seguro y el superbloque de origen (sb_source).
- En OverlayFS, se proporciona la posibilidad de especificar capas a través de descriptores de archivo en lugar de nombres de rutas de archivo.
- Se ha añadido la opción de montaje "casefold" al sistema de archivos tmpfs para trabajar sin distinción de mayúsculas y minúsculas, y la opción "strict_encoding" para bloquear la creación de archivos con nombres que contengan caracteres UTF-8 incorrectos.
- Se ha propuesto un nuevo conjunto de llamadas al sistema para gestionar atributos extendidos de archivos: setxattrat(), getxattrat(), listxattrat() y removexattrat(). A diferencia de las llamadas al sistema setxattr(), getxattr(), listxattr() y removexattr(), las nuevas variantes requieren la especificación de un descriptor de archivo del directorio en relación al cual se realiza la búsqueda de la ruta de archivo.
- Se ha añadido la operación ioctl BTRFS_IOC_SUBVOL_SYNC_WAIT en Btrfs, que incluye la espera de la finalización de la limpieza de subvolúmenes, lo que permite ejecutar el comando "btrfs subvolume sync" por un usuario no privilegiado, sin acceso a ioctl SEARCH_TREE (útil en aplicaciones de copia de seguridad que limpian subvolúmenes). Se ha añadido la operación ioctl ENCODED_READ para leer a través de io_uring datos codificados, por ejemplo, para leer directamente extensiones comprimidas sin descompresión. Se ha continuado el trabajo hacia el uso de folios de páginas de memoria (page folios). Se ha reducido la aparición de contendencias de bloqueo al buscar referencias inversas integradas y al iterar sobre los búferes de extensiones. Se ha incrementado la eficiencia en la compresión del mapa de extensiones.
- En el sistema de archivos EROFS (Extendable Read-Only File System), diseñado para su uso en particiones accesibles en modo solo lectura, se ha implementado la posibilidad de utilizar las opciones SEEK_HOLE y SEEK_DATA en la llamada al sistema lseek().
- En F2FS se ha añadido soporte para la reflexión de dispositivos ('device aliasing'), permitiendo reservar temporalmente un área en F2FS para utilizar una parte del dispositivo de bloque en otro sistema de archivos. Después de completar la operación externa, el área reservada se puede devolver a F2FS. Por ejemplo, se puede crear un sistema de archivos con el comando 'mkfs.f2fs -c /dev/vdc@vdc.file /dev/vdb', después de lo cual el contenido del dispositivo /dev/vdc será reservado y reflejado en el archivo vdc.file, y la partición /dev/vdc podrá utilizarse para otros fines, como formatearla para otro sistema de archivos. Para devolver el contenido reservado, basta con eliminar el archivo vdc.file.
- En XFS se ha incluido soporte para cuotas en dispositivos de tiempo real. Se ha añadido soporte para un directorio de metadatos (metadata directory), donde se colocan todos los inodes con metadatos.
- En el mecanismo FUSE se ha incluido la posibilidad de cambiar dinámicamente el número máximo de páginas (FUSE_MAX_MAX_PAGES) utilizando 'sysctl fs.fuse.max_pages_limit'. Se utilizan folios de páginas de memoria (page folios).
- En SMB se ha implementado soporte para las extensiones POSIX en SMB3, necesarias para el almacenamiento de tipos especiales de archivos, como fifo, archivos de dispositivo y enlaces simbólicos. Se ha añadido la posibilidad de montar una partición con una contraseña alternativa, que se aplica durante la rotación de contraseñas. Se ha añadido una nueva opción de montaje 'cifs.upcall' para la determinación del espacio de nombres. Se ha asegurado el reconocimiento de archivos de dispositivos de caracteres y bloques creados en Windows NFS Server. Se ha añadido soporte para enlaces simbólicos al estilo de WSL (Windows Subsystem for Linux).
- Los sistemas de archivos UBIFS, ADFS, BEFS, HFS, HFSPLUS, HPFS, JFS y ECRYPTFS han sido trasladados para usar la nueva API de montaje de particiones.
- Los sistemas de archivos ECRYPTFS, UFS y NILFS2 han sido trasladados para usar folios de páginas de memoria (page folios).
- Memoria y servicios del sistema
- En el planificador se ha implementado un modelo de desalojo perezoso de tareas (PREEMPT_LAZY, lazy preemption), que corresponde al modelo de desalojo completo («full preemption») para tareas en tiempo real (RR/FIFO/DEADLINE), pero retrasa el desalojo de tareas normales (SCHED_NORMAL) hasta el límite del tick. Este retraso reduce la cantidad de despidos de los poseedores de bloqueos, lo que permite aproximar el rendimiento a configuraciones que utilizan el modelo de desalojo voluntario (voluntary preemption). Así, el nuevo modelo mantiene las capacidades de desalojo completo respecto a tareas en tiempo real, pero minimiza la caída de rendimiento para tareas normales. Además, el nuevo modelo simplifica la lógica de operaciones de desalojo de tareas en el núcleo, al excluir del proceso de planificación a los controladores que se encuentran en otros componentes del núcleo (fuera del planificador de tareas).
- Al compilar con Clang se ha añadido la opción de usar optimizaciones
Fuente: opennet.ru
