Después de dos meses de desarrollo, Linus Torvalds presentó el lanzamiento del núcleo Linux 7.0. Entre los cambios más destacados se encuentran: las reglas para el uso de asistentes de IA, la incorporación de Rust como funcionalidad principal del núcleo, el aumento del rendimiento del intercambio de memoria, la activación por defecto del modo PREEMPT_LAZY, el soporte de filtros para operaciones io_uring, un nuevo sistema de archivos Nullfs, la infraestructura fserror, herramientas de monitoreo XFS, soporte para la remapeo en Btrfs, la activación por defecto de la versión NFS 4.1, la integración de un algoritmo criptográfico post-cuántico ML-DSA, y la activación de AccECN en el subsistema de red, junto con el soporte inicial para WiFi 8.
Se ha asignado el número 7.0 porque en la rama 6.x se acumularon suficientes lanzamientos para cambiar el primer dígito en el número de versión (en su momento, la versión 6.0 se formó inmediatamente después de 5.19). El cambio en la numeración se realiza por razones estéticas y es un paso formal que elimina la incomodidad causada por la acumulación de un gran número de lanzamientos en la serie.
En la nueva versión se han aceptado 15624 correcciones de 2477 desarrolladores, con un tamaño de parche de 56 MB (los cambios afectaron a 18053 archivos, se agregaron 704060 líneas de código y se eliminaron 278132 líneas). En la versión anterior hubo 15657 correcciones de 2237 desarrolladores, con un tamaño de parche de 52 MB. Aproximadamente el 51% de los cambios presentados en 7.0 están relacionados con controladores de dispositivos, alrededor del 11% están relacionados con la actualización de código específico de arquitecturas de hardware, el 14% está relacionado con la pila de red, el 5% con sistemas de archivos y el 3% con subsistemas internos del núcleo.
Las principales novedades en el núcleo 7.0 (kernelnewbies.org, lwn.net, OpenNET):
- Subsistema de disco, entrada/salida y sistemas de archivos
- Se ha implementado la infraestructura fserror y se ha agregado una API para obtener información sobre errores de entrada/salida y corrupción de metadatos al trabajar con archivos. La infraestructura propuesta unifica en los sistemas de archivos la transmisión de información sobre errores al espacio de usuario a través del mecanismo fsnotify.
- En XFS agregados nuevas capacidades para monitorear el estado del sistema de archivos desde el espacio de usuario. Se ha propuesto la operación ioctl XFS_IOC_HEALTH_MONITOR, que devuelve un descriptor de archivo a través del cual se pueden obtener informes sobre fallos relacionados con la corrupción de metadatos o la aparición de errores durante la entrada/salida, así como monitorear cambios en los estados del sistema de archivos, como desmontaje y cierre. Además, se ha propuesto un proceso en segundo plano gestionado por systemd llamado xfs_healer, que maneja eventos sobre el estado del sistema de archivos desde el espacio de usuario y, si es necesario, se inicia automáticamente. procedimientos de recuperación.
- Se ha añadido soporte experimental para la estructura «árbol de remapeo» en el sistema de archivos Btrfs (árbol de remapeo), que en el futuro puede ser utilizado como una capa intermedia durante las operaciones de entrada/salida. La esencia de esta nueva característica es que, tras mover los datos en el almacenamiento, en lugar de actualizar todas las estructuras relacionadas con esos datos, se guardan las direcciones antiguas y nuevas en la estructura adicional «árbol de remapeo», y luego, al acceder a los datos, las direcciones son sustituídas. Este nuevo enfoque se presenta como más confiable y flexible, además de simplificar la expansión futura de la funcionalidad de Btrfs.
- En Btrfs se ha implementado se ha añadido soporte para la entrada/salida directa en situaciones donde el tamaño del bloque excede el tamaño de la página de memoria en el sistema.
- En la composición incluida un nuevo sistema de archivos Nullfs, que puede ser utilizado como un sustituto para el sistema de archivos raíz. El sistema de archivos Nullfs siempre está vacío, no contiene datos y no admite cambios. Su propósito es ser utilizado como sistema de archivos inicial para simplificar el proceso de arranque del sistema; sobre Nullfs se montan otros sistemas de archivos y se utiliza la llamada del sistema pivot_root() para cambiar el sistema de archivos raíz en lugar de limpiar el contenido del initramfs y usar el sistema de archivos raíz asociado.
- Implementado actualización de la información sobre el tiempo de modificación de archivos en modo no bloqueante. Anteriormente, la llamada file_update_time_flags() con la bandera IOCB_NOWAIT devolvía un error -EAGAIN, lo que impedía realizar operaciones de escritura directa en modo no bloqueante.
- En los sistemas de archivos, en la categoría de opciones desactivadas traducida soporte para bloqueos de notificación (lease). Por defecto, este mecanismo no se activa debido a problemas con los sistemas de archivos que no fueron originalmente diseñados para su uso. Por ejemplo, no son compatibles con los sistemas de archivos 9p y cephfs.
- En el sistema de archivos EROFS (Extendable Read-Only File System), diseñado para ser utilizado en particiones accesibles en modo solo lectura, se utiliza el algoritmo LZMA para la compresión de forma predeterminada. Opcionalmente están disponibles los algoritmos DEFLATE y Zstandard, que ya no están marcados como experimentales. Se ha implementado el uso compartido de entradas en la caché de páginas (page-cache) para archivos idénticos en diferentes sistemas de archivos EROFS.
- Eliminado el modo laptop_mode, que ahorra consumo de energía al retrasar y combinar las operaciones de escritura en el disco duro con el fin de prolongar el tiempo que el disco permanece en modo de suspensión y reducir el número de despertamientos. Este modo ha perdido relevancia, ya que en los dispositivos móviles modernos, los discos duros han sido reemplazados por unidades de estado sólido.
- El sistema de archivos F2FS se ha trasladado al uso de grandes folios de páginas de memoria (folios grandes).
- Se ha reiniciado el trabajo en el controlador ntfs3, desarrollado por la empresa Paragon Software. Se ha añadido soporte para operaciones con archivos basadas en iomap, se han implementado las opciones llseek SEEK_DATA/SEEK_HOLE, y se ha añadido el modo delalloc para la asignación retrasada de bloques. Mientras tanto, en la lista de correo de los desarrolladores del núcleo, en febrero se ha aprobado la inclusión en una de las futuras versiones del núcleo de una nueva implementación de NTFS — ntfsplus, diseñada para reemplazar ntfs3.
- Por defecto, al compilar incluida la versión del protocolo NFS 4.1 (CONFIG_NFS_V4_1). Se ha garantizado el bloqueo de exportación a través de NFS de sistemas de archivos pseudo especializados, como pidfs y nsfs. En NFSD se ha implementado hay una posibilidad experimental de usar ACL POSIX y se ha añadido se ha añadido soporte para la modificación dinámica del grupo de hilos (thread-pool) en función de la carga.
- Memoria y servicios del sistema
-
Se han aprobado las reglas oficiales para el uso de asistentes de IA y la inclusión en el núcleo de contenido generado automáticamente.Al transmitir el código generado, se ordena marcarlo indicando el asistente de IA utilizado a través de la etiqueta Assisted-by. A los asistentes de IA se les prohíbe añadir la etiqueta Signed-off-by: la persona que envió el parche se considera su autor, asume la responsabilidad por el cambio enviado y garantiza su calidad. Se ordena a los desarrolladores llevar a cabo una revisión manual del código obtenido a través de IA y verificar la conformidad del resultado con los requisitos de licencia.
-
El soporte para Rust traducida se ha trasladado de experimental a las características principales del núcleo..
-
Se ha completado la integración en el núcleo del mecanismo "Swap Table", que permite aumentar el rendimiento de la paginación. El aumento se logra al reducir la competencia por el acceso a la caché de paginación, buscar de manera más efectiva en la caché y disminuir la fragmentación. El backend basado en Swap Table se ha utilizado para la caché de paginación en lugar del backend XArray y ha permitido, en la prueba redis-benchmark con BGSAVE, aumentar el número de solicitudes procesadas en un 22%.
-
Se ha añadido soporte para la nueva extensión en Clang 22 Análisis de Seguridad de Hilos, que permite identificar potenciales condiciones de carrera y errores causados por un bloqueo incorrecto durante la fase de compilación. La extensión ofrece una serie de atributos como GUARDED_BY(…), REQUIRES(…), RELEASE(…) y ACQUIRE(…), que permiten marcar las funciones cubiertas por bloqueos y delimitar los ámbitos de los bloqueos (definir el contexto). Durante la fase de compilación, se realiza una verificación de la correcta aplicación de primitivos de sincronización, como mutexes, basada en la evaluación de la actividad o inactividad del contexto relacionado.
-
En la llamada al sistema open_tree se ha agregado , el flag OPEN_TREE_NAMESPACE para simplificar la configuración de contenedores aislados y acelerar el inicio de contenedores en sistemas con un gran número de puntos de montaje. Al igual que OPEN_TREE_CLONE, el nuevo flag copia solo el árbol de puntos de montaje especificado (mount tree), pero en lugar de devolver un descriptor de archivo local, devuelve un descriptor de archivo en un nuevo espacio de nombres de puntos de montaje, donde el árbol copiado se monta sobre la copia del sistema de archivos raíz real. El flag OPEN_TREE_NAMESPACE es necesario para evitar la ejecución separada de las operaciones unshare(CLONE_NEWNS) y pivot_root(), que se aplican al crear contenedores.
-
En la llamada al sistema rseq se ha agregado , un mecanismo de extensión de cuántum de tiempo (time slice), que permite obtener tiempo de CPU adicional para la ejecución continua de secciones críticas. La idea es evitar que el planificador de tareas interrumpa la sección crítica con un bloqueo aplicado, lo que llevaría a la transferencia del control a otros hilos que están utilizando el recurso, manteniendo el bloqueo. La extensión del cuántum de tiempo se lleva a cabo sin gastos adicionales, pero también sin las estrictas garantías proporcionadas por una regulación completa de prioridades.
-
Para arquitecturas arm64, loongarch, powerpc, riscv, s390 y x86, el modo de preemptión en el planificador por defecto ha sido cambiado de PREEMPT_NONE a PREEMPT_LAZY. El número de modos posibles se ha reducido de cuatro a dos – PREEMPT_FULL y PREEMPT_LAZY (los modos PREEMPT_NONE y PREEMPT_VOLUNTARY se han dejado solo para arquitecturas que no admiten PREEMPT_FULL y PREEMPT_LAZY). El modo PREEMPT_LAZY aplica el modelo de preemption total (PREEMPT_FULL) para tareas en tiempo real (RR/FIFO/DEADLINE), pero retrasa la preemption de tareas normales (SCHED_NORMAL) hasta el límite de tick. La latencia introducida reduce los casos de preemption de poseedores de bloqueos, lo que permite acercar el rendimiento a las configuraciones que utilizan el modelo de preemption voluntaria (voluntary preemption), es decir, PREEMPT_LAZY permite mantener las capacidades de preemption total en relación con tareas en tiempo real, pero minimiza la caída de rendimiento para las tareas normales.
Activación de PREEMPT_LAZY resultó en una regresión seria, reduciendo a la mitad el rendimiento de PostgreSQL en sistemas ARM64. Para remediar la caída de rendimiento, se ha propuesto a los desarrolladores de PostgreSQL activar la opción PR_RSEQ_SLICE_EXTENSION para reducir la probabilidad de preemption de poseedores de bloqueos.
-
Continuado transferencia de cambios de la rama Rust-for-Linux, relacionada con el uso del lenguaje Rust como segundo lenguaje para el desarrollo de controladores y módulos del núcleo (el soporte de Rust no está activado por defecto, y no convierte a Rust en una de las dependencias de compilación obligatorias del núcleo). Gracias a la biblioteca previamente integrada “syn (crates.io)”, que simplifica la escritura de macros complejas, se logró reducir el tamaño del código Rust en el núcleo al simplificar las definiciones de macros procédurales existentes. Se han ampliado las capacidades de las bibliotecas kernel, macros y pin-init.
-
En el sistema de entrada/salida asincrónica io_uring se ha añadido una opción para usar colas de sumisión no circulares (non-circular submission queue), que se pueden almacenar en caché de manera más eficiente en situaciones donde la ejecución de la solicitud se completa antes del retorno de la llamada del sistema.
-
En la subsistema eBPF dentro del mecanismo BTF (BPF Type Format), que proporciona información para la verificación de tipos en pseudocódigo BPF, se implementó la búsqueda de depuración mediante es utilizado búsqueda binaria, lo que mejoró la eficiencia de carga de programas BPF. En eBPF se ha añadido se admite la utilización de argumentos implícitos en la llamada a kfunc (funciones del núcleo disponibles para su uso en programas BPF), definidas con la bandera KF_IMPLICIT_ARGS.
-
Eliminado código para soportar el disco RAM inicial (initrd) basado en linuxrc, ya declarado obsoleto. Se planea eliminar las implementaciones restantes de initrd en 2027. En lugar de initrd se debe utilizar initramfs (la diferencia es que initrd coloca el entorno de arranque inicial en una imagen de disco, mientras que initramfs lo hace en un sistema de archivos).
-
En un dispositivo de bloque zram, utilizado para el almacenamiento comprimido de la partición de intercambio en memoria, cambiada la lógica de funcionamiento con las páginas de memoria comprimidas con el movimiento opcional de datos a almacenamiento permanente en caso de que se agote la memoria RAM disponible. Anteriormente, las páginas de memoria se descomprimían antes de escribirse en el dispositivo físico, pero ahora se guardan tal cual en formato comprimido, lo que reduce la carga en la CPU y ahorra energía durante el funcionamiento autónomo.
-
En la utilidad timerlat, destinada a medir las latencias en el funcionamiento del planificador de tareas, se ha añadido opción —bpf-action para ejecutar programas BPF en caso de superar el umbral establecido.
-
Se ha añadido a la sistema de trazado ftrace la configuración bitmask-list para mostrar las máscaras de bits de forma legible (en forma de lista de bits, no como número hexadecimal). Se han añadido capacidades de auditoría en tracefs filtros y disparadores. Se ha añadido comando perf sched stats para recopilar y mostrar estadísticas sobre el funcionamiento del planificador de tareas.
-
Añadidos opciones de compilación LOGO_LINUX_MONO_FILE, LOGO_LINUX_VGA16_FILE y LOGO_LINUX_CLUT224_FILE para definir el archivo con la imagen del logo que se mostrará en el arranque del núcleo en lugar del logo estándar con el pingüino Tux.
-
- Virtualización y seguridad
- En el sistema de entrada/salida asíncrona io_uring se ha implementado la posibilidad de adjuntar programas BPF con filtros que controlan lo que pueden hacer las operaciones específicas de SQE (Submission Queue Entry) (similares a las llamadas al sistema en io_uring). La función añadida es análoga a los filtros de llamadas al sistema. Los filtros se pueden asociar con tareas específicas y se heredan al crear otros procesos después de llamar a fork(). Con filtros activos, los filtros adicionales que se añaden solo pueden imponer restricciones adicionales, pero no pueden deshabilitar los existentes. La capacidad implementada permitirá bloquear métodos de eludir la filtración de llamadas al sistema en entornos sandbox, basados en ejecutar en lugar de llamadas al sistema operaciones similares proporcionadas en io_uring.
- En SELinux se ha añadido la posibilidad de gestionar el acceso a los token BPF, que permiten permitir que procesos no privilegiados realicen algunas operaciones privilegiadas con BPF, como cargar programas BPF en el núcleo y crear estructuras de mapa.
- Se ha añadido soporte para el algoritmo de generación de firmas digitales ML-DSA (CRYSTALS-Dilithium), basado en la teoría de retículos y resistente a ataques en computadoras cuánticas. Se ha proporcionado la posibilidad de usar ML-DSA para la autenticación de módulos del núcleo.
- Se eliminó la posibilidad de utilizar esquemas de generación de firmas digitales con el algoritmo SHA-1 para certificar módulos del núcleo (se mantiene el soporte para la carga de módulos firmados).
- En el registro de auditoría NETFILTER_PKT agregados los campos sport y dport para inspeccionar números de puertos de red, y no solo direcciones IP.
- Para sistemas con arquitectura RISC-V se ha implementado soporte para las extensiones Zicfiss y Zicfilp, que proporcionan capacidades de hardware para aplicar la protección CFI (Control Flow Integrity), bloqueando violaciones del orden normal de ejecución de instrucciones (flujo de control) como resultado de ataques que modifican punteros de función almacenados en memoria.
- En el hipervisor KVM se ha implementado la posibilidad de transmitir a los sistemas invitados información sobre el soporte del procesador para la extensión ERAPS (Enhanced Return Address Predictor Security), lo que permite prescindir de algunas operaciones de restablecimiento del estado de la CPU al devolver el control al host desde el sistema invitado. Además, se ha añadido soporte para asociar hardware a los sistemas invitados para el seguimiento del rendimiento (PMU, Unidad de Monitoreo de Rendimiento), lo que permite mejorar la precisión del perfilado en comparación con el uso de PMU emuladas.
- En el controlador para el hipervisor Hyper-V se ha añadido soporte para la interfaz debugfs para ver estadísticas de funcionamiento del hipervisor.
- Subsistema de red
- Se incluye por defecto la extensión AccECN (Notificación de Congestión Explícita Precisa), que implementa una versión mejorada de la extensión ECN (wikipedia.org), permitiendo a los hosts marcar paquetes IP en caso de congestión en lugar de descartarlos, lo que facilita la identificación de los primeros indicios de atascos en los canales de comunicación sin pérdida de paquetes. La extensión original ECN tiene una limitación que permite enviar solo una señal de congestión durante un ciclo de transmisión TCP (RTT, Round-Trip Time, envio de una solicitud y recepción de una respuesta). AccECN elimina esta limitación y permite al receptor enviar al remitente más de una etiqueta de congestión en la cabecera del paquete TCP. Los algoritmos de gestión de congestión pueden utilizar la información recibida para responder con mayor precisión a las congestiones y evitar una drástica reducción de la intensidad de envío de paquetes ante una congestión menor.
- En la implementación del algoritmo de gestión de colas de red Cake se ha añadido la capacidad de procesar múltiples colas para distribuir la carga entre varios núcleos de CPU. El algoritmo CAKE se utiliza para reducir el impacto negativo del almacenamiento temporal de paquetes en equipos de red fronterizos, y está diseñado para alcanzar la máxima capacidad posible y el mínimo nivel de latencia incluso en canales de comunicación lentos.
- En los sockets VSOCK, utilizados para interactuar con máquinas virtuales, se ha añadido soporte para espacios de nombres de red (network namespace).
- Se ha añadido la implementación inicial del futuro estándar WiFi 8 (802.11bn, WiFi de Ultra Alta Fiabilidad).
- Añadidos optimizaciones que han permitido aumentar el rendimiento en el procesamiento de paquetes UDP entrantes en un 12% durante pruebas de estrés en una red de 100 gigabits.
- Hardware
- En el controlador AMDGPU se ha implementado soporte Bloques IP, utilizados en las nuevas GPU AMD, como SMUIO 15.x, PSP 15.x, IH 6.1.1/7.1, MMHUB 3.4/4.2, GC 11.5.4/12.1, SDMA 6.1.4/7.1/7.11.4 y JPEG 5.3.
- Se ha mejorado la gestión de frecuencias en los sistemas Tegra 186+ en el controlador Nouveau.
- En el controlador i915 se ha añadido se ha añadido soporte inicial para el bloque IP de pantalla Xe3p_LPD, utilizado en procesadores Intel Nova Lake-P.
- Se ha continuado trabajo en el controlador drm (Gestor de Renderizado Directo) Xe para GPU basadas en la arquitectura Intel Xe, que se utiliza en las tarjetas gráficas Intel de la familia Arc y en gráficos integrados, comenzando con procesadores Tiger Lake. Se ha añadido el modo Multi Queue. Añadidos componentes necesarios para diagnosticar bloqueos de GPU en Mesa. Se ha añadido soporte para el mecanismo MERT para gestionar el acceso a la memoria de la GPU.
- Se ha continuado Integración de componentes del controlador Nova para GPU NVIDIA, equipadas con firmware GSP, utilizadas desde la serie NVIDIA GeForce RTX 2000 basada en la microarquitectura Turing. El controlador está escrito en Rust. En la nueva versión se ha realizado la preparación para implementar el soporte para GPU basadas en la microarquitectura Turing y se han realizado varios cambios internos.
- Se ha añadido Soporte para controladores y dispositivos periféricos con interfaz SPI (Interfaz Periférica Serial) de múltiples canales, que permite la transmisión de datos en varios flujos paralelos.
- Se añadió Controlador para conectores combinados Type-C, utilizados en dispositivos con chips Apple Silicon y que combinan interfaces USB3, DP-AltMode y Thunderbolt/USB4.
- Se ha agregado soporte para subsistemas de audio de los chips Tegra238, Minisforum V3 SE, iBasso DC04U, Intel Nova Lake, Nova Lake S y Focusrite Forte.
- Se ha agregado soporte para plataformas ARM, SoC y dispositivos: Arduino UnoQ, OrangePi 6 Plus, OrangePi CM5, Anbernic RG-DS, Realtek Kent, Qualcomm Kaanapali, Mediatek Ezurio, Facebook Anacapa, Microchip LAN9668, Khadas VIM1S, QNAP TS133, i.MX952, i.MX93, i.MX94, VHIP4 EvalBoard, TQ-Systems MBLS1028A, Agilex5, Radxa CM3J, Glymur.
- Se ha agregado soporte para teléfonos inteligentes y tabletas: Fairphone Gen 6 (SoC Qualcomm Milos/Snapdragon 7s Gen 3), Pixel 3/3 XL, Microsoft Surface Pro 11.
Al mismo tiempo, el Fondo Latinoamericano de Software Libre formó una variante núcleo totalmente libre 7.0 – Linux-libre 7.0-gnu, limpiado de elementos de firmware y controladores que contienen componentes o partes de código no libres, cuya área de aplicación está limitada por el fabricante. En la versión 7.0 se ha realizado la limpieza de blobs del controlador iwlwifi. Se ha actualizado el código de limpieza en los controladores amdgpu, adreno, TI PRUeth, air_en8811h, ath12k, TI VPE, rtw8852b, rt1320, rt5575 SPI, tas2783, Intel catpt. Se ha limpiado los nombres de los blobs en los archivos dts (devicetree) para chips ARM.
Fuente: linux.org.ru
