Lanzamiento del núcleo de Linux 6.15

Después de dos meses de desarrollo, Linus Torvalds presentó la versión del núcleo Linux 6.15. Entre los cambios más destacados se encuentran: el mecanismo de auditoría en Landlock, el modo de fijación del mapeo de memoria, el subsistema fwctl, el controlador Nova para GPU NVIDIA, la implementación del sistema host para el hipervisor Hyper-V, el soporte para dispositivos de almacenamiento zonificados en XFS, la optimización del subsistema de red, la verificación scrub en Bcachefs, y la posibilidad de controlar las operaciones a través de io_uring.

En la nueva versión se incluyeron 15945 correcciones de 2154 desarrolladores, el tamaño del parche es de 59 MB (los cambios afectaron a 13596 archivos, se agregaron 739608 líneas de código y se eliminaron 312168 líneas). En la versión anterior hubo 12115 correcciones de 1984 desarrolladores, con un tamaño de parche de 39 MB. Aproximadamente el 41% de todos los cambios presentados en 6.15 están relacionados con controladores de dispositivos, alrededor del 16% se refiere a actualizaciones de código específico de arquitecturas de hardware, el 13% se relaciona con la pila de red, el 5% con sistemas de archivos y el 4% con subsistemas internos del núcleo.

Las principales novedades en el núcleo 6.15:

  • Subsistema de disco, entrada/salida y sistemas de archivos
    • Se agregó a fanotify la capacidad de rastrear eventos de montaje y desmontaje.
    • En XFS se agregó el soporte para dispositivos de almacenamiento zonificados (división en zonas de grupos de bloques o sectores que solo permiten la adición secuencial de datos con la actualización de todo el grupo de bloques). Se añadió la bandera rwf_dontcache para deshabilitar el almacenamiento en caché durante la escritura. Se implementó la posibilidad de realizar escrituras atómicas de múltiples bloques de datos a la vez.
    • En Btrfs se implementó la capacidad de especificar niveles de compresión negativos zstd al montar (de -15 a -1, por ejemplo, "compress=zstd:-5"), que ofrecen una mayor velocidad a costa de una menor eficiencia de compresión. Se mejoró la caché de rutas de archivos (en una prueba realizada, la operación "send" se aceleró en un 30%). Se añadió soporte para bloques de tamaño 2 KB.
    • En EXT4, se mejoró el rendimiento al reproducir el registro con un número muy grande de entradas revocadas (carga típica de las particiones bajo el sistema de archivos Lustre). Se implementó una búsqueda lineal de entradas "dentry" (representación interna de elementos de directorio), que resuelve problemas de acceso a algunos archivos en modo sin distinción de mayúsculas. Se optimizó la opción de montaje "errors=remount-ro". Se aumentó la resistencia al tratar sistemas de archivos dañados.
    • En F2FS se ha implementado un ioctl para obtener información sobre la prioridad de la operación de entrada/salida para un archivo determinado. Se ha trabajado en la transición hacia el uso de folios de página (page folios).
    • En Bcachefs se ha añadido el modo «scrub», que verifica la integridad de la lectura de todos los datos y metadatos del sistema de archivos. En caso de detectar errores, se inicia el procedimiento de recuperación. También se ha agregado soporte en Bcachefs para trabajar con sistemas de archivos cuyo tamaño de bloque es mayor que el tamaño de la página de memoria. Se ha estabilizado el formato de las estructuras de disco de Bcachefs (cambios adicionales en el formato se implementarán como extensiones opcionales).
    • En EROFS se ha añadido soporte para la direccionamiento de bloques de 48 bits.
    • En el subsistema FUSE se han implementado sysctl default_request_timeout y max_request_timeout para establecer tiempos de espera en la ejecución de solicitudes, lo que permite monitorear los bloqueos de los componentes de FUSE que operan en el espacio de usuario. El tamaño máximo de los nombres de archivo en FUSE se ha incrementado a 1024 caracteres.
    • En la llamada al sistema statmount() se ha añadido la posibilidad de obtener información sobre el mapeo de identificadores de usuarios de los sistemas de archivos montados, que se utiliza para asociar archivos de un usuario específico en una partición montada ajena con otro usuario en el sistema actual.
    • Se ha liberado la posibilidad de crear un punto de montaje con un mapeo de identificadores de usuarios diferente al de la partición montada original.
    • En la API de gestión de montajes se han realizado cambios que facilitan la construcción de complejas jerarquías de sistemas de archivos sin revelar secciones individuales de los sistemas de archivos que deben permanecer ocultas.
    • En el subsistema para trabajar con dispositivos de bloque se ha añadido soporte para dispositivos de hardware que protegen las claves de cifrado.
    • En el sistema de archivos SMB se ha implementado la opción is_network_name_deleted y se ha habilitado por defecto el modo smb_server_kerberos5.
    • Para el sistema de archivos OverlayFS se ha añadido la opción de montaje «override_creds», que, al especificarse, hará que se utilicen las credenciales del usuario que invoca para acceder a los niveles inferiores del almacenamiento, y no las del usuario que realizó el montaje. Este cambio, por ejemplo, permite que al montar OverlayFS se requiera un usuario con privilegios CAP_SYS_ADMIN, pero se pueden usar sistemas de archivos con credenciales sin ese privilegio.
    • En exFAT, las operaciones de eliminación de archivos se han acelerado. En lugar de enviar solicitudes de «descartar» individualmente para cada clúster liberado del archivo que se elimina, el controlador ahora agrupa estas solicitudes. En una prueba realizada, el tiempo de eliminación de un archivo de 80 GB se redujo de 286 segundos a 1.6 segundos.
    • Todos los pseudo-Sistemas de Archivos, así como el Sistema de Archivos EXT2, se han trasladado a utilizar la nueva API de montaje de particiones.
    • Se ha eliminado el código para el soporte de sistemas de archivos SYSV (SystemV/386, Xenix y Coherent), que a partir de 2023 se ha marcado como no soportado (huérfano).
  • Memoria y servicios del sistema
    • La versión mínima de GCC necesaria para compilar el núcleo se ha elevado a 8.1, y Clang a 15.0.0.
    • Se ha añadido el subsistema fwctl (Firmware Control), que proporciona una API para gestionar de forma segura los firmwares y ejecutar controladores desde el espacio de usuario. Sobre la base de fwctl, se han preparado controladores para dispositivos CXL (Compute Express Link), adaptadores Ethernet Mellanox ConnectX (mlx5) y tarjetas de servicio AMD/Pensando.
    • Se han ampliado las capacidades del mecanismo pidfd, permitiendo el uso de identificadores vinculados a procesos específicos que, a diferencia de pid, no se pueden reasignar. Se ha proporcionado la posibilidad de extraer datos sobre el estado de finalización de un proceso, identificado a través de pidfd después de que el proceso padre haya recibido la confirmación de que el proceso hijo ha finalizado (reaped) y sus recursos se han liberado. Se ha añadido un flag PIDFD_SELF a las llamadas al sistema, que permite al proceso referirse a sí mismo.
    • Para la arquitectura RISC-V, se ha implementado soporte para las extensiones BFloat16, Zaamo (operaciones atómicas con memoria), Zalrsc (Load-Reserved/Store-conditional) y ZBKB (operaciones bit a bit para criptografía).
    • En el rastreo, se ha habilitado la posibilidad de guardar los argumentos de las funciones llamadas y mostrarlos en los registros de rastreo.
    • En el sistema de entrada/salida asíncrona io_uring se ha añadido soporte para leer información sobre eventos epoll. El uso de io_uring para el manejo de eventos epoll permite reducir el número de cambios de contexto y hace posible manejar múltiples eventos de epoll a la vez.
    • En el subsistema eBPF, se ha mejorado la verificación de programas con ciclos. Se han añadido nuevas instrucciones «timed_may_goto», «load-acquire» y «store-release». Se ha proporcionado la posibilidad de modificar los atributos extendidos de los archivos desde programas BPF. Se ha añadido la función try_alloc_pages(), que está diseñada para la asignación de memoria en caso de alta probabilidad de fallo en la operación (al ejecutar programas BPF en contextos limitados).

      Se ha implementado un nuevo primitivo de bloqueo: rqspinlock (Resilient Queued Spin Lock), que detecta situaciones que pueden llevar a bloqueos mutuos durante la ejecución. Este nuevo primitivo permite cargar programas BPF para los cuales el verificador no garantizaba el correcto funcionamiento con bloqueos.

    • Se ha mejorado significativamente la fiabilidad de la asignación de páginas de memoria grandes (huge-page).
    • Se ha acelerado notablemente el cálculo de sumas de verificación CRC64 en sistemas x86. Entre otras cosas, se han utilizado nuevas instrucciones vectoriales del conjunto AVX-512 para la aceleración. En algunas situaciones, el rendimiento ha aumentado hasta 100 veces.
    • Se ha continuado la transferencia de cambios de la rama Rust-for-Linux, relacionada con el uso del lenguaje Rust como segundo lenguaje para el desarrollo de controladores y módulos del núcleo (el soporte de Rust no está activado por defecto, y no introduce a Rust entre las dependencias de compilación obligatorias del núcleo). Se ha proporcionado la posibilidad de utilizar el macro «#[kunit_tests()]» en el código del núcleo para ejecutar pruebas unitarias. Se ha añadido soporte para la arquitectura ARMv7. Se han implementado módulos dma y hrtimer con enlaces de Rust para DMA (añadidos por Linus eludiendo al mantenedor, quien posteriormente dejó su puesto) y temporizadores de alta precisión. Se han ampliado los módulos ‘list’, ‘str’, ‘sync’, ‘error’ y ‘alloc’. Se ha añadido soporte para la nueva sintaxis ‘&raw’ (raw_ref_op).
    • En el subsistema perf se ha implementado la posibilidad de perfilar retrasos, utilizando información del planificador de tareas.
    • Se ha añadido un parámetro de línea de comandos del núcleo «traceoff_after_boot», que desactiva la trazabilidad después de que el núcleo se ha cargado y se ha iniciado el proceso init. Este parámetro puede ser utilizado al diagnosticar problemas relacionados con el arranque, garantizando que los datos de trazabilidad acumulados durante el arranque no sean sobrescritos.
    • Se ha descontinuado el soporte para sistemas x86 de 32 bits que tengan más de 8 CPU y 4 GB de RAM. Este tipo de hardware ya no se fabrica desde hace tiempo, y los sistemas que requieren tales recursos se han trasladado a CPU de 64 bits.
    • Se han realizado cambios en la implementación de temporizadores POSIX, que permiten al conjunto de herramientas CRIU (Checkpoint/Restore in Userspace) guardar y restaurar identificadores de temporizadores.
  • Virtualización y seguridad
    • Se ha añadido la posibilidad de utilizar Linux como entorno raíz (Dom0, partición raíz) para el hipervisor Hyper-V (Microsoft Hypervisor). El entorno host se encarga de gestionar el hipervisor, organizar el inicio de sistemas invitados, asignar recursos y garantizar la interacción máquinas virtuales con el hardware. La gestión del hipervisor Hyper-V en Linux se realiza a través del dispositivo /dev/mshv.
    • El módulo Landlock, que proporciona a los programas no privilegiados medios para restringir el uso de objetos del núcleo de Linux (jerarquías de archivos, sockets de red, ioctl, etc.), ha añadido un mecanismo de auditoría. La auditoría permite evaluar en detalle las razones de los bloqueos de acceso realizados al utilizar Landlock, así como entender cuándo y qué operación fue bloqueada, por qué se realizó el bloqueo y qué regla fue activada.
    • Se ha añadido la capacidad de implementar en módulos LSM (Linux Security Modules) controladores que gestionan las llamadas al sistema de entrada/salida asíncronas io_uring y permiten bloquear el uso de io_uring para evitar restricciones de acceso a las llamadas del sistema. Este controlador se ha implementado en el módulo LSM SELinux.
    • En SELinux se ha implementado la posibilidad de aplicar políticas a cualquier tipo de datos cargados por el núcleo, incluidos las imágenes de firmware, las políticas de seguridad y los certificados.
    • Se ha añadido un modo de sellado (seal) para algunas operaciones de mapeo de memoria realizadas por el núcleo en el espacio de direcciones del proceso. El sellado convierte el mapeo en modo de solo lectura y no permite cambiarlo en caso de explotación de vulnerabilidades. Esta acción se aplica al mapeo vDSO, vsyscall, vvar, sigpage y uprobes. El modo está desactivado por defecto, ya que puede interrumpir el funcionamiento de algunas aplicaciones. Se ha añadido una opción de compilación CONFIG_MSEAL_SYSTEM_MAPPINGS para habilitarlo.
  • Subsistema de red
    • Se ha continuado el trabajo para eliminar el bloqueo global de la pila de red RTNL (rtnl_lock) y transformarlo en bloqueos asociados a espacios de nombres de red individuales.
    • Se ha añadido la función inicial para la recepción de paquetes de red a través de io_uring, copiando el contenido directamente en la memoria del programa en el espacio de usuario sin almacenamiento intermedio (zero-copy). En las pruebas realizadas, este cambio permitió manejar el tráfico a través de un canal de 200 gigabits utilizando un solo núcleo de CPU.
    • Se han implementado sysctl tcp_rto_max_ms y la opción TCP de sockets TCP_RTO_MAX_MS, a través de los cuales se puede establecer el tiempo máximo entre intentos de retransmisión de paquetes.
    • Se ha añadido una serie de llamadas de retorno en BPF para obtener información sobre el tiempo desde diferentes lugares de la pila de red, lo que puede ser utilizado para diagnosticar problemas con las latencias de red.
    • Se han añadido optimizaciones de rendimiento para las operaciones de red:
      • La optimización de GRO (Generic Receive Offload), que combina varios pequeños paquetes en uno grande, ahora se activa al cambiar el procesamiento de un paquete a otra CPU (para equilibrar la carga) al usar el subsistema XDP (eXpress Data Path), que permite procesar paquetes a nivel de controlador de red antes de pasarlos a la pila de red. El aumento en el rendimiento del procesamiento de flujos TCP debido a esta optimización puede alcanzar hasta dos veces.
      • Bajo condiciones de alta carga, el rendimiento de la función connect() se ha mejorado hasta en un 100% mediante la sustitución del bloqueo de giro por un mecanismo de sincronización RCU (Read-Copy-Update) al buscar registros con información sobre las partes de la conexión (orígenes y destinos) IP y puertos). Además, se ha realizado una optimización del hashing que ha proporcionado un aumento del rendimiento adicional del 229%.
      • Se ha acelerado la implementación de MPTCP (Multipath TCP), una extensión del protocolo TCP para organizar la entrega de paquetes simultáneamente a través de múltiples rutas a través de diferentes interfaces de red vinculadas a diferentes direcciones IP. MPTCP en modo de un solo flujo se ha acelerado en un 29%.
      • En netfilter, se ha detenido la ejecución de operaciones de búsqueda de rutas en FIB (Forwarding Information Base) cuando hay un socket presente. Gracias a esta optimización, el rendimiento ha aumentado en un 20%.
      • El rendimiento de UDP en condiciones de inundación (flood) se ha incrementado en un 10% al eliminar operaciones innecesarias con la estructura sk_tsflags durante la recepción de paquetes.
    • Se ha añadido un controlador con la implementación del protocolo MCTP-over-USB.
  • Hardware
    • Se ha aceptado en el núcleo la implementación inicial del controlador Nova para GPU NVIDIA, que utilizan firmware GSP, implementados a partir de la serie NVIDIA GeForce RTX 2000 basada en la microarquitectura Turing. El controlador está escrito en Rust. En esta primera etapa, se ha añadido solo la estructura básica nova-core, que cuenta con alrededor de 400 líneas de código e implementa el nivel básico de abstracciones sobre las interfaces de software de los firmwares GSP. En la siguiente fase, se planea incluir en el núcleo el controlador DRM nova-drm (Direct Rendering Manager) para interactuar con la GPU desde el espacio de usuario, así como el controlador VFIO con un gestor de vGPU, permitiendo el uso de GPUs virtuales NVIDIA en sistemas de virtualización.
    • Se continúa trabajando en el controlador drm (Direct Rendering Manager) Xe para GPUs basadas en la arquitectura Intel Xe, que se utilizan en las tarjetas gráficas Intel de la familia Arc y en la gráfica integrada, a partir de los procesadores Tiger Lake. Se ha añadido soporte para SVM (Shared Virtual Memory), un componente del marco DRM que gestiona la memoria compartida utilizada conjuntamente entre la CPU y la GPU.
    • Se han añadido identificadores para nuevas GPUs en el controlador i915.
    • En el controlador Nouveau se ha reestructurado el GSP RPC e integrado la interfaz drm_slave_encoder.
    • En el controlador AMDGPU se ha implementado el soporte para la arquitectura DCN36 (Display Core Next). Se ha añadido la posibilidad de definir sus propias curvas de brillo, utilizadas para la corrección del brillo de la pantalla.
    • Se ha añadido soporte para la GPU Qualcomm Adreno 623 en el controlador adreno.
    • Se ha añadido soporte para las superficies táctiles Apple Touch Bar.
    • Se ha añadido soporte para la segunda versión de la extensión eUSB2 (eUSB2V2 — Embedded USB2 Version 2.0), que permite reducir el voltaje de alimentación (hasta 1.2 voltios) y mejorar el rendimiento de USB 2.0. La velocidad de transferencia de datos en eUSB2V2 puede alcanzar hasta 4.8 Gbps, lo que es 10 veces más rápido que los 480 Mbps típicos de USB 2.0. eUSB2V2 permitirá a los fabricantes de portátiles equipar sus dispositivos con cámaras web de mayor resolución, continuando utilizando el bus Embedded USB2 para su conexión.
    • Se ha añadido soporte para los adaptadores Ethernet Intel Killer E5000 (RTL8126).
    • Se ha añadido soporte para los paneles de pantalla Visionox RM692E5, Rockchip w552793dba-v10, kingdisplay-kd110n11-51ie y starry-2082109qfh040022-50e.
    • Se ha añadido un controlador para portátiles Samsung Galaxy Book.
    • Se ha añadido soporte para los sistemas de sonido Presonus Studio 1824c, Jabra Evolve 65. Se ha añadido soporte para los módulos DSP AMD ACP 7.x, AWINC WM88166, Everest ES8388, Intel AVS PEAKVOL y GAIN. Se ha mejorado el soporte de audio en portátiles ASUS, HP y Lenovo.
    • Se ha añadido soporte para plataformas ARM, SoC y dispositivos: Arm Morello, AMD (Xilinx) Versal NET, Google Pixel Pro 6, NetCube Kumquat, MYIR Remi Pi, Huawei Matebook E Go, Milk-V Jupiter ST STM32MP2, Mediatek MT8370, Apple T2, Skov (i.MX8MP), EVK (i.MX95), Rockchip RK35xx, Allwinner A523, 11 placas Toradex basadas en i.MX6.

Simultáneamente, la Fundación Latinoamericana de Software Libre ha formado una variante de núcleo completamente libre 6.15 — Linux-libre 6.15-gnu, limpia de elementos de firmware y controladores que contienen componentes no libres o fragmentos de código cuya aplicación está limitada por el fabricante. En la versión 6.15 se ha neutralizado la carga de blobs en los controladores nova, Qualcomm iris v4l2, Airoha NPU, Tehuti Networks TN40xx 10G ethernet, Realtek 8814A wifi, Apple Silicon SoC touchscreen, Renesas UFS y aw88166 audio. Se ha detenido la limpieza del controlador Spider 1Gb ethernet, que fue eliminado del núcleo. Se han eliminado referencias a binarios tivoizados. Se ha implementado el bloqueo de la carga de blobs desde el código escrito en Rust.

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