Después de dos meses de desarrollo, Linus Torvalds el lanzamiento del núcleo . Entre los cambios más destacados están el soporte para GPU AMD Navi, procesadores Zhaoxi y tecnología de gestión de energía Intel Speed Select, la posibilidad de utilizar instrucciones umwait para esperar sin ciclos,
el modo ‘utilization clamping’ que aumenta la interactividad para CPU asimétricos, la llamada al sistema pidfd_open, la posibilidad de usar direcciones IPv4 de la subred 0.0.0.0/8, la posibilidad de aceleración por hardware de nftables, soporte HDR en el subsistema DRM, y la integración del hipervisor ACRN.
En El nuevo lanzamiento de Linus recordó a todos los desarrolladores la regla más importante en el desarrollo del núcleo: mantener inalterado el comportamiento de los componentes del espacio de usuario. Los cambios en el núcleo no deben afectar de ninguna manera a las aplicaciones ya en funcionamiento y causar regresiones a nivel de usuario. Sin embargo, una alteración del comportamiento puede provocar no solo un cambio en la ABI, la eliminación de código obsoleto o la aparición de errores, sino también un impacto indirecto en mejoras útiles que funcionan correctamente. Como un ejemplo claro, se una optimización La optimización llevó a que, debido a la disminución de la actividad del disco, la entropía para el generador de números aleatorios getrandom() se acumulara más lentamente y, en algunas configuraciones, en determinadas circunstancias, podían observarse bloqueos durante el inicio hasta que se llenara el pool de entropía. Dado que la optimización es realmente útil, surgió un debate entre los desarrolladores, proponiendo resolver el problema mediante la desactivación por defecto del modo de bloqueo de la llamada getrandom() con la adición de una bandera opcional para esperar la entropía, aunque tal cambio afectaría la calidad de los números aleatorios al inicio del proceso de arranque.
En la nueva versión se aceptaron 15794 correcciones de 1974 desarrolladores,
el tamaño del parche es de 92 MB (los cambios afectaron a 13986 archivos, se añadieron 258419 líneas de código,
se eliminaron 599137 líneas). Aproximadamente el 39% de todos los cambios presentados en 5.3
están relacionados con controladores de dispositivos, alrededor del 12% de los cambios tienen
relación con la actualización del código específico para arquitecturas de hardware, y el 11%
relación con la actualización de código específico para arquitecturas de hardware, 11%
está vinculado a la pila de red, el 3% a sistemas de archivos y el 3% a subsistemas internos
del núcleo.
:
- Memoria y servicios del sistema
- Se ha continuado el desarrollo de la funcionalidad ‘pidfd’, que ayuda a gestionar situaciones de reutilización de PID (pidfd está vinculado a un proceso específico y no cambia, mientras que el PID puede ser asociado a otro proceso después de que el proceso actual vinculado a ese PID finalice). Anteriormente, ya se había añadido al núcleo
la llamada al sistema pidfd_send_signal() y la bandera CLONE_PIDFD en la llamada clone(), que permite obtener el pidfd para su uso en pidfd_send_signal(). Al usar la llamada clone() con la bandera CLONE_PIDFD, podían surgir problemas con los gestores de servicios o el sistema de finalización forzada de procesos en plataformas Android con falta de memoria. En este caso, se utiliza la llamada fork() o clone() sin CLONE_PIDFD.En el núcleo 5.3 se introduce la llamada al sistema , que permite obtener un pidfd verificable para cualquier proceso existente, que no fue creado a través de la llamada clone() con la bandera CLONE_PIDFD. También se añadió soporte para la comprobación de pidfd mediante poll() y epoll(), lo que permite a los gestores de procesos rastrear la finalización de procesos arbitrarios, sin temor a condiciones de carrera en caso de que se asigne un PID a un nuevo proceso. El mecanismo de notificación de finalización del proceso asociado con el pidfd es similar a la notificación sobre la finalización de su proceso hijo;
- Se ha añadido al planificador de tareas soporte para el mecanismo de limitación de utilización (), que permite mantener frecuencias dentro de rangos mínimos o máximos, dependiendo de las tareas activas en la CPU. Este mecanismo presentado acelera las tareas que afectan directamente la calidad de la interacción del usuario, ejecutando estas tareas al menos en el límite inferior de la frecuencia “solicitada”. Las tareas de baja prioridad, que no afectan el trabajo del usuario, se ejecutan utilizando el límite superior de la frecuencia “permitida”. Los límites se establecen a través de los atributos sched_uclamp_util_min y sched_uclamp_util_max en la llamada al sistema sched_setattr().
- Se ha añadido soporte para la tecnología de gestión del consumo de energía , disponible en algunos servidores con procesadores Intel Xeon. La tecnología mencionada permite establecer configuraciones de rendimiento y ancho de banda para diferentes núcleos de CPU, priorizando así el rendimiento para tareas realizadas en núcleos específicos, sacrificando el rendimiento en otros núcleos;
- Procesos en el espacio de usuario la capacidad de esperar durante un breve período sin utilizar ciclos mediante la instrucción umwait. Esta instrucción, junto con las instrucciones umonitor y tpause, se propondrá en los chips Intel 'Tremont' que se lanzarán próximamente, lo que permitirá implementar retardos que sean eficientes en términos de consumo energético y no afecten el rendimiento de otros hilos al utilizar Hyper Threading;
- Para la arquitectura RISC-V se ha añadido soporte para páginas de memoria grandes (huge pages);
- El mecanismo de trazado 'kprobes' ha añadido la capacidad de desreferenciar punteros del núcleo en el espacio de usuario, lo que puede aplicarse, por ejemplo, para evaluar el contenido de estructuras pasadas a llamadas al sistema. También se ha añadido la posibilidad de establecer verificaciones en la fase de arranque.
- Se ha añadido la opción PREEMPT_RT al archivo de configuración para operar en modo de tiempo real. El código para soportar el modo de tiempo real aún no se ha incluido en el núcleo, pero la aparición de la opción es una buena señal de que la larga epopeya de los parches Realtime-Preempt está llegando a su fin;
- Se ha añadido la llamada al sistema clone3() con la implementación de una variante más extensible de la interfaz clone(), permitiendo especificar un mayor número de flags;
- Se ha añadido el manejador bpf_send_signal(), que permite a los programas BPF enviar señales a procesos arbitrarios;
- Para eventos perf en el entorno del hipervisor KVM, se ha añadido un nuevo mecanismo de filtrado de eventos que permite al administrador definir los tipos de eventos permitidos o no permitidos para la monitorización en el lado del sistema invitado;
- En el mecanismo de verificación de aplicaciones eBPF se ha añadido esta capacidad de procesar programas con bucles, siempre que la ejecución del bucle esté limitada y no pueda llevar al exceso del límite en el número máximo de instrucciones;
- Se ha continuado el desarrollo de la funcionalidad ‘pidfd’, que ayuda a gestionar situaciones de reutilización de PID (pidfd está vinculado a un proceso específico y no cambia, mientras que el PID puede ser asociado a otro proceso después de que el proceso actual vinculado a ese PID finalice). Anteriormente, ya se había añadido al núcleo
- Subsistema de disco, entrada/salida y sistemas de archivos
- Para el sistema de archivos XFS se ha implementado la capacidad de recorrido multihilo de inodes (por ejemplo, durante la verificación de cuotas). Se han añadido nuevos ioctl BULKSTAT e INUMBERS, que proporcionan acceso a las características introducidas en la quinta edición del formato del sistema de archivos, como la fecha de creación del inode y la posibilidad de asignar parámetros BULKSTAT e INUMBERS para cada grupo de AG (Grupos de Asignación);
- En Ext4 espacios vacíos en directorios (bloques no vinculados).
del flag 'i' (inmutable) para archivos abiertos (prohibición de escritura en situaciones donde el flag estaba establecido en el momento en que el archivo ya estaba abierto); - En Btrfs se ha implementado una rápida realización de crc32c en todas las arquitecturas;
- En CIFS, se ha eliminado la designación de desarrollo experimental en el código para el soporte de smbdirect. En SMB3 se ha añadido la posibilidad de utilizar algoritmos criptográficos en modo GCM. Se ha añadido una nueva opción de montaje para extraer parámetros del modo de las entradas ACE (Access Control Entry). Se ha optimizado el rendimiento de la llamada open();
- En F2FS se ha añadido una opción para limitar el recolector de basura al operar en modo checkpoint=disable. Se ha añadido ioctl para eliminar rangos de bloques de F2FS, lo que permite realizar ajustes del tamaño de la partición sobre la marcha. Se ha añadido la posibilidad de ubicar un archivo de intercambio en F2FS con soporte para entrada/salida directa. Se ha añadido soporte para la fijación de archivos y la asignación de bloques para dichos archivos;
- En la interfaz de entrada/salida asíncrona io_uring se ha añadido soporte para operaciones asíncronas sendmsg() y recvmsg();
- En el sistema de archivos UBIFS se ha añadido soporte para la compresión utilizando el algoritmo zstd y la posibilidad de verificar imágenes del sistema de archivos firmadas;
- En el sistema de archivos Ceph se ha añadido soporte para etiquetas de seguridad SELinux para archivos;
- Para NFSv4 se ha implementado una nueva opción de montaje 'nconnect=', que establece el número de conexiones establecidas con el servidor. El tráfico entre estas conexiones se distribuirá utilizando balanceo de carga. Además, el servidor NFSv4 ahora crea un directorio /proc/fs/nfsd/clients con información sobre los clientes actuales, incluyendo detalles sobre los archivos que han abierto;
- Virtualización y seguridad
- Se ha incluido un hipervisor para dispositivos integrados en el núcleo , que está diseñado para estar listo para realizar tareas en tiempo real y ser utilizado en sistemas críticos. ACRN proporciona una sobrecarga mínima, garantiza latencias bajas y adecuada capacidad de respuesta al interactuar con el hardware. Soporta la virtualización de recursos de CPU, I/O, subsistemas de red, así como operaciones con gráficos y sonido. ACRN se puede usar para ejecutar múltiples máquinas virtuales aisladas en bloques de control electrónico, paneles de instrumentos, sistemas de información automotriz, dispositivos IoT de consumo y otros equipos embebidos;
- En User-mode Linux el modo 'viaje en el tiempo', que permite ralentizar o acelerar el tiempo en el entorno virtual UML para facilitar la depuración del código relacionado con el tiempo. Además, se ha añadido el parámetro
time-travel-start, que permite iniciar el reloj del sistema desde un momento especificado en formato epoch; - Se han añadido nuevas opciones de línea de comandos al núcleo 'init_on_alloc' y 'init_on_free', que, al especificarse, activan la limpieza de las áreas de memoria asignadas y liberadas (rellenándolas con ceros al usar malloc y free), lo que refuerza la seguridad a costa de una sobrecarga adicional en la inicialización;
- Se ha añadido un nuevo controlador con la implementación de un dispositivo paravirtualizado que permite enviar solicitudes IOMMU, como ATTACH, DETACH, MAP y UNMAP, sobre el transporte virtio sin emular tablas de páginas de memoria;
- Se ha añadido un nuevo controlador , que brinda acceso a dispositivos de almacenamiento reflejados en el espacio de direcciones físicas, como NVDIMM;
- Se ha implementado la posibilidad de adjuntar claves criptográficas a un espacio de nombres de usuario o red (las claves se vuelven inaccesibles fuera del espacio de nombres seleccionado), así como la protección de claves mediante ACL;
- En el subsistema criptográfico se ha añadido soporte para un algoritmo de hash no criptográfico muy rápido , cuya velocidad está limitada por el rendimiento de la memoria;
- Subsistema de red
- Se ha asegurado la gestión de direcciones IPv4 en el rango 0.0.0.0/8, que anteriormente no estaba disponible para uso. La introducción de esta subred permite distribuir otros 16 millones de direcciones IPv4;
- En Netfilter para nftables se ha añadido soporte para mecanismos de aceleración de hardware en la filtración de paquetes mediante la implementación de lo añadido en los controladores Las tablas de reglas completas con todas las cadenas pueden ser trasladadas a los adaptadores de red. La activación se realiza mediante la vinculación de la bandera NFT_TABLE_F_HW a la tabla. Se admiten metadatos simples de protocolos de niveles 3 y 4, acciones de aceptar/descartar, coincidencias por IP y puertos de red del remitente/receptor y tipo de protocolo;
- soporte integrado para el seguimiento de conexiones para puentes de red, sin necesidad de utilizar una capa de emulación br_netfilter;
- En nf_tables soporte para el módulo SYNPROXY, que repite una funcionalidad similar de iptables, además se ha implementado la posibilidad de verificar en las reglas según opciones específicas en el encabezado IPv4;
- Se ha añadido la posibilidad de adjuntar programas BPF a las llamadas al sistema setsockopt() y getsockopt(), lo que, por ejemplo, permite adjuntar sus controladores de acceso a estas llamadas. Además, se ha añadido un nuevo punto de llamada (hook) que permite invocar un programa BPF una vez por cada intervalo de RTT (round-trip-time, tiempo de ida y vuelta);
- Para IPv4 e IPv6 un nuevo mecanismo de almacenamiento de datos de enrutamiento nexthop, orientado a aumentar la escalabilidad de las tablas de enrutamiento. Las pruebas realizadas mostraron que con el nuevo sistema, un conjunto de 743 mil rutas se cargó en el núcleo en solo 4.3 segundos;
- Para Bluetooth la funcionalidad necesaria para soportar LE ping;
- Hardware
- soporte para procesadores compatibles con x86 de la compañía , desarrollados como resultado de un proyecto conjunto entre VIA Technologies y el municipio de Shanghái. La familia de CPU ZX está construida sobre la arquitectura x86-64 Isaiah, que continúa el desarrollo de las tecnologías ;
- Se ha añadido soporte para el análisis, procesamiento y envío a través del puerto HDMI de metadatos HDR (rango dinámico extendido) en el subsistema DRM (Direct Rendering Manager), así como en los controladores gráficos amdgpu e i915, permitiendo el uso de paneles y pantallas HDR capaces de mostrar rangos adicionales de brillo;
- El controlador amdgpu ha incorporado soporte inicial para GPU AMD NAVI (RX5700), que incluye un controlador base, código para la interacción con pantallas (DCN2), soporte para GFX y cálculos (GFX10),
SDMA 5 (System DMA0), herramientas de gestión de energía y codificadores/decodificadores multimedia (VCN2). Además, se ha mejorado el soporte en amdgpu para tarjetas basadas en GPU Vega12 y Vega20, para las cuales se han agregado capacidades adicionales de gestión de memoria y consumo energético; - En el controlador amdkfd (para GPU discretas, como Fiji, Tonga, Polaris) se ha añadido soporte para tarjetas basadas en GPU VegaM;
- En el controlador DRM para tarjetas gráficas Intel para chips Icelake nuevo modo multisegmento de corrección gamma. Se ha añadido la posibilidad de salida a través de DisplayPort en formato YCbCr4:2:0. Se han añadido nuevos firmware para SKL, BXT, KBL, GLK e ICL. Se ha implementado la posibilidad de desactivar la alimentación de la pantalla en modo asíncrono. soporte para guardar y restaurar el contexto de representación para chips Ironlake (gen5) y gen4 (Broadwater — Cantiga), lo que permite restaurar el estado de la GPU desde el espacio de usuario al cambiar la ejecución de un conjunto de operaciones por otro;
- En el controlador Nouveau se ha asegurado la identificación del chipset NVIDIA Turing TU116;
- Se han ampliado las capacidades del controlador DRM/KMS para aceleradores de operaciones de pantalla ARM Komeda (Mali D71), se ha añadido soporte para escalado, división fusión de capas, rotación, escritura diferida, AFBC, SMMU y formatos de codificación de color Y0L2, P010, YUV420_8/10BIT;
- En el controlador MSM se ha añadido soporte para la serie A540 GPU Adreno, utilizada en procesadores Qualcomm, así como soporte para el controlador DSI MSM8998 para Snapdragon 835;
- Se han añadido controladores para pantallas LCD Samsung S6E63M0, Armadeus ST0700, EDT ETM0430G0DH6, OSD101T2045-53TS,
Evervision VGG804821, FriendlyELEC HD702E, KOE tx14d24vm1bpa, TFC S9700RTWV43TR-01B, EDT ET035012DM6 y VXT VL050-8048NT-C01; - controlador para habilitar los medios de aceleración de decodificación
de video disponibles en SoC Amlogic Meson; - En el controlador v3d (para GPU Broadcom Video Core V, utilizado en Raspberry Pi) ha aparecido la gestión de sombreadores de cómputo;
- controlador para teclados y trackpads SPI, utilizados en modelos modernos de MacBook y MacBookPro de Apple;
- protección adicional para llamadas ioctl relacionadas con el controlador de disquete, y el propio controlador está marcado como no mantenido
(«huérfano»), lo que implica la cesación de sus pruebas. El controlador se conserva en el núcleo, pero su funcionamiento correcto no está garantizado. El controlador se considera obsoleto, ya que es difícil encontrar hardware funcional para probarlo, todos los dispositivos de almacenamiento externos actuales suelen utilizar la interfaz USB. - controlador cpufreq para placas Raspberry Pi, que permite gestionar dinámicamente el cambio de frecuencia del procesador;
- Se ha añadido soporte para nuevos ARM SoC Mediatek mt8183 (4x Cortex-A73 + 4x Cortex-A53), TI J721E (2x Cortex-A72 + 3x Cortex-R5F + 3 DSPs + MMA) y Amlogic G12B (4x Cortex-A73 + 2x Cortex-A53), así como placas:
- ,
- Aspeed BMC,
- Microsoft Olympus BMC,
- Kontron SMARC,
- Novtech Meerkat96 (i.MX7),
- ST Micro Avenger96,
- Google Cheza (Qualcomm SDM845),
- Qualcomm Dragonboard 845c (Qualcomm SDM845),
- Hugsun X99 TV Box (Rockchip RK3399),
- Khadas Edge/Edge-V/Captain (Rockchip RK3399),
- HiHope RZ/G2M,
- NXP LS1021A-TSN.
Al mismo tiempo, la Fundación Latinoamericana de Software Libre
una variante — , limpio de elementos de firmware y controladores que contienen componentes no libres o secciones de código cuya aplicación está restringida por el fabricante. En esta nueva versión, se desactiva la carga de blobs en los controladores qcom, hdcp drm, allegro-dvt y meson-vdec.
Se ha actualizado el código de limpieza de blobs en los controladores y subsistemas amdgpu, i915, netx, r8169, brcmfmac, rtl8188eu, adreno, si2157, pvrusb2, touchscreen_dmi, el controlador de sonido para skylake, así como en la documentación del microcódigo.
Fuente: opennet.ru
