Después de dos meses de desarrollo, Linus Torvalds presentó el lanzamiento del núcleo Linux 6.19. Entre los cambios más notables se encuentran: el subsistema Live Update Orchestrator, soporte para PCIe Link Encryption, la llamada al sistema listns, el modo Zero-Copy Receive en io_uring, soporte para la extensión MPAM de ARM, klp-build para la generación de parches en vivo, soporte para la arquitectura LoongArch32, QoS para s2idle, optimización del subsistema de auditoría, Intel LASS para protección contra Spectre, soporte para los hash SHA-3 y BLAKE2b, el mecanismo Confidential VMBus, optimizaciones TX en el subsistema de red y el protocolo CAN XL, API para aceleración de hardware en la salida HDR.
En el anuncio de la nueva versión, Linus informó que la próxima versión del núcleo llevará el número 7.0, dado que en la rama 6.x se han acumulado suficientes lanzamientos para cambiar el primer número en el número de versión (en su momento, el lanzamiento 6.0 se formó tras el 5.19). El cambio de numeración se lleva a cabo 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. Linus bromeó diciendo que le confunden los números grandes para los cuales no tiene suficientes dedos en las manos y los pies. Al mismo tiempo, formalmente hay razón para un cambio significativo en el número de versión, ya que a partir de el siguiente lanzamiento se hará soporte para Rust decidido pasar de características experimentales a funciones principales del núcleo.
La nueva versión incorpora 15657 correcciones de 2237 desarrolladores, el tamaño del parche es de 52 MB (los cambios afectaron a 13682 archivos, se añadieron 794649 líneas de código y se eliminaron 335498 líneas). En el lanzamiento anterior hubo 15035 correcciones de 2217 desarrolladores, el tamaño del parche fue de 45 MB. Aproximadamente el 40% de todos los cambios presentados en 6.19 están relacionados con controladores de dispositivos, alrededor del 13% de los cambios están relacionados con la actualización de código específico de arquitecturas de hardware, el 12% está vinculado al stack de red, el 5% a sistemas de archivos y el 3% a subsistemas internos del núcleo.
Las principales novedades en el núcleo 6.19 (1, 2, 3):
- Subsistema de disco, entrada/salida y sistemas de archivos
- En Btrfs los procesos de verificación de FS (scrub) y reemplazo de dispositivos ya no bloquean la transición del sistema a modo de suspensión (antes de dormir se guarda el estado de la verificación scrub; después de despertar, la verificación scrub continúa y se reinicia la operación de reemplazo de dispositivos). En la implementación de RAID56 se ha añadido soporte para bloques cuyo tamaño supera el tamaño de una página de memoria. Se ha realizado la preparación para el soporte de fscrypt. Se ha mejorado el rendimiento del trabajo con bloqueos al realizar operaciones relacionadas con la reserva de espacio. Se ha añadido soporte de la operación ioctl de apagado, que permite poner el sistema de archivos en un estado donde se intentan completar las operaciones ya en ejecución, pero se bloquean todas las nuevas operaciones.
- En el sistema de archivos Ext4 incluida soporte para bloques cuyo tamaño excede el tamaño de página de memoria (>4KB en sistemas x86). El uso de bloques grandes permite aumenta el rendimiento de las operaciones de escritura en búfer en un promedio del 50%, pero reduce el rendimiento de la entrada/salida directa debido al aumento del tiempo de cálculo de las sumas de verificación. En la nueva versión también agregados optimizaciones que aumentan el ancho de banda durante la desfragmentación en línea.
- En la subsistema FUSE se mejoró el soporte de lectura en búfer al utilizar grandes folios de páginas de memoria (folios grandes). A través de iomap se implementó la posibilidad de rastrear folios parcialmente actualizados para cargar solo los datos que faltan en el búfer.
- En VFS se agregó soporte para la delegación de gestión de directorios recuperable, permitiendo implementar en NFS la transferencia de la gestión de directorios del servidor al cliente, de modo que el cliente NFS sin consultas al servidor NFS pueda rastrear el estado del directorio basado en la caché local. Si otro cliente NFS realiza cambios relacionados con este directorio, la delegación de la gestión será revocada para el primer cliente.
- Para NFS se ha añadido se soporta la lectura en modo de entrada/salida directa. Implementados configuraciones /sys/kernel/debug/nfsd/io_cache_read y /sys/kernel/debug/nfsd/io_cache_write para gestionar la activación de la caché y las operaciones de entrada/salida directa, la manipulación de estos ajustes permite reducir la sobrecarga del lado del cliente NFS al realizar grandes operaciones de entrada/salida.
- En NTFS se implementó el soporte de la operación ioctl de apagado, se incluyen por defecto las opciones de montaje acl y prealloc, se agregó soporte para tiempos anteriores al 1 de enero de 1970.
- Para dispositivos de bloque y sistemas de archivos activado por defecto, caché de objetos "bio" (Entrada/Salida de Bloques), que definen las operaciones de entrada/salida activas.
- Memoria y servicios del sistema
-
En el núcleo incluida sub-sistema Orquestador de Actualización en Vivo (LUO), que permite reiniciar y actualizar completamente el núcleo sin detener el funcionamiento y sin perder el estado del sistema, dispositivos y procesos. El subsistema LUO se basa en el mecanismo previamente agregado al núcleo KHO (Kexec HandOver) y además de la posibilidad de iniciar un nuevo núcleo a partir de uno antiguo sin pérdida del estado del sistema, resuelve problemas como la conservación del estado de los dispositivos y la memoria operativa, así como garantizar la continuidad de las operaciones relacionadas con DMA y el manejo de interrupciones. El estado se conserva hasta el cambio al nuevo núcleo y se restaura después de la activación del nuevo núcleo sin interrumpir las operaciones continuas con los dispositivos que realiza el sistema y las aplicaciones en el espacio de usuario.
-
Se añadió la llamada del sistema listns() para mostrar una lista de los espacios de nombres existentes en el sistema sin necesidad de recorrer /proc//ns/ para todos los procesos.
Al sistema de entrada/salida asíncrona io_uring se le ha añadido soporte para la colocación de elementos de diferentes tamaños en la cola de envío (SQE, Submission Queue Entry), de manera similar a cómo se permitió en la versión anterior mezclar el tamaño del contenido de la cola de resultados (CQE, Completion Queue Event). Antes de esto, todos los elementos de la cola debían tener un único tamaño, lo que provocaba un consumo excesivo de memoria debido a la necesidad de utilizar el tamaño máximo para todos los elementos en la cola.
En io_uring también se ha añadido soporte para el mecanismo zcrx (Zero-Copy Receive) para recibir datos sin copia entre el núcleo y el espacio de usuario. Se ha añadido soporte para solicitudes de disposición de memoria para las colas SQ (Submission Queue) y CQ (Completion Queue), lo que permite obtener información sobre el tamaño del búfer circular, necesaria al realizar la asignación de memoria de usuario mediante las banderas IORING_SETUP_NO_MMAP y IORING_MEM_REGION_TYPE_USER.
Para un trazado de pila rápido utilizando utilidades como perf, se ha añadido soporte para el formato SFrame con información sobre la desenrollada de la pila de llamadas (unwind). SFrame ya es compatible con GCC y binutils, no causa una disminución del rendimiento y, a diferencia del formato DWARF, contiene solo el conjunto mínimo de información necesario para el trazado de pila.
-
en la utilidad perf se ha añadido soporte para descripciones unificadas de métricas y eventos en formato JSON, así como desenrollado diferido (deferred unwinding) de la pila de llamadas en el espacio de usuario.
Para procesadores AMD se ha implementado un mecanismo de sustitución de datos en caché que permite a los dispositivos de entrada/salida insertar datos directamente en la caché L3 de la CPU sin necesidad de colocarlos primero en la RAM.
Se ha añadido soporte para MPAM (Particionamiento y Monitoreo de Recursos del Sistema de Memoria), extensiones de la arquitectura del conjunto de instrucciones ARMv8-A para etiquetar cada acceso a la memoria con un identificador de sección (PARTID, Partition ID) y un identificador de grupo de monitoreo (PMG, Monitoring Group ID). En relación con el PARTID, se puede limitar el consumo de recursos, como el ancho de banda de memoria o el tamaño de la caché, para que un grupo de tareas no consuma todos los recursos. En el contexto de monitoreo, la combinación de PMG y PARTID puede utilizarse para rastrear el consumo de recursos de memoria bajo ciertos tipos de carga.
En caso de terminación anormal del proceso después de recibir la señal, otro proceso que tenga el pidfd del proceso finalizado ahora puede determinar el número de la señal que provocó la finalización del proceso.
Se ha revisado la implementación de secuencias reiniciables (secuencias reiniciables), que permiten a las aplicaciones organizar una ejecución pseudo-atómica ininterrumpida de un grupo de instrucciones (en caso de interrupción por otro hilo, se intenta nuevamente ejecutar la secuencia). La nueva implementación ofrece un mayor rendimiento.
-
Para Programas BPF se han implementado instrucciones BPF_JMP, BPF_X y BPF_JA para realizar saltos indirectos a una posición específica de la tabla de saltos. Se ha añadido el concepto de punteros dinámicos (dynptr), que permiten leer datos de archivos estructurados. Se ha añadido la capacidad de adjuntar varios bytes de metadatos a paquetes de red.
Módulos en Python, utilizados para procesar la documentación del núcleo, se han movido a un directorio separado tools/lib/python.
-
Se agregó la función mempool_alloc_bulk() para la asignación segura de elementos del pool de memoria para varios objetos a la vez.
-
Continuado transferencia de cambios de la rama Rust-for-Linux, relacionados con el uso de el lenguaje Rust como segundo lenguaje para desarrollar controladores y módulos del núcleo (el soporte para Rust no está activado por defecto y no lo convierte en una de las dependencias de compilación obligatorias del núcleo). En la nueva versión, se incluye en el núcleo una librería "syn" con un analizador de código Rust que simplifica la escritura de macros complejas. Se han ampliado las capacidades de las bibliotecas kernel, pin-init y rbtree. Se ha añadido la biblioteca num con un tipo Integer para manipular números enteros. En el macro module! se ha añadido soporte para parámetros enteros. Se ha implementado la posibilidad de especificar parámetros al cargar módulos del núcleo escritos en Rust. Se han implementado abstracciones para subsistemas I2C y PWM (Modulación por ancho de pulso).
-
Se añadió macro at_least (por ejemplo, param[at_least 7], que indica el tamaño mínimo permitido del arreglo pasado a la función. Si se pasa un arreglo con menos elementos a la función, el compilador mostrará una advertencia.
-
En la composición activado script klp-build para generar módulos del núcleo que realicen cambios en un núcleo en funcionamiento (livepatch), basado en un archivo de parche. Se han realizado cambios en la utilidad objtool, necesarios para crear parches en vivo.
-
En Linux en modo usuario (ejecución del núcleo como proceso de usuario) se ha añadido soporte limitado para multiprocesamiento, pero los hilos dentro de un mismo proceso aún no pueden ejecutarse simultáneamente. Comenzó portación de Linux en modo usuario a la biblioteca nolibc.
-
Se ha añadido soporte para la arquitectura LoongArch32 (LA32R, LA32S) además de LoongArch64.
-
Se ha añadido posibilidad de establecer límites de QoS en la intensidad de activación del procesador en modo de ahorro de energía s2idle (Suspend-To-Idle), que congela la ejecución de procesos en el espacio de usuario, pero mantiene activos algunos controladores en el núcleo.
-
Se ha añadido soporte para la gestión de tablas de páginas de memoria para controladores IOMMU (Unidad de Gestión de Memoria de Entrada-Salida), que realiza la traducción de direcciones virtuales visibles para el dispositivo hardware en direcciones físicas, con la posibilidad de filtrar operaciones DMA por direcciones virtuales, así como limitar y aislar operaciones de entrada-salida.
En los eventos de trazado de llamadas al sistema se ha implementado la posibilidad de leer búferes del espacio de usuario e incluir su contenido (por ejemplo, nombres de archivos) en el resultado de la trazado.
-
**Páginas de guardia de memoria(( (guard page), cuyo acceso provoca una excepción y el cierre abrupto del proceso (SIGSEGV), ahora se marcan con una etiqueta especial en el archivo /proc/PID/smaps.
-
Se ha añadido posibilidad de gestionar grandes páginas de memoria (página grande transparente) en la memoria privada de dispositivos zonificados.
-
En el dispositivo zram, utilizado para el almacenamiento comprimido de la partición de intercambio en memoria, se ha implementado soporte para la expulsión de varias estructuras 'bio' (Block I/O) en modo por lotes (writeback batching).
Se ha incluido la fuente «Terminus 10×18», que mejora la legibilidad de la información desde la consola en pantallas de laptops con resolución media (1440×900).
-
Significativamente optimizado el funcionamiento del subsistema de auditoría se observa una reducción de costos operativos en un 50%.
-
- Virtualización y seguridad
- Se ha añadido soporte para la capacidad proporcionada por los procesadores Intel para separación separación del espacio de direcciones lineales (LASS, separación del espacio de direcciones lineales), que permite separar físicamente los rangos de direcciones del espacio de usuario y del núcleo para aumentar la seguridad. El espacio de direcciones se separa por el bit más significativo de la dirección: la mitad del espacio de direcciones con el bit más significativo establecido se utiliza para el núcleo, y la parte inferior se utiliza para el espacio de usuario. En una etapa temprana de la ejecución de instrucciones (en la fase previa a la ejecución especulativa), se realiza una verificación de la validez del acceso del espacio de usuario a las direcciones con el bit más significativo establecido y viceversa. Esta separación permite bloquear las filtraciones de memoria del núcleo hacia el espacio de usuario a través de canales auxiliares, incluso durante la ejecución especulativa de instrucciones, lo que permite aplicar LASS para proteger contra ataques de tipo Meltdown y Spectre, sin incurrir en grandes costos operativos.
- Se agregó la posibilidad de habilitar extensiones aumentando la seguridad del bus PCI Express – PCIe Link Encryption y PCIe Device Authentication, que permiten autenticar y cifrar el canal de comunicación entre un dispositivo PCIe y una máquina virtual, protegida mediante mecanismos de Intel TDX (Extensiones de Dominio Confiable) y AMD SEV-SNP (Paginación Anidada Segura). Las tecnologías implementadas no permiten interceptar, analizar y modificar datos en el tráfico de DMA en presencia de acceso al sistema host u otros dispositivos.
- En la biblioteca criptográfica integrada se ha añadido se agregó soporte para los algoritmos SHA-3 (SHA3-224, SHA3-256, SHA3-384, SHA3-512), SHAKE128, SHAKE256 y BLAKE2b.
- Para los módulos LSM (Módulos de Seguridad de Linux) y, en particular, para SELinux, se ha implementado se agregó la capacidad de rastrear la creación de descriptores memfd para aplicar políticas de seguridad a los objetos relacionados.
- En el módulo LSM IPE (Aplicación de Políticas de Integridad), que define la política general de integridad para todo el sistema, se agregó soporte para la bandera AT_EXECVE_CHECK en la función execveat(), que incluye la verificación de la integridad del script antes de que sea ejecutado por el intérprete.
- Se añadieron los primitivos scoped_user_read_access(), scoped_user_write_access y scoped_user_rw_access() para el acceso limitado a los datos en el espacio de usuario con protección contra ataques especulativos.
- Se ha añadido soporte para el mecanismo Confidential VMBus, utilizado en el hipervisor HyperV para una interacción segura entre el sistema huésped, operando en modo confidencial (con cifrado de memoria y aislamiento de registros basados en tecnologías AMD SNP e Intel TDX), y el paravisor, que se encarga de acceder a dispositivos que manejan datos confidenciales.
- Se ha añadido la capacidad de transmitir información sobre un proceso que ha finalizado de forma anómala (para generar un coredump) a través del mecanismo pidfd. El identificador PIDFD está vinculado a un proceso específico y no cambia, mientras que el PID puede estar asociado a otro proceso después de que el proceso actual relacionado con ese PID haya terminado. El uso de pidfd permite bloquear la sustitución ataques? de un proceso suid que ha finalizado de forma anómala por otro proceso, provocando una condición de carrera justo después de que el núcleo comienza a manejar el fallo, pero antes de que el controlador en el espacio de usuario valide los parámetros del proceso.
- Subsistema de red
- En la subred han realizado optimizaciones para aumentar la eficiencia de la transmisión de datos (TX). La eliminación del bloqueo por spin en la función __dev_queue_xmit() y el uso de una estructura llist sin bloqueos permitieron aumentar la productividad cuatro veces bajo alta carga y duplicar la intensidad de envío de paquetes mientras se reduce la carga del CPU a la mitad.
- Se ha proporcionado la posibilidad desactivación de límites de uso de memoria del sistema para sockets de red individuales (en este caso se utilizarán límites de memoria compartidos establecidos para contenedores individuales). Para administrar la desactivación de límites se propone el sysctl net.core.bypass_prot_mem y la bandera SK_BPF_BYPASS_PROT_MEM en la función bpf_setsockopt.
- Se ha añadido soporte para la extensión RFC 5837, que agrega a los mensajes ICMP Time Exceeded, devueltos al agotarse el tiempo de vida (TTL) de un paquete, información sobre las interfaces de red de entrada para obtener detalles más específicos durante el rastreo de rutas con la utilidad traceroute.
- Se ha añadido soporte para sondeo activo continuo (busy polling) en un hilo separado del núcleo con el fin de extraer descriptores de las colas RX/TX para aplicaciones que requieren mínimas latencias.
- Se ha añadido soporte para el protocolo CAN XL (Controller Area Network eXtended Length), en el cual el tamaño del campo de datos se ha incrementado a 2048 bytes para facilitar la integración con redes TCP/IP, se ha implementado una función de túnel de tramas Ethernet y se ha añadido soporte para modulación por ancho de pulso, que permitió transferir datos a velocidades de 20 Mbit/s o más.
- Se ha añadido soporte de la estructura sockaddr_unsized, una variante de la estructura sockaddr que utiliza un arreglo de elementos flexibles en lugar de un arreglo de tamaño fijo (sa_data[] en lugar de sa_data[14], que esencialmente se usaba para referencias a otras estructuras de mayor tamaño).
- Se ha añadido la funcionalidad de usar getsockname y getpeername a través del subsistema io_uring.
- Se han agregado sysctl net.ipv4.tcp_rcvbuf_low_rtt y net.ipv4.tcp_comp_sack_rtt_percent para la optimización de TCP.
- Se ha añadido soporte para enlaces con un ancho de banda de 1600 Gbps (1.6T).
- Hardware
- Se ha añadido una API al subsistema DRM (Direct Rendering Manager) para utilizar capacidades de hardware de conversión de color, permitiendo evitar la ejecución de tales conversiones a través de shaders o la ejecución de código en la CPU. Para la salida de contenido a un monitor HDR, complejas conversiones de color ahora pueden realizarse por el controlador de pantalla en la etapa antes y después de la mezcla de capas (blending), en lugar de la composición programática del contenido en el búfer de visualización final. Además de reducir el costo y el consumo de energía al organizar la salida en HDR, la funcionalidad propuesta puede utilizarse para una correcta reproducción del color en editores de video o imágenes.
- Se añadió controlador ethosu para NPU Arm Ethos U65 y U85, diseñado para la aceleración de hardware de la ejecución de modelos de IA.
- Se ha añadido soporte para la mejora de nitidez de imagen (Sharpening) en el controlador i915 para GPU Lunar Lake y posteriores.
- Se ha continuado 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 desde los procesadores Tiger Lake. Se ha añadido soporte inicial para la arquitectura Xe3P, utilizada en GPU Crescent Island y en la familia de procesadores con gráficos integrados Nova Lake.
- El controlador AMDGPU ha implementado soporte completo para las tarjetas gráficas AMD de la familia GCN 1.0 'Southern Island' y 1.1 'Sea Islands', para las cuales anteriormente se utilizaba el controlador Radeon. El controlador AMDGPU ha alcanzado paridad en capacidades con el controlador Radeon y se ha activado para las GPU mencionadas por defecto. Las tarjetas GCN 1.x se produjeron desde 2012 hasta 2019 y abarcan modelos como Radeon HD 77xx/78xx/79xx/87xx/88xx/89xx, Radeon R9 280, FirePro W4000-W9000, Radeon Sky 700/900, Radeon R9 265/270/370, Radeon R9 290/390, HD 7790/8870 y otras tarjetas gráficas de las familias Radeon Rx 200/Rx 300. Además de aumento el rendimiento promedio ha aumentado en un 24%, la transición a AMDGPU ha permitido implementar soporte para la API gráfica Vulkan 1.3 en estas GPU. Además, AMDGPU ahora incluye soporte para conectores analógicos y Video Coding Engine 1.0, y se utiliza por defecto el stack DC (Display Core) para GPU basadas en la microarquitectura Bonaire (Radeon HD 7790).
- En el controlador Nouveau se ha implementado se añadió soporte para el acelerador de hardware NVJPG, presente en SoC Tegra210.
- En el controlador Panthor se ha añadido se añadió soporte para GPU Mali-G1 y un soporte inicial para el chip MediaTek MT8196.
- Se ha añadido se agregó soporte para la subsistema de audio de los chips Intel Nova Lake S, laptops HP con HDA CS35L41, así como interfaces de audio CIX IPBLOQ HD y Onkyo SE-300PCIE.
- Se ha continuado la integración de componentes del controlador Nova para GPU NVIDIA, que están equipados con firmware GSP utilizados desde la serie NVIDIA GeForce RTX 2000 basada en la microarquitectura Turing. El controlador está escrito en Rust. En esta nueva versión se ha comenzado a trabajar en RPC y se ha completado la implementación de la carga del coprocesador GSP (GPU System Processor).
- Se ha añadido se incorpora soporte para plataformas ARM, SoC y dispositivos: Bananapi r4 pro, LinkEase EasePi R1, Qualcomm MSM8937 (Snapdragon 430), Renesas R-Car X5H, FriendlyElec NanoPi R76S, TI AM62L, Black Sesame Technologies C1200, Aspeed AST2600, Genio 1200 EVK, grinn geniosbc-510/700, Tanix TX9 Pro, Radxa Dragon Q6A, Tinker Board 3/3S, Aquila AM69, phyBOARD-Segin-i.MX91, i.MX 95 Verdin Evaluation Kit, Toradex SMARC iMX95, VIDIA Jetson Nano 2GB, Renesas rz/g3s, Indiedroid Nova, 24 variantes de placas Enclustra Mercury.
- Se ha añadido soporte para smartphones y tabletas basados en SoC Mediatek MT6582 (Alcatel yarisxl), Nvidia Tegra124 (Xiaomi Mi Pad) y Qualcomm MSM8939 (ASUS ZenFone 2). También se ha añadido soporte para portátiles con SoC Qualcomm sdm850, como el Huawei MateBook E 2019.
- Se ha añadido soporte para SoC y placas basadas en la arquitectura RISC-V: OrangePi R2S, OrangePi RV, Anlogic dr1v90, Tenstorrent Blackhole.
Al mismo tiempo, el Fondo Latinoamericano de Software Libre formó una variante el núcleo completamente libre 6.19 — Linux-libre 6.19-gnu, limpio de elementos de firmware y controladores que contienen componentes o partes de código no libres, cuya aplicación es limitada por el fabricante. En la versión 6.19, se eliminó el código para cargar firmware binarios de la subsistema de audio SDCA. Se actualizó el código para limpiar los blobs en los controladores Intel XE, Nova-Core, Qualcomm Iris, Venus y Q6V5, TI PRUeth, Intel iwlwifi, Marvell mwifiex, FourSemi fs210x, Realtek rt1320 y los códecs de audio TI tas2783. Se llevó a cabo la limpieza de los nombres de blobs en los archivos dts (devicetree) para chips ARM. Se cesó la limpieza del controlador STM C8SECTPFE DVB, eliminado del núcleo.
Fuente: linux.org.ru
