Lanzamiento del núcleo de Linux 6.19. El próximo núcleo será numerado 7.0

Después de dos meses de desarrollo, Linus Torvalds presentó el lanzamiento del núcleo Linux 6.19. Entre los cambios más notables están: 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 ARM MPAM, klp-build para generar parches en vivo, soporte para la arquitectura LoongArch32, QoS para s2idle, optimización del subsistema de auditoría, Intel LASS para proteger contra Spectre, soporte para los hashes SHA-3 y BLAKE2b, el mecanismo Confidential VMBus, optimizaciones TX en el subsistema de red, el protocolo CAN XL, API para la aceleración de hardware HDR.

En el anuncio de la nueva versión, Linus mencionó que el próximo lanzamiento del núcleo llevará el número 7.0, ya que en la rama 6.x se han acumulado suficientes lanzamientos para cambiar el primer dígito en el número de versión (en su momento, el lanzamiento 6.0 fue formado inmediatamente después de 5.19). El cambio de 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. Linus bromeó diciendo que se confunde con los números grandes para los cuales no tiene suficientes dedos en las manos y los pies. Al mismo tiempo, formalmente hay una razón para un cambio significativo en el número de versión, ya que a partir del próximo lanzamiento se ha decidido trasladar el soporte para Rust de experimental a las características principales del núcleo.

