Lanzamiento del núcleo Linux 6.1

Después de dos meses de desarrollo, Linus Torvalds presentó el lanzamiento del núcleo Linux 6.1. Entre los cambios más destacados se encuentran: soporte para el desarrollo de controladores y módulos en el lenguaje Rust, modernización del mecanismo de determinación de las páginas de memoria utilizadas, un gestor de memoria especializado para programas BPF, un sistema de diagnóstico de problemas de memoria KMSAN, un mecanismo de protección KCFI (Kernel Control-Flow Integrity) e implementación de la estructura Maple tree.

Se han incorporado 15115 correcciones en la nueva versión, provenientes de 2139 desarrolladores, y el tamaño del parche es de 51 MB, lo que es aproximadamente dos veces menos que los tamaños de parches de los núcleos 6.0 y 5.19. Los cambios afectaron a 13165 archivos, se añadieron 716247 líneas de código y se eliminaron 304560 líneas. Alrededor del 45% de todos los cambios presentados en 6.1 están relacionados con controladores de dispositivos, aproximadamente el 14% de los cambios se relacionan con la actualización de código específico de arquitecturas de hardware, el 14% está relacionado con la pila de red, el 3% con sistemas de archivos y el 3% con subsistemas internos del núcleo.

Novedades principales en el núcleo 6.1:

  • Memoria y servicios del sistema
    • Se ha añadido la posibilidad de utilizar el lenguaje Rust como segundo lenguaje para el desarrollo de controladores y módulos del núcleo. El principal motivo para soportar Rust es simplificar la escritura de controladores de dispositivos seguros y de alta calidad al reducir la probabilidad de cometer errores en la gestión de memoria. El soporte para Rust no está activo por defecto y no implica que Rust se incluya como una dependencia de compilación obligatoria del núcleo. Actualmente, solo se ha aceptado una versión mínima recortada de los parches, que ha sido reducida de 40000 a 13000 líneas de código y proporciona solo lo mínimo necesario para compilar un módulo simple del núcleo escrito en Rust. Se planea aumentar gradualmente la funcionalidad existente, trasladando otros cambios de la rama Rust-for-Linux. Paralelamente, se desarrollan proyectos para utilizar la infraestructura propuesta para desarrollar controladores de discos NVMe, protocolo de red 9p y GPU Apple M1 en Rust.
    • Para sistemas basados en arquitecturas AArch64, RISC-V y LoongArch con EFI, se ha implementado la capacidad de arranque directo desde imágenes de núcleo comprimidas. Se han añadido controladores para cargar, iniciar y descargar imágenes de núcleo, invocados directamente desde EFI zboot. También se han incorporado controladores para instalar y eliminar protocolos de la base de datos de protocolos EFI. Anteriormente, la descompresión se realizaba mediante un cargador separado, pero ahora puede ser gestionada por el propio núcleo: la imagen del núcleo se forma como una aplicación EFI.
    • Se ha incluido 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 alojarse en la memoria más rápida, mientras que las páginas que se utilizan raramente pueden almacenarse en memoria relativamente más lenta. En el núcleo 6.1 se ha adoptado un mecanismo para identificar la ubicación de las páginas de uso intensivo en memoria lenta para promoverlas a la memoria rápida, así como se ha implementado el concepto general de niveles de memoria y su rendimiento relativo.
    • Se ha incluido el mecanismo MGLRU (Multi-Generational LRU), que sustituye la antigua implementación de LRU (Least Recently Used) basada en dos colas por una estructura multinivel, que identifica mejor qué páginas de memoria se utilizan realmente y cuáles se pueden expulsar al área de intercambio.
    • Se ha añadido soporte para la estructura de datos 'maple tree' propuesta por los ingenieros de Oracle, que se presenta como un reemplazo más eficiente de la estructura 'red-black tree'. El maple tree es una variante del B-tree, que soporta la indexación por rangos de valores y está diseñado para un uso eficiente de la caché. de procesadores modernos. El maple tree ya ha sido implementado en algunos subsistemas de gestión de memoria, lo que ha tenido un impacto positivo en su rendimiento. En el futuro, el maple tree podría utilizarse para implementar bloqueos por rangos.
    • Se ha añadido a la subsistema BPF la capacidad de crear programas BPF 'destructivos', diseñados específicamente 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 específico. Para acceder a las operaciones destructivas al cargar el programa BPF, es necesario especificar la bandera BPF_F_DESTRUCTIVE, activar sysctl kernel.destructive_bpf_enabled y tener los permisos CAP_SYS_BOOT.
    • Para los programas BPF, se ha proporcionado la posibilidad de iterar sobre los elementos de cgroup, así como de iterar sobre los recursos (archivos, vma, procesos, etc.) de un hilo o tarea específica. Se ha implementado un nuevo tipo de mapa para crear buffers circulares personalizados (user ring buffer).
    • Se ha añadido una llamada especial para asignar memoria en programas BPF (memory allocator), que proporciona una distribución de memoria más segura en el contexto de BPF que el kmalloc() estándar.
    • Se ha integrado la primera parte de los cambios que permiten la creación de controladores para dispositivos de entrada con interfaz HID (Dispositivo de Interfaz Humana), implementados en forma de programas BPF.
    • Se ha eliminado por completo del núcleo el código para soportar el formato de archivos ejecutables a.out, que fue declarado obsoleto en la versión 5.1, y a partir de las versiones 5.18 y 5.19 ha sido desactivado para las arquitecturas principales. El formato a.out ya no se utiliza en sistemas Linux, y la generación de archivos a.out no es soportada por las herramientas modernas en configuraciones predeterminadas para Linux. El cargador para archivos a.out puede implementarse completamente en espacio de usuario.
    • Para sistemas basados en la arquitectura de conjunto de instrucciones LoongArch, utilizada en los procesadores Loongson 3 5000 y que implementa un nuevo RISC ISA similar a MIPS y RISC-V, se ha implementado el soporte para eventos de medición de rendimiento (perf event), kexec, kdump y compilación JIT de BPF.
    • En la interfaz de entrada/salida asíncrona io_uring se ha propuesto un nuevo modo IORING_SETUP_DEFER_TASKRUN, que permite aplazar temporalmente la ejecución de tareas relacionadas con el búfer circular hasta que se reciba una solicitud de la aplicación, lo que se puede usar para organizar la ejecución de tareas en modo por lotes y prevenir problemas de latencia debido a la expulsión de la aplicación en un momento inoportuno.
    • Los procesos en el espacio de usuario tienen la capacidad de iniciar la conversión de un rango de páginas de memoria ordinarias a un conjunto de grandes páginas de memoria (Transparent Huge-Pages).
    • Se ha añadido la implementación del dispositivo /dev/userfaultfd, que permite acceder a la funcionalidad de la llamada al sistema userfaultfd() utilizando los derechos de acceso en el sistema de archivos. La funcionalidad de userfaultfd permite crear manejadores para las excepciones de páginas no asignadas (page faults) en el espacio de usuario.
    • Se han incrementado los requisitos para la versión de la utilidad GNU Make: para compilar el núcleo ahora se requiere al menos la versión 3.82.
  • Subsistema de disco, entrada/salida y sistemas de archivos
    • Se han realizado optimizaciones significativas en el rendimiento del sistema de archivos Btrfs, entre otras, la llamada ioctl FIEMAP ha aumentado notablemente su rendimiento. Se ha añadido soporte para escritura acumulada asíncrona para aplicaciones que utilizan io_uring. En la operación 'send' se ha agregado soporte para archivos protegidos mediante fs-verity.
    • Se han añadido optimizaciones de rendimiento en el sistema de archivos ext4 relacionadas con el mantenimiento del registro y su funcionamiento en modo solo lectura.
    • En el sistema de archivos EROFS (Enhanced Read-Only File System), destinado a utilizarse en particiones accesibles en modo solo lectura, se ha implementado la posibilidad de almacenar datos que se duplican en diferentes sistemas de archivos.
    • En la llamada al sistema statx() se ha añadido la capacidad de mostrar información sobre la posibilidad de aplicar entrada/salida directa al archivo.
    • En el subsistema FUSE (Filesystems in User Space) se ha añadido soporte para la creación de archivos temporales con la bandera O_TMPFILE.
  • Virtualización y seguridad
    • Se ha reemplazado la implementación del mecanismo de protección CFI (Integridad del Flujo de Control), que agrega una verificación antes de cada llamada indirecta a funciones para identificar algunas formas de comportamiento indefinido que podrían llevar a una interrupción del orden normal de ejecución (flujo de control) como resultado de la utilización de exploits que alteran los punteros a funciones almacenados en la memoria. La implementación estándar de CFI del proyecto LLVM ha sido reemplazada por una variante, también basada en el uso de Clang, pero específicamente adaptada para proteger subsistemas de bajo nivel y núcleos de sistemas operativos. En LLVM, la nueva implementación se presentará en el lanzamiento de Clang 16 y se incluirá con la opción «-fsanitize=kcfi». La principal diferencia de la nueva implementación es que no está vinculada a las optimizaciones en la fase de enlace (LTO) y no provoca la sustitución de punteros de funciones por referencias en la tabla de saltos.
    • Para los módulos LSM (Módulo de Seguridad de Linux) se ha habilitado la posibilidad de crear controladores que interceptan operaciones de creación de espacios de nombres.
    • Se han proporcionado herramientas para verificar firmas digitales PKCS#7 en programas BPF.
    • En /dev/random se ha restaurado la posibilidad de apertura en modo no bloqueante (O_NONBLOCK), que había sido eliminada por descuido en el núcleo 5.6.
    • En sistemas con arquitectura x86 se ha añadido una advertencia en caso de que los subsistemas del núcleo mapeen páginas de memoria que permiten simultáneamente ejecución y escritura. Se está considerando la posibilidad de prohibir completamente dicho mapeo de memoria.
    • Se ha añadido un mecanismo de depuración KMSAN (Kernel Memory Sanitizer) para identificar el uso de memoria no inicializada en el núcleo, así como fugas de memoria no inicializada entre el espacio de usuario y los dispositivos.
    • Se han realizado mejoras en el generador de números aleatorios criptográficamente seguro CRNG, utilizado en la llamada getrandom. Los cambios han sido preparados por Jason Donenfeld, autor de WireGuard, y están destinados a mejorar la seguridad en la extracción de enteros aleatorios. VPN En la pila TCP se ha implementado la posibilidad (desactivada por defecto) de usar tablas hash de sockets separadas para cada espacio de nombres, lo que permite mejorar el rendimiento de los sistemas con un gran número de espacios de nombres.
  • Subsistema de red
    • En la pila TCP se ha implementado la posibilidad (desactivada por defecto) de usar tablas hash de sockets separadas para cada espacio de nombres, mejorando así el rendimiento de los sistemas con un gran número de espacios de nombres.
    • Se eliminó el código para soportar el protocolo obsoleto DECnet. Se dejaron en el espacio de usuario los marcadores API que permiten compilar aplicaciones que utilizan DECnet, pero dichas aplicaciones no podrán conectarse a la red.
    • Se documentó el protocolo netlink.
  • Hardware
    • En el controlador amdgpu se agregó soporte para el reenvío DSC (Display Stream Compression) para comprimir datos sin pérdidas al intercambiar información con pantallas que soportan resoluciones muy altas. Se continuó el trabajo para asegurar el soporte de 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. En el controlador amdkfd (para GPU discretas AMD como Polaris) se implementó el soporte para GFX 11.0.3.
    • En el controlador i915 (Intel) se habilitó el soporte para GPU Meteor Lake. Para Meteor Lake y GPUs más nuevas se garantizó el soporte de la interfaz DP 2.0 (DisplayPort). Se añadieron identificadores para tarjetas gráficas basadas en la microarquitectura Alder Lake S.
    • Se agregó soporte para subsistemas de audio implementados en procesadores Apple Silicon, Intel SkyLake e Intel KabyLake. En el controlador de audio CS35L41 HDA se habilitó el soporte para la transición a modo de suspensión. Se añadió soporte ASoC (ALSA System on Chip) para chips de audio integrados Apple Silicon, DSPs AMD Rembrant, AMD Pink Sardine ACP 6.2, Everest ES8326, Intel Sky Lake y Kaby Lake, Mediatek MT8186, DSPs NXP i.MX8ULP, Qualcomm SC8280XP, SM8250, SM8450 y Texas Instruments SRC4392.
    • Se añadió 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 NT116WHM-N21, INX N116BCA-EA2, INX N116BCN-EA1, Multi-Inno Technology MI0800FT-9.
    • Se añadió soporte para controladores AHCI SATA utilizados en SoC Baikal-T1.
    • Se añadió soporte para chips Bluetooth MediaTek MT7921, Intel Magnetor (CNVi, Conectividad Integrada), Realtek RTL8852C, RTW8852AE y RTL8761BUV (Edimax BT-8500).
    • En el controlador ath11k para módulos inalámbricos Qualcomm se agregó soporte para escaneo espectral en el rango de 160 MHz, se implementó NAPI multihilo y se mejoró el soporte para los chips Wi-Fi Qualcomm WCN6750.
    • Se añadieron controladores de teclado para PinePhone, touchpads InterTouch (ThinkPad P1 G3), Controlador Adaptativo de X-Box, Controlador de Vuelo PhoenixRC, Controlador de Coche VRC-2, Controladores Edge de DualSense, paneles de control de IBM (IBM Operation Panel), controles remotos de XBOX One Elite, tabletas XP-PEN Deco Pro S y Intuos Pro Small (PTH-460).
    • Se añadió un controlador para aceleradores criptográficos Aspeed HACE (Hash and Crypto Engine).
    • Se agregó soporte para controladores integrados Thunderbolt/USB4 Intel Meteor Lake.
    • Se agregó soporte para smartphones Sony Xperia 1 IV, Samsung Galaxy E5, E7 y Grand Max, Pine64 Pinephone Pro.
    • Se ha añadido soporte para SOCs y placas ARM: 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. Se han actualizado los controladores para SOCs de Samsung, Mediatek, Renesas, Tegra, Qualcomm, Broadcom y NXP.

Al mismo tiempo, la Fundación Latinoamericana de Software Libre ha formado una variante completamente libre del núcleo 6.1 — Linux-libre 6.1-gnu, limpiado de elementos de firmware y controladores que contienen componentes no libres o partes de código, cuya aplicación está limitada por el fabricante. En esta nueva versión se ha limpiado un nuevo controlador rtw8852b y archivos DTS para diferentes SOCs Qualcomm y MediaTek con procesadores basados en la arquitectura AArch64. Se ha actualizado el código de limpieza de blobs en los controladores y subsistemas amdgpu, i915, brcmfmac, r8188eu, rtw8852c, Intel ACPI. Se ha corregido la limpieza de controladores obsoletos tm6000 TV cards, cpia2 v4l, sp8870, av7110.

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