Lanzamiento del núcleo Linux 7.0

Después de dos meses de desarrollo, Linus Torvalds presentó la versión del núcleo Linux 7.0. Entre los cambios más destacados se encuentran: las reglas para el uso de asistentes AI, la incorporación de Rust como funcionalidad principal del núcleo, mejoras en la eficiencia de la paginación, la activación por defecto del modo PREEMPT_LAZY, el soporte de filtros para operaciones io_uring, un nuevo sistema de archivos Nullfs, infraestructura fserror, herramientas de monitoreo para XFS, soporte para re-mapeo en Btrfs, activación por defecto de la versión NFS 4.1, integración de un algoritmo de criptografía post-cuántica ML-DSA, activación de AccECN en la subsistema de red, y 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.

Se han aceptado 15624 correcciones en esta nueva versión por parte de 2477 desarrolladores, el tamaño del parche es de 56 MB (se han modificado 18053 archivos, se han agregado 704060 líneas de código y se han eliminado 278132 líneas). En la versión anterior hubo 15657 correcciones de 2237 desarrolladores y el tamaño del parche fue de 52 MB. Aproximadamente el 51% de todos los cambios en 7.0 están relacionados con controladores de dispositivos, cerca del 11% de los cambios son correspondientes a actualizaciones de código específico para 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.

