Lanzamiento del núcleo de Linux 6.3

Después de dos meses de desarrollo, Linus Torvalds lanzó el kernel Linux 6.3. Entre los cambios más notables: limpieza de plataformas ARM y controladores de gráficos obsoletos, integración continua del soporte del lenguaje Rust, utilidad hwnoise, soporte para estructuras de árbol rojo-negro en BPF, modo BIG TCP para IPv4, punto de referencia Dhrystone integrado, capacidad de deshabilitar ejecución en memfd, soporte para la creación de controladores HID usando BPF, se han realizado cambios en Btrfs para reducir la fragmentación del grupo de bloques.

La nueva versión aceptó 15637 correcciones de 2055 desarrolladores; tamaño del parche: 76 MB (los cambios afectaron a 14296 archivos, se agregaron 1023183 líneas de código, se eliminaron 883103 líneas). A modo de comparación, en la versión anterior, 16843 desarrolladores propusieron 2178 correcciones; tamaño del parche: 62 MB. Aproximadamente el 39% de todos los cambios introducidos en el kernel 6.3 están relacionados con los controladores de dispositivos, aproximadamente el 15% de los cambios están relacionados con la actualización de código específico para arquitecturas de hardware, el 10% están relacionados con la pila de red, el 5% con los sistemas de archivos y el 3%. % a los subsistemas internos del kernel.

