Después de dos meses de desarrollo, Linus Torvalds el lanzamiento del núcleo . Entre los cambios más destacados: nueva implementación del sistema de archivos exFAT, módulo bareudp para la creación de túneles UDP, protección basada en autenticación de punteros para ARM64, capacidad de adjuntar programas BPF a manejadores LSM, nueva implementación de Curve25519, detector de 'split-lock', compatibilidad BPF con PREEMPT_RT, eliminación de la restricción de 80 caracteres en el código de cadena, consideración de las lecturas de temperatura del CPU en el programador de tareas, posibilidad de usar clone() para generar procesos en otro cgroup, protección contra escrituras en memoria utilizando userfaultfd.
En la nueva versión, se han aceptado 15033 correcciones de 1961 desarrolladores,
el tamaño del parche es de 39 MB (los cambios afectaron a 11590 archivos, se añadieron 570560 líneas de código,
se eliminaron 297401 líneas). Aproximadamente el 41% de todos los cambios presentados en 5.7
se relacionan con controladores de dispositivos, aproximadamente el 16% de los cambios están
relación con la actualización de código específico para arquitecturas de hardware, el 13% está
relacionados con la pila de red, el 4% con sistemas de archivos y el 4% con internos.
del núcleo.
:
- Subsistema de disco, entrada/salida y sistemas de archivos
- Se ha añadido una nueva implementación del controlador exFAT, en la actual base de código 'sdfat' (2.x), desarrollada por Samsung para sus teléfonos inteligentes Android. El controlador anteriormente añadido al núcleo se basaba en código obsoleto de Samsung (versión 1.2.9) y era aproximadamente un 10% menos eficiente que el nuevo controlador. Recordemos que la incorporación del soporte para exFAT en el núcleo se hizo posible después de que Microsoft publicara especificaciones públicas y ofreciera la posibilidad de uso gratuito de las patentes de exFAT en Linux.
- En Btrfs se ha implementado un nuevo comando ioctl() — BTRFS_IOC_SNAP_DESTROY_V2, que permite eliminar un subvolumen por su identificador. Se garantiza el soporte completo de clonación de extensiones en línea. Se ha ampliado el número de puntos para deshacer operaciones de redistribución, lo que ha permitido reducir los largos tiempos de espera al ejecutar el comando ‘balance cancel’. Se ha acelerado la determinación de referencias inversas a extensiones (por ejemplo, el tiempo de ejecución de un escenario de prueba se redujo de una hora a unos minutos). Se ha añadido la posibilidad de adjuntar a cada inode del árbol de extensiones del archivo. Se ha revisado el esquema de bloqueo utilizado al escribir en subvolúmenes y al excluir NOCOW. Se ha mejorado la eficiencia de la ejecución de fsync para rangos.
- En XFS se ha mejorado la verificación de metadatos y la ejecución de fsck para particiones activas. Se ha propuesto una biblioteca para reconstruir estructuras btree, que se utilizará en el futuro para reorganizar xfs_repair e implementar la posibilidad de recuperación sin desmontar la partición.
- En CIFS se ha añadido soporte experimental para la ubicación de la partición de intercambio en almacenes SMB3. Se han implementado extensiones POSIX en readdir, definidas en la especificación SMB3.1.1. Se ha mejorado el rendimiento de escritura para páginas de 64 KB al habilitar el modo cache=strict y utilizar versiones del protocolo 2.1+.
- El sistema de archivos EXT4 ha sido migrado de bmap e iopoll al uso de iomap.
- En F2FS se ha implementado soporte opcional para la compresión de datos utilizando el algoritmo zstd. Por defecto, el algoritmo LZ4 se utiliza para la compresión. Se ha añadido el soporte para el comando "chattr -c commit". Se ha proporcionado la visualización del tiempo de montaje. Se ha añadido ioctl F2FS_IOC_GET_COMPRESS_BLOCKS para obtener información sobre el número de bloques comprimidos. Se han añadido datos de compresión, mostrados a través de statx.
- En el sistema de archivos Ceph se ha añadido la capacidad de ejecutar localmente operaciones de creación y eliminación (unlink) de archivos sin esperar respuesta del servidor (funcionamiento en modo asíncrono). Este cambio, por ejemplo, permite aumentar significativamente el rendimiento al utilizar la herramienta rsync.
- En OVERLAYFS se ha añadido la posibilidad de usar virtiofs como sistema de archivos de nivel superior.
- el código de recorrido de rutas en VFS, se ha reformulado el código de análisis de enlaces simbólicos y se ha unificado el recorrido de puntos de montaje.
- En la subcadena scsi, los usuarios no privilegiados pueden ejecutar comandos ZBC.
- En dm_writecache se ha añadido la capacidad de limpiar progresivamente la caché basándose en el parámetro max_age, que define la duración máxima de un bloque.
- En dm_integrity se ha añadido soporte para la operación "discard".
- En null_blk se ha implementado soporte para la inyección de errores para simular fallos durante las pruebas.
- se ha añadido la capacidad de enviar notificaciones udev sobre cambios en el tamaño del dispositivo de bloque.
- Subsistema de red
- En Netfilter se han incluido , que aceleran significativamente el procesamiento de grandes listas de coincidencias (nftables set), que requieren la verificación de combinaciones de subredes, puertos de red, protocolos y direcciones MAC.
Optimizaciones En el módulo nft_set_pipapo (PIle PAcket POlicies), que resuelve la tarea de emparejar el contenido del paquete con rangos de estado de campo arbitrarios aplicados en las reglas de filtrado, como los rangos IP y puertos de red (nft_set_rbtree y nft_set_hash manipulan el emparejamiento de intervalos y la reflexión directa de valores). La versión pipapo vectorizada con instrucciones AVX2 de 256 bits en un sistema con procesador AMD Epyc 7402 mostró un aumento del rendimiento del 420% al analizar 30,000 registros que incluían pares de puerto-protocolo. El incremento al emparejar un par de subred y número de puerto al analizar 1,000 registros fue del 87% para IPv4 y del 128% para IPv6. - El módulo bareudp, que permite encapsular diversos protocolos L3 en un túnel UDP, como MPLS, IP y NSH.
- Se ha continuado la integración de componentes MPTCP (MultiPath TCP), una extensión del protocolo TCP para organizar el funcionamiento de una conexión TCP que entrega paquetes simultáneamente a través de múltiples rutas a través de diferentes interfaces de red vinculadas a diferentes direcciones IP.
- Soporte para mecanismos de aceleración de hardware para la encapsulación de tramas Ethernet en 802.11 (Wi-Fi).
- Al mover un dispositivo de un espacio de nombres de red (network namespace) a otro, se garantiza la corrección de los derechos de acceso y el propietario de los archivos correspondientes en sysfs.
- Se ha añadido la capacidad de usar la bandera SO_BINDTODEVICE para usuarios sin privilegios de root.
- Se ha adoptado la tercera parte de los parches que traducen las herramientas ethtool de ioctl() a la utilización de la interfaz netlink. La nueva interfaz simplifica la adición de extensiones, mejora el manejo de errores, permite enviar notificaciones al cambiar el estado, facilita la interacción entre el núcleo y el espacio de usuario, y reduce el número de listas nombradas sincronizadas.
- Se ha agregado la capacidad de utilizar aceleradores de hardware especiales para llevar a cabo operaciones de seguimiento de conexiones.
- En netfilter un gancho para conectar clasificadores de paquetes salientes (egress), complementando al gancho previamente existente para paquetes entrantes (ingress).
- En Netfilter se han incluido , que aceleran significativamente el procesamiento de grandes listas de coincidencias (nftables set), que requieren la verificación de combinaciones de subredes, puertos de red, protocolos y direcciones MAC.
- Virtualización y seguridad
- Se ha añadido una implementación de hardware para la autenticación de punteros (), que utiliza instrucciones especializadas de CPU ARM64 para protegerse contra ataques que emplean técnicas de programación orientada a retornos (ROP), donde el atacante no intenta colocar su código en memoria, sino que utiliza fragmentos existentes de instrucciones de máquina en las bibliotecas cargadas que terminan con una instrucción de retorno de control. La protección consiste en utilizar firmas digitales para verificar direcciones de retorno a nivel del núcleo. La firma se almacena en los bits superiores no utilizados del propio puntero. A diferencia de las implementaciones de software, la creación y verificación de firmas digitales se realiza mediante instrucciones especiales de la CPU.
- la capacidad de proteger un área de memoria de escritura mediante la llamada al sistema userfaultfd(), destinada a manejar fallos de página (acceso a páginas de memoria no asignadas) en el espacio de usuario. La idea es usar userfaultfd() también para rastrear violaciones de acceso a páginas marcadas como protegidas contra escritura, y llamar a un manejador que pueda reaccionar ante tales intentos de escritura (por ejemplo, para manejar cambios durante la creación de instantáneas en vivo de procesos en ejecución, fijar el estado al volcar los volcado de memoria en disco, implementar memoria compartida, rastrear cambios en la memoria). La funcionalidad a la aplicación de mprotect() en conjunto con un manejador de señales SIGSEGV, pero funciona notablemente más rápido.
- En SELinux, se ha declarado obsoleto el parámetro "checkreqprot", que permite desactivar la verificación de protección de memoria al procesar reglas (permitía el uso de áreas de memoria ejecutables, sin importar las indicaciones establecidas en las reglas). A los enlaces simbólicos de kernfs se les permite heredar el contexto de los directorios padre.
- En la composición módulo , que permite adjuntar programas BPF a cualquier gancho LSM en el núcleo. El cambio permite crear módulos LSM (Módulo de Seguridad de Linux) en forma de programas BPF para abordar tareas de auditoría y control de acceso mandatorio.
- optimización del rendimiento de /dev/random mediante la transmisión por lotes de valores CRNG en lugar de llamadas individuales a las instrucciones RNG. Se ha mejorado el funcionamiento de getrandom y /dev/random en sistemas ARM64 que proporcionan instrucciones RNG.
- Implementación de la curva elíptica Curve25519 a una variante de la biblioteca , para la cual demostración matemática de la verificación formal de la fiabilidad.
- mecanismo de notificación sobre las páginas de memoria libres. Con este mecanismo, los sistemas invitados pueden enviar a la máquina host información sobre las páginas que ya no se utilizan, y la máquina host puede recuperar esas páginas.
- en vfio/pci soporte para SR-IOV (Virtualización de Entrada/Salida de Un Solo Raíz).
- Memoria y servicios del sistema
- De 80 a 100 caracteres límite en la longitud máxima de la cadena en los textos fuente. Sin embargo, se recomienda a los desarrolladores que se mantengan en un límite de 80 caracteres por línea, aunque ahora no es un límite estricto. Además, exceder el límite de tamaño de la cadena ahora solo generará una advertencia durante la compilación si la herramienta checkpatch se ejecuta con la opción '—strict'. Este cambio permitirá a los desarrolladores no distraerse con los espacios y sentirse más libres al alinear el código, así como una fragmentación excesiva de las líneas, la percepción del código y la búsqueda.
- soporte para el modo de arranque mixto EFI, que permite arrancar un núcleo de 64 bits desde un firmware de 32 bits en ejecución en un CPU de 64 bits sin un cargador de arranque especializado.
- sistema de detección y depuración de bloqueos divididos (««), que ocurren al acceder a datos desalineados en la memoria debido a que al ejecutar una instrucción atómica los datos cruzan dos líneas de caché de la CPU. Tales bloqueos resultar en una caída significativa del rendimiento (1,000 ciclos más lento que una operación atómica con datos que caen en una sola línea de caché). Dependiendo de la opción de arranque 'split_lock_detect', el núcleo puede detectar estos bloqueos en tiempo real y generar advertencias o enviar una señal SIGBUS a la aplicación que causó el bloqueo.
- En el programador de tareas se ha incorporado el seguimiento de los indicadores de los sensores de temperatura () y se ha implementado el seguimiento de sobrecalentamiento al programar tareas. Usando la estadística proporcionada, el controlador de temperatura (thermal governor) puede ajustar la frecuencia máxima del CPU en caso de sobrecalentamiento, y el planificador de tareas ahora considera la disminución de la potencia computacional debido a esta reducción de frecuencia al planificar la ejecución de tareas (anteriormente, el planificador reaccionaba al cambio de frecuencia con cierto retraso, tomando decisiones basadas en supuestos elevados sobre los recursos computacionales disponibles).
- En el planificador de tareas se emplean de seguimiento de carga, que permiten evaluar correctamente la carga, independientemente de la frecuencia de operación actual del CPU. Este cambio permite predecir más precisamente el comportamiento de las tareas en condiciones de variación dinámica de voltaje y frecuencia del CPU. Por ejemplo, una tarea que consume 1/3 de los recursos del CPU a 1000 MHz, comenzará a consumir 2/3 de los recursos al reducir la frecuencia a 500 MHz, lo que anteriormente creaba una falsa suposición sobre la operación a plena capacidad (es decir, las tareas para el planificador parecían más grandes simplemente debido a la reducción de frecuencia, lo que llevaba a la toma de decisiones incorrectas en el gobernante de frecuencia cpufreq de schedutil).
- El controlador Intel P-state, responsable de seleccionar modos de rendimiento, ha sido cambiado para utilizar .
- Se ha implementado la posibilidad de usar el subsistema BPF mientras el núcleo opera en modo de tiempo real (PREEMPT_RT). Anteriormente, al activar PREEMPT_RT se requería desactivar BPF.
- Se ha añadido un nuevo tipo de programas BPF — BPF_MODIFY_RETURN, que pueden adjuntarse a funciones en el núcleo y modificar el valor devuelto por esa función.
- Se ha añadido el uso de la llamada al sistema clone3() para crear un proceso en cgroup, que difiere del cgroup padre, lo que permite al proceso padre aplicar restricciones e incluir el seguimiento inmediatamente después de generar un nuevo proceso o hilo. Por ejemplo, un gestor de servicios puede asignar directamente nuevos servicios a cgroups separados, y los nuevos procesos al ser colocados en cgroups 'congelados' se detendrán de inmediato.
- en Kbuild soporte para la variable de entorno 'LLVM=1' para cambiar a las herramientas Clang/LLVM al compilar el núcleo. Se han elevado los requisitos para la versión de binutils (2.23).
- Se ha añadido en debugfs la sección /sys/kernel/debug/kunit/ con los resultados de las pruebas de kunit.
- Se ha añadido el parámetro de carga del núcleo pm_debug_messages (análogo a /sys/power/pm_debug_messages), que incluye la salida de información de depuración sobre el funcionamiento del sistema de gestión de energía (útil para depurar problemas con los modos de suspensión y espera).
- En la interfaz de entrada/salida asíncrona se ha añadido soporte para y .
- Se ha mejorado el perfilado de cgroup mediante la herramienta perf. Anteriormente, perf solo podía perfilar tareas en un cgroup específico y no podía determinar a qué cgroup pertenecía la muestra actual. Ahora, perf obtiene información sobre cgroup para cada muestra, lo que permite perfilar más de un cgroup y aplicar la ordenación por
cgroup en los informes. - En cgroupfs, el pseudo-sistema de archivos para gestionar cgroups, se ha añadido soporte para atributos extendidos (xattrs) mediante los cuales, por ejemplo, se puede dejar información adicional para los controladores en el espacio de usuario.
- En el controlador de memoria de cgroup se añadió soporte para la protección recursiva del valor 'memory.low', que regula la cantidad mínima de memoria RAM proporcionada a los miembros del grupo. Al montar la jerarquía de cgroup con la opción 'memory_recursiveprot', el valor 'memory.low' establecido para los nodos inferiores se distribuirá automáticamente entre todos los nodos descendientes.
- el marco Uacce (Unified/User-space-access-intended Accelerator Framework) para compartir direcciones virtuales (SVA, Shared Virtual Addressing) entre CPU y dispositivos periféricos, permitiendo a los aceleradores de hardware acceder a estructuras de datos en la CPU principal.
- Arquitecturas de hardware
- Para la arquitectura ARM, se ha implementado la capacidad de extracción en caliente de memoria.
- Para la arquitectura RISC-V, se ha añadido soporte para la conexión y desconexión en caliente de la CPU (CPU hotplug). Para RISC-V de 32 bits, se ha implementado eBPF JIT.
- Se ha eliminado la capacidad de utilizar sistemas ARM de 32 bits para ejecutar entornos de invitados KVM.
- Se ha eliminado la implementación 'ficticia' de NUMA para la arquitectura s390, para la cual no se han encontrado escenarios de uso que permitan mejorar el rendimiento.
- Para ARM64, se ha añadido soporte para la extensión AMU (Activity Monitors Unit), definida en ARMv8.4 y que proporciona contadores de rendimiento utilizados para calcular los coeficientes de corrección de escalado de frecuencia en el programador de tareas.
- Hardware
- soporte para dispositivos vDPA que utilizan un canal de intercambio de datos conforme a las especificaciones de virtio. Los dispositivos vDPA pueden ser hardware físicamente conectado o dispositivos virtuales emulados por software.
- En el subsistema GPIO nuevo comando ioctl() para monitorizar cambios, que permite informar al proceso sobre el cambio de estado de cualquier línea GPIO. Como ejemplo de uso del nuevo comando la utilidad gpio-watch.
- En el controlador DRM i915 para tarjetas gráficas Intel por defecto, soporte para chips Tigerlake ("Gen12") y añadió soporte inicial para el control de retroiluminación OLED. Mejorado el soporte para chips Ice Lake, Elkhart Lake, Baytrail y Haswell.
- En el controlador amdgpu la capacidad de cargar firmware en el chip USBC para ASIC. Mejoró el soporte para los chips AMD Ryzen 4000 "Renoir". Añadido soporte para el control de paneles OLED. Se proporciona visualización del estado del firmware en debugfs.
- En el controlador DRM vmwgfx para sistemas de virtualización VMware se añadió la posibilidad de usar OpenGL 4 en sistemas invitados (antes solo se soportaba OpenGL 3.3).
- Se añadió un nuevo controlador DRM tidss para el sistema de visualización de la plataforma TI Keystone.
- Se añadieron controladores para paneles LCD: Feixin K101 IM2BA02, Samsung s6e88a0-ams452ef01, Novatek NT35510, Elida KD35T133, EDT, NewEast Optoelectronics WJFH116008A, Rocktech RK101II01D-CT, Frida FRD350H54004.
- En el sistema de gestión de energía soporte para la plataforma Intel Jasper Lake (JSL) basada en Atom.
- Se añadió soporte para la laptop Pinebook Pro basada en Rockchip RK3399, la tableta Pine64 PineTab y el smartphone basado en Allwinner A64.
- Se añadieron soportes para nuevos códecs y chips de audio:
Amlogic AIU, Amlogic T9015, Texas Instruments TLV320ADCX140, Realtek RT5682, ALC245, Broadcom BCM63XX I2S, Maxim MAX98360A, Presonus Studio 1810c, MOTU MicroBook IIc. - Se añadió soporte para placas ARM y plataformas Qualcomm Snapdragon 865 (SM8250), IPQ6018, NXP i.MX8M Plus, Kontron "sl28", 11 variantes de la placa i.MX6 TechNexion Pico, tres nuevas variantes de Toradex Colibri, Samsung S7710 Galaxy Xcover 2 basada en ST-Ericsson u8500, DH Electronics DHCOM SoM y PDK2, Renesas M3ULCB, Hoperun HiHope, Linutronix Testbox v2, PocketBook Touch Lux 3.
Fuente: opennet.ru