Novedades principales en el núcleo 7.0 (1, 2, 3):

  • Subsistema de disco, entrada/salida y sistemas de archivos
    • Se ha implementado la infraestructura fserror y se ha añadido una API para obtener información sobre errores de entrada/salida y corrupción de metadatos al trabajar con archivos. La infraestructura propuesta unifica la transmisión de información sobre errores en los sistemas de archivos hacia el espacio de usuario a través del mecanismo fsnotify.
    • En XFS se han añadido nuevas capacidades para monitorear el estado del sistema de archivos desde el espacio de usuario. Se ha propuesto una operación ioctl llamada XFS_IOC_HEALTH_MONITOR, que devuelve un descriptor de archivo a través del cual se pueden obtener datos sobre fallos relacionados con la corrupción de metadatos o errores durante la entrada/salida, así como seguir los cambios en los estados del sistema de archivos, como desmontaje y apagado. Además, se ha propuesto un proceso en segundo plano gestionado por systemd llamado xfs_healer, que maneja eventos acerca del estado del sistema de archivos desde el espacio de usuario y, si es necesario, inicia automáticamente procedimientos de recuperación.
    • El sistema de archivos Btrfs ha añadido soporte experimental para la estructura de «árbol de remapeo» (remap tree), que en el futuro podría utilizarse como una capa intermedia durante las operaciones de entrada/salida. La esencia de esta nueva funcionalidad radica en que, tras mover los datos en el dispositivo de almacenamiento, en lugar de actualizar todas las estructuras relacionadas con esos datos, en la estructura adicional del «árbol de remapeo» se conservan las direcciones antiguas y nuevas de los datos, permitiendo que al acceder a los datos, las direcciones se sustituyan. Este nuevo enfoque se presenta como más fiable y flexible, simplificando además la futura expansión de la funcionalidad de Btrfs.
    • En Btrfs se ha implementado soporte para entrada/salida directa en situaciones donde el tamaño del bloque excede el tamaño de la página de memoria en el sistema.
    • Se ha incluido un nuevo sistema de archivos «Nullfs», que puede utilizarse como un placeholder para el sistema de archivos raíz. El sistema de archivos Nullfs siempre está vacío, no contiene datos y no permite modificaciones. Su objetivo es servir como sistema de archivos inicial para simplificar el proceso de arranque del sistema; sobre Nullfs se montan posteriormente otros sistemas de archivos y se utiliza la llamada al sistema pivot_root() para cambiar el sistema de archivos raíz en lugar de limpiar el contenido de initramfs y utilizar el sistema de archivos raíz relacionado.
    • Se ha implementado la actualización de la información sobre el tiempo de modificación de los archivos en modo no bloqueante. Anteriormente, la llamada file_update_time_flags() con la bandera IOCB_NOWAIT devolvía el error «-EAGAIN», lo que impedía usar operaciones de escritura directa en modo no bloqueante.
    • En los sistemas de archivos, se ha transferido el soporte para bloqueos de notificación (lease) a la categoría de opciones habilitables por separado. Por defecto, este mecanismo ahora no se activa debido a problemas con sistemas de archivos que no estaban diseñados para su aplicación. Por ejemplo, los sistemas de archivos 9p y cephfs no lo soportan.
    • En el sistema de archivos EROFS (Extendable Read-Only File System), destinado para ser utilizado en particiones accesibles en modo solo lectura, se ha asignado por defecto el algoritmo LZMA para compresión. 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 el caché por páginas (page-cache) para archivos idénticos en diferentes sistemas de archivos EROFS.
    • El modo laptop_mode, que ahorraba energía al retrasar y combinar las operaciones de escritura en el disco duro para prolongar el tiempo de inactividad del disco y reducir el número de activaciones, ha sido descontinuado. Este modo ha perdido relevancia, ya que los discos duros han sido reemplazados por unidades de estado sólido en los dispositivos móviles modernos.
    • El sistema de archivos F2FS se ha adaptado para utilizar grandes folios de páginas de memoria (large folios).
    • Se ha reanudado el trabajo en el controlador ntfs3, desarrollado por Paragon Software. Se ha añadido soporte para operaciones de 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 diferida de bloques. Mientras tanto, en la lista de correo de desarrolladores del núcleo, se aprobó en febrero 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, en la compilación se incluye la versión del protocolo NFS 4.1 (CONFIG_NFS_V4_1). Se ha asegurado 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 una función experimental para el uso de ACL POSIX y se ha añadido soporte para la modificación dinámica del grupo de hilos (thread-pool) dependiendo de la carga.
  • Memoria y servicios del sistema
    • Se han aprobado las reglas oficiales para la aplicación de asistentes de IA y la inclusión en el núcleo de contenido generado automáticamente. Al transferir el código generado, se debe marcar indicando el asistente de IA utilizado mediante la etiqueta 'Assisted-by'. Se prohíbe a los asistentes de IA añadir la etiqueta 'Signed-off-by': la persona que envió el parche se considera su autor, asumiendo la responsabilidad por el cambio enviado y garantizando su calidad. A los desarrolladores se les instruye a realizar una revisión manual del código recibido a través de IA y verificar el cumplimiento de los requisitos de licencia.
    • El soporte para Rust ha sido trasladado de experimental a las características principales del núcleo. El soporte para Rust no está activo de forma predeterminada y no convierte a Rust en una de las dependencias de compilación obligatorias del núcleo.
    • Se ha completado la integración en el núcleo del mecanismo 'Swap Table', que permite aumentar el rendimiento de la memoria de intercambio. La aceleración se logra mediante la reducción de la competencia por el acceso a la caché de intercambio, una búsqueda más eficiente en la caché y la disminución de la fragmentación. El backend basado en la Swap Table se utiliza para almacenar en caché la memoria de intercambio en lugar del backend XArray y ha permitido aumentar en un 22% el número de solicitudes procesadas en la prueba redis-benchmark con BGSAVE.
    • Se ha añadido soporte para la nueva extensión de Clang 22, Análisis de Seguridad de Hilos, que permite identificar, en la fase de compilación, posibles condiciones de competencia y errores causados por la incorrecta asignación de bloqueos. La extensión ofrece una serie de atributos, como GUARDED_BY(...), REQUIRES(...), RELEASE(...) y ACQUIRE(...), que permiten marcar las funciones cubiertas por bloqueos y separar los ámbitos de estos bloqueos (definir el contexto). Durante la compilación, se verifica la correcta aplicación de primitivas de sincronización, como mutexes, basándose en la evaluación de la actividad o inactividad del contexto asociado.
    • Se ha añadido la bandera OPEN_TREE_NAMESPACE a la llamada al sistema open_tree para simplificar la configuración de contenedores aislados y acelerar el lanzamiento de contenedores en sistemas con un gran número de puntos de montaje. Similar a OPEN_TREE_CLONE, la nueva bandera copia únicamente el árbol de puntos de montaje especificado, 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 una copia del sistema de archivos raíz real. La bandera OPEN_TREE_NAMESPACE es necesaria para evitar la ejecución separada de las operaciones unshare(CLONE_NEWNS) y pivot_root(), que se utilizan al crear contenedores.
    • Se ha añadido un mecanismo de extensión de cuanta de tiempo (time slice) a la llamada al sistema rseq, 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 una sección crítica con un bloqueo, lo que llevaría a transferir el control a otros hilos que usan recursos en los que el bloqueo sigue activo. La extensión del cuanta de tiempo se realiza sin costos adicionales, pero también sin las estrictas garantías que se proporcionan con regulación de prioridades completa.
    • Para arquitecturas arm64, loongarch, powerpc, riscv, s390 y x86, el modo de preemption de tareas en el planificador por defecto ha 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 mantienen solo para arquitecturas que no soportan 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 del tick. El retraso introducido reduce los casos de preemption de los poseedores de bloqueos, lo que permite acercar el rendimiento a configuraciones que utilizan el modelo de preemption voluntaria, es decir, PREEMPT_LAZY permite mantener las capacidades de preemption total en relación con las tareas de tiempo real, pero minimiza la caída de rendimiento para tareas normales.

      La activación de PREEMPT_LAZY ha llevado a una regresión importante, reduciendo la performance de PostgreSQL en sistemas ARM64 a la mitad. Para abordar esta caída en el rendimiento, se ha sugerido a los desarrolladores de PostgreSQL activar la opción PR_RSEQ_SLICE_EXTENSION para disminuir la probabilidad de preemption del poseedor de bloqueos.

    • Continúa la migración de cambios de la rama Rust-for-Linux, relacionados con el uso del lenguaje Rust como segundo lenguaje para el desarrollo de controladores y módulos del kernel. Gracias a la biblioteca 'syn', que simplifica la escritura de macros complejas, se ha podido reducir el tamaño del código Rust en el kernel al simplificar las definiciones de las macros de procedimiento existentes. Se han ampliado las capacidades de las bibliotecas kernel, macros y pin-init.
    • Se ha añadido una opción al sistema de entrada/salida asincrónica io_uring para utilizar colas de envío no circulares (non-circular submission queue), que se almacenan en caché de manera más eficiente cuando la ejecución de una solicitud finaliza antes del retorno desde la llamada al sistema.
    • En la subsistema eBPF, el mecanismo BTF (BPF Type Format), que proporciona información para la verificación de tipos en pseudocódigo BPF, ahora emplea búsqueda binaria para encontrar información de depuración, lo que ha mejorado la eficiencia de carga de programas BPF. En eBPF se ha añadido soporte para argumentos implícitos al llamar a kfunc (funciones del kernel accesibles para su uso en programas BPF), definidos con la bandera KF_IMPLICIT_ARGS.
    • Se ha eliminado el código para soportar el disco RAM inicial (initrd) basado en linuxrc, que hace tiempo fue declarado obsoleto. Las implementaciones restantes de initrd se planea eliminarlas 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 el dispositivo de bloque zram, utilizado para el almacenamiento comprimido de la sección de intercambio en memoria, se ha cambiado la lógica de manejo de las páginas de memoria comprimidas al mover opcionalmente los datos al almacenamiento permanente en caso de que se llene la memoria RAM disponible. Anteriormente, las páginas de memoria se descomprimían antes de escribirlas en el medio 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, diseñada para medir la latencia en el funcionamiento del planificador de tareas, se ha añadido la opción "—bpf-action" para ejecutar programas BPF en caso de que se supere el umbral establecido.
    • En el sistema de trazado ftrace se ha añadido la configuración "bitmask-list" para mostrar las máscaras de bits en un formato legible (en forma de lista de bits y no como un número hexadecimal). En tracefs se han agregado capacidades para auditar filtros y disparadores. Se ha añadido el comando "perf sched stats" para recopilar y mostrar estadísticas sobre el funcionamiento del planificador de tareas.
    • Se han añadido opciones de compilación LOGO_LINUX_MONO_FILE, LOGO_LINUX_VGA16_FILE y LOGO_LINUX_CLUT224_FILE para definir el archivo de imagen del logotipo que se mostrará al iniciar el núcleo en lugar del logotipo 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 SQE (Submission Queue Entry) específicas (similar a las llamadas del sistema en io_uring). La posibilidad añadida es análoga a los filtros de llamadas del sistema. Los filtros se pueden vincular a tareas específicas y se heredan al crear otros procesos después de la llamada fork(). Con filtros activos, los filtros adicionales pueden solo agregar restricciones adicionales, pero no desactivar los existentes. La funcionalidad implementada permitirá bloquear métodos de elusión de filtrado de llamadas del sistema en entornos sandbox que se basan en la ejecución de operaciones similares a las llamadas del sistema, proporcionadas en io_uring.
    • En SELinux se ha agregado la capacidad de gestionar el acceso a los tokens BPF, permitiendo que procesos no privilegiados realicen ciertas operaciones privilegiadas con BPF, como cargar programas BPF en el kernel y crear estructuras de mapa.
    • Se ha añadido soporte para el algoritmo de firma digital ML-DSA (CRYSTALS-Dilithium), basado en la teoría de redes y resistente a ataques en computadoras cuánticas. Se ha proporcionado la posibilidad de usar ML-DSA para autenticar los módulos del kernel.
    • Se ha eliminado la posibilidad de utilizar esquemas de firma digital con el algoritmo SHA-1 para certificar módulos del kernel (se conserva el soporte para cargar módulos firmados).
    • En el registro de auditoría NETFILTER_PKT se han añadido los campos 'sport' y 'dport' para inspeccionar los números de puertos de red, 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 protección CFI (Integridad del Flujo de Control), bloqueando violaciones del orden normal de ejecución de instrucciones (flujo de control) a consecuencia de exploits que alteran los punteros a funciones almacenados en memoria.
    • En el hipervisor KVM se ha implementado la posibilidad de transferir a los sistemas invitados información sobre el soporte del procesador para la extensión ERAPS (Enhanced Return Address Predictor Security), lo que permite evitar algunas operaciones de restablecimiento del estado de la CPU al regresar el control al host desde el sistema invitado. Además, se ha añadido soporte para la asignación de hardware a los sistemas invitados para el seguimiento del rendimiento (PMU, Unidad de Monitoreo del Rendimiento), lo que permite aumentar la precisión del perfilado en comparación con el uso de PMU emulados.
    • En el controlador para el hipervisor Hyper-V se ha añadido soporte para la interfaz debugfs para ver estadísticas sobre el funcionamiento del hipervisor.
  • Subsistema de red
    • La extensión AccECN (Notificación de Congestión Explícita Precisa) está habilitada por defecto, implementando una versión mejorada de la extensión ECN, que permite a los hosts marcar paquetes IP en caso de congestión en lugar de descartarlos. Esto facilita la detección de la fase inicial de congestión en los canales de comunicación sin pérdida de paquetes. La extensión ECN original tiene una limitación que permite emitir solo una señal de congestión en un ciclo de transmisión TCP (RTT, Tiempo de Ida y Vuelta, envío de solicitud y recepción de respuesta). AccECN elimina esta limitación y permite al receptor enviar más de una etiqueta de congestión al emisor en el encabezado del paquete TCP. Los algoritmos de control de congestión pueden utilizar esta información para reaccionar más precisamente a las congestiones y evitar reducciones drásticas en la intensidad del envío de paquetes ante una congestión leve.
    • La implementación del algoritmo de gestión de colas de red Cake ha añadido la capacidad de manejar 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 intermedio de paquetes en el hardware de red fronterizo, y está orientado a lograr la mayor capacidad de transmisión posible y el nivel mínimo de latencia incluso en canales de comunicación lentos.
    • Se ha añadido soporte para espacios de nombres de red (network namespace) en los sockets VSOCK, utilizados para interactuar con máquinas virtuales.
    • Se ha añadido la implementación inicial del futuro estándar WiFi 8 (802.11bn, WiFi de Ultra Alta Fiabilidad).
    • Se han añadido optimizaciones que han mejorado el rendimiento del procesamiento de paquetes UDP entrantes en un 12% durante pruebas de estrés en una red de 100 gigabits.
  • Hardware
    • El controlador AMDGPU ha implementado soporte para bloques IP utilizados en 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.
    • Se ha añadido soporte inicial para el bloque IP de visualización Xe3p_LPD en el controlador i915, utilizado en los procesadores Intel Nova Lake-P.
    • Continuó el trabajo en el controlador drm (Direct Rendering Manager) 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 los procesadores Tiger Lake. Se agregó el modo Multi Queue. Se añadieron componentes necesarios para diagnosticar bloqueos de GPU en Mesa. Se añadió soporte para el mecanismo MERT para gestionar el acceso a la memoria de la GPU.
    • Se continuó la integración de componentes del controlador Nova para GPUs NVIDIA, equipadas con firmware GSP, usados desde la serie NVIDIA GeForce RTX 2000 basada en la microarquitectura Turing. El controlador está escrito en Rust. En la nueva versión se preparó la implementación del soporte para GPUs basadas en la microarquitectura Turing y se realizaron varios cambios internos.
    • Se añadió soporte para controladores y dispositivos periféricos con interfaz SPI (Serial Peripheral Interface) multicanal, que permiten la transmisión de datos en varios flujos paralelos.
    • Se añadió un controlador para conectores combinados Type-C, utilizados en dispositivos con chips Apple Silicon que combinan las interfaces USB3, DP-AltMode y Thunderbolt/USB4.
    • Se añadió soporte para subsistemas de audio de los chips Tegra238, Minisforum V3 SE, iBasso DC04U, Intel Nova Lake, Nova Lake S y Focusrite Forte.
    • Se añadió soporte para placas 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.

Simultáneamente, la Fundación de software libre de América Latina ha formado una versión completamente libre del núcleo 7.0 — Linux-libre 7.0-gnu, depurada de elementos de firmware y controladores que contienen componentes no libres o partes de código cuyas áreas de aplicación están restringidas por el fabricante. En el lanzamiento 7.0 se realizó una limpieza de los blobs del controlador iwlwifi. Se actualizó 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 realiza una limpieza de los nombres de blobs en archivos dts (devicetree) para chips ARM.

Fuente: opennet.ru

Compra un hosting fiable para sitios web con protección contra DDoS, servidores VPS VDS 🔥 Compra un hosting fiable para sitios web con protección contra DDoS, servidores VPS VDS | ProHoster