Lanzamiento del núcleo de Linux 5.19

Luego de dos meses de desarrollo, Linus Torvalds presentó el lanzamiento del kernel Linux 5.19. Entre los cambios más notables: soporte para la arquitectura del procesador LoongArch, integración de parches "BIG TCP", modo bajo demanda en fscache, eliminación de código para soportar el formato a.out, la capacidad de usar ZSTD para la compresión de firmware, una interfaz para gestionar la expulsión de memoria del espacio del usuario, aumentar la confiabilidad y el rendimiento del generador de números pseudoaleatorios, soporte para Intel IFS (In-Field Scan), AMD SEV-SNP (Secure Nested Paging), Intel TDX (Trusted Domain Extensions) y ARM Extensiones SME (Scalable Matrix Extension).

En el anuncio, Linus dijo que lo más probable es que la próxima versión del kernel tenga el número 6.0, ya que la rama 5.x ha acumulado suficientes versiones para cambiar el primer número en el número de versión. El cambio de numeración se realiza por motivos estéticos y es un paso formal que alivia las molestias por la acumulación de una gran cantidad de temas en la serie.

Linus también mencionó que utilizó una computadora portátil Apple basada en la arquitectura ARM64 (Apple Silicon) con un entorno Linux basado en la distribución Asahi Linux para crear la versión. No es la estación de trabajo principal de Linus, pero usó la plataforma para probar su idoneidad para el trabajo del kernel y para asegurarse de poder producir versiones del kernel mientras viajaba con una computadora portátil liviana a mano. Anteriormente, hace muchos años, Linus tenía experiencia en el uso de equipos Apple para el desarrollo: una vez usó una PC basada en la CPU ppc970 y una computadora portátil Macbook Air.

La nueva versión incluye 16401 correcciones de 2190 desarrolladores (en la última versión hubo 16206 correcciones de 2127 desarrolladores), el tamaño del parche es de 90 MB (los cambios afectaron a 13847 archivos, se agregaron 1149456 líneas de código, se eliminaron 349177 líneas). Aproximadamente el 39% de todos los cambios introducidos en 5.19 están relacionados con controladores de dispositivos, aproximadamente el 21% de los cambios están relacionados con la actualización de código específico para arquitecturas de hardware, el 11% están relacionados con la pila de red, el 4% están relacionados con sistemas de archivos y el 3% están relacionados con los subsistemas internos del núcleo.