Innovaciones clave en el kernel 6.3:

  • Servicios de memoria y sistema.
    • Se ha llevado a cabo una importante limpieza de código relacionado con placas ARM antiguas y no utilizadas, lo que ha reducido el tamaño de las fuentes del kernel en 150 mil líneas. Se eliminaron más de 40 plataformas ARM antiguas.
    • Implementé la capacidad de crear controladores para dispositivos de entrada con la interfaz HID (Dispositivo de interfaz humana) implementada en forma de programas BPF.
    • Migración continua desde la rama Rust-para-Linux de funcionalidad adicional relacionada con el uso de Rust como segundo lenguaje para desarrollar controladores y módulos del kernel. La compatibilidad con Rust no está habilitada de forma predeterminada y no da como resultado que Rust se incluya como una dependencia obligatoria de compilación del kernel. La funcionalidad ofrecida en versiones anteriores se ha ampliado con soporte para los tipos Arc (una implementación de punteros con un recuento de referencias), ScopeGuard (limpia cuando se realiza fuera del alcance) y ForeignOwnable (proporciona movimiento de puntero entre el código C y Rust). . Se eliminó el módulo 'préstamo' del paquete 'alloc' (escriba 'Vaca' y rasgo 'ToOwned'). Se observa que el estado de soporte para Rust en el kernel ya está cerca de comenzar a aceptar los primeros módulos escritos en Rust en el kernel.
    • Linux en modo de usuario (que ejecuta el kernel como proceso de usuario) en sistemas x86-64 admite código escrito en Rust. Se agregó soporte para crear Linux en modo de usuario usando clang con optimizaciones de tiempo de enlace habilitadas (LTO).
    • Se agregó la utilidad hwnoise para rastrear retrasos causados ​​por el comportamiento del hardware. Las desviaciones en el tiempo de ejecución de las operaciones (jitter) se determinan cuando el procesamiento de interrupciones está deshabilitado, superando un microsegundo en 10 minutos de cálculo.
    • Se agregó un módulo de kernel con una implementación de referencia de Dhrystone que se puede usar para evaluar el rendimiento de la CPU en configuraciones sin componentes de espacio de usuario (por ejemplo, en la etapa de portabilidad para nuevos SoC que implementan solo la carga del kernel).
    • Se agregó la opción de línea de comando del kernel "cgroup.memory=nobpf" para deshabilitar la contabilidad del consumo de memoria para programas BPF, lo que puede ser útil para sistemas con contenedores aislados.
    • Para los programas BPF, se propone una implementación de la estructura de datos del árbol rojo-negro, que utiliza kfunc + kptr (bpf_rbtree_add, bpf_rbtree_remove, bpf_rbtree_first) en lugar de agregar un nuevo tipo de mapeo.
    • En el mecanismo de secuencias reiniciables (rseq, restartable secuencias), se ha agregado la posibilidad de pasar a los procesos identificadores de ejecución paralela (memory-map concurrency ID) identificados con el número de CPU. Rseq proporciona un medio para ejecutar rápidamente operaciones atómicas que, si son interrumpidas por otro subproceso, se limpian y se reintentan.
    • Los procesadores ARM admiten instrucciones SME 2 (Scalable Matrix Extension).
    • Para las arquitecturas s390x y RISC-V RV64, se implementa soporte para el mecanismo "trampolín BPF", que permite minimizar la sobrecarga al transferir llamadas entre el kernel y los programas BPF.
    • En sistemas con procesadores basados ​​en la arquitectura RISC-V, se ha implementado el uso de instrucciones "ZBB" para acelerar las operaciones de cadenas.
    • Para sistemas basados ​​en la arquitectura del conjunto de instrucciones LoongArch (utilizada en los procesadores Loongson 3 5000 e implementando un nuevo RISC ISA similar a MIPS y RISC-V), soporte para aleatorización del espacio de direcciones del kernel (KASLR), reubicación del kernel en la memoria (reubicación ), tope de puntos de hardware y mecanismo kprobe.
    • El mecanismo DAMOS (esquemas de operación basados ​​en monitoreo de acceso a datos), que le permite liberar memoria en función de la frecuencia de acceso a la memoria, admite filtros para excluir ciertas áreas de la memoria del procesamiento en DAMOS.
    • La biblioteca C estándar mínima Nolibc implementa soporte para la arquitectura s390 y el conjunto de instrucciones Arm Thumb1 (además de soporte para ARM, AArch64, i386, x86_64, RISC-V y MIPS).
    • Objtool se ha optimizado para acelerar las compilaciones del kernel y reducir el consumo máximo de memoria durante las compilaciones (al compilar el kernel en modo "allyesconfig", no hay problemas con la terminación forzada de procesos en sistemas con 32 GB de RAM).
    • Se ha interrumpido el soporte para el ensamblaje del kernel por parte del compilador Intel ICC, que lleva mucho tiempo sin funcionar y nadie ha expresado su deseo de solucionarlo.
  • Subsistema de disco, E/S y sistemas de archivos
    • tmpfs admite la asignación de ID de usuario del sistema de archivos montado, que se utiliza para asignar los archivos de un usuario específico en una partición externa montada a otro usuario en el sistema actual.
    • En Btrfs, para reducir la fragmentación de grupos de bloques, las extensiones se dividen por tamaño al asignar bloques, es decir. cualquier grupo de bloques ahora está limitado a extensiones pequeñas (hasta 128 KB), medianas (hasta 8 MB) y grandes. La implementación de raid56 ha sido refactorizada. Código rediseñado para verificar sumas de verificación. Se han realizado optimizaciones de rendimiento para acelerar la operación de envío hasta 10 veces al almacenar en caché utime para directorios y ejecutar comandos solo cuando sea necesario. Operaciones de mapa de archivos 10 veces más rápidas al omitir las comprobaciones de vínculos de retroceso para datos compartidos (instantáneas). Las operaciones con metadatos se aceleran en un XNUMX% optimizando la búsqueda de claves en estructuras de árbol b.
    • Se mejoró el rendimiento de ext4 FS al permitir que múltiples procesos realicen simultáneamente operaciones de E/S directas en bloques preasignados utilizando bloqueos de inodo compartidos en lugar de bloqueos exclusivos.
    • En f2fs se ha trabajado para mejorar la legibilidad del código. Se corrigieron problemas importantes relacionados con la escritura atómica y el nuevo caché de extensión.
    • Diseñado para particiones de solo lectura, EROFS (Sistema de archivos de solo lectura mejorado) tiene la capacidad de vincular operaciones de descompresión de archivos comprimidos a la CPU para reducir la latencia de acceso a los datos.
    • El programador de E/S de BFQ ha agregado soporte para unidades de disco giratorias avanzadas, como aquellas que usan múltiples unidades controladas por separado (Multi Actuator).
    • Se ha agregado soporte para el cifrado de datos mediante el algoritmo AES-SHA2 a la implementación del cliente y servidor NFS.
    • El subsistema FUSE (Filesystems In User Space) ha agregado soporte para el mecanismo de extensión de consulta, que le permite incluir información adicional en la consulta. En base a esta característica, se implementa la adición de identificadores de grupo a la solicitud FS, que son necesarios para tener en cuenta los derechos de acceso al crear objetos en el FS (create, mkdir, symlink, mknod).
  • Virtualización y seguridad
    • El hipervisor KVM para sistemas x86 agrega soporte para hiperllamadas extendidas de Hyper-V y les proporciona reenvío a un controlador que se ejecuta en un entorno de host de espacio de usuario. El cambio hizo posible implementar soporte para el lanzamiento anidado del hipervisor Hyper-V.
    • KVM facilita la restricción del acceso del sistema invitado a eventos de PMU (Unidad de monitoreo de rendimiento) relacionados con la medición del rendimiento.
    • Al mecanismo memfd, que permite identificar un área de memoria a través de un descriptor de archivo pasado entre procesos, se le ha agregado la capacidad de crear áreas en las que está prohibida la ejecución de código (memfd no ejecutable) y es imposible establecer derechos de ejecución en el futuro.
    • Se agregó una nueva operación PR_SET_MDWE prctl para bloquear los intentos de incluir derechos de acceso a la memoria que permitan escribir y ejecutar al mismo tiempo.
    • Se agregó y habilitó de forma predeterminada protección contra ataques de la clase Spectre, implementada sobre la base del modo automático IBRS (Enhanced Indirect Branch Restricted Speculation) propuesto en los procesadores AMD Zen 4, que le permite habilitar y deshabilitar de forma adaptativa la ejecución especulativa de instrucciones durante la interrupción. procesamiento, llamadas al sistema y cambios de contexto. La protección propuesta genera menores gastos generales en comparación con la protección de Retpoline.
    • Se soluciona una vulnerabilidad que podría eludir la protección contra ataques de Spectre v2 cuando se utiliza tecnología de subprocesos múltiples simultáneos (SMT o Hyper-Threading) y causada por la desactivación del mecanismo STIBP (Predictores de rama indirecta de subproceso único) al seleccionar el modo de protección IBRS.
    • Para los sistemas basados ​​en ARM64, se agregó un nuevo objetivo de compilación "virtconfig" que, cuando se selecciona, activa solo el conjunto mínimo de componentes del kernel necesarios para arrancar en sistemas de virtualización.
    • Se agregó soporte para filtrar llamadas al sistema utilizando el mecanismo seccomp para la arquitectura m68k.
    • Se agregó soporte para los dispositivos CRB TPM2 (Command Response Buffer) integrados en los procesadores AMD Ryzen basados ​​en la tecnología Microsoft Pluton.
  • Subsistema de red
    • Se ha agregado una interfaz netlink para configurar la subcapa PLCA (Physical Layer Collision EV), definida en la especificación IEEE 802.3cg-2019 y utilizada en redes Ethernet 802.3cg (10Base-T1S) optimizadas para conectar dispositivos IoT y sistemas industriales. El uso de PLCA mejora el rendimiento en redes Ethernet de medios compartidos.
    • Se ha interrumpido la compatibilidad con la API de "extensiones inalámbricas" para administrar interfaces inalámbricas WiFi 7 (802.11be), ya que esta API no cubre todas las configuraciones necesarias. Al intentar utilizar la API de "extensiones inalámbricas", que sigue siendo compatible como capa emulada, ahora se mostrará una advertencia para la mayoría de los dispositivos actuales.
    • Se ha preparado documentación detallada sobre la API netlink (para desarrolladores de kernel y para desarrolladores de aplicaciones de espacio de usuario). La utilidad ynl-gen-c se implementó para generar código C basado en las especificaciones YAML del protocolo Netlink.
    • Se agregó soporte para la opción IP_LOCAL_PORT_RANGE a los sockets de red para simplificar la configuración de conexiones salientes a través de traductores de direcciones sin usar SNAT. Cuando se usa la misma dirección IP en varios hosts, IP_LOCAL_PORT_RANGE permite que cada host use su propio rango de puertos de red salientes y, en la puerta de enlace, reenviar paquetes según los números de puerto.
    • Para MPTCP (MultiPath TCP), se implementa la capacidad de manejar flujos mixtos que utilizan los protocolos IPv4 e IPv6. 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 vinculadas a diferentes direcciones IP.
    • Para IPv4 se implementa la posibilidad de utilizar la extensión BIG TCP, que permite aumentar el tamaño máximo del paquete TCP hasta 4 GB para optimizar el funcionamiento de las redes internas de alta velocidad de los centros de datos. Este aumento en el tamaño del paquete con un campo de encabezado de 16 bits se logra implementando paquetes "jumbo" que tienen el tamaño del encabezado IP establecido en 0 y el tamaño real transmitido en un campo separado de 32 bits en un encabezado adjunto separado.
    • Se ha agregado un nuevo parámetro sysctl default_rps_mask, a través del cual puede establecer la configuración predeterminada de RPS (Receive Packet Steering), que es responsable de distribuir el procesamiento del tráfico entrante entre los núcleos de la CPU en el nivel del controlador de interrupciones.
    • Se suspendió el soporte para disciplinas de colas para restringir el tráfico CBQ (colas basadas en clases), ATM (circuitos virtuales ATM), dsmark (marcador de servicio diferenciado), tcindex (índice de control de tráfico) y RSVP (protocolo de reserva de recursos). Estas disciplinas han estado abandonadas durante mucho tiempo y nadie estaba dispuesto a continuar apoyándolas.
  • Equipo
    • Se eliminaron todos los controladores de gráficos basados ​​en DRI1: i810 (antiguas tarjetas gráficas integradas Intel 8xx), mga (GPU Matrox), r128 (GPU ATI Rage 128 que incluye tarjetas Rage Fury, XPERT 99 y XPERT 128), savage (GPU S3 Savage), sis ( Crusty SiS GPU), tdfx (3dfx Voodoo) y via (VIA IGP), que quedaron obsoletos en 2016 y no han sido compatibles con Mesa desde 2012.
    • Se eliminaron los controladores obsoletos de framebuffer (fbdev) omap1, s3c2410, tmiofb y w100fb.
    • Se ha agregado un controlador DRM para la VPU (Unidad de procesamiento versátil) integrada en las CPU Intel Meteor Lake (14.ª generación), diseñado para acelerar las operaciones de visión por computadora y aprendizaje automático. El controlador se implementa mediante el subsistema "accel", destinado a brindar soporte para aceleradores informáticos, que pueden suministrarse tanto en forma de ASIC separados como como bloques IP dentro del SoC y la GPU.
    • El controlador i915 (Intel) amplía la compatibilidad con tarjetas gráficas discretas Intel Arc (DG2/Alchemist), presenta compatibilidad preliminar con las GPU Meteor Lake e incluye compatibilidad con las GPU Intel Xe HP 4tile.
    • El controlador amdgpu agrega soporte para la tecnología AdaptiveSync y la capacidad de usar Secure Display con múltiples pantallas. Soporte actualizado para DCN 3.2 (Display Core Next), SR-IOV RAS, VCN RAS, SMU 13.x y DP 2.1.
    • Se agregó soporte para las plataformas SM8350, SM8450 SM8550, SDM845 y SC8280XP al controlador msm (GPU Qualcomm Adreno).
    • El controlador Nouveau dejó de admitir llamadas ioctl antiguas.
    • Se ha agregado soporte experimental para NPU VerSilicon (Procesador de red neuronal VeriSilicon) al controlador etnaviv.
    • Se ha implementado el controlador pata_parport para unidades IDE conectadas a través de un puerto paralelo. El controlador agregado hizo posible eliminar el antiguo controlador PARIDE del kernel y actualizar el subsistema ATA. Una limitación del nuevo controlador es la imposibilidad de conectar simultáneamente una impresora y un disco a través de un puerto paralelo.
    • Se agregó el controlador ath12k para tarjetas inalámbricas basadas en chips Qualcomm con soporte para Wi-Fi 7. Se agregó soporte para tarjetas inalámbricas basadas en chips RealTek RTL8188EU.
    • Se agregó soporte para 46 placas basadas en la arquitectura ARM64, incluidas Samsung Galaxy tab A (2015), Samsung Galaxy S5, BananaPi R3, Debix Model A, EmbedFire LubanCat 1/2, Facebook Greatlakes, Orange Pi R1 Plus, Tesla FSD y también dispositivos. basado en SoC Qualcomm MSM8953 (Snapdragon 610), SM8550 (Snapdragon 8 Gen 2), SDM450 y SDM632, TV box Rockchips RK3128, RV1126 Vision, RK3588, RK3568, RK3566, RK3588 y RK3328, TI K3 (AM642/AM 654/AM68 69 / AMXNUMX).

Al mismo tiempo, la Fundación Latinoamericana de Software Libre formó una variante del kernel 6.3 completamente libre - Linux-libre 6.3-gnu, libre de firmware y elementos de controlador que contienen componentes o secciones de código no libres, cuyo alcance está limitado por el fabricante. En la versión 6.3, se limpiaron blobs en los nuevos controladores ath12k, aw88395 y peb2466, así como en los nuevos archivos de árbol de dispositivos para dispositivos qcom basados ​​en AArch64. Código de limpieza de blobs actualizado en controladores y subsistemas amdgpu, xhci-rcar, qcom-q6v5-pas, sp8870, av7110, así como en controladores para tarjetas DVB con decodificación de software y en archivos BPF precompilados. Se detuvo la purga de los controladores mga, r128, tm6000, cpia2 y r8188eu cuando fueron eliminados del kernel. Limpieza mejorada de blobs del controlador i915.

Fuente: opennet.ru

Añadir un comentario