Lanzamiento del núcleo de Linux 6.1

Luego de dos meses de desarrollo, Linus Torvalds presentó el lanzamiento del kernel Linux 6.1. Entre los cambios más notables: soporte para el desarrollo de controladores y módulos en lenguaje Rust, modernización del mecanismo para determinar las páginas de memoria utilizadas, un administrador de memoria especial para programas BPF, un sistema para diagnosticar problemas de memoria KMSAN, el KCFI (Kernelk Control -Flow Integrity) mecanismo de protección, la introducción del árbol de estructura de arce.

La nueva versión incluye 15115 correcciones de 2139 desarrolladores, el tamaño del parche es de 51 MB, que es aproximadamente 2 veces más pequeño que el tamaño de los parches de los kernels 6.0 y 5.19. Los cambios afectaron a 13165 archivos, se agregaron 716247 líneas de código y se eliminaron 304560 líneas. Aproximadamente el 45% de todos los cambios introducidos en 6.1 están relacionados con controladores de dispositivos, aproximadamente el 14% de los cambios están relacionados con la actualización de código específico para arquitecturas de hardware, el 14% están relacionados con la pila de red, el 3% 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 6.1:

  • Servicios de memoria y sistema.
    • Se agregó la capacidad de usar Rust como segundo idioma para desarrollar controladores y módulos del kernel. La razón principal para admitir Rust es facilitar la escritura de controladores de dispositivos seguros y de alta calidad al reducir la probabilidad de cometer errores al trabajar con la memoria. La compatibilidad con Rust está deshabilitada de forma predeterminada y no da como resultado que Rust se incluya como una dependencia de compilación del kernel requerida. Hasta ahora, el kernel ha adoptado una versión mínima y simplificada de los parches, que se ha reducido de 40 a 13 mil líneas de código y proporciona solo el mínimo necesario, suficiente para construir un módulo de kernel simple escrito en lenguaje Rust. En el futuro, está previsto aumentar gradualmente la funcionalidad existente, transfiriendo otros cambios de la rama Rust-for-Linux. Paralelamente, se están desarrollando proyectos para utilizar la infraestructura propuesta para desarrollar controladores para unidades NVMe, el protocolo de red 9p y la GPU Apple M1 en lenguaje Rust.
    • Para sistemas basados ​​en arquitecturas AArch64, RISC-V y LoongArch con EFI, se ha implementado la capacidad de cargar directamente imágenes del kernel comprimidas. Se agregaron controladores para cargar, ejecutar y descargar imágenes del kernel, llamados directamente desde EFI zboot. También se han agregado controladores para instalar y eliminar protocolos de la base de datos de protocolos EFI. Anteriormente, el descomprimido se realizaba mediante un gestor de arranque independiente, pero ahora esto lo puede realizar un controlador en el propio kernel: la imagen del kernel se forma como una aplicación EFI.
    • La composición incluye parte de los parches con la implementación de un modelo de gestión de memoria multinivel, que permite separar bancos de memoria con diferentes características de rendimiento. Por ejemplo, las páginas más utilizadas pueden almacenarse en la memoria más rápida, mientras que las páginas utilizadas con menos frecuencia pueden almacenarse en la memoria relativamente lenta. Kernel 6.1 introduce un mecanismo para determinar dónde se ubican las páginas muy utilizadas en la memoria lenta para que puedan ser promovidas a memoria rápida, y también introduce un concepto general de niveles de memoria y su rendimiento relativo.
    • Incluye el mecanismo MGLRU (LRU multigeneracional), que reemplaza la antigua implementación LRU (menos utilizada recientemente) basada en dos colas con una estructura de múltiples etapas que determina mejor qué páginas de memoria están realmente en uso y cuáles se pueden enviar a la partición de intercambio.
    • Se agregó soporte para la estructura de datos de "árbol de arce" propuesta por los ingenieros de Oracle, que se posiciona como un reemplazo más efectivo para la estructura de "árbol rojo-negro". El árbol de arce es una variante del árbol B que admite la indexación de rangos y está diseñado para hacer un uso eficiente del caché de los procesadores modernos. Algunos subsistemas de gestión de memoria ya se han transferido al árbol de arce, lo que ha tenido un efecto positivo en su rendimiento. En el futuro, se podrá utilizar el arce para implementar el bloqueo de rango.
    • Se ha agregado al subsistema BPF la capacidad de crear programas BPF "destructivos" especialmente diseñados para iniciar un apagado de emergencia mediante la llamada crash_kexec(). Estos programas BPF pueden ser necesarios con fines de depuración para iniciar la creación de un volcado de memoria en un momento determinado. Para acceder a operaciones destructivas al cargar un programa BPF, debe especificar el indicador BPF_F_DESTRUCTIVE, activar sysctl kernel.destructivo_bpf_enabled y tener derechos CAP_SYS_BOOT.
    • Para los programas BPF, es posible enumerar elementos de cgroup, así como enumerar recursos (archivos, vma, procesos, etc.) de un hilo o tarea específica. Se ha implementado un nuevo tipo de mapa para crear buffers circulares de usuario.
    • Se agregó una llamada especial para la asignación de memoria en programas BPF (asignador de memoria), que proporciona una asignación de memoria más segura en el contexto BPF que el kmalloc() estándar.
    • Se ha integrado la primera parte de los cambios, brindando la capacidad de crear controladores para dispositivos de entrada con una interfaz HID (Human Interface Device), implementada en forma de programas BPF.
    • El kernel eliminó por completo el código para admitir el formato de archivo ejecutable a.out, que quedó obsoleto en la versión 5.1 y se ha deshabilitado para las principales arquitecturas desde las versiones 5.18 y 5.19. 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.
    • Para sistemas basados ​​en la arquitectura del conjunto de instrucciones LoongArch utilizada en los procesadores Loongson 3 5000 e implementando el nuevo RISC ISA, similar a MIPS y RISC-V, se implementa soporte para eventos de medición de rendimiento (perf events), kexec, kdump y compilación BPF JIT. .
    • La interfaz de E/S asíncrona io_uring ofrece un nuevo modo, IORING_SETUP_DEFER_TASKRUN, que permite aplazar temporalmente el trabajo relacionado con el búfer en anillo hasta que se realice una solicitud de aplicación, lo que se puede utilizar para trabajar por lotes y evitar problemas de latencia debido a la preferencia. tiempo inadecuado.
    • Los procesos en el espacio del usuario tienen la capacidad de iniciar la conversión de un rango de páginas de memoria normales en un conjunto de páginas de memoria grandes (páginas enormes transparentes).
    • Se agregó la implementación del dispositivo /dev/userfaultfd, que permite el acceso a la funcionalidad de la llamada al sistema userfaultfd() usando derechos de acceso en el FS. La funcionalidad userfaultfd le permite crear controladores para acceder a páginas de memoria no asignadas (fallos de página) en el espacio del usuario.
    • Se han aumentado los requisitos para la versión de la utilidad GNU Make; ahora se requiere al menos la versión 3.82 para compilar el kernel.
  • Subsistema de disco, E/S y sistemas de archivos
    • Se han realizado importantes optimizaciones de rendimiento en el sistema de archivos Btrfs; entre otras cosas, el rendimiento de la llamada FIEMAP ioctl se ha incrementado en órdenes de magnitud. Se agregó soporte para escrituras asíncronas en buffer para aplicaciones que usan io_uring. Se agregó soporte para archivos protegidos con fs-verity a la operación de "enviar".
    • El sistema de archivos ext4 ha agregado optimizaciones de rendimiento relacionadas con el mantenimiento del diario y la operación de solo lectura.
    • El sistema de archivos EROFS (Sistema de archivos de solo lectura mejorado), diseñado para usarse en particiones accesibles en modo de solo lectura, implementa la capacidad de compartir datos duplicados en diferentes sistemas de archivos.
    • Se agregó la llamada al sistema statx() para mostrar información sobre si se puede aplicar E/S directa a un archivo.
    • Se ha agregado soporte para la creación de archivos temporales con el indicador O_TMPFILE al subsistema FUSE (Sistemas de archivos en el espacio del usuario).
  • Virtualización y seguridad
    • Se reemplazó la implementación del mecanismo de protección CFI (Control Flow Integrity), agregando verificaciones antes de cada llamada indirecta para detectar algunas formas de comportamiento indefinido que potencialmente podrían conducir a una violación del orden normal de ejecución (flujo de control) como resultado de la uso de exploits que cambian punteros a funciones almacenadas en la memoria. La implementación estándar de CFI del proyecto LLVM ha sido reemplazada por una opción también basada en el uso de Clang, pero especialmente adaptada para proteger subsistemas de bajo nivel y kernels del sistema operativo. En LLVM, se ofrecerá una nueva implementación en la versión Clang 16 y se habilitará con la opción "-fsanitize=kcfi". La diferencia clave con la nueva implementación es que no está vinculada a optimizaciones de tiempo de enlace (LTO) y no da como resultado que los punteros de función sean reemplazados por enlaces en la tabla de salto.
    • Para los módulos LSM (Módulo de seguridad de Linux), es posible crear controladores que intercepten operaciones para crear espacios de nombres.
    • Se proporcionan herramientas para verificar firmas digitales PKCS#7 en programas BPF.
    • La capacidad de abrir en modo sin bloqueo (O_NONBLOCK), que se eliminó inadvertidamente en el kernel 5.6, ha sido devuelta a /dev/random.
    • En sistemas con arquitectura x86, se ha agregado una advertencia en caso de mapeo de páginas de memoria por parte de subsistemas del kernel que permiten simultáneamente la ejecución y la escritura. En el futuro, se está considerando la posibilidad de prohibir por completo este tipo de mapeo de memoria.
    • Se agregó el mecanismo de depuración KMSAN (Kernel Memory Sanitizer) para detectar el uso de memoria no inicializada en el kernel, así como pérdidas de memoria no inicializada entre el espacio del usuario y los dispositivos.
    • Se han realizado mejoras en el generador de números pseudoaleatorios CRNG criptoseguro utilizado en la llamada getrandom. Los cambios fueron preparados por Jason A. Donenfeld, autor de VPN WireGuard, y tienen como objetivo mejorar la seguridad de la extracción de enteros pseudoaleatoria.
  • Subsistema de red
    • La pila TCP proporciona la capacidad (deshabilitada de forma predeterminada) de usar tablas hash de socket por separado para cada espacio de nombres, lo que mejora el rendimiento en sistemas con una gran cantidad de espacios de nombres.
    • Código eliminado para admitir el protocolo DECnet heredado. Los resguardos de API del espacio de usuario se dejan en su lugar para permitir la compilación de aplicaciones que utilizan DECnet, pero estas aplicaciones no podrán conectarse a la red.
    • El protocolo netlink está documentado.
  • Equipo
    • El controlador amdgpu ha agregado soporte para el reenvío DSC (Display Stream Compression) para una compresión de datos sin pérdidas al intercambiar información con pantallas que admiten resoluciones muy altas. Se continúa trabajando para brindar soporte para las plataformas AMD RDNA3 (RX 7000) y CDNA (Instinct). Se agregó soporte para componentes IP DCN 3.2, SMU 13.x, NBIO 7.7, GC 11.x, PSP 13.x, SDMA 6.x y GMC 11.x. El controlador amdkfd (para GPU AMD discretas como Polaris) brinda soporte para GFX 11.0.3.
    • El controlador i915 (Intel) incluye soporte para GPU Meteor Lake. Meteor Lake y las GPU más nuevas admiten la interfaz DP 2.0 (DisplayPort). Se agregaron identificadores para tarjetas de video basadas en la microarquitectura Alder Lake S.
    • Se agregó soporte para subsistemas de audio implementados en procesadores Apple Silicon, Intel SkyLake e Intel KabyLake. El controlador de audio CS35L41 HDA admite el modo de suspensión. Se agregó soporte ASoC (ALSA System on Chip) para chips de audio integrados Apple Silicon, AMD Rembrant DSP, AMD Pink Sardine ACP 6.2, Everest ES8326, Intel Sky Lake y Kaby Lake, Mediatek MT8186, NXP i.MX8ULP DSP, Qualcomm SC8280XP, SM8250, SM8450 y Texas Instruments SRC4392
    • Se agregó soporte para paneles LCD Samsung LTL101AL01, B120XAN01.0, R140NWF5 RH, Densitron DMT028VGHMCMI-1A TFT, AUO B133UAN02.1, IVO M133NW4J-R3, Innolux N120ACA-EA1, AUO B116XAK01.6, BOE NT116WH M-N21, INX N116BCA- EA2, INX N116BCN-EA1, tecnología Multi-Inno MI0800FT-9.
    • Se agregó soporte para controladores AHCI SATA utilizados en el SoC Baikal-T1.
    • Se agregó soporte para chips Bluetooth MediaTek MT7921, Intel Magnetor (CNVi, Conectividad integrada), Realtek RTL8852C, RTW8852AE y RTL8761BUV (Edimax BT-8500).
    • El controlador ath11k para módulos inalámbricos de Qualcomm agregó soporte para escaneo espectral en el rango de 160 MHz, implementó NAPI de subprocesos múltiples y soporte mejorado para chips Wi-Fi Qualcomm WCN6750.
    • Se agregaron controladores para el teclado PinePhone, paneles táctiles InterTouch (ThinkPad P1 G3), controlador adaptativo X-Box, controlador de vuelo PhoenixRC, controlador para automóvil VRC-2, controlador DualSense Edge, panel de operación IBM, controles remotos XBOX One Elite, tabletas XP-PEN Deco Pro S e Intuos Pro Pequeño (PTH-460).
    • Se agregó un controlador para los aceleradores criptográficos Aspeed HACE (Hash and Crypto Engine).
    • Se agregó soporte para controladores integrados Thunderbolt/USB4 Intel Meteor Lake.
    • Se agregó soporte para los teléfonos inteligentes Sony Xperia 1 IV, Samsung Galaxy E5, E7 y Grand Max, Pine64 Pinephone Pro.
    • Se agregó soporte para SoC ARM y placas: AMD DaytonaX, Mediatek MT8186, Rockchips RK3399 y RK3566, TI AM62A, NXP i.MX8DXL, Renesas R-Car H3Ne-1.7G, Qualcomm IPQ8064-v2.0, IPQ8062, IPQ8065, Kontron SL/ BL i.MX8MM OSM-S, MT8195 (Acer Tomato), Radxa ROCK 4C+, NanoPi R4S Enterprise Edition, JetHome JetHub D1p. Controladores actualizados para SoC Samsung, Mediatek, Renesas, Tegra, Qualcomm, Broadcom y NXP.

Al mismo tiempo, la Fundación Latinoamericana de Software Libre formó una versión del kernel 6.1 completamente libre - Linux-libre 6.1-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 el nuevo controlador rtw8852b y los archivos DTS para varios SoC Qualcomm y MediaTek con procesadores basados ​​en la arquitectura AArch64. Código de limpieza de blobs actualizado en controladores y subsistemas amdgpu, i915, brcmfmac, r8188eu, rtw8852c, Intel ACPI. Se ha corregido la limpieza de controladores obsoletos de tarjetas de TV tm6000, cpia2 v4l, sp8870, av7110.

Fuente: opennet.ru

Añadir un comentario