Tras dos meses de desarrollo, Linus Torvalds lanzó el núcleo. Linux 7.2. Entre los cambios más notables: mecanismo de transmisión de datos USB4STREAM, optimizaciones de rendimiento de btrfs, xfs y ext4, eliminación continua de código para soporte de CPU i486, capacidad para crear planificadores SCHED_EXT anidados, consumo de memoria reducido en el subsistema de intercambio, tuberías sin nombre aceleradas, soporte para extensiones Intel MBEC y AMD GMET en KVM, eliminación del protocolo AppleTalk, soporte inicial para HDMI 2.1 FRL en el controlador AMDGPU.
Principales novedades del kernel 7.2 (1, 2, 3):
- Subsistema de disco, E/S y sistemas de archivos
- En el mecanismo iomap, se ha eliminado una llamada adicional a la función memset para las iteraciones ya completadas en la función iomap_iter(), lo que, con una alta intensidad de E/S en unidades NVMe rápidas, aumentó el número de operaciones de entrada/salida por segundo (IOPS) en un 5 % en las pruebas realizadas al utilizar los sistemas de archivos ext4 y xfs.
- XFS ha sido declarado estable para la compatibilidad con dispositivos de almacenamiento por zonas (que dividen grupos de bloques o sectores en zonas, en las que solo se permiten adiciones secuenciales de datos, actualizando todo el grupo de bloques).
- Btrfs ahora admite folios grandes de forma predeterminada, lo que reduce la sobrecarga y mejora el rendimiento durante las operaciones de E/S secuenciales intensivas. Se ha añadido soporte experimental para folios enormes (hasta 2 MB). Se ha añadido una nueva llamada ioctl, GET_CSUMS, para recuperar información de suma de comprobación en el espacio de usuario, por ejemplo, para la utilidad mkfs y la optimización de la deduplicación. El rendimiento de escritura secuencial ha aumentado un 15 % y el rendimiento de E/S directa un 59 %.
- El mecanismo de "confirmación rápida" del sistema de archivos Ext4 se ha rediseñado significativamente para eliminar la contención y los interbloqueos. Se ha añadido la exportación de estadísticas de instantáneas de inodos a través de /proc/fs/ext4/*/fc_info. Se ha optimizado el rendimiento del cálculo de hash de directorios (casi duplicando la velocidad para nombres de 255 caracteres, un 27 % para nombres de 64 caracteres y un 11 % para nombres de 32 caracteres).
- F2FS ahora admite el retorno de error fserror, lo que permite supervisar los problemas del sistema de archivos desde el espacio de usuario. Se ha reducido el tiempo dedicado al manejo de interrupciones.
- Se ha añadido un nuevo controlador dm-inlinecrypt a Device Mapper (DM) para el cifrado y descifrado transparente de dispositivos de bloques mediante dispositivos de hardware con funcionalidad de cifrado en línea.
- Se ha proporcionado documentación sobre cómo agregar nuevos sistemas de archivos al núcleo.
- En NFS, el tamaño de bloque predeterminado se ha aumentado a 4 MB en sistemas con al menos 16 GB de RAM (puede usar /proc/fs/nfsd/max_block_size para cambiar manualmente el tamaño del bloque). Se ha añadido soporte para la delegación de directorios, lo que permite realizar operaciones con un directorio determinado durante un cierto período de tiempo sin comprobar los cambios de estado. servidor.
- El servidor SMB ahora admite archivos almacenados en formato comprimido, así como la compresión de datos durante la transmisión a través de la red.
- La nueva implementación de NTFS (ntfsplus) añade compatibilidad con enlaces simbólicos. Windows y se garantiza el manejo correcto de muchos tipos de corrupción de metadatos.
- Se ha eliminado el sistema de almacenamiento en caché fscache para datos EROFS (Enhanced Read-Only File System), que quedó obsoleto hace dos años.
- Ceph FS ahora admite el reinicio manual de las sesiones de cliente.
- El sistema de archivos 9P se ha optimizado para mejorar el rendimiento en escenarios como la compilación de proyectos.
- Se han añadido indicadores para obtener información sobre la distinción entre mayúsculas y minúsculas en el sistema de archivos a la llamada al sistema file_getattr(). El indicador FS_XFLAG_CASEFOLD indica que la comprobación de nombres de archivo no distingue entre mayúsculas y minúsculas, y el indicador FS_XFLAG_CASENONPRESERVING indica que no se conserva la información de mayúsculas y minúsculas al crear nuevos nombres de archivo. Estos indicadores se pueden utilizar en clientes NFS que no distinguen entre mayúsculas y minúsculas.
- Se ha añadido el indicador O_EMPTYPATH a la llamada al sistema openat2(), lo que permite pasar una ruta de archivo vacía. En este caso, la ruta al archivo que se está abriendo se determina en función del descriptor de archivo proporcionado.
- Se ha añadido el indicador OPENAT2_REGULAR a la llamada al sistema openat2(), que permite abrir únicamente archivos regulares (se devolverá un error EFTYPE si se intenta abrir un archivo especial, como un socket, una tubería o un dispositivo).
- Servicios de memoria y sistema.
- Se ha implementado el mecanismo USB4STREAM para la transmisión de datos entre ordenadores conectados mediante puertos USB4. Se ha añadido el dispositivo /dev/tbstreamX, que permite leer y escribir datos utilizando las funciones estándar read() y write(), de forma similar a la lectura y escritura de archivos. Por ejemplo, en un equipo se puede enviar información con el comando "echo hello > /dev/tbstream0" y en otro, leerla con el comando "cat /dev/tbstream0". El mecanismo USB4STREAM se puede combinar con la capacidad de establecer una conexión de red mediante un cable USB4 (thunderbolt_net) o utilizarse de forma independiente para transferir datos entre aplicaciones que no admiten sockets de red.
- Se ha incluido la segunda serie de cambios para eliminar la compatibilidad con los procesadores i486. Se han eliminado más de 13 líneas de código relacionadas con la emulación de la unidad de punto flotante para procesadores sin FPU. Se ha eliminado la compatibilidad con los procesadores i486 que no cuentan con las operaciones de hardware CX8 (comparación e intercambio de 8 bytes) ni TSC (contador de ciclos de CPU utilizado en el planificador de tareas), ya que se ha eliminado el código de emulación para estas.
- Se ha anunciado que el soporte para los procesadores AMD Geode utilizados en el ordenador OLPC XO-1 ha quedado obsoleto.
- Se ha añadido compatibilidad para actualizar la implementación de TDX (Trusted Domain Extensions) de Intel, un mecanismo utilizado para cifrar la memoria RAM del sistema invitado. TDX se implementa como un módulo de ejecución de software especial que la BIOS transfiere de la memoria flash a la RAM durante el arranque. El kernel ahora incluye funciones para gestionar este módulo y reemplazarlo por una versión más reciente en un sistema en funcionamiento sin necesidad de reiniciarlo.
- Se ha implementado un nuevo planificador de asignación de recursos de GPU (planificador de GPU justo). Este se utiliza para determinar el orden en que se ejecutan en la GPU las tareas enviadas por los procesos que utilizan la GPU. En lugar de utilizar la cola FIDO tradicional para las solicitudes de GPU, el nuevo planificador utiliza mecanismos de asignación de recursos justos basados en el planificador de tareas Completely Fair Scheduler (CFS), que utiliza un plan de lanzamiento con un tiempo de transición para el siguiente proceso. El efecto más notable del nuevo planificador se observa durante la ejecución paralela de tareas interactivas que utilizan intensivamente la GPU. En el último momento antes del lanzamiento del kernel 7.2, el planificador de GPU justo se desactivó y se revirtió al antiguo planificador FIFO debido a la necesidad de depurar una regresión que estaba causando una degradación del rendimiento y una utilización del 100 % de la GPU al ejecutar ciertos juegos en Proton.
- Cambios en el subsistema eBPF: Se agregó la capacidad de adjuntar un único programa BPF a múltiples puntos de rastreo. Los programas BPF adjuntos a puntos de rastreo ahora pueden acceder a la memoria de componentes del espacio de usuario, con un manejo correcto de páginas de memoria no asignadas (fallos de página). La llamada al sistema bpf() ahora admite atributos estándar (log_buf, log_size, log_level y log_true_size), lo que permite una transferencia de metadatos unificada en todos los comandos BPF, no limitados a BPF_PROG_LOAD, BPF_BTF_LOAD y BPF_MAP_CREATE. Se eliminó la limitación de pasar no más de 5 parámetros a las funciones BPF. Se agregó la capacidad de acceder de forma segura a la memoria compartida bpf_arena sin temor a acceder a páginas de memoria no asignadas (fallos de página). Se implementó una nueva versión de la estructura del mapa hash BPF, que permite el redimensionamiento dinámico.
- Se ha optimizado la generación de la salida "/proc/interrupts" con estadísticas de interrupciones, se han modernizado las estructuras para almacenar los contadores de interrupciones y se ha añadido un sistema de almacenamiento en caché.
- Se ha acelerado la generación del archivo "/proc/filesystems" utilizado en libselinux.
- El planificador de tareas ahora admite el equilibrio de carga entre los núcleos de la CPU, teniendo en cuenta el estado de la caché interna del procesador. El planificador intenta agrupar los procesos que utilizan recursos compartidos, como los subprocesos dentro de un mismo proceso, para que compartan la misma caché de alto nivel, lo que mejora la eficiencia del acceso a los datos al aumentar la probabilidad de encontrar los datos necesarios en la caché.
- El mecanismo SCHED_EXT, que permite utilizar BPF para crear planificadores de CPU, ha seguido implementando la capacidad de crear planificadores anidados (subplanificadores), lo que permite que cada cgroup utilice su propio planificador de tareas.
- Continuación de la migración de cambios desde la rama Rust-for-Linux, relacionado con el uso de Rust como segundo lenguaje para el desarrollo de controladores y módulos del kernel (el soporte para Rust no está habilitado por defecto y no incluye Rust como dependencia obligatoria de compilación del kernel). El soporte para Rust en el kernel se ha implementado para la arquitectura s390. Se incluye el paquete "zerocopy", que proporciona primitivas de memoria rápidas para código en modo "inseguro".
- La versión mínima del conjunto de herramientas LLVM necesaria para compilar el kernel se ha aumentado a 17.0.1.
- En la biblioteca C minimalista nolibc, suministrada con el código fuente del kernel. Linux y proporciona un marco para las llamadas básicas al sistema, compatible con las arquitecturas OpenRISC y PA-RISC de 32 bits.
- El subsistema de intercambio se ha optimizado para mejorar el rendimiento y reducir el consumo de memoria dentro del propio subsistema, eliminando la sobrecarga al almacenar metadatos estáticos y unificando la memoria anónima y compartida al usar tomos. La reducción de memoria es bastante significativa; por ejemplo, montar una partición de intercambio de 1 TB reduce el consumo de memoria en aproximadamente 512 MB.
- Se ha mejorado el rendimiento del mecanismo de desalojo de memoria, que elimina o mueve memoria al espacio de intercambio para liberar memoria cuando el sistema está bajo presión. En ciertas cargas de trabajo, como al probar MongoDB con YCSB (Yahoo! Cloud Serving Benchmark), se han observado mejoras de rendimiento de hasta un 30 %.
- Se ha añadido el comando "make sbom" al sistema de compilación para generar listas SBOM (Software Bill Of Materials) que reflejen los componentes, las bibliotecas y las dependencias utilizadas en la compilación actual del kernel, así como la información de licencia obtenida de los encabezados SPDX en los archivos de código.
- La implementación de las tuberías sin nombre se ha optimizado para el manejo de bloqueos (las operaciones de asignación de memoria se mueven fuera del ámbito del bloqueo), lo que ha aumentado el rendimiento de las tuberías sin nombre entre un 21 % y un 48 % y ha reducido la latencia entre un 17 % y un 33 %.
- Virtualización y seguridad
- El asignador de memoria ahora admite el uso de tokens de asignación, implementados en el compilador Clang 22. Los tokens de asignación permiten identificadores únicos para las operaciones de asignación de memoria y la asignación separada de diferentes tipos de objetos para dificultar la explotación de vulnerabilidades de desbordamiento de búfer (con la asignación separada, un desbordamiento de búfer en un tipo de objeto no se explota fácilmente para dañar otros tipos de objetos).
- El mecanismo AF_ALG, explotado en la vulnerabilidad Copy Fail para modificar datos en la caché de páginas, ha sido descontinuado y se eliminará en una versión futura. AF_ALG habilita aceleradores de hardware para cálculos criptográficos en la API Crypto del kernel, pero se utiliza en situaciones bastante específicas. En el kernel 7.2, se eliminó de AF_ALG la compatibilidad con E/S asíncrona, controladores heredados y el mecanismo de copia cero en las implementaciones skcipher y aead. Solo se conservan las implementaciones de software de algoritmos criptográficos, y se eliminó la compatibilidad con aceleradores criptográficos de hardware en la API Crypto del kernel, ya que AF_ALG amplía significativamente la superficie de ataque pero no proporciona ninguna ventaja de rendimiento en comparación con las implementaciones de criptografía en el espacio de usuario. AF_ALG se utilizaba en el kit de herramientas Cryptsetup, pero su compatibilidad se eliminó en la versión 2.8.7.
- El mecanismo IMA (Integrity Measurement Architecture), que permite a un servicio externo verificar el estado de los subsistemas del kernel para garantizar su autenticidad, se ha complementado con soporte para exportar tablas internas con resultados de medición al espacio de usuario y eliminarlas de los búferes del kernel para ahorrar memoria.
- En el módulo Landlock, que proporciona a los programas sin privilegios los medios para restringir el uso de objetos del kernel. Linux Se ha añadido compatibilidad con jerarquías de archivos, sockets de red, ioctl, etc., así como con el control de acceso a sockets UDP y la posibilidad de deshabilitar selectivamente la salida de información de bloqueo de objetos al registro para evitar que este se sature con información irrelevante.
- El kernel ha dejado de utilizar la función strncpy(), que copia un número específico de bytes de una cadena de entrada. El uso de strncpy() conllevaba el riesgo de errores debido a la ausencia de un carácter nulo al final de la cadena o al relleno adicional con ceros. En lugar de strncpy(), se recomienda utilizar las funciones strscpy() y strscpy_pad() para copiar cadenas terminadas en nulo, así como strtomem_pad(), memcpy_and_pad() y memcpy() para copiar cadenas de tamaño fijo conocido. El trabajo para dejar de utilizar strncpy() en el kernel comenzó en 2020 y requirió 362 confirmaciones de 70 desarrolladores.
- En el hipervisor KVM Se ha añadido compatibilidad con las extensiones Intel MBEC (Control de ejecución basado en modos) y AMD GMET (Trampa de ejecución en modo invitado), que permiten gestionar de forma independiente los derechos de ejecución del kernel y del espacio de usuario en los sistemas invitados mediante 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 solo bit, con una separación por software de los derechos del kernel y del espacio de usuario a nivel del hipervisor. El uso de MBEC y GMET elimina las comprobaciones de permisos del hipervisor y reduce significativamente las transferencias de control, que consumen muchos recursos, del sistema invitado al hipervisor VMexit.
- Subsistema de red
- La extensión TCP-AO (TCP Authentication Option, RFC 5925) se ha migrado a la nueva biblioteca criptográfica libcrypto, lo que simplifica el código y mejora su rendimiento. TCP-AO permite la verificación de encabezados TCP mediante códigos MAC (Message Authentication Code), utilizando los algoritmos más modernos HMAC-SHA-1-96 y AES-128-CMAC-96, reemplazando la opción TCP-MD5 disponible anteriormente, que se basaba en el algoritmo MD5 obsoleto.
- El número de subflujos admitidos para las conexiones TCP multipath (MPTCP) se ha incrementado de 8 a 64.
- Se siguió trabajando para reducir el uso del bloqueo global rtnl_lock en la pila de red del kernel.
- El kernel ha eliminado la implementación de la pila de protocolos AppleTalk, que se utilizó en los ordenadores Apple desde 1985 y fue reemplazada en la década de 1990 por TCP/IPAdemás, se han eliminado los componentes de la tecnología de transferencia de datos ATM no relacionados con PPPoATM, así como las interfaces de red ARCnet basadas en buses ISA y PCMCIA, los adaptadores Bluetooth con interfaz PCMCIA, los aceleradores TLS de Chelsea, el código para integrar TLS con sockmap y la compatibilidad con las bandas de frecuencia de 5/10 MHz en la pila inalámbrica cfg80211/mac80211. Debido a problemas de bloqueo sin resolver y a la falta de mantenedores, se ha eliminado una implementación específica de aceleración del procesamiento TLS basada en el motor de descarga TCP (se conserva la implementación de descarga TLS más común). El código de compatibilidad con tablas x_tables de 32 bits en sistemas de 64 bits se ha deshabilitado y está programado para su eliminación.
- El controlador PPPoE ahora admite los mecanismos GRO (Generic Receive Offload) y GSO (Generic Segmentation Offload) para la aceleración por hardware del reensamblaje y la segmentación de paquetes. El uso de GRO y GSO aumenta significativamente el rendimiento del tráfico entrante. Por ejemplo, en dispositivos MediaTek MT7621 configurados con un traductor de direcciones, el rendimiento máximo aumentó de 130 Mbit/s a 630 Mbit/s.
- Equipo
- El controlador AMDGPU ahora incluye soporte inicial para la tecnología HDMI 2.1 FRL (Fixed Rate Link), lo que permite la transmisión de vídeo sin comprimir a 4K/120Hz y 8K/60Hz. El soporte para HDMI 2.1 era difícil de encontrar en los controladores de código abierto debido a los requisitos de licencia del Foro HDMI, pero AMD ahora ha logrado una implementación similar.
- El controlador i915 ahora permite configurar el color de fondo del controlador de pantalla. Se ha implementado el parámetro pin_params.needs_low_address.
- Se continuó trabajando en el controlador Xe DRM (Direct Rendering Manager) para GPU basadas en la arquitectura Intel Xe, que se utiliza en las tarjetas gráficas y gráficos integrados de la serie Intel Arc, comenzando con los procesadores Tiger Lake. Se agregó soporte inicial para la plataforma CRI (Crescent Island). Se implementó un controlador de sistema para las plataformas dGPU Xe3p.
- El controlador Nouveau resuelve los problemas con la GPU NVIDIA GA100.
- El controlador v3d se ha actualizado para incluir la capacidad de gestionar el consumo de energía de la GPU v3D en las placas Raspberry Pi.
- Hemos continuado integrando componentes del controlador Nova para las GPU NVIDIA equipadas con el firmware GSP utilizado desde la serie NVIDIA GeForce RTX 2000 basada en la microarquitectura Turing. El controlador está escrito en Rust. Se ha añadido compatibilidad con las GPU de las series NVIDIA GA100, Hopper y Blackwell.
- Se agregó compatibilidad con placas, SoC y dispositivos ARM: 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 Latinoamericana de Software Libre creó una versión del kernel 7.2 completamente libre. Linux-libre 7.2-gnu, limpiado de elementos de firmware y controladores que contienen componentes no libres o secciones de código con alcance limitado por el fabricante. La versión 7.2 incluye una limpieza de blobs para los nuevos controladores rt722-sdca y tac5xx2. El código de limpieza para los controladores amdgpu, nova core, qcom iris, q6v5, iwlwifi, amdxnda, adreno, r8152 y mt792x ha sido actualizado. Se han ajustado las interfaces para cargar el firmware. Se han limpiado los nombres de blobs en los archivos devicetree (dts) para chips ARM.
Fuente: opennet.ru
