Después de dos meses de desarrollo, Linus Torvalds presentó el lanzamiento del núcleo Linux 6.7. Entre los cambios más destacados se incluyen: la integración del sistema de archivos Bcachefs, la cesación del soporte para la arquitectura Itanium, la capacidad de Nouvea para funcionar con firmwares GSP-R, soporte para encriptación TLS en NVMe-TCP, la posibilidad de utilizar excepciones en BPF, soporte para futex en io_uring, optimización del rendimiento del planificador fq (Fair Queuing), soporte para la extensión TCP-AO (TCP Authentication Option) y la posibilidad de limitar las conexiones de red en el mecanismo de protección Landlock, así como un control de acceso al namespace de usuario y io_uring a través de AppArmor.
En la nueva versión se han aceptado 18405 correcciones de 2066 desarrolladores, el tamaño del parche es de 72 MB (los cambios afectaron a 13467 archivos, se añadieron 906147 líneas de código y se eliminaron 341048 líneas). En la entrega anterior hubo 15291 correcciones de 2058 desarrolladores, el tamaño del parche fue de 39 MB. Alrededor del 45% de todos los cambios presentados en 6.7 están relacionados con controladores de dispositivos, aproximadamente el 14% son actualizaciones de código específico de arquitectura de hardware, el 13% 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 6.7:
- Subsistema de disco, entrada/salida y sistemas de archivos
- En el núcleo se ha incluido el código del sistema de archivos Bcachefs, que intenta lograr un nivel de rendimiento, fiabilidad y escalabilidad similar al de XFS, combinado con elementos de funcionalidad avanzada presentes en Btrfs y ZFS. Por ejemplo, Bcachefs soporta capacidades como la inclusión de múltiples dispositivos en una partición, arreglos de almacenamiento en capas (una capa inferior con datos de uso frecuente basados en SSD rápidos y una capa superior con datos menos solicitados de discos duros), replicación (RAID 1/10), almacenamiento en caché, compresión de datos transparente (modos LZ4, gzip y ZSTD), instantáneas, verificación de integridad mediante sumas de verificación, almacenamiento de códigos de corrección de errores de Reed-Solomon (RAID 5/6), y almacenamiento de información encriptada (utilizando ChaCha20 y Poly1305). En términos de rendimiento, Bcachefs supera a Btrfs y otros sistemas de archivos basados en Copy-on-Write, demostrando una velocidad de operación cercana a Ext4 y XFS.
- En el sistema de archivos Btrfs se introdujo un modo simplificado de cuotas que permite lograr un mayor rendimiento al rastrear extensiones solo en la subcarpeta en la que se crean, lo que simplifica enormemente los cálculos y mejora el rendimiento, pero no permite contabilizar extensiones compartidas entre varias subcarpetas.
- Btrfs ha añadido una nueva estructura de datos llamada "stripe tree", adecuada para la mapeo lógico de extensiones en situaciones donde el mapeo físico no coincide en diferentes dispositivos. Esta estructura está actualmente utilizada en implementaciones RAID0 y RAID1 para dispositivos de bloques zonificados. En el futuro, se planea usar esta estructura también en RAID de niveles más altos, lo que permitirá resolver varios problemas existentes en la implementación actual.
- En el sistema de archivos Ceph se implementó el soporte para la mapeo de identificadores de usuarios de sistemas de archivos montados, aplicados para asociar archivos de un usuario específico en una partición externa montada con otro usuario en el sistema actual.
- En efivarfs se añadió la posibilidad de especificar uid y gid al montar para permitir la modificación de variables UEFI por procesos que se ejecutan sin privilegios de root.
- En exFAT se añadieron llamadas ioctl para leer y modificar atributos del sistema de archivos. Se añadió la gestión de directorios de tamaño cero.
- En F2FS se implementó la posibilidad de utilizar bloques de tamaño 16K.
- El mecanismo de montaje automático autofs fue actualizado para utilizar la nueva API de montaje de particiones.
- En OverlayFS se propusieron opciones de montaje "lowerdir+" y "datadir+". Se añadió soporte para el montaje anidado de OverlayFS con xattrs.
- En XFS se optimizó la carga en el CPU en el código de distribución de bloques en tiempo real. Se garantizó la posibilidad de realizar simultáneamente operaciones de lectura y FICLONE.
- El código EXT2 fue actualizado para utilizar folios de páginas de memoria.
- Memoria y servicios del sistema
- Se suspendió el soporte para la arquitectura ia64, utilizada en los procesadores Intel Itanium, cuya venta se detuvo completamente en 2021. Los procesadores Itanium fueron presentados por Intel en 2001, pero la arquitectura ia64 no pudo competir con AMD64, principalmente debido al mayor rendimiento de AMD64 y a una transición más fluida desde procesadores x86 de 32 bits. En consecuencia, los intereses de Intel se desplazaron hacia los procesadores x86-64, quedando Itanium relegado. servidores HP Integrity, para el cual se detuvo la aceptación de pedidos hace tres años. El código para soportar ia64 se eliminó del núcleo principalmente debido a la larga falta de soporte para esta plataforma, aunque Linus Torvalds expresó su disposición a restablecer el soporte para ia64 en el núcleo, pero solo si se encuentra un mantenedor que demuestre un soporte de calidad para esta plataforma fuera del núcleo principal durante al menos un año.
- Se añadió un parámetro de línea de comandos del núcleo ‘ia32_emulation’, que permite habilitar y deshabilitar el soporte de emulación en modo de 32 bits en núcleos construidos para la arquitectura x86-64 durante el arranque. Desde el punto de vista práctico, este nuevo parámetro permite compilar núcleos con soporte para la compatibilidad con aplicaciones de 32 bits, pero por defecto desactiva este modo para reducir la vector de ataque en el núcleo, ya que la API para garantizar la compatibilidad ha sido probada menos que las interfaces principales del núcleo.
- Se continúa la integración 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á activo por defecto y no obliga a incluir Rust entre las dependencias de compilación del núcleo). En la nueva versión, se realizó el cambio a la versión de Rust 1.73 y se propuso un conjunto de enlaces para trabajar con colas de trabajo (workqueues).
- Se ha proporcionado la posibilidad de usar el mecanismo binfmt_misc para añadir soporte para nuevos formatos de archivos ejecutables (por ejemplo, para ejecutar aplicaciones compiladas en Java o Python) dentro de espacios de nombres (namespace) no privilegiados.
- En el controlador cpuset de cgroup, que permite gestionar la asignación de núcleos de CPU al ejecutar una tarea, se ha asegurado la separación entre particionamiento local y remoto, que se diferencian en si el cgroup padre es una sección raíz válida o no. En cpuset también se han añadido nuevas configuraciones «cpuset.cpus.exclusive» y «cpuset.cpus.exclusive.effective» para la asignación exclusiva a la CPU.
- En el subsistema BPF se ha implementado el soporte para excepciones, que son manejadas como una salida urgente del programa BPF con la posibilidad de un desmantelamiento seguro de los marcos de pila. Además, en los programas BPF se permite el uso de punteros kptr en la asignación a la CPU.
- Se ha añadido en el subsistema io_uring el soporte para operaciones con futexes, así como nuevas operaciones: IORING_OP_WAITID (versión asíncrona de waitid), SOCKET_URING_OP_GETSOCKOPT (variante de getsockopt), SOCKET_URING_OP_SETSOCKOPT (variante de setsockopt) e IORING_OP_READ_MULTISHOT (operaciones de lectura múltiples que no se detienen hasta que hay datos o se llena el búfer).
- Se ha añadido la implementación de colas FIFO ligeras y unidireccionales, que requieren bloqueo en bucle solo para eliminar de la cola en el contexto del proceso y que no necesitan bloqueo en bucle para la adición atómica a la cola en cualquier contexto.
- Se ha añadido un búfer circular «objpool» con una implementación escalable de una cola de alto rendimiento para la asignación y devolución de objetos.
- Se ha añadido la parte inicial de cambios para implementar la nueva API futex2, que se distingue por su mayor rendimiento en sistemas NUMA, soporta tamaños diferentes de 32 bits y puede utilizarse en lugar de la llamada al sistema multiplexada futex().
- Para las arquitecturas ARM32 y S390x se ha añadido soporte para el conjunto de instrucciones BPF actual (cpuv4).
- Para la arquitectura RISC-V se ha implementado la posibilidad de utilizar el modo de verificación de Shadow-Call Stack disponible en Clang 17, destinado a protegerse contra la sobrescritura de la dirección de retorno de la función en caso de un desbordamiento de búfer en la pila. La esencia de la protección consiste en guardar, después de pasar el control a la función, la dirección de retorno en una «pila sombra» separada y recuperarla antes de salir de la función.
- Se ha añadido un nuevo modo inteligente de escaneo de páginas de memoria en el mecanismo de fusión de páginas idénticas en memoria (KSM: Kernel Samepage Merging), que rastrea las páginas que no se escanearon con éxito y reduce la intensidad de su re-escaneo. Se ha añadido una configuración en /sys/kernel/mm/ksm/smart_scan para activar el nuevo modo.
- Se ha añadido un nuevo comando ioctl PAGEMAP_SCAN, que al utilizarlo con userfaultfd(), permite determinar los hechos de escritura en un rango específico de memoria. Esta nueva opción, por ejemplo, puede utilizarse en el sistema para guardar y restaurar el estado de los procesos con CRIU o en sistemas anti-trampa de juegos.
- El sistema de ensamblaje ahora incluye por defecto la compilación de ejemplos del uso del subsistema perf, escritos como programas BPF, siempre que se disponga de un compilador Clang.
- Se ha eliminado la antigua capa videobuf, que se utilizaba para gestionar los framebuffers en el subsistema de medios y que fue reemplazada hace más de 10 años por la nueva implementación videobuf2.
- Virtualización y seguridad
- Se ha añadido a la subsistema fscrypt la capacidad de cifrar datos en bloques más pequeños que el tamaño del bloque en el sistema de archivos. Esto puede ser necesario para utilizar mecanismos de cifrado de hardware que solo admiten bloques pequeños (por ejemplo, controladores UFS que solo pueden utilizar bloques de 4096 pueden ser usados con sistemas de archivos de 16K).
- En el subsistema 'iommufd', que permite gestionar las tablas de páginas de memoria de entrada/salida IOMMU (Unidad de Gestión de Memoria de Entrada/Salida) a través de descriptores de archivo del espacio de usuario, se ha añadido el seguimiento de los datos aún no borrados de la caché (dirty) para operaciones DMA, lo cual es necesario para determinar la memoria con datos no borrados durante la migración de procesos.
- En el mecanismo Landlock, que permite restringir las interacciones de un grupo de procesos con el entorno externo, se ha añadido soporte para definir reglas de control de acceso a los sockets TCP. Por ejemplo, se puede crear una regla que solo permita las conexiones a través del puerto de red 443 para establecer conexiones HTTPS.
- Se ha añadido a la subsistema AppArmor la capacidad de gestionar el acceso al mecanismo io_uring y crear espacios de nombres de identificadores de usuario (user namespaces), lo que permite autorizar selectivamente el acceso a estas capacidades solo a ciertos procesos.
- Se ha añadido una API de certificación máquinas virtuales para confirmar la integridad del proceso durante su carga.
- En los sistemas LoongArch se ha implementado soporte para la virtualización utilizando el hipervisor KVM.
- Al usar el hipervisor KVM en sistemas RISC-V, se ha agregado soporte para la extensión Smstateen, que bloquea el acceso de la máquina virtual a los registros de la CPU que el hipervisor no soporta explícitamente. También se ha agregado soporte para usar la extensión Zicond en sistemas huéspedes, permitiendo realizar algunas operaciones enteras condicionales.
- En los sistemas huéspedes basados en arquitectura x86 que se ejecutan bajo KVM, se permite el uso de hasta 4096 CPU virtuales.
- Subsistema de red
- En el controlador NVMe-TCP (NVMe sobre TCP), que permite acceder a los dispositivos NVMe a través de la red (NVM Express over Fabrics) utilizando el protocolo TCP, se ha añadido soporte para el cifrado del canal de transmisión de datos utilizando TLS (utiliza KTLS y un proceso en segundo plano en el espacio de usuario tlshd para negociar la conexión).
- Se ha optimizado el rendimiento del planificador de paquetes fq (Fair Queuing), lo que ha permitido aumentar el ancho de banda en un 5% en cargas altas en la prueba tcp_rr (TCP Request/Response) y un 13% en flujos ilimitados de paquetes UDP.
- En el protocolo TCP se ha añadido la opción de usar las marcas de tiempo (TCP TS) con precisión de microsegundos (RFC 7323), lo que permite evaluar las latencias con mayor precisión y crear módulos de control de congestión más avanzados. Se puede habilitar usando el comando «ip route add 10/8 … features tcp_usec_ts».
- En la pila TCP se ha añadido soporte para la extensión TCP-AO (TCP Authentication Option, RFC 5925), que permite verificar los encabezados TCP mediante códigos MAC (Message Authentication Code), utilizando algoritmos más modernos HMAC-SHA1 y CMAC-AES-128 en lugar de la opción TCP-MD5 basada en el antiguo algoritmo MD5.
- Se ha añadido un nuevo tipo de dispositivos de red virtuales «netkit», cuya lógica de transmisión de datos se establece mediante un programa BPF.
- En KSMBD, que ejecuta un servidor SMB a nivel de núcleo, se ha añadido soporte para la conversión de nombres de archivos que contienen pares de sustitutos de caracteres compuestos.
- En NFS se ha mejorado la implementación de hilos con servicios RPC. Se ha añadido soporte para delegación de escritura (para NFSv4.1+). En NFSD se ha añadido soporte para un controlador netlink rpc_status. Se ha mejorado el soporte para clientes NFSv4.x durante la re-exportación a knfsd.
- Hardware
- En el módulo del núcleo Nouveau se ha añadido soporte inicial para los firmware GSP-RM, que se utilizan en las GPU NVIDIA RTX 20+ para trasladar las operaciones de inicialización y gestión de la GPU a un microcontrolador GSP (GPU System Processor) separado. El soporte para GSP-RM permite que el controlador Nouveau funcione a través de llamadas al firmware, en lugar de programar directamente las operaciones de interacción con el hardware, lo que simplifica significativamente la incorporación de soporte para nuevas GPU NVIDIA gracias a la utilización de llamadas ya preparadas para la inicialización y gestión del consumo energético.
- En el controlador AMDGPU se ha implementado soporte para GC 11.5, NBIO 7.11, SMU 14, SMU 13.0 OD, DCN 3.5, VPE 6.1 y DML2. Se ha mejorado el soporte para la carga sin costuras (sin parpadeo al cambiar de modo de video).
- En el controlador i915 se ha implementado soporte para los chips Intel Meteor Lake y se ha añadido una implementación inicial de Intel LunarLake (Xe 2).
- Se ha añadido soporte para canales de transmisión asimétricos, como se especifica en USB4 v2 (120/40G).
- Se ha añadido soporte para SoC ARM: Qualcomm Snapdragon 720G (utilizado en teléfonos inteligentes Xiaomi), AMD Pensando Elba, Renesas, R8A779F4 (R-Car S4-8), USRobotics USR8200 (utilizado en enrutadores y NAS).
- Se ha añadido soporte para el teléfono inteligente Fairphone 5 y plataformas ARM Orange Pi 5, QuartzPro64, Turing RK1, Variscite MX6, BigTreeTech CB1, Freescale LX2162, Google Spherion, Google Hayato, Genio 1200 EVK, RK3566 Powkiddy RGB30.
- Se ha añadido soporte para las placas RISC-V Milk-V Pioneer y Milk-V Duo.
- Se ha añadido soporte para las interfaces de audio de laptops HUAWEI suministradas con CPU AMD. Se ha añadido soporte para altavoces adicionales instalados en laptops Dell Oasis 13/14/16. Se ha añadido soporte para los altavoces integrados ASUS K6500ZC. Se ha añadido soporte para el indicador de silencio en las laptops HP 255 G8 y G10. Se ha añadido soporte para los controladores de audio acp6.3. Se ha añadido soporte para las interfaces profesionales de grabación de audio Focusrite Clarett+ 2Pre y 4Pre.
Simultáneamente, la Fundación de Software Libre de América Latina ha formado una versión completamente libre del núcleo 6.7 — Linux-libre 6.7-gnu, depurado de elementos de firmware y controladores que contienen componentes no libres o fragmentos de código cuya aplicación está restringida por el fabricante. En la versión 6.7 se ha actualizado el código de limpieza de blobs en varios controladores y subsistemas, por ejemplo, en los controladores amdgpu, nouveau, adreno, mwifiex, mt7988, ath11k, avs y btqca. Se ha eliminado el código de limpieza de los controladores localtalk y rtl8192u debido a su exclusión del núcleo. Se han eliminado componentes innecesarios de limpieza de los controladores xhci-pci, rtl8xxxu y rtw8822b, que se habían agregado por error. Se ha llevado a cabo una limpieza de nombres de blobs en archivos dts para la arquitectura Aarch64. Se han eliminado blobs en los nuevos controladores mt7925, tps6598x, aw87390 y aw88399.
Fuente: opennet.ru