En la nueva versión se han incluido 15657 correcciones de 2237 desarrolladores, el tamaño del parche es de 52 MB (los cambios afectaron 13682 archivos, se añadieron 794649 líneas de código y se eliminaron 335498 líneas). En la versión anterior hubo 15035 correcciones de 2217 desarrolladores, con un tamaño de parche 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 son específicos de la actualización de código para arquitecturas de hardware, el 12% 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.19 (1, 2, 3):

  • Subsistema de disco, entrada/salida y sistemas de archivos
    • En Btrfs, los procesos de verificación de sistemas de archivos (scrub) y sustitución de dispositivos ya no bloquean la transición del sistema a modo de suspensión (se guarda el estado de la verificación scrub antes de entrar en suspensión; después de salir de la suspensión, la verificación scrub se reanuda y la operación de sustitución de dispositivos se inicia de nuevo). Se ha añadido soporte para bloques de mayor tamaño que el tamaño de página de memoria en la implementación de RAID56. Se ha realizado una preparación para el soporte de fscrypt. Se ha mejorado el rendimiento de las operaciones de bloqueo al realizar operaciones relacionadas con la reserva de espacio. Se añadió el soporte para la operación ioctl 'shutdown', que permite llevar el sistema de archivos a un estado en el que se intenta finalizar las operaciones ya iniciadas, pero se bloquean todas las nuevas operaciones.
    • En el sistema de archivos Ext4, se implementó soporte para bloques cuyo tamaño excede el tamaño de la página de memoria (>4KB en sistemas x86). El uso de bloques grandes permite mejorar el rendimiento de las operaciones de escritura en búfer aproximadamente en un 50%, pero reduce el rendimiento de la entrada/salida directa debido a un aumento en el tiempo de cálculo de sumas de verificación. En la nueva versión, también se añadieron optimizaciones que aumentaron el ancho de banda durante la desfragmentación en línea.
    • En el subsistema FUSE, se ha mejorado el soporte de lectura en búfer al utilizar grandes folios de páginas de memoria. A través de iomap, se ha implementado la capacidad de rastrear folios parcialmente válidos para cargar solo los datos que faltan en el búfer.
    • En VFS, se agregó soporte para delegación de directorio recuperable, lo que permite implementar en NFS la transferencia de control de un directorio desde servidores el cliente, para que el cliente NFS sin necesidad de contactar 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 control será revocada al primer cliente.
    • Se ha añadido soporte para la lectura en modo de entrada/salida directa (direct I/O) para NFS. Se implementaron las configuraciones /sys/kernel/debug/nfsd/io_cache_read y /sys/kernel/debug/nfsd/io_cache_write para controlar la activación de la caché y las operaciones de entrada/salida directa. Manipular estas configuraciones permite reducir la sobrecarga en el lado del cliente NFS durante grandes operaciones de entrada/salida.
    • En NTFS se implementó la operación ioctl de apagado, se activaron por defecto las opciones de montaje «acl» y «prealloc», y se añadió soporte para tiempos anteriores al 1 de enero de 1970.
    • Para dispositivos de bloques y sistemas de archivos se ha habilitado por defecto la caché de objetos «bio» (Block I/O) de forma separada para cada CPU, lo que define las operaciones de entrada-salida activas.
  • Memoria y servicios del sistema
    • Se ha incluido en el núcleo el subsistema Live Update Orchestrator (LUO), que permite reiniciar y actualizar 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 KHO (Kexec HandOver) previamente añadido al núcleo y, además de la posibilidad de iniciar un nuevo núcleo desde uno viejo sin perder el estado del sistema, resuelve tareas como la conservación del estado de los dispositivos y la memoria, así como asegurar 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 activar el nuevo núcleo sin interrumpir las operaciones continuas con los dispositivos, llevadas a cabo por el sistema y las aplicaciones en el espacio de usuario.
    • Se ha añadido la llamada al 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.
    • En el sistema de entrada/salida asíncrona io_uring se ha añadido soporte para colocar elementos de diferentes tamaños en la cola de envío (SQE, Submission Queue Entry), de manera similar a como en la versión anterior se permitió la mezcla de tamaño del contenido de la cola de resultados (CQE, Completion Queue Event). Antes, todos los elementos en la cola debían tener un tamaño único, lo que causaba 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 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 agregado soporte para solicitudes de disposición de memoria para las colas SQ (Submission Queue) y CQ (Completion Queue), que permiten obtener información sobre el tamaño del búfer circular, necesario al asignar memoria por parte del usuario utilizando los flags IORING_SETUP_NO_MMAP e IORING_MEM_REGION_TYPE_USER.

    • Para la rápida trazabilidad de la pila utilizando utilidades como perf, se ha añadido soporte para el formato SFrame con información sobre el desdoblamiento de la pila de llamadas (unwind). SFrame ya es compatible con GCC y binutils, no provoca una disminución del rendimiento y, a diferencia del formato DWARF, contiene solo un conjunto mínimo de información necesaria para la trazabilidad de la pila.
    • En la utilidad perf se ha añadido soporte para descripciones unificadas de métricas y eventos en formato JSON, así como desdoblamiento diferido (deferred unwinding) de la pila de llamadas en el espacio de usuario.
    • Para los 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 del CPU sin necesidad de colocarlos previamente en la RAM.
    • Se ha añadido soporte para MPAM (Memory System Resource Partitioning and Monitoring), una extensión de la arquitectura del conjunto de instrucciones ARMv8-A para marcar 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 al 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 se puede usar para rastrear el consumo de recursos de memoria bajo ciertos tipos de carga.
    • En caso de un cierre inesperado del proceso después de recibir una señal, otro proceso que tiene el pidfd del proceso terminado ahora puede determinar el número de la señal que causó el cierre del proceso.
    • Se ha revisado la implementación de secuencias reiniciables (restartable sequences), que permiten a las aplicaciones organizar una ejecución no interrumpible pseudo-atómica de un grupo de instrucciones (en caso de interrupción por otro hilo, se intenta nuevamente ejecutar la secuencia). La nueva implementación se distingue por ser más alto rendimiento.
    • Se han implementado las instrucciones BPF_JMP, BPF_X y BPF_JA para realizar saltos indirectos a una posición específica dentro de la tabla de saltos en programas BPF. Se ha añadido el concepto de punteros dinámicos (dynptr), que permiten leer datos de archivos estructurados. También se ha incluido la posibilidad de adjuntar varios bytes de metadatos a paquetes de red.
    • Los módulos en Python utilizados para procesar la documentación del núcleo se han trasladado a un directorio separado tools/lib/python.
    • Se ha agregado la función mempool_alloc_bulk() para asignar de manera segura elementos de un grupo de memoria para varios objetos a la vez.
    • 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 núcleo (el soporte de Rust no está habilitado por defecto y no obliga a incluir Rust en las dependencias de compilación del núcleo). En la nueva versión se ha incluido en el núcleo la biblioteca 'syn' con un analizador de código Rust que facilita 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 el tipo Integer para manipular números enteros. El macro 'module!' ha sido mejorado para soportar parámetros enteros. Se ha implementado la posibilidad de especificar parámetros al cargar módulos del núcleo escritos en Rust. Se han realizado abstracciones para las subsistemas I2C y PWM (Modulación por Ancho de Pulso).
    • Se ha añadido el macro 'at_least' (por ejemplo, 'param[at_least 7]'), que informa sobre el tamaño mínimo permitido del array pasado a la función. Si se pasa un array con menos elementos, el compilador emitirá una advertencia.
    • Se ha incluido un script klp-build para generar módulos del núcleo que introducen cambios en un núcleo en funcionamiento (livepatch), basado en un archivo de parches. Se han realizado cambios necesarios en la utilidad objtool para la creación de parches en vivo.
    • En User-mode Linux (ejecución del núcleo como un proceso de usuario) se ha añadido soporte limitado para multiprocesamiento, aunque los hilos dentro de un mismo proceso aún no pueden ejecutarse simultáneamente. Se ha comenzado el portado de User-mode Linux a la biblioteca nolibc.
    • Se ha añadido soporte para la arquitectura LoongArch32 (LA32R, LA32S) además de LoongArch64.
    • Se ha añadido la posibilidad de establecer límites de QoS en la intensidad de despertar 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 los controladores IOMMU (Unidad de Gestión de Memoria de Entrada-Salida), que realizan la traducción de direcciones virtuales visibles para el dispositivo de hardware a direcciones físicas, con la capacidad de filtrar operaciones DMA por direcciones virtuales, así como restringir 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.
    • Las páginas de protección de memoria (guard page), cuyo acceso provoca una excepción y la terminación del proceso (SIGSEGV), ahora están marcadas con una etiqueta especial en el archivo /proc/PID/smaps.
    • Se ha añadido la capacidad de gestionar grandes páginas de memoria (transparent huge page) 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 el soporte para la expulsión de múltiples 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 portátiles con resolución media (1440×900).
    • Se ha optimizado significativamente el funcionamiento de la subsistema de auditoría — se observa una disminución de costos operativos en un 50%.
  • Virtualización y seguridad
    • Se ha añadido soporte para la capacidad de separación del espacio de direcciones lineales (LASS, linear address-space separation) proporcionada por los procesadores Intel, que permite dividir físicamente los rangos de direcciones del espacio de usuario y del núcleo para mejorar la seguridad. El espacio de direcciones se divide según 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, mientras que la parte inferior se destina al espacio de usuario. En una etapa temprana de la ejecución de instrucciones (en la fase anterior a la ejecución especulativa), se lleva a cabo una verificación de la validez del acceso desde el espacio de usuario a las direcciones con el bit más significativo establecido y viceversa. Esta separación permite bloquear fugas de memoria del núcleo al espacio de usuario a través de canales secundarios incluso durante la ejecución especulativa de instrucciones, lo que permite utilizar LASS para protegerse contra ataques de la clase Meltdown y Spectre sin generar grandes costos adicionales.
    • Se ha añadido la capacidad de habilitar extensiones de refuerzo de seguridad para el bus PCI Express: PCIe Link Encryption y PCIe Device Authentication, que permiten verificar la autenticidad y cifrar el canal de comunicación entre un dispositivo PCIe y una máquina virtual, protegida mediante los mecanismos Intel TDX (Trusted Domain Extensions) y AMD SEV-SNP (Secure Nested Paging). Las tecnologías implementadas no permiten interceptar, analizar ni inyectar datos en el tráfico DMA en caso de que se tenga acceso al sistema host o a otros dispositivos.
    • Se ha añadido soporte para los algoritmos SHA-3 (SHA3-224, SHA3-256, SHA3-384, SHA3-512), SHAKE128, SHAKE256 y BLAKE2b en la biblioteca criptográfica integrada.
    • Para los módulos LSM (Linux Security Modules) y, en particular, para SELinux, se ha implementado la capacidad de rastrear la creación de descriptores memfd para aplicar políticas de seguridad a los objetos asociados.
    • En el módulo LSM IPE (Integrity Policy Enforcement), que define la política general de integridad para todo el sistema, se ha añadido soporte para la bandera AT_EXECVE_CHECK en la función execveat(), que incluye una verificación de la integridad del script antes de su ejecución por el intérprete.
    • Se han añadido los primitivas scoped_user_read_access(), scoped_user_write_access y scoped_user_rw_access() para acceso restringido a 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 la interacción protegida contra el hipervisor entre el sistema operativo huésped que se ejecuta en modo confidencial (con cifrado de memoria y aislamiento de registros basado en tecnologías AMD SNP e Intel TDX) y el paravisor que se encarga de acceder a los dispositivos que manejan datos confidenciales.
    • Se ha añadido la capacidad de transmitir información sobre un proceso que se ha cerrado de manera anómala (para la generación de coredump) a través del mecanismo pidfd. El identificador PIDFD se vincula a un proceso específico y no cambia, mientras que el PID puede estar asociado a otro proceso después de que se complete el proceso actual, asociado con este PID. El uso de pidfd permite bloquear ataques de suplantación del proceso suid cerrado de manera anómala a otro proceso, logrando un estado de competencia inmediatamente después del inicio del manejo del cierre anómalo por parte del núcleo, pero antes de que el controlador revise los parámetros del proceso en el espacio del usuario.
  • Subsistema de red
    • Se han realizado optimizaciones en la subsistema de red 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 ha permitido aumentar la rendimiento en 4 veces bajo alta carga y duplicar la intensidad de envío de paquetes, reduciendo la carga en la CPU a la mitad.
    • Se ha proporcionado la posibilidad de deshabilitar límites de uso de memoria para sockets de red individuales (en este caso, se utilizarán los límites generales de memoria establecidos para contenedores individuales). Para manejar 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 expirar el tiempo de vida (TTL) de un paquete, datos sobre las interfaces de red entrantes para obtener información más detallada al rastrear rutas con la utilidad traceroute.
    • Se ha añadido soporte para polling activo continuo (busy polling) en un hilo separado del núcleo con el objetivo 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 que el tamaño del campo de datos se ha incrementado a 2048 bytes para asegurar la integración con redes TCP/IP, se ha implementado la posibilidad de tunneling de tramas Ethernet y se ha agregado soporte para modulación por ancho de pulso, permitiendo la transmisión de datos a velocidades de 20 Mbps o más.
    • Se ha añadido soporte para la estructura sockaddr_unsized, una variante de la estructura sockaddr, que utiliza un arreglo con elementos flexibles en lugar de un arreglo de tamaño fijo (sa_data[] en vez de sa_data[14], que se usaba esencialmente para referencias a otras estructuras de mayor tamaño).
    • Se ha añadido la posibilidad de utilizar la funcionalidad de getsockname y getpeername a través del subsistema io_uring.
    • Se han añadido sysctl net.ipv4.tcp_rcvbuf_low_rtt y net.ipv4.tcp_comp_sack_rtt_percent para optimizar 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 aprovechar las 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 en monitores HDR, las complejas conversiones de color ahora pueden ser realizadas por el controlador de pantalla en la etapa previa y posterior a la mezcla de capas (blending), en lugar de utilizar un compositado de software en el buffer de visualización final. Además de reducir la carga y el consumo de energía durante la salida en HDR, la funcionalidad propuesta puede ser utilizada para asegurar una correcta reproducción del color en editores de video o imágenes.
    • Se ha añadido el controlador "ethosu" para NPU Arm Ethos U65 y U85, destinados a 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 trabajando 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 la gráfica integrada a partir de los procesadores Tiger Lake. Se ha añadido soporte inicial para la arquitectura Xe3P, utilizada en la GPU Crescent Island y en la familia de procesadores con gráfica integrada Nova Lake.
    • El controlador AMDGPU implementa un soporte completo para las tarjetas gráficas AMD de la familia GCN 1.0 «Southern Island» y 1.1 «Sea Islands», que anteriormente utilizaban el controlador Radeon. El controlador AMDGPU ha alcanzado paridad en capacidades con el controlador Radeon y está activado por defecto para las GPU mencionadas. Las tarjetas GCN 1.x se lanzaron entre 2012 y 2019 e incluyen 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 un aumento en el rendimiento promedio del 24%, la transición a AMDGPU ha permitido implementar soporte para la API gráfica Vulkan 1.3 en estas GPU. Además, se ha añadido soporte para conectores analógicos y Video Coding Engine 1.0 en AMDGPU, y se ha activado por defecto el stack DC (Display Core) para GPU basadas en la microarquitectura Bonaire (Radeon HD 7700).
    • El controlador Nouveau ha implementado soporte para el acelerador de hardware NVJPG, presente en el SoC Tegra210.
    • El controlador Panthor ha añadido soporte para la GPU Mali-G1 y soporte inicial para el chip MediaTek MT8196.
    • Se ha añadido soporte para el subsistema de sonido de los chips Intel Nova Lake S, así como para los portátiles HP con HDA CS35L41 y las interfaces de sonido CIX IPBLOQ HD y Onkyo SE-300PCIE.
    • Se ha continuado la integración de los componentes del controlador Nova para las GPU NVIDIA equipadas con firmware GSP, que se utilizan a partir de la serie NVIDIA GeForce RTX 2000 basada en la microarquitectura Turing. El controlador está escrito en el lenguaje Rust. En la nueva versión, se ha comenzado a trabajar en RPC y se ha finalizado la implementación de la carga del coprocesador GSP (GPU System Processor).
    • Se ha añadido soporte para placas 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 y 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 arquitectura RISC-V: OrangePi R2S, OrangePi RV, Anlogic dr1v90, Tenstorrent Blackhole.

Simultáneamente, la Fundación Latinoamericana de Software Libre ha formado la variante completamente libre del núcleo 6.19 — Linux-libre 6.19-gnu, depurado de elementos de firmware y controladores que contienen componentes no libres o partes de código cuyo uso está restringido por el fabricante. En la versión 6.19, se eliminó el código de carga de firmware binario del subsistema de sonido SDCA. Se actualizó el código de limpieza de 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 sonido TI tas2783. Se realizó la limpieza de nombres de blobs en los archivos dts (devicetree) para chips ARM. Se detuvo la limpieza del controlador STM C8SECTPFE DVB, que fue retirado del núcleo.

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