Después de dos meses de desarrollo, Linus Torvalds presentó la versión del núcleo Linux 5.19. Entre los cambios más destacados se encuentran: soporte para la arquitectura de procesadores LoongArch, integración de parches «BIG TCP», modo «on-demand» en fscache, eliminación del código para soporte del formato a.out, posibilidad de aplicar ZSTD para la compresión de firmware, interfaz para gestionar la expulsión de memoria del espacio del usuario, y mejoras en la fiabilidad y rendimiento del generador de números aleatorios. También se incluye soporte para extensiones Intel IFS (In-Field Scan), AMD SEV-SNP (Secure Nested Paging), Intel TDX (Trusted Domain Extensions) y ARM SME (Scalable Matrix Extension).
En el anuncio, Linus mencionó que probablemente la próxima versión del núcleo tenga el número 6.0, ya que en la rama 5.x se han acumulado suficientes versiones para cambiar el primer número de la versión. El cambio de numeración se realiza por motivos estéticos y es un paso formal que elimina la incomodidad causada por la acumulación de un gran número de versiones en la serie.
Linus también mencionó que utilizó una laptop de Apple basada en la arquitectura ARM64 (Apple Silicon) con un entorno Linux basado en la distribución Asahi Linux para crear la versión. Esta no es la estación de trabajo principal de Linus, pero utilizó esta plataforma para verificar su idoneidad para trabajar en el núcleo y asegurarse de que podría crear versiones del núcleo mientras viajaba, teniendo a mano una laptop ligera. Hace muchos años, Linus tuvo experiencia utilizando hardware de Apple para el desarrollo, habiendo usado una computadora basada en el CPU ppc970 y una Macbook Air.
En la nueva versión se han introducido 16,401 correcciones de 2,190 desarrolladores (en la versión anterior hubo 16,206 correcciones de 2,127 desarrolladores), con un tamaño del parche de 90 MB (los cambios afectaron a 13,847 archivos, se añadieron 1,149,456 líneas de código y se eliminaron 349,177 líneas). Aproximadamente el 39% de todos los cambios presentados en 5.19 están relacionados con controladores de dispositivos, alrededor del 21% de los cambios están relacionados con actualizaciones de código específico para arquitecturas de hardware, el 11% se relaciona con la pila de red, el 4% con sistemas de archivos y el 3% con subsistemas internos del núcleo.
Novedades principales del núcleo 5.19:
- Subsistema de disco, entrada/salida y sistemas de archivos
- El sistema de archivos EROFS (Enhanced Read-Only File System), diseñado para su uso en particiones accesibles en modo solo lectura, se ha adaptado para utilizar la subsistema fscache, que proporciona almacenamiento en caché de datos. Este cambio ha permitido aumentar notablemente el rendimiento de los sistemas en los que se inician un gran número de contenedores a partir de una imagen basada en EROFS.
- Se ha añadido un modo de lectura bajo demanda ('on-demand') a la subsistema fscache, que se utiliza para optimizar EROFS. Este nuevo modo permite organizar el almacenamiento en caché de lecturas de imágenes del sistema de archivos que están en el sistema local. A diferencia del modo de operación inicialmente disponible, orientado al almacenamiento en caché en el sistema de archivos local de los datos transferidos a través de sistemas de archivos en red, el modo 'on-demand' delega las funciones de extracción de datos y su escritura en caché a un proceso en segundo plano, que se ejecuta en el espacio de usuario.
- En XFS se ha facilitado el almacenamiento de miles de millones de atributos extendidos en i-node. El número máximo de extensos para un solo archivo se ha incrementado de 4 mil millones a 247. Se ha implementado un modo para actualizar de manera atómica varios atributos extendidos de un archivo al mismo tiempo.
- En el sistema de archivos Btrfs se ha optimizado el manejo de bloqueos, lo que ha permitido aumentar el rendimiento aproximadamente en un 7% durante la escritura directa en modo nowait. El rendimiento de las operaciones en modo NOCOW (sin copy-on-write) ha aumentado aproximadamente en un 3%. Se ha reducido la carga en la caché de páginas durante el trabajo del comando 'send'. El tamaño mínimo de las subpáginas se ha reducido de 64K a 4K (se pueden usar subpáginas de un tamaño menor al de las páginas del núcleo). Se ha realizado la transición del uso del árbol base (radix tree) al algoritmo XArrays.
- Se ha añadido al servidor NFS un modo de extensión de mantenimiento del estado de bloqueo establecido por el cliente, que dejó de responder a las solicitudes. Este nuevo modo permite retrasar la limpieza del bloqueo hasta un día, si otro cliente no solicita un bloqueo en competencia. En el modo normal, el bloqueo se limpia 90 segundos después de que el cliente dejó de responder.
- En la subsistema de seguimiento de eventos en el sistema de archivos fanotify se ha implementado la bandera FAN_MARK_EVICTABLE, que permite desactivar el anclaje de los i-nodes objetivo en la caché, por ejemplo, para ignorar subárboles sin anclar sus partes en la caché.
- Se ha añadido soporte para obtener información sobre la fecha de creación de archivos a través de la llamada al sistema statx en el controlador del sistema de archivos FAT32, implementando una versión más eficiente y funcional de stat(), que devuelve información ampliada sobre el archivo.
- Se han realizado importantes optimizaciones en el controlador exFAT, relacionadas con la limpieza simultánea de un grupo de sectores en modo ‘dirsync’, en lugar de una limpieza secuencial sector por sector. Gracias a la reducción del número de solicitudes de bloques después de la optimización, el rendimiento de la creación de un gran número de directorios en la tarjeta SD ha aumentado más del 73-85% dependiendo del tamaño del clúster.
- Se ha incluido la primera actualización correctiva del controlador ntfs3 en el núcleo. Desde que se incluyó ntfs3 en el núcleo 5.15 en octubre del año pasado, el controlador no se había actualizado y se había perdido el contacto con los desarrolladores, pero ahora han reanudado la publicación de cambios. En los parches propuestos se han corregido errores que provocan fugas de memoria y cierres inesperados, se han resuelto problemas con la ejecución de xfstests, se ha realizado una limpieza del código no utilizado y se han corregido errores tipográficos.
- Se ha implementado la capacidad de mapeo de identificadores de usuarios para sistemas de archivos montados en OverlayFS, que se utiliza para asociar archivos de un usuario específico en una partición ajena montada con otro usuario en el sistema actual.
- Memoria y servicios del sistema
- Se ha añadido soporte inicial para la arquitectura del conjunto de instrucciones LoongArch, que se utiliza en los procesadores Loongson 3 5000 y que implementa un nuevo ISA RISC, similar a MIPS y RISC-V. La arquitectura LoongArch está disponible en tres variantes: 32 bits recortada (LA32R), 32 bits normal (LA32S) y 64 bits (LA64).
- Se ha eliminado el código para el soporte del formato de archivos ejecutables a.out, que se ha clasificado como obsoleto en la versión 5.1. El formato a.out ha dejado de utilizarse en sistemas con Linux, y la generación de archivos a.out no es compatible con las herramientas modernas en las configuraciones predeterminadas para Linux. El cargador para archivos a.out puede ser implementado completamente en el espacio de usuario.
- Se ha dejado de soportar las opciones de arranque específicas de la arquitectura x86: nosep, nosmap, nosmep, noexec y noclflush.
- Se ha dejado de soportar la obsoleta arquitectura de CPU h8300 (Renesas H8/300), que ha estado sin mantenimiento durante mucho tiempo.
- Se han ampliado las capacidades relacionadas con la respuesta a la detección de bloqueos divididos («split lock») que se producen al acceder a datos desalineados en memoria debido a que, al ejecutar una instrucción atómica, los datos cruzan dos líneas de caché de CPU. Tales bloqueos conducen a una caída significativa del rendimiento. Si anteriormente el núcleo emitía por defecto una advertencia con información sobre el proceso que causaba el bloqueo, ahora el proceso problemático se ralentizará adicionalmente para preservar el rendimiento del resto del sistema.
- Se ha añadido soporte para el mecanismo IFS (In-Field Scan) implementado en los procesadores Intel, que permite realizar pruebas de diagnóstico de bajo nivel del CPU, capaces de detectar problemas no definidos por los medios estándar basados en códigos de corrección de errores (ECC) o bits de paridad. Las pruebas realizadas se presentan en forma de firmware descargable, similar a las actualizaciones de microcódigo. Los resultados de las pruebas están disponibles a través de sysfs.
- Se ha añadido la capacidad de incrustar en el núcleo un archivo bootconfig, permitiendo definir parámetros de funcionamiento del núcleo a través de un archivo de configuración, además de las opciones de línea de comandos. La incrustación se realiza mediante la opción de compilación ‘CONFIG_BOOT_CONFIG_EMBED_FILE=»/RUTA/AL/ARCHIVO/BOOTCONFIG»‘. Anteriormente, bootconfig se definía mediante la adjunción a la imagen initrd. La incrustación en el núcleo permite usar bootconfig en configuraciones sin initrd.
- Se ha implementado la capacidad de cargar firmwares comprimidos utilizando el algoritmo Zstandard. Se ha añadido un conjunto de archivos de control en sysfs en /sys/class/firmware/*, que permite iniciar la carga de firmwares desde el espacio de usuario.
- En la interfaz de entrada/salida asíncrona io_uring se ha propuesto un nuevo flag IORING_RECVSEND_POLL_FIRST, al activarlo, la operación de red se enviará primero para su procesamiento utilizando polling, lo que puede ahorrar recursos en situaciones donde se permite el procesamiento de la operación con cierta demora. En io_uring también se ha añadido soporte para la llamada al sistema socket(), se han propuesto nuevos flags para simplificar la gestión de descriptores de archivos, se ha añadido un modo «multi-shot» para aceptar varias conexiones a la vez en la llamada accept(), y se han añadido operaciones para enviar comandos NVMe directamente al dispositivo.
- Para la arquitectura Xtensa, se ha añadido soporte para la herramienta de depuración KCSAN (Kernel Concurrency Sanitizer), destinada a la detección dinámica de condiciones de carrera dentro del núcleo. También se ha añadido soporte para el modo de suspensión y coprocesadores.
- Para la arquitectura m68k (Motorola 68000) se ha implementado máquina virtual (simulador de plataforma), basado en el emulador Android Goldfish.
- Para la arquitectura AArch64 se ha implementado soporte para las extensiones Armv9-A SME (Scalable Matrix Extension).
- En el subsistema eBPF se permite el almacenamiento de punteros tipados en estructuras map, así como se ha añadido soporte para punteros dinámicos.
- Se ha propuesto un nuevo mecanismo de separación de memoria anticipada, que admite la gestión desde el espacio de usuario a través del archivo memory.reclaim. Escribir un número en el archivo indicado intentará desalojar la cantidad correspondiente de bytes del conjunto asociado con cgroup.
- Se ha mejorado la precisión del seguimiento del uso de memoria al comprimir datos en la partición de intercambio mediante el mecanismo zswap.
- Para la arquitectura RISC-V se ha añadido soporte para ejecutar archivos ejecutables de 32 bits en sistemas de 64 bits, se ha añadido un modo para vincular atributos limitantes a las páginas de memoria (por ejemplo, para prohibir el almacenamiento en caché) y se ha implementado la función kexec_file_load().
- La implementación del soporte para los sistemas de 32 bits Armv4T y Armv5 se ha adaptado para usarse en compilaciones de núcleo universales multiplataforma, adecuadas para diferentes sistemas ARM.
- Virtualización y seguridad
- En el subsistema EFI se ha implementado la posibilidad de transmitir información confidencial a sistemas invitados sin revelarla al sistema host. Los datos se proporcionan a través del directorio security/coco en securityfs.
- En el modo de protección Lockdown, que restringe el acceso del usuario root al núcleo y bloquea las vías de evasión del UEFI Secure Boot, se ha eliminado una vulnerabilidad que permitía evadir la protección mediante manipulaciones con el depurador del núcleo.
- Se han incluido parches destinados a mejorar la fiabilidad y el rendimiento del generador de números pseudoaleatorios.
- Al compilar con Clang 15 se ha implementado el soporte para el mecanismo de aleatorización de estructuras del núcleo.
- Se ha añadido al mecanismo Landlock, que permite restringir la interacción de un grupo de procesos con el entorno externo, soporte para reglas que permiten controlar la ejecución de operaciones de renombramiento de archivos.
- La subsistema IMA (Integridad Measurement Architecture), diseñada para verificar la integridad de los componentes del sistema operativo a través de firmas digitales y hashes, ha sido adaptada para utilizar el módulo fs-verity para la verificación de archivos.
- Se ha modificado la lógica de acciones al desactivar el acceso no privilegiado al subsistema eBPF; anteriormente se deshabilitaban todos los comandos relacionados con la llamada al sistema bpf(), pero a partir de la versión 5.19 se ha mantenido el acceso a comandos que no generan objetos. Con este comportamiento, se requiere un proceso privilegiado para cargar un programa BPF, pero luego los procesos no privilegiados pueden interactuar con ese programa.
- Se ha añadido soporte para la extensión AMD SEV-SNP (Secure Nested Paging), que garantiza un funcionamiento seguro con tablas de páginas anidadas y protege contra los ataques 'undeSErVed' y 'SEVerity' en los procesadores AMD EPYC, permitiendo eludir el mecanismo de protección AMD SEV (Secure Encrypted Virtualization).
- Se ha añadido soporte para el mecanismo Intel TDX (Trusted Domain Extensions), que permite bloquear intentos de acceso no autorizado a la memoria cifrada. máquinas virtuales.
- En el controlador virtio-blk, utilizado para emular dispositivos de bloques, se ha añadido soporte para entrada/salida utilizando polling, lo que en las pruebas realizadas ha permitido reducir las latencias en aproximadamente un 10%.
- Subsistema de red
- Se ha incluido una serie de parches BIG TCP que permiten aumentar el tamaño máximo de un paquete TCP a 4 GB para optimizar el funcionamiento de redes internas de alta velocidad en centros de datos. Este aumento del tamaño del paquete con un campo de 16 bits en el encabezado se logra a través de la implementación de paquetes 'jumbo', en los cuales el tamaño en el encabezado IP se establece en 0, y el tamaño real se transmite en un campo separado de 32 bits en un encabezado adjunto. En las pruebas de rendimiento, establecer el tamaño del paquete en 185 KB ha permitido aumentar el ancho de banda en un 50% y reducir significativamente las latencias en la transmisión de datos.
- Se ha continuado el trabajo de integración en la pila de red de herramientas para rastrear las causas del descartado de paquetes (códigos de motivo). El código de motivo se transmite durante la liberación de la memoria asociada al paquete y permite tener en cuenta situaciones como el descarte de un paquete debido a errores en los campos del encabezado, la detección de suplantación de identidad por parte del filtro rp_filter, un checksum incorrecto, falta de memoria, activación de reglas IPSec XFRM, un número de secuencia TCP incorrecto, etc.
- Se ha añadido soporte para revertir conexiones MPTCP (MultiPath TCP) al uso de TCP normal en situaciones donde no se pueden utilizar ciertas capacidades de MPTCP. MPTCP es una extensión del protocolo TCP para gestionar una conexión TCP con entrega de paquetes de manera simultánea a través de múltiples rutas a través de diferentes interfaces de red asociadas a diferentes direcciones IP. Se ha añadido una API para gestionar los flujos de MPTCP desde el espacio de usuario.
- Hardware
- Se han añadido más de 420 mil líneas de código relacionadas con el controlador amdgpu, de las cuales alrededor de 400 mil corresponden a archivos de encabezado generados automáticamente con datos para los registros ASIC en el controlador para GPU AMD, y otras 22.5 mil líneas proporcionan la implementación inicial del soporte para AMD SoC21. El tamaño total del controlador para GPUs AMD ha superado los 4 millones de líneas de código. Además del SoC21, el controlador AMD incluye soporte para SMU 13.x (Unidad de Gestión del Sistema), se ha actualizado el soporte para USB-C y GPUVM, y se ha realizado la preparación para el soporte de las próximas generaciones de plataformas RDNA3 (RX 7000) y CDNA (AMD Instinct).
- En el controlador i915 (Intel) se han ampliado las capacidades relacionadas con la gestión del consumo de energía. Se han añadido identificadores para GPU Intel DG2 (Arc Alchemist), que se utilizan en portátiles, se ha proporcionado soporte inicial para la plataforma Intel Raptor Lake-P (RPL-P), se ha añadido información sobre las tarjetas gráficas Arctic Sound-M, se ha implementado ABI para motores de computación, se ha añadido soporte para el formato Tile4 en las tarjetas DG2 y se ha implementado soporte para DisplayPort HDR en sistemas basados en la microarquitectura Haswell.
- En el controlador Nouveau se ha realizado la transición hacia el uso del manejador drm_gem_plane_helper_prepare_fb, y se ha aplicado la asignación de memoria estática para algunas estructuras y variables. En cuanto al uso de las fuentes de módulos del núcleo proporcionadas por NVIDIA, el trabajo se ha centrado hasta ahora en identificar y corregir errores. En el futuro, se planea utilizar el firmware publicado para mejorar el rendimiento del controlador.
- Se ha añadido un controlador para el controlador NVMe que se utiliza en las computadoras Apple basadas en el chip M1.
Simultáneamente, la Fundación Latinoamericana de Software Libre ha formado una versión completamente libre del núcleo 5.19 — Linux-libre 5.19-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 limpiado el controlador para pureLiFi X/XL/XC y TI AMx3 Wkup-M3 IPC. Se ha actualizado el código de limpieza de blobs en los controladores y subsistemas de Silicon Labs WFX, AMD amdgpu, Qualcomm WCNSS Peripheral Image Loader, Realtek Bluetooth, Mellanox Spectrum, Marvell WiFi-Ex, Intel AVS, IFS, controladores pu3-imgu. Se ha implementado el procesamiento de archivos devicetree de Qualcomm AArch64. Se ha añadido soporte para un nuevo esquema de denominación de componentes de Sound Open Firmware. Se ha detenido la limpieza del controlador ATM Ambassador, que ha sido eliminado del núcleo. La gestión de la limpieza de blobs en HDCP y Mellanox Core se ha trasladado a etiquetas kconfig separadas.
Fuente: opennet.ru
