Después de dos meses de desarrollo, Linus Torvalds presentó el lanzamiento del núcleo de Linux 5.15. Entre los cambios más destacados se encuentran: un nuevo controlador NTFS con soporte de escritura, el módulo ksmbd que implementa un servidor SMB, el subsistema DAMON para monitoreo de acceso a la memoria, primitivas de bloqueo para el modo tiempo real, soporte de fs-verity en Btrfs y la llamada al sistema process_mrelease para sistemas que responden a la falta de memoria, además del módulo de atestación remota dm-ima.
En la nueva versión se aceptaron 13,499 correcciones de 1,888 desarrolladores, el tamaño del parche es de 42 MB (los cambios afectan a 10,895 archivos, se añadieron 632,522 líneas de código y se eliminaron 299,966 líneas). Alrededor del 45% de todos los cambios presentados en 5.15 están relacionados con controladores de dispositivos, aproximadamente el 14% de los cambios se refieren a la actualización de código específico para arquitecturas de hardware, el 14% está relacionado con la pila de red, el 6% con sistemas de archivos y el 3% con subsistemas internos del núcleo.
Novedades principales:
- Subsistema de disco, entrada/salida y sistemas de archivos
- Se ha aceptado en el núcleo una nueva implementación del sistema de archivos NTFS, desarrollada por Paragon Software. El nuevo controlador puede operar en modo de escritura y soporta todas las capacidades de la versión actual de NTFS 3.1, incluidas las extensiones de atributos de archivo, listas de control de acceso (ACL), modos de compresión de datos, gestión eficiente de espacios vacíos en archivos (sparse) y reproducción de cambios desde el registro para recuperar la integridad después de fallos.
- En el sistema de archivos Btrfs se ha implementado el soporte del mecanismo fs-verity, utilizado para el control transparente de la integridad y autenticidad de archivos individuales a través de los hashes criptográficos o claves asociadas a los archivos, que se almacenan en el área de metadatos. Anteriormente, fs-verity solo estaba disponible para sistemas de archivos Ext4 y F2fs.
En Btrfs también se agregó soporte para la mapeo de identificadores de usuarios para sistemas de archivos montados (anteriormente solo se soportaba para sistemas FAT, ext4 y XFS). Esta funcionalidad permite asociar archivos de un usuario específico en una partición montada de otro usuario en el sistema actual.
Entre otros cambios en Btrfs: se ha acelerado la adición de claves al índice del directorio para mejorar el rendimiento de la creación de archivos; capacidad para operar raid0 con un solo dispositivo y raid10 con dos (por ejemplo, durante el proceso de reconfiguración de la matriz); opción «rescue=ibadroots» para ignorar un árbol de extensiones incorrecto; aceleración de la operación «send»; reducción de conflictos de bloqueo durante operaciones de renombramiento; posibilidad de usar sectores de 4K en sistemas con un tamaño de página de memoria de 64K.
- En XFS se ha estabilizado la capacidad de usar fechas en el sistema de archivos posteriores a 2038. Se ha implementado un mecanismo de desactivación diferida de inodes y soporte para la configuración y eliminación diferida de atributos de archivos. Con el objetivo de evitar problemas, se eliminó la capacidad de deshabilitar las cuotas de disco para particiones ya montadas (se pueden deshabilitar las cuotas de manera forzada, pero el conteo asociado continuará, por lo que para una desactivación completa se requiere volver a montar).
- En EXT4 se han realizado mejoras en el rendimiento de la escritura de buffers delalloc y en el procesamiento de archivos huérfanos (orphan) que continúan existiendo porque permanecen abiertos, pero no están vinculados a ningún directorio. El procesamiento de operaciones discard se ha trasladado del hilo kthread de jbd2 para evitar bloqueos en las operaciones con metadatos.
- En F2FS se ha añadido la opción «discard_unit=block|segment|section» para vincular las operaciones discard (marca de bloques liberados que ya no se pueden almacenar físicamente) con el alineamiento respecto a un bloque, segmento o sección. Se ha añadido soporte para el seguimiento de cambios en la latencia de entrada/salida.
- En el sistema de archivos EROFS (Extendable Read-Only File System) se ha añadido soporte para E/S directa para archivos guardados sin compresión, así como soporte para fiemap.
- En OverlayFS se ha implementado un manejo correcto de las banderas de montaje «immutable», «append-only», «sync» y «noatime».
- En NFS se ha mejorado el manejo de situaciones en las que el servidor NFS ha dejado de responder a las solicitudes. Se ha añadido la posibilidad de montar desde uno ya utilizado servidores, pero accesible a través de otra dirección de red.
- Se ha comenzado la preparación para reescribir la subsistema FSCACHE.
- Se ha añadido soporte para particiones EFI con distribución no estándar de tablas GPT.
- En el mecanismo fanotify se ha implementado una nueva bandera FAN_REPORT_PIDFD, que permite indicar el pidfd entre los metadatos devueltos. El pidfd ayuda a gestionar situaciones de reutilización de PID para identificar con mayor precisión los procesos que acceden a los archivos monitoreados (el pidfd se asocia a un proceso específico y no cambia, mientras que el PID puede ser vinculado a otro proceso tras la finalización del proceso actual asociado a ese PID).
- Se ha añadido la posibilidad de agregar puntos de montaje a grupos compartidos existentes en la llamada al sistema move_mount(), lo que resuelve problemas con la conservación y recuperación del estado de los procesos en la herramienta CRIU con varios espacios de montaje compartidos en contenedores aislados.
- Se ha añadido protección contra condiciones de carrera ocultas que podrían provocar daños en los archivos al realizar lecturas desde la caché durante el procesamiento de huecos en el archivo.
- Se ha descontinuado el soporte para bloqueos de archivos obligatorios (mandatory), implementados mediante bloqueos en llamadas del sistema que modifican el archivo. Debido a posibles condiciones de carrera, estos bloqueos fueron considerados no confiables y se declararon obsoletos hace años.
- Se ha eliminado el subsistema LightNVM, que permitía el acceso directo a la unidad SSD, evitando la capa de emulación. LightNVM perdió su sentido tras la aparición de las normas NVMe, que permiten la zonificación (ZNS, Zoned Namespace).
- Memoria y servicios del sistema
- Se ha implementado el subsistema DAMON (Data Access MONitor), que permite rastrear la actividad relacionada con el acceso a datos en la memoria RAM, en relación con el proceso seleccionado que se ejecuta en el espacio de usuario. Este subsistema permite analizar qué áreas de memoria ha accedido el proceso a lo largo de su ejecución y cuáles han quedado sin usar. Entre las características de DAMON se destacan la baja carga en el CPU, el bajo consumo de memoria, alta precisión y costos operativos predecibles y constantes, independientes del tamaño. Este subsistema puede ser utilizado tanto por el núcleo para optimizar la gestión de memoria, como por utilidades en el espacio de usuario para entender lo que hace el proceso y optimizar el uso de memoria, por ejemplo, liberando memoria excesiva al sistema.
- Se ha implementado una llamada al sistema process_mrelease, que permite acelerar el proceso de liberación de memoria de un proceso que está finalizando su ejecución. En condiciones normales, la liberación de recursos y la finalización de un proceso no se realizan de inmediato y pueden retrasarse por diversas razones, lo que dificulta el funcionamiento de los sistemas de respuesta temprana a la falta de memoria que operan en el espacio de usuario, como oomd (proporcionado en systemd) y lmkd (utilizado en Android). Con la llamada process_mrelease, tales sistemas pueden iniciar el retorno de memoria de procesos que se finalizan de manera más predecible.
- Se han trasladado opciones de primitivas para la organización de bloqueos mutex, ww_mutex, rw_semaphore, spinlock y rwlock desde la rama del núcleo PREEMPT_RT, donde se desarrolla el soporte para el trabajo en modo de tiempo real, basadas en la subsistema RT-Mutex. En el asignador de slab SLUB se han añadido modificaciones que mejoran su funcionamiento en modo PREEMPT_RT y reducen el impacto en las interrupciones.
- Se ha añadido soporte para el atributo del planificador de tareas SCHED_IDLE en cgroup, permitiendo dotar a todos los procesos del grupo de esta característica al mismo tiempo. Es decir, estos procesos solo se iniciarán cuando no haya otras tareas en el sistema esperando su ejecución. A diferencia de asignar el atributo SCHED_IDLE a cada proceso por separado, al vincular SCHED_IDLE a cgroup se tiene en cuenta el peso relativo de las tareas dentro del grupo al seleccionar una tarea para su ejecución.
- El mecanismo de seguimiento del consumo de memoria en cgroup se ha ampliado con la capacidad de rastrear estructuras de datos adicionales del núcleo, incluidas las creadas para polling, manejo de señales y espacios de nombres.
- Se ha añadido soporte para la planificación asimétrica de la asignación de tareas a núcleos de procesador en arquitecturas donde algunos CPU permiten la ejecución de tareas de 32 bits, mientras que otros funcionan solo en modo de 64 bits (por ejemplo, ARM). Este nuevo modo permite, al programar la ejecución de tareas de 32 bits, tener en cuenta solo a los CPU que admiten dichas tareas.
- En la interfaz de entrada/salida asincrónica io_uring, se agregó soporte para abrir archivos directamente en la tabla de índice fixed-file, sin utilizar descriptores de archivo, lo que permite acelerar notablemente algunos tipos de operaciones, aunque va en contra del proceso tradicional de Unix de usar descriptores de archivo para abrir archivos.
En io_uring para la subsistema BIO (Bloque I/O Layer) se implementó un nuevo mecanismo de reciclaje (‘BIO recycling’), que permite reducir los costos operativos en la gestión de la memoria interna y aumentar en aproximadamente un 10% el número de operaciones de entrada/salida procesadas por segundo. También se agregó soporte para las llamadas al sistema mkdirat(), symlinkat() y linkat().
- Para los programas BPF se implementó la posibilidad de solicitar y procesar eventos de temporizador. Se añadió un iterador para sockets UNIX, así como la capacidad de recibir y establecer opciones de sockets para setsockopt. Se agregó soporte para datos tipados en el dumper BTF.
- En sistemas NUMA con diferentes tipos de memoria, que varían en rendimiento, se implementó la transferencia de páginas de memoria desbordadas de la memoria dinámica (DRAM) a una memoria persistente más lenta en lugar de eliminar esas páginas en situaciones de agotamiento del espacio libre. Las pruebas realizadas mostraron que esta táctica generalmente mejora el rendimiento en estos sistemas. Para NUMA también se implementó la capacidad de asignar páginas de memoria para un proceso desde un conjunto seleccionado de nodos NUMA.
- Para la arquitectura ARC se implementó soporte para tablas de páginas de tres y cuatro niveles, lo que permitirá en el futuro soportar procesadores ARC de 64 bits.
- Para la arquitectura s390 se implementó la posibilidad de aplicar el mecanismo KFENCE para detectar errores en la gestión de memoria, además de agregar soporte para el detector de condiciones de carrera KCSAN.
- Se agregó soporte para la indexación de la lista de mensajes producidos a través de printk(), lo que permite extraer todos esos mensajes de una vez y rastrear cambios en el espacio de usuario.
- En mmap() se descontinuó el soporte para la opción VM_DENYWRITE, y el código del núcleo se deshizo del uso del modo MAP_DENYWRITE, lo que redujo el número de situaciones que conducen a un error ETXTBSY al intentar escribir en un archivo.
- Se ha añadido un nuevo tipo de comprobaciones «Event probes» al subsistema de trazado, que se pueden adjuntar a eventos de trazado existentes, definiendo su propio formato de salida.
- Al compilar el núcleo utilizando el compilador Clang, ahora se activa por defecto el ensamblador integrado del proyecto LLVM.
- En el marco del proyecto para eliminar del núcleo el código que genera advertencias en el compilador, se realizó un experimento al habilitar por defecto el modo «-Werror», donde las advertencias del compilador se tratan como errores. Durante la preparación de la versión 5.15, Linus comenzó a aceptar solo cambios que no produjeran advertencias al compilar el núcleo y activó la compilación con «-Werror», pero luego aceptó que era prematuro y pospuso la inclusión de «-Werror» por defecto. El control de la inclusión de la bandera «-Werror» en la compilación se realiza mediante el parámetro WERROR, que por defecto se establece en COMPILE_TEST, es decir, se activa solo en compilaciones de prueba.
- Virtualización y seguridad
- En Device Mapper (DM) se ha añadido un nuevo controlador dm-ima con la implementación del mecanismo de atestación remota basado en el subsistema IMA (Integrity Measurement Architecture), que permite a un servicio externo verificar el estado de los subsistemas del núcleo para asegurar su autenticidad. En la práctica, dm-ima permite crear mediante Device Mapper almacenes vinculados a sistemas de nube externos, en los cuales mediante IMA se verifica la autenticidad de la configuración que se ejecuta de DM target.
- En prctl() se ha implementado una nueva opción PR_SPEC_L1D_FLUSH, que al activarse hace que el núcleo comience a vaciar el contenido de la caché de primer nivel (L1D) cada vez que se cambia el contexto. Este modo permite proporcionar protección adicional contra ataques por canal lateral, dirigidos a determinar datos almacenados en caché como resultado de vulnerabilidades provocadas por la ejecución especulativa de instrucciones en la CPU. El costo de habilitar PR_SPEC_L1D_FLUSH (no activado por defecto) es una disminución significativa del rendimiento.
- Se ha implementado la posibilidad de compilar el núcleo añadiendo la opción de GCC «-fzero-call-used-regs=used-gpr», que asegura la nulificación de todos los registros antes de devolver el control de la función. Esta opción permite protegerse contra fugas de información de funciones y reducir en un 20% el número de bloques que son aptos para la construcción de gadgets ROP (Return-Oriented Programming) en exploits.
- Se ha implementado la posibilidad de compilar núcleos para la arquitectura ARM64 en forma de clientes para el hipervisor Hyper-V.
- Se propone un nuevo marco para el desarrollo de controladores «VDUSE», que permite implementar dispositivos de bloque virtuales en espacio de usuario y aplicar Virtio como transporte para el acceso desde sistemas invitados.
- Se ha añadido un controlador Virtio para el bus I2C, que permite emular controladores I2C en modo paravirtualización utilizando backends separados.
- Se ha añadido el controlador gpio-virtio, que permite a los sistemas invitados acceder a las líneas GPIO proporcionadas por el sistema anfitrión.
- Se ha añadido la posibilidad de restringir el acceso a las páginas de memoria para controladores de dispositivos que soportan DMA en sistemas sin I/O MMU (unidad de gestión de memoria).
- En el hipervisor KVM se ha implementado la posibilidad de exportar estadísticas en forma de histogramas lineales y logarítmicos.
- Subsistema de red
- En el núcleo se ha añadido el módulo ksmbd que implementa un servidor de archivos que utiliza el protocolo SMB3. Este módulo complementa la implementación anteriormente disponible en el núcleo del cliente SMB y, a diferencia del servidor SMB que opera en espacio de usuario, es más eficiente en términos de rendimiento, consumo de memoria e integración con las capacidades ampliadas del núcleo. Ksmbd se presenta como una extensión de alto rendimiento y lista para su uso en dispositivos embebidos, integrando si es necesario con herramientas y bibliotecas de Samba. Entre las capacidades de ksmbd destaca la mejora en el soporte de la tecnología de caché distribuido de archivos (alquileres SMB) en sistemas locales, que permite reducir significativamente el tráfico. En el futuro se planea añadir soporte para RDMA («smbdirect») y extensiones de protocolo relacionadas con el refuerzo de la fiabilidad del cifrado y la verificación mediante firmas digitales.
- En el cliente CIFS se ha dejado de soportar NTLM y algoritmos de autenticación menos fiables, basados en el algoritmo DES y utilizados en el protocolo SMB1.
- En la implementación de puentes de red para VLAN se ha añadido soporte para multicast.
- En el controlador bonding, utilizado para la agregación de interfaces de red, se ha añadido soporte para el subsistema XDP (eXpress Data Path), que permite manipular paquetes de red antes de su procesamiento por la pila de red del núcleo de Linux.
- En la pila inalámbrica mac80211 se ha implementado soporte para 6GHZ STA (Autorización Temporal Especial) en los modos LPI, SP y VLP, así como la posibilidad de establecer TWT (Target Wake Time) separados en modo punto de acceso.
- Se ha añadido soporte para el protocolo MCTP (Management Component Transport Protocol), utilizado para la interacción entre controladores de gestión y los dispositivos relacionados (procesadores anfitriones, dispositivos periféricos, etc.).
- Se ha continuado con la integración en el núcleo de MPTCP (MultiPath TCP), una extensión del protocolo TCP para la gestión de conexiones TCP con entrega de paquetes simultáneamente a través de múltiples rutas utilizando diferentes interfaces de red atadas a distintas direcciones IP. En esta nueva versión se ha añadido soporte para direcciones en modo fullmesh.
- En netfilter se han añadido controladores para flujos de red encapsulados en el protocolo SRv6 (Segment Routing IPv6).
- Se ha añadido soporte para sockmap para sockets Unix en streaming.
- Hardware
- En el controlador amdgpu se ha implementado soporte para APU Cyan Skillfish (equipados con GPU Navi 1x). Para la APU Yellow Carp se ha añadido soporte para codecs de video. Se ha mejorado el soporte para la GPU Aldebaran. Se han añadido nuevos identificadores de tarjetas basadas en la GPU Navi 24 "Beige Goby" y RDNA2. Se ha propuesto una implementación mejorada de pantallas virtuales (VKMS). Se ha implementado soporte para el seguimiento de la temperatura de los chips AMD Zen 3.
- En el controlador amdkfd (para GPUs discretas como Polaris) se ha implementado un gestor de memoria virtual compartida (SVM, shared virtual memory) basado en el subsistema HMM (Heterogeneous memory management), que permite aprovechar dispositivos con sus propios bloques de gestión de memoria (MMU, memory management unit), que pueden acceder a la memoria principal. También, mediante HMM, es posible organizar un espacio de direcciones compartido entre GPU y CPU, donde la GPU puede acceder a la memoria principal del proceso.
- En el controlador i915 para tarjetas gráficas Intel se ha ampliado la aplicación del gestor de memoria de video TTM y se ha incluido la capacidad de gestión del consumo energético basado en GuC (Graphics micro Controller). Se ha comenzado a preparar la implementación del soporte para la tarjeta gráfica Intel ARC Alchemist y la GPU Intel Xe-HP.
- En el controlador nouveau se ha implementado el control de la retroiluminación de los paneles eDP mediante DPCD (Datos de Configuración de DisplayPort).
- En el controlador msm se ha añadido soporte para GPU Adreno 7c Gen 3 y Adreno 680.
- Se ha implementado un controlador IOMMU para el chip Apple M1.
- Se ha añadido un controlador de sonido para sistemas basados en APU AMD Van Gogh.
- Se ha añadido el controlador Realtek R8188EU a la rama staging, que reemplaza al antiguo controlador (rtl8188eu) para chips inalámbricos Realtek RTL8188EU 802.11 b/g/n.
- Se ha incluido el controlador ocp_pt para una placa PCIe desarrollada por Meta (Facebook) con la implementación de relojes atómicos en miniatura y un receptor GNSS, que pueden utilizarse para organizar la sincronización de tiempo preciso. servidores sincronización de tiempo precisa.
- Se ha añadido soporte para los teléfonos inteligentes Sony Xperia 10II (Snapdragon 665), Xiaomi Redmi 2 (Snapdragon MSM8916), Samsung Galaxy S3 (Snapdragon MSM8226), Samsung Gavini/Codina/Kyle.
- Se ha añadido soporte para SoCs ARM y placas NVIDIA Jetson TX2 NX Developer Kit, Sancloud BBE Lite, PicoITX, DRC02, SolidRun SolidSense, SKOV i.MX6, Nitrogen8, Traverse Ten64, GW7902, Microchip SAMA7, Qualcomm Snapdragon SDM636/SM8150, Renesas R-Car H3e-2G/M3e-2G, Marvell CN913x, ASpeed AST2600 (placas de servidor Facebook Cloudripper, Elbert y Fuji), 4KOpen STiH418-b2264.
- Se ha añadido soporte para paneles LCD Gopher 2b, EDT ETM0350G0DH6/ETMV570G2DHU, LOGIC Technologies LTTD800480070-L6WH-RT, Multi-Innotechnology MI1010AIT-1CP1, Innolux EJ030NA 3.0, ilitek ili9341, E Ink VB3300-KCA, Samsung ATNA33XC20, Samsung DB7430, WideChips WS2401.
- Se ha añadido el controlador LiteETH con soporte para controladores Ethernet utilizados en SoCs LiteX programables (para FPGA).
- En el controlador usb-audio se ha añadido la opción lowlatency para gestionar la activación del modo de mínimas latencias. También se ha añadido la opción quirk_flags para pasar configuraciones específicas del dispositivo.
Simultáneamente, la Fundación de Software Libre de América Latina ha formado una variante completamente libre del núcleo 5.15 — Linux-libre 5.15-gnu, limpiado de elementos de firmware y controladores que contienen componentes no libres o secciones de código cuyo uso está restringido por el fabricante. En esta nueva versión, se ha implementado la salida de un mensaje en el registro sobre la finalización de la limpieza. Se han solucionado problemas al generar paquetes utilizando mkspec, y se ha mejorado el soporte para paquetes snap. Se han eliminado algunas advertencias que se mostraban al procesar el archivo de encabezado firmware.h. Se ha permitido la salida de ciertos tipos de advertencias («format-extra-args», comentarios, funciones y variables no utilizadas) al compilar en modo «-Werror». Se ha añadido la limpieza del controlador gehc-achc. Se ha actualizado el código de limpieza de blobs en los controladores y subsistemas adreno, btusb, btintel, brcmfmac, aarch64 qcom. Se ha dejado de limpiar los controladores prism54 (eliminado) y rtl8188eu (sustituido por r8188eu).
Fuente: opennet.ru
