Después de dos meses de desarrollo, Linus Torvalds presentó el lanzamiento del núcleo Linux 7.2. Entre los cambios más notables se encuentran: el mecanismo de transmisión de datos USB4STREAM, optimizaciones en el rendimiento de btrfs, xfs y ext4, la continuación de la eliminación de código para el soporte de CPU i486, la posibilidad de crear planificadores anidados SCHED_EXT, disminución del consumo de memoria en el subsistema de paginación, aceleración de canales anónimos, soporte para las extensiones Intel MBEC y AMD GMET en KVM, eliminación del protocolo AppleTalk y soporte inicial para HDMI 2.1 FRL en el controlador AMDGPU.
Novedades clave en el núcleo 7.2 (1, 2, 3):
- Subsistema de disco, entrada/salida y sistemas de archivos
- En el mecanismo iomap se eliminó una llamada innecesaria a la función memset para iteraciones ya completadas en la función iomap_iter(), lo que aumentó en un 5% el número de operaciones de entrada/salida por segundo (IOPS) en pruebas realizadas con sistemas de archivos ext4 y xfs, durante cargas de trabajo de alta intensidad en dispositivos de almacenamiento NVMe.
- En XFS se ha declarado estable el soporte para dispositivos de almacenamiento zonificados (división en zonas de grupos de bloques o sectores, donde solo se permite la adición secuencial de datos con la actualización de todo el grupo de bloques).
- En Btrfs se ha incluido por defecto el soporte para grandes volúmenes de páginas de memoria (large folios), lo que permite reducir la sobrecarga y mejorar el rendimiento en entradas/salidas secuenciales intensivas. Se ha añadido el soporte experimental para volúmenes enormes ("huge folios") de hasta 2 MB. Se ha añadido un nuevo ioctl GET_CSUMS para obtener información sobre sumas de verificación en el espacio de usuario, por ejemplo, para la utilidad mkfs y optimización de deduplicación. Se ha mejorado el rendimiento de escritura secuencial en un 15% y de entrada/salida directa en un 59%.
- En el sistema de archivos Ext4 se ha rediseñado significativamente la implementación del mecanismo de "fast commit" para evitar la aparición de bloqueos mutuos y de competencia. Se ha añadido la exportación de estadísticas sobre instantáneas de inode a través de /proc/fs/ext4/*/fc_info. Se ha optimizado el rendimiento del cálculo de hashes de directorios (para nombres de 255 caracteres, la aceleración es casi del doble, 64 caracteres un 27%, 32 caracteres un 11%).
- En F2FS se ha añadido soporte para el retorno de errores fserror, permitiendo rastrear problemas con el sistema de archivos desde el espacio de usuario. Se ha reducido el tiempo pasado en el contexto de manejo de interrupciones.
- En Device Mapper (DM) se ha añadido un nuevo controlador dm-inlinecrypt para organizar el cifrado y descifrado transparente de dispositivos de bloques, utilizando dispositivos de hardware con función de cifrado en línea.
- Se ha propuesto documentación para agregar nuevos sistemas de archivos al núcleo.
- En NFS, el tamaño de bloque por defecto se ha incrementado a 4 MB en sistemas que tienen al menos 16 GB de RAM (para modificar manualmente el tamaño del bloque se puede usar /proc/fs/nfsd/max_block_size). Se ha añadido soporte para la delegación de control de directorio al cliente, lo que permite realizar operaciones en ese directorio durante un tiempo determinado sin verificar el cambio de estado en. servidor.
- En el servidor SMB se ha añadido soporte para archivos almacenados en formato comprimido, así como compresión de datos durante su transferencia a través de la red.
- En la nueva implementación de NTFS (ntfsplus), se ha añadido soporte para enlaces simbólicos de Windows y se ha asegurado un manejo adecuado de muchos tipos de daños en los metadatos.
- Se ha eliminado el backend fscache para la caché de datos del sistema de archivos EROFS (Enhanced Read-Only File System), que fue declarado obsoleto hace dos años.
- En el sistema de archivos Ceph se ha añadido soporte para el reinicio manual de sesiones de clientes.
- Se han realizado optimizaciones en el sistema de archivos 9P, que han acelerado el rendimiento en escenarios como la compilación de proyectos.
- Se han añadido flags al sistema de llamadas file_getattr() para obtener información sobre la consideración de mayúsculas y minúsculas en el sistema de archivos. El flag FS_XFLAG_CASEFOLD indica que la comprobación de nombres de archivos se realiza sin tener en cuenta las mayúsculas, mientras que el flag FS_XFLAG_CASENONPRESERVING indica que al crear nuevos nombres de archivos no se conserva información sobre las mayúsculas. Estos flags pueden aplicarse en clientes NFS que funcionan sin distinción de mayúsculas.
- Se ha añadido el flag O_EMPTYPATH al sistema de llamadas openat2(), permitiendo pasar una ruta de archivo vacía. En este caso, la ruta del archivo a abrir se determina en función del descriptor de archivo proporcionado.
- Se ha añadido el flag OPENAT2_REGULAR al sistema de llamadas openat2(), permitiendo abrir solo archivos regulares (al intentar abrir un archivo especial, como un socket, canal o dispositivo, se devolverá un error EFTYPE).
- Memoria y servicios del sistema
- Se ha implementado el mecanismo USB4STREAM para la transmisión de datos entre computadoras conectadas por cable a través de puertos USB4. Se ha añadido el dispositivo /dev/tbstreamX, a través del cual se pueden leer y escribir datos utilizando las funciones estándar read() y write() de manera similar a la lectura y escritura en archivos. Por ejemplo, en un host se puede enviar información con el comando «echo hello > /dev/tbstream0», y en el otro se puede leer con el comando «cat /dev/tbstream0». El mecanismo USB4STREAM se puede combinar con la capacidad de establecer una conexión de red a través de cable USB4 (thunderbolt_net) o utilizarse por separado en caso de necesidad de transmisión de datos entre aplicaciones que no admiten sockets de red.
- Se ha incluido la segunda serie de cambios para terminar el soporte de los procesadores i486. Se han eliminado más de 13 líneas de código relacionadas con la emulación del bloque para cálculos de punto flotante para procesadores sin FPU. Se ha eliminado el soporte para procesadores i486 sin operaciones de hardware CX8 (comparar y cambiar 8 bytes) y TSC (contador de ciclos de CPU, utilizado en el planificador de tareas), cuyo código de emulación ha sido eliminado.
- Se ha declarado el soporte de los procesadores AMD Geode como huérfano (orphaned), utilizados en la computadora OLPC XO-1.
- Se ha añadido soporte para la actualización de la implementación del mecanismo Intel TDX (Extensiones de Dominio Confiables), utilizado para el cifrado de la memoria RAM de sistemas huéspedes. TDX se implementa en forma de un módulo de tiempo de ejecución de software especial que durante el arranque inicial es transferido por el BIOS de la memoria Flash a la memoria RAM. Se han añadido capacidades en el núcleo para gestionar este módulo y reemplazarlo por una versión más reciente en una sistema en funcionamiento sin necesidad de reiniciar.
- Se ha implementado un nuevo planificador de distribución de recursos GPU (Fair GPU scheduler), utilizado para determinar el orden de ejecución de trabajos en GPU enviados por procesos que utilizan GPU. En lugar de emplear la tradicional cola de solicitudes FIDO para la GPU, el nuevo planificador utiliza mecanismos de distribución justa de recursos, implementados teniendo en cuenta el planificador de tareas CFS (Completely Fair Scheduler), que aplica un plan de ejecución con un tiempo de transición para llevar a cabo el siguiente proceso. El efecto más notable del uso del nuevo planificador se observa al ejecutar tareas interactivas en paralelo que trabajan activamente con GPU. En el último momento antes del lanzamiento del kernel 7.2, se canceló la inclusión del Fair GPU scheduler y se revirtió al antiguo planificador FIFO debido a la necesidad de depurar una regresión que provocaba una disminución en el rendimiento y una carga del 100% en la GPU al iniciar ciertos juegos en Proton.
- Cambios en el subsistema eBPF: Se ha añadido la capacidad de adjuntar un programa BPF a varios puntos de trazado (tracepoint). A los programas BPF, vinculados a los puntos de trazado, se les ha añadido la posibilidad de acceder a la memoria de los componentes que funcionan en espacio de usuario, con un manejo adecuado de accesos a páginas de memoria no asignadas (page fault). Se ha añadido soporte para atributos tipo (log_buf, log_size, log_level y log_true_size) en la llamada al sistema bpf(), lo que permite unificar la transmisión de metadatos en todos los comandos BPF, sin limitarse a los comandos BPF_PROG_LOAD, BPF_BTF_LOAD y BPF_MAP_CREATE. Se ha eliminado la restricción de transmitir no más de 5 parámetros en las funciones BPF. Se ha añadido la posibilidad de acceder de forma segura a la memoria compartida bpf_arena sin temor a acceder a páginas de memoria no asignadas (page fault). Se ha implementado una nueva variante de la estructura BPF hash map que permite el cambio dinámico de tamaño.
- Se ha optimizado la generación de la salida "\/proc\/interrupts" con estadísticas de interrupciones, y se han modernizado las estructuras para almacenar contadores de interrupciones, además de añadir almacenamiento en caché.
- Se ha acelerado la generación del archivo "\/proc\/filesystems", utilizado en libselinux.
- En el programador de tareas se ha implementado soporte para el balanceo de carga entre núcleos de CPU, teniendo en cuenta los estados de la caché interna del procesador. El programador ahora intenta agrupar procesos que utilizan recursos comunes, como los hilos de un mismo proceso, para su uso en el contexto de la misma caché de nivel superior, lo que mejora la eficiencia de acceso a los datos al aumentar la probabilidad de encontrar en caché los datos necesarios.
- En el mecanismo SCHED_EXT, que permite utilizar BPF para crear programadores de CPU, se ha continuado la implementación de la capacidad para crear programadores anidados (sub-scheduler), mediante los cuales cada cgroup puede emplear su propio programador de tareas.
- Se ha continuado con la transferencia de cambios de la rama Rust-for-Linux relacionados con el uso del lenguaje Rust como segundo idioma para el desarrollo de controladores y módulos del núcleo (el soporte de Rust no está activado por defecto y no lleva a incluir Rust en el conjunto de dependencias de compilación obligatorias del núcleo). La posibilidad de utilizar Rust en el núcleo se ha implementado para la arquitectura s390. Se ha incluido el paquete 'zerocopy' con primitivos rápidos para el manejo de memoria en código en modo 'unsafe'.
- La versión mínima de la herramienta LLVM, necesaria para compilar el núcleo, se ha elevado a 17.0.1.
- En la biblioteca minimalista en C nolibc, incluida en los fuentes del núcleo de Linux y que proporciona un envoltorio sobre las llamadas del sistema básicas, se ha implementado soporte para las arquitecturas OpenRISC y PA-RISC de 32 bits.
- Se han realizado optimizaciones en la subsistema de intercambio (swap) que mejoran el rendimiento y reducen el consumo de memoria dentro del mismo, mediante la eliminación de sobrecostos al almacenar metadatos estáticos y la unificación del manejo de memoria anónima y compartida al usar folios. La reducción del consumo de memoria es bastante significativa, por ejemplo, al montar una partición de intercambio de 1 TB se observa una disminución del consumo de memoria de aproximadamente 512 MB.
- Se ha aumentado la eficacia del mecanismo de desalojo de memoria, que elimina o traslada a la partición de intercambio áreas de memoria para liberar memoria en caso de escasez en el sistema. En algunas cargas de trabajo, como la prueba de MongoDB usando YCSB (Yahoo! Cloud Serving Benchmark), se observa un aumento en el rendimiento de hasta el 30%.
- Se ha añadido el comando «make sbom» al sistema de compilación para generar listas SBOM (Software Bill Of Materials), que reflejan los componentes, bibliotecas y dependencias utilizados en la compilación actual del núcleo, así como la información sobre sus licencias, obtenida de los encabezados SPDX en los archivos de código.
- En la implementación de canales anónimos (pipe), se ha optimizado el trabajo con bloqueos (las operaciones de asignación de memoria se han sacado del ámbito del bloqueo), lo que ha incrementado la capacidad de los canales anónimos entre un 21% y un 48% y ha reducido la latencia entre un 17% y un 33%.
- Virtualización y seguridad
- En el mecanismo de distribución de memoria slab (slab allocator) se ha añadido la posibilidad de utilizar tokens de asignación de memoria (Allocation Token), implementados en el compilador Clang 22. Los tokens permiten etiquetar con identificadores únicos las operaciones de asignación de memoria y organizar una colocación separada de diferentes tipos de objetos para complicar la explotación de vulnerabilidades causadas por desbordamientos de búfer (al separar, el desbordamiento en un tipo de objeto no es tan fácil de utilizar para dañar otros tipos de objetos).
- El mecanismo AF_ALG, utilizado en la vulnerabilidad Copy Fail para modificar datos en la caché de páginas, ha sido declarado obsoleto y se prevé su eliminación en una de las próximas versiones. AF_ALG permite aprovechar aceleradores de hardware para cálculos criptográficos en el Crypto API del núcleo, pero se aplica en situaciones bastante específicas. En el núcleo 7.2 se eliminó el soporte para entrada/salida asíncrona, controladores antiguos y el mecanismo de zero-copy en la implementación de skcipher y aead. Solo se han dejado las implementaciones de software de algoritmos criptográficos, y se ha eliminado el soporte para aceleradores criptográficos de hardware en el crypto API del núcleo, ya que AF_ALG amplía significativamente la superficie de ataque sin ofrecer beneficios en rendimiento en comparación con la implementación de criptografía en el espacio del usuario. AF_ALG se utilizaba en la herramienta Cryptsetup, pero su soporte se eliminó en la reciente versión 2.8.7.
- En el mecanismo IMA (Integrity Measurement Architecture), que permite a un servicio externo verificar el estado de las subscisiones del núcleo para asegurarse de su autenticidad, se ha añadido soporte para exportar tablas internas con los resultados de las mediciones al espacio del usuario, eliminándolas de los búferes del núcleo para ahorrar memoria.
- En el módulo Landlock, que proporciona a los programas no privilegiados herramientas para restringir el uso de objetos del núcleo de Linux (jerarquías de archivos, sockets de red, ioctl, etc.), se ha añadido soporte para la gestión de acceso a sockets UDP, así como la opción de desactivar selectivamente la salida de registro sobre el bloqueo de objetos para evitar la saturación del registro con información irrelevante.
- El núcleo ha eliminado el uso de la función strncpy(), que copia un número especificado de bytes de una cadena de entrada. El uso de strncpy() creaba el riesgo de errores debido a la omisión del carácter nulo al final de la cadena o a un relleno adicional con ceros. En lugar de strncpy(), se recomienda utilizar las funciones strscpy() y strscpy_pad() para copiar cadenas que terminan con un carácter nulo, así como strtomem_pad(), memcpy_and_pad() y memcpy() para copiar cadenas de tamaño fijo conocido. El trabajo para eliminar el uso de strncpy() del núcleo comenzó en 2020 y requirió la aceptación de 362 cambios por parte de 70 desarrolladores.
- En el hipervisor KVM se ha añadido soporte para las extensiones Intel MBEC (Modo de Control de Ejecución Basado en Modo) y AMD GMET (Trampa de Ejecución en Modo Huésped), que permiten tratar por separado los derechos de ejecución de código para el núcleo y el espacio de usuario en sistemas huéspedes en las tablas de traducción de memoria. Anteriormente, las extensiones de virtualización de hardware de Intel y AMD permitían marcar las páginas de memoria como ejecutables con un único bit, utilizando una división de derechos para el núcleo y el espacio de usuario a nivel del hipervisor. El uso de MBEC y GMET permite excluir las verificaciones de autoridad por parte del hipervisor y reducir significativamente la intensidad del costoso paso de control desde el sistema huésped al hipervisor VMexit.
- Subsistema de red
- La implementación de la extensión TCP-AO (Opción de Autenticación TCP, RFC 5925) ha sido trasladada al uso de la nueva biblioteca criptográfica libcrypto, lo que ha permitido simplificar el código y mejorar la eficiencia operativa. TCP-AO permite verificar los encabezados TCP mediante códigos MAC (Código de Autenticación de Mensajes), utilizando algoritmos más modernos HMAC-SHA-1-96 y AES-128-CMAC-96 en lugar de la opción anterior TCP-MD5 basada en el obsoleto algoritmo MD5.
- El número de subflujos soportados para conexiones Multipath TCP (MPTCP) ha aumentado de 8 a 64.
- Continúa el trabajo de reducción del uso del bloqueo global rtnl_lock en la pila de red del núcleo.
- Se ha eliminado del núcleo la implementación de la pila de protocolos AppleTalk, que se utilizó en computadoras Apple desde 1985 y fue reemplazada por TCP/IP en los años 90. Además, se han eliminado componentes de la tecnología de transmisión de datos ATM no relacionados con PPPoATM, así como interfaces de red ARCnet basadas en buses ISA y PCMCIA, adaptadores Bluetooth con interfaz PCMCIA, aceleradores TLS Chelsea, código para la integración de TLS con sockmap y soporte para bandas de frecuencia de 5/10 MHz en la pila inalámbrica cfg80211/mac80211. Debido a problemas no solucionables con los bloqueos y la falta de mantenimiento, se ha eliminado una implementación específica de aceleración del procesamiento de TLS basada en TCP Offload Engine (se ha mantenido la implementación más común de TLS offload). Se ha desactivado y se ha programado para su eliminación el código de compatibilidad con x_tables de 32 bits en sistemas de 64 bits.
- El controlador pppoe ha añadido soporte para los mecanismos GRO (Generic Receive Offload) y GSO (Generic Segmentation Offload) para la aceleración de hardware en la reconstrucción y segmentación de paquetes. El uso de GRO y GSO permite aumentar significativamente el ancho de banda para el tráfico entrante; por ejemplo, en dispositivos MediaTek MT7621 con configuración de traducción de direcciones, el ancho de banda máximo aumentó de 130 Mbit/s a 630 Mbit/s.
- Hardware
- El controlador AMDGPU ha introducido soporte inicial para la tecnología HDMI 2.1 FRL (Fixed Rate Link), que permite la transmisión de video no comprimido con calidad 4K/120Hz y 8K/60Hz. Anteriormente, no se había podido implementar el soporte para HDMI 2.1 en controladores abiertos debido a los requisitos de licencia del HDMI Forum, pero ahora la empresa AMD ha logrado acordar dicha implementación.
- El controlador i915 ha añadido soporte para la configuración del color de fondo controlada por el controlador de pantalla. Se ha implementado el parámetro pin_params.needs_low_address.
- Se ha continuado trabajando en el controlador drm (Direct Rendering Manager) Xe para GPU basadas en la arquitectura Intel Xe, utilizada en las tarjetas gráficas Intel de la familia Arc y en gráficos integrados a partir de los procesadores Tiger Lake. Se ha agregado soporte inicial para la plataforma CRI (Crescent Island). Para plataformas dGPU, se ha implementado un controlador de sistema Xe3p.
- El controlador Nouveau ha resuelto problemas con la GPU NVIDIA GA100.
- El controlador v3d ha añadido la capacidad de gestionar el consumo de energía de la GPU v3D en placas Raspberry Pi.
- Se ha continuado la integración de los componentes del controlador Nova para las GPU NVIDIA, equipadas con firmware GSP, utilizadas desde la serie NVIDIA GeForce RTX 2000 basada en la microarquitectura Turing. El controlador está escrito en el lenguaje Rust. Se ha añadido soporte para las GPU NVIDIA GA100 y las series Hopper y Blackwell.
- Se ha añadido soporte para plataformas ARM, SoC y dispositivos: Apple t8122 (M3), Motorola Edge 30, Nothing Phone 3a, Google Pixel 3a XL, Qualcomm Dragonwing IPQ9650, Huawei Hawi, ZTE zx297520v3, Renesas R-Car M3Le, ASPEED AST27xx, Cortina Gemini, NXP i.MX6/8/9, NXP LX2160A, TI K3 AM62x.
Al mismo tiempo, la Fundación de Software Libre de América Latina ha creado una versión completamente libre del núcleo 7.2 — Linux-libre 7.2-gnu, purificado de elementos de firmware y controladores que contienen componentes no libres o secciones de código cuyo uso está restringido por el fabricante. En la versión 7.2 se ha realizado la limpieza de blobs de los nuevos controladores rt722-sdca y tac5xx2. Se ha actualizado el código de limpieza en los controladores amdgpu, nova core, qcom iris, q6v5, iwlwifi, amdxnda, adreno, r8152 y mt792x. Se han realizado ajustes en las interfaces para la carga de firmware. Se ha limpiado el nombre de los blobs en los archivos dts (devicetree) para chips ARM.
Fuente: opennet.ru