Innovaciones clave en el kernel 5.19:

  • Subsistema de disco, E/S y sistemas de archivos
    • El sistema de archivos EROFS (Sistema de archivos de solo lectura mejorado), diseñado para usarse en particiones de solo lectura, se ha convertido para usar el subsistema fscache, que proporciona almacenamiento en caché de datos. El cambio mejoró significativamente el rendimiento de los sistemas en los que se lanza una gran cantidad de contenedores desde una imagen basada en EROFS.
    • Se ha agregado un modo de lectura bajo demanda al subsistema fscache, que se utiliza para optimizar EROFS. El nuevo modo le permite organizar la lectura del almacenamiento en caché de imágenes FS ubicadas en el sistema local. A diferencia del modo de operación inicialmente disponible, que se centra en el almacenamiento en caché en el sistema de archivos local de los datos transferidos a través de sistemas de archivos de red, el modo "bajo demanda" delega las funciones de recuperar datos y escribirlos en el caché a un Proceso en segundo plano que se ejecuta en el espacio del usuario.
    • XFS proporciona la capacidad de almacenar miles de millones de atributos extendidos en un i-nodo. El número máximo de extensiones para un archivo aumentó de 4 mil millones a 247. Se implementó un modo para actualizar atómicamente varios atributos de archivos extendidos a la vez.
    • El sistema de archivos Btrfs ha optimizado el trabajo con bloqueos, lo que permitió un aumento de aproximadamente el 7% en el rendimiento al escribir directamente en modo nowait. El rendimiento de las operaciones en modo NOCOW (sin copia en escritura) aumenta aproximadamente un 3%. Se ha reducido la carga en el caché de la página cuando se ejecuta el comando "enviar". El tamaño mínimo de las subpáginas se ha reducido de 64K a 4K (se pueden utilizar subpáginas más pequeñas que las páginas del núcleo). Se ha realizado una transición del uso de un árbol de base al algoritmo XArrays.
    • Se ha agregado un modo al servidor NFS para extender la preservación del estado de bloqueo establecido por un cliente que dejó de responder a las solicitudes. El nuevo modo le permite retrasar la eliminación del bloqueo hasta por un día, a menos que otro cliente solicite un bloqueo competitivo. En modo normal, el bloqueo se elimina 90 segundos después de que el cliente deja de responder.
    • El subsistema de seguimiento de eventos en fanotify FS implementa el indicador FAN_MARK_EVICTABLE, con el que puede deshabilitar la fijación de i-nodos de destino en la caché, por ejemplo, para ignorar las subramas sin fijar sus partes en la caché.
    • El controlador para el sistema de archivos FAT32 ha agregado soporte para obtener información sobre el momento de creación del archivo a través de la llamada al sistema statx con la implementación de 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 para permitir el borrado simultáneo de un grupo de sectores cuando el modo 'dirsync' está activo, en lugar del borrado secuencial sector por sector. Al reducir la cantidad de solicitudes de bloqueo después de la optimización, el rendimiento de crear una gran cantidad de directorios en la tarjeta SD aumentó en más de un 73-85%, dependiendo del tamaño del clúster.
    • El kernel incluye la primera actualización correctiva del controlador ntfs3. Desde que ntfs3 se incluyó en el kernel 5.15 en octubre pasado, el controlador no se actualizó y se perdió la comunicación con los desarrolladores, pero los desarrolladores ahora han reanudado la publicación de cambios. Los parches propuestos eliminaron errores que provocaban pérdidas de memoria y fallos, resolvieron problemas con la ejecución de xfstests, limpiaron el código no utilizado y corrigieron errores tipográficos.
    • Para OverlayFS, se implementó la capacidad de asignar ID de usuario de sistemas de archivos montados, que se utiliza para hacer coincidir los archivos de un usuario específico en una partición externa montada con otro usuario en el sistema actual.
  • Servicios de memoria y sistema.
    • Se agregó soporte inicial para la arquitectura del conjunto de instrucciones LoongArch utilizada en los procesadores Loongson 3 5000, que implementa el nuevo RISC ISA, similar a MIPS y RISC-V. La arquitectura LoongArch está disponible en tres versiones: simplificada de 32 bits (LA32R), normal de 32 bits (LA32S) y de 64 bits (LA64).
    • Se eliminó el código para admitir el formato de archivo ejecutable a.out, que quedó obsoleto en la versión 5.1. El formato a.out ha quedado obsoleto durante mucho tiempo en los sistemas Linux, y las herramientas modernas no admiten la generación de archivos a.out en las configuraciones predeterminadas de Linux. El cargador de archivos a.out se puede implementar completamente en el espacio del usuario.
    • Se ha interrumpido la compatibilidad con opciones de arranque específicas de x86: nosp, nosmap, nosmep, noexec y noclflush).
    • Se ha interrumpido el soporte para la arquitectura obsoleta CPU h8300 (Renesas H8/300), que durante mucho tiempo estuvo sin soporte.
    • Capacidades ampliadas relacionadas con la respuesta a la detección de bloqueos divididos (“bloqueos divididos”) que ocurren al acceder a datos no alineados en la memoria debido al hecho de que al ejecutar una instrucción atómica, los datos cruzan dos líneas de caché de la CPU. Estos bloqueos provocan una caída significativa del rendimiento. Si antes, de forma predeterminada, el kernel emitía una advertencia con información sobre el proceso que causó el bloqueo, ahora el proceso problemático se ralentizará aún más para preservar el rendimiento del resto del sistema.
    • Se agregó soporte para el mecanismo IFS (In-Field Scan) implementado en los procesadores Intel, que le permite ejecutar pruebas de diagnóstico de CPU de bajo nivel que pueden identificar problemas que no son detectados por herramientas estándar basadas en códigos de corrección de errores (ECC) o bits de paridad. . Las pruebas realizadas se realizan en forma de firmware descargable, diseñado de manera similar a las actualizaciones de microcódigo. Los resultados de las pruebas están disponibles a través de sysfs.
    • Se agregó la capacidad de incrustar un archivo bootconfig en el kernel, lo que permite, además de las opciones de la línea de comandos, determinar los parámetros del kernel a través de un archivo de configuración. La incrustación se realiza utilizando la opción de ensamblaje 'CONFIG_BOOT_CONFIG_EMBED_FILE=»/PATH/TO/BOOTCONFIG/FILE»'. Anteriormente, bootconfig se determinaba adjuntándolo a la imagen initrd. La integración en el kernel permite utilizar bootconfig en configuraciones sin initrd.
    • Se ha implementado la capacidad de descargar firmware comprimido utilizando el algoritmo Zstandard. Se ha agregado un conjunto de archivos de control /sys/class/firmware/* a sysfs, lo que le permite iniciar la carga del firmware desde el espacio del usuario.
    • La interfaz de E/S asíncrona io_uring ofrece un nuevo indicador, IORING_RECVSEND_POLL_FIRST, que, cuando se establece, primero enviará una operación de red para que se procese mediante sondeo, lo que puede ahorrar recursos en situaciones en las que es aceptable procesar la operación con cierto retraso. io_uring también agregó soporte para la llamada al sistema socket(), propuso nuevos indicadores para simplificar la administración de descriptores de archivos, agregó un modo "multidisparo" para aceptar varias conexiones a la vez en la llamada aceptar() y agregó operaciones para reenviar NVMe. comandos directamente al dispositivo.
    • La arquitectura Xtensa brinda soporte para la herramienta de depuración KCSAN (Kernel Concurrency Sanitizer), diseñada para detectar dinámicamente condiciones de carrera dentro del kernel. También se agregó soporte para modo de suspensión y coprocesadores.
    • Para la arquitectura m68k (Motorola 68000) se ha implementado una máquina virtual (simulador de plataforma) basada en el emulador Android Goldfish.
    • Para la arquitectura AArch64, se ha implementado soporte para extensiones Armv9-A SME (Scalable Matrix Extension).
    • El subsistema eBPF permite almacenar punteros escritos en estructuras de mapas y también agrega soporte para punteros dinámicos.
    • Se propone un nuevo mecanismo proactivo de recuperación de memoria que admite el control del espacio del usuario mediante el archivo Memory.reclaim. Escribir un número en el archivo especificado intentará desalojar el número correspondiente de bytes del conjunto asociado con el cgroup.
    • Precisión mejorada del uso de la memoria al comprimir datos en la partición de intercambio utilizando el mecanismo zswap.
    • Para la arquitectura RISC-V, se proporciona soporte para ejecutar ejecutables de 32 bits en sistemas de 64 bits, se agrega un modo para vincular atributos restrictivos a páginas de memoria (por ejemplo, para deshabilitar el almacenamiento en caché) y se implementa la función kexec_file_load(). .
    • La implementación del soporte para sistemas Armv32T y Armv4 de 5 bits está adaptada para su uso en compilaciones de kernel multiplataforma universales adecuadas para diferentes sistemas ARM.
  • Virtualización y seguridad
    • El subsistema EFI implementa la capacidad de transferir confidencialmente información secreta a sistemas invitados sin revelarla al sistema anfitrión. Los datos se proporcionan a través del directorio security/coco en securityfs.
    • El modo de protección de bloqueo, que restringe el acceso del usuario root al kernel y bloquea las rutas de omisión de arranque seguro UEFI, ha eliminado una laguna que permitía omitir la protección manipulando el depurador del kernel.
    • Se incluyen parches destinados a mejorar la confiabilidad y el rendimiento del generador de números pseudoaleatorios.
    • Al compilar con Clang 15, se implementa soporte para el mecanismo para aleatorizar las estructuras del kernel.
    • El mecanismo Landlock, que le permite limitar la interacción de un grupo de procesos con el entorno externo, brinda soporte para reglas que le permiten controlar la ejecución de las operaciones de cambio de nombre de archivos.
    • El subsistema IMA (Arquitectura de medición de integridad), diseñado para verificar la integridad de los componentes del sistema operativo mediante firmas digitales y hashes, pasó a utilizar el módulo fs-verity para la verificación de archivos.
    • Se ha cambiado la lógica de las acciones al deshabilitar el acceso sin privilegios al subsistema eBPF: anteriormente se deshabilitaban todos los comandos asociados con la llamada al sistema bpf() y, a partir de la versión 5.19, se deja el acceso a los comandos que no conducen a la creación de objetos. . Este comportamiento requiere un proceso privilegiado para cargar un programa BPF, pero luego los procesos sin privilegios pueden interactuar con el programa.
    • Se agregó soporte para la extensión AMD SEV-SNP (Secure Nested Paging), que proporciona trabajo seguro con tablas de páginas de memoria anidadas y protege contra ataques "undeSErVed" y "SEVerity" en los procesadores AMD EPYC, que permiten eludir AMD SEV (Secure Encrypted Virtualization). ) mecanismo de protección.
    • Se agregó soporte para el mecanismo Intel TDX (Trusted Domain Extensions), que le permite bloquear intentos de terceros de acceder a la memoria cifrada de las máquinas virtuales.
    • El controlador virtio-blk, utilizado para emular dispositivos de bloque, ha añadido soporte para E/S mediante sondeo, lo que, según las pruebas, ha reducido la latencia en aproximadamente un 10%.
  • Subsistema de red
    • El paquete incluye una serie de parches BIG TCP que le permiten aumentar el tamaño máximo de un paquete TCP a 4 GB para optimizar el funcionamiento de las redes internas de centros de datos de alta velocidad. Se logra un aumento similar en el tamaño del paquete con un tamaño de campo de encabezado de 16 bits mediante la implementación de paquetes "jumbo", cuyo tamaño en el encabezado IP se establece en 0, y el tamaño real se transmite en un paquete separado de 32 bits. campo en un encabezado adjunto separado. En las pruebas de rendimiento, establecer el tamaño del paquete en 185 KB aumentó el rendimiento en un 50 % y redujo significativamente la latencia de transferencia de datos.
    • Se continuó trabajando en la integración de herramientas en la pila de red para rastrear los motivos de la caída de paquetes (códigos de motivo). El código de motivo se envía cuando se libera la memoria asociada con el paquete y permite situaciones tales como descarte de paquetes debido a errores de encabezado, detección de suplantación de identidad de rp_filter, suma de verificación no válida, falta de memoria, reglas IPSec XFRM activadas, número de secuencia TCP no válido, etc.
    • Se agregó soporte para recurrir a conexiones MPTCP (MultiPath TCP) para usar TCP normal, en situaciones donde ciertas características de MPTCP no se pueden usar. MPTCP es una extensión del protocolo TCP para organizar el funcionamiento de una conexión TCP con la entrega de paquetes simultáneamente a lo largo de varias rutas a través de diferentes interfaces de red asociadas con diferentes direcciones IP. Se agregó API para controlar las transmisiones MPTCP desde el espacio del usuario.
  • Equipo
    • Se agregaron más de 420 líneas de código relacionadas con el controlador amdgpu, de las cuales alrededor de 400 líneas son archivos de encabezado generados automáticamente para datos de registro ASIC en el controlador AMD GPU, y otras 22.5k líneas proporcionan una implementación inicial de soporte para AMD SoC21. El tamaño total del controlador para las GPU AMD superó los 4 millones de líneas de código. Además de SoC21, el controlador AMD incluye soporte para SMU 13.x (System Management Unit), soporte actualizado para USB-C y GPUVM, y está preparado para soportar las próximas generaciones de RDNA3 (RX 7000) y CDNA (AMD Instinct) plataformas.
    • El controlador i915 (Intel) tiene capacidades ampliadas relacionadas con la administración de energía. Se agregaron identificadores para las GPU Intel DG2 (Arc Alchemist) utilizadas en computadoras portátiles, se brindó soporte inicial para la plataforma Intel Raptor Lake-P (RPL-P), se agregó información sobre las tarjetas gráficas Arctic Sound-M), se implementó ABI para motores de cómputo, se agregó para Soporte para tarjetas DG2 para el formato Tile4, para sistemas basados ​​​​en la microarquitectura Haswell, se implementa soporte DisplayPort HDR.
    • El controlador Nouveau pasó a utilizar el controlador drm_gem_plane_helper_prepare_fb; se aplicó asignación de memoria estática a algunas estructuras y variables. En cuanto al uso de módulos de kernel de código abierto por parte de NVIDIA en Nouveau, el trabajo hasta ahora se reduce a identificar y eliminar errores. En el futuro, está previsto utilizar el firmware publicado para mejorar el rendimiento del controlador.
    • Se agregó un controlador para el controlador NVMe utilizado en computadoras Apple basadas en el chip M1.

Al mismo tiempo, la Fundación Latinoamericana de Software Libre formó una versión del kernel 5.19 completamente libre - Linux-libre 5.19-gnu, libre de elementos de firmware y controladores que contengan componentes o secciones de código no libres, cuyo alcance es limitado por el fabricante. La nueva versión limpia los controladores para pureLiFi X/XL/XC y TI AMx3 Wkup-M3 IPC. Código de limpieza de blobs actualizado en Silicon Labs WFX, AMD amdgpu, Qualcomm WCNSS Peripheral Image Loader, Realtek Bluetooth, Mellanox Spectrum, Marvell WiFi-Ex, Intel AVS, IFS, controladores y subsistemas pu3-imgu. Se ha implementado el procesamiento de archivos de árbol de dispositivos Qualcomm AArch64. Se agregó soporte para el nuevo esquema de nombres de componentes de Sound Open Firmware. Se dejó de limpiar el controlador ATM Ambassador, que se eliminó del kernel. La gestión de la limpieza de blobs en HDCP y Mellanox Core se ha trasladado a etiquetas kconfig independientes.

Fuente: opennet.ru

Añadir un comentario