Después de dos meses de desarrollo, Linus Torvalds el lanzamiento del núcleo . Entre los cambios más significativos se encuentran: la integración de la interfaz VPN WireGuard, soporte para USB4, espacios de nombres para el tiempo, la posibilidad de crear controladores de sobrecarga TCP mediante BPF, soporte inicial para MultiPath TCP, eliminación del problema del año 2038 del núcleo, mecanismo «bootconfig», y el sistema de archivos ZoneFS.
En la nueva versión se han incorporado 13702 correcciones de 1810 desarrolladores,
el tamaño del parche es de 40 MB (los cambios afectaron a 11577 archivos, se añadieron 610012 líneas de código,
se eliminaron 294828 líneas). Aproximadamente el 45% de todas las modificaciones en 5.6
están relacionados con los controladores de dispositivos, aproximadamente el 15% de los cambios tienen
se relacionan con la actualización de código específico para arquitecturas de hardware, el 12%
está relacionado con la pila de red, el 4% con sistemas de archivos y el 3% con internos.
del núcleo.
:
- Subsistema de red
- Implementación de la interfaz VPN , que se basa en métodos de cifrado modernos (ChaCha20, Poly1305, Curve25519, BLAKE2s), es fácil de usar, carece de complejidades, ha demostrado ser eficaz en varias implementaciones importantes y ofrece un rendimiento muy alto (supera a OpenVPN en capacidad de transmisión por un factor de 3.9). WireGuard utiliza el concepto de enrutamiento basado en claves de cifrado, que implica vincular cada interfaz de red a una clave privada y usarla para asociar claves públicas. El intercambio de claves públicas para establecer la conexión se realiza de manera similar a SSH. Los primitivos criptográficos necesarios para el funcionamiento de WireGuard de la biblioteca en el Crypto API estándar y en el núcleo .
- integración de componentes necesarios para soportar 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 varias rutas a través de diferentes interfaces de red, vinculadas a diferentes direcciones IP. Para las aplicaciones de red, esta conexión agregada se presenta como una conexión TCP normal, y toda la lógica de separación de flujos es realizada por MPTCP. Multipath TCP puede utilizarse tanto para aumentar la capacidad como para mejorar la fiabilidad. Por ejemplo, MPTCP puede aplicarse para organizar la transferencia de datos en un smartphone utilizando simultáneamente enlaces de WiFi y 4G o para reducir costos al conectar un servidor usando varios enlaces económicos en lugar de uno costoso.
- soporte para la disciplina de procesamiento de colas de red sch_ets (, IEEE 802.1Qaz), que permite la distribución del ancho de banda entre diferentes clases de tráfico. Si la carga en una clase de tráfico específica está por debajo del ancho de banda proporcionado, ETS permite que otras clases de tráfico utilicen el ancho de banda disponible (no utilizado). Qdisc sch_ets se configura como una disciplina PRIO y utiliza clases de tráfico para determinar límites de ancho de banda estrictos y compartidos. ETS opera como una combinación de disciplinas y — cuando hay clases de tráfico estrictamente limitadas, se utiliza PRIO, pero si no hay tráfico en la cola, funciona como DRR.
- Se ha añadido un nuevo tipo de programas BPF , que permite implementar manejadores de funciones del núcleo a través de BPF. Actualmente, esta funcionalidad ya se puede utilizar para implementar algoritmos de control de congestión TCP en forma de programas BPF. Como ejemplo un programa BPF con la implementación del algoritmo .
- Se ha aceptado en el núcleo , cambiando las herramientas de ioctl() a utilizar . La nueva interfaz simplifica la adición de extensiones, mejora el manejo de errores, permite enviar notificaciones cuando hay cambios de estado, facilita la interacción entre el núcleo y el espacio de usuario, y reduce el número de listas nombradas que necesitan sincronización.
- Se ha añadido la implementación del algoritmo de gestión de colas de red FQ-PIE (Flow Queue PIE), dirigido a reducir el impacto negativo del almacenamiento intermedio de paquetes en el hardware de red (bufferbloat). FQ-PIE demuestra alta eficacia cuando se utiliza en sistemas con módems de cable.
- Subsistema de disco, entrada/salida y sistemas de archivos
- Para el sistema de archivos Btrfs se ha implementado de manera asíncrona la operación DISCARD (marcaje de bloques liberados que ya no se necesitan almacenar físicamente). Originalmente, las operaciones DISCARD se realizaban de forma sincrónica, lo que podía causar una caída en el rendimiento debido a la espera de la finalización de los comandos correspondientes por parte de los dispositivos de almacenamiento. La implementación asíncrona permite no esperar la finalización del DISCARD por parte del dispositivo de almacenamiento y ejecutar esta operación en segundo plano.
- En XFS limpieza del código, que utilizaba antiguos contadores de tiempo de 32 bits (el tipo time_t se ha reemplazado por time64_t), lo que provocaba el problema del año 2038. Se han eliminado errores y daños en la memoria que aparecían en plataformas de 32 bits. Se ha reescrito el código para trabajar con atributos extendidos.
- en el sistema de archivos ext4 optimizaciones de rendimiento relacionadas con el manejo del bloqueo de inodes durante las operaciones de lectura y escritura. Se ha mejorado el rendimiento de la reescritura en modo de entrada/salida directa (Direct I/O). Para facilitar el diagnóstico de problemas, se ha asegurado el almacenamiento del primer y último código de error en el superbloque.
- En el sistema de archivos F2FS la capacidad de almacenar datos en formato comprimido. Para un archivo o directorio específico, la compresión se puede habilitar con el comando "chattr +c file" o "chattr +c dir; touch dir/file". Para comprimir todo el partición, la utilidad mount puede usar la opción "-o compress_extension=ext".
- Se ha incorporado al núcleo el sistema de archivos , que simplifica el trabajo de bajo nivel con dispositivos de almacenamiento zonificados. Por dispositivos zonificados se entienden dispositivos de discos magnéticos duros o SSD NVMe, cuyo espacio de almacenamiento está dividido en zonas que constituyen grupos de bloques o sectores, en los que solo se permite la adición secuencial de datos actualizando todo el grupo de bloques en su totalidad. El sistema de archivos ZoneFS fue desarrollado por Western Digital y vincula cada zona en el dispositivo a un archivo separado, que se puede utilizar para almacenar datos en modo raw sin manipulación a nivel de sectores y bloques, es decir, permite a las aplicaciones utilizar la API de archivos en lugar de acceder directamente al dispositivo de bloques mediante ioctl.
- En NFS, de forma predeterminada, se ha deshabilitado el montaje de particiones sobre UDP. Se ha añadido soporte para la capacidad de copia directa de archivos entre servidores, definida en la especificación NFS 4.2. Se ha añadido una nueva opción de montaje "softreval", que en caso de fallo del servidor permite el uso de valores de atributos almacenados en caché. Por ejemplo, al especificar esta opción, después de la inactividad del servidor, se mantiene la posibilidad de navegar por los caminos en la partición NFS y acceder a la información que se ha almacenado en caché.
- optimización del rendimiento del mecanismo fs-verity, utilizado para el control de integridad y verificación de autenticidad de archivos individuales. Aumentada la velocidad de lectura secuencial gracias a la aplicación de un árbol hash de Merkle. Se ha optimizado el rendimiento de FS_IOC_ENABLE_VERITY en ausencia de datos en caché (se ha implementado la lectura anticipada de páginas con datos).
- Virtualización y seguridad
- Se ha declarado obsoleta la posibilidad de desactivar el módulo SELinux durante el funcionamiento, y en el futuro se prohibirá la descarga de SELinux ya activado. Para desactivar SELinux será necesario pasar el parámetro «selinux=0» en la línea de comandos del núcleo.
- soporte para espacios de nombres de tiempo (time namespaces), que permiten vincular el estado del reloj del sistema (CLOCK_REALTIME,
CLOCK_MONOTONIC, CLOCK_BOOTTIME) a un contenedor, usar su propio tiempo en el contenedor y garantizar la inalterabilidad de las lecturas de CLOCK_MONOTONIC y CLOCK_BOOTTIME al migrar el contenedor a otro host (teniendo en cuenta el tiempo transcurrido desde el arranque, ya sea considerando o no el tiempo en modo de suspensión). - Se ha eliminado el grupo bloqueado /dev/random. El comportamiento de /dev/random se ha acercado a /dev/urandom en términos de prevenir el bloqueo de la entropía después de la inicialización del grupo.
- Se ha incluido un controlador en el núcleo principal que permite a los sistemas invitados que operan bajo VirtualBox montar directorios exportados por el entorno host (VirtualBox Shared Folder).
- Se ha añadido un conjunto de parches a la subestructura BPF (), bajo la aplicación del mecanismo Retpoline para proteger contra ataques de la clase Spectre V2, que permite aumentar la eficiencia de la llamada a programas BPF cuando ocurren eventos relacionados (por ejemplo, permite acelerar la llamada a los controladores XDP cuando se recibe un paquete de red).
- Se ha añadido un controlador para soportar entornos TEE (Trusted Execution Environment) integrados en APU de AMD.
- Memoria y servicios del sistema
- En BPF se ha añadido soporte para funciones globales. El desarrollo se está llevando a cabo en el marco de la iniciativa para agregar soporte para bibliotecas de funciones que se pueden conectar en programas BPF. El siguiente paso será el soporte para ampliaciones dinámicas, que permitan cargar funciones globales, incluso para reemplazar funciones globales existentes durante su uso. Además, en la subestructura BPF se ha añadido soporte para una variante de operación de mapa (utilizada para almacenar datos permanentes), que admite la ejecución en modo por lotes.
- el dispositivo «cpu_cooling» que permite enfriar una CPU sobrecalentada poniendo su estado en inactividad (idle) durante breves períodos de tiempo.
- Se ha añadido una llamada al sistema , ofreciendo un conjunto de banderas adicionales para restringir la resolución de la ruta del archivo (prohibición de cruces de puntos de montaje, enlaces simbólicos, enlaces mágicos (\/proc\/PID\/fd), componentes «..\/»).
- Para sistemas heterogéneos basados en la arquitectura big.LITTLE, que combinan en un mismo chip núcleos de CPU potentes y núcleos de menor rendimiento y más eficientes energéticamente, se ha garantizado la configuración del parámetro uclamp_min ( en el núcleo 5.3 un mecanismo de fijación de carga). El parámetro indicado garantiza que la tarea será asignada por el planificador a un núcleo de CPU que tenga suficiente rendimiento.
- El núcleo se ha liberado de . Se han reemplazado los últimos controladores existentes, en los que se utilizaba el tipo de 32 bits (signed int) time_t para el contador de tiempo épico, el cual, considerando el informe desde 1970, debe desbordarse en 2038.
- Se ha continuado mejorando la interfaz de entrada/salida asíncrona , en la que soportando nuevas operaciones: IORING_OP_FALLOCATE (reservar áreas vacías), IORING_OP_OPENAT,
IORING_OP_OPENAT2,
IORING_OP_CLOSE (abrir y cerrar archivos),
IORING_OP_FILES_UPDATE (agregar y eliminar archivos de la lista de acceso rápido),
IORING_OP_STATX (solicitar información sobre un archivo),
IORING_OP_READ,
IORING_OP_WRITE (análogos simplificados de IORING_OP_READV e IORING_OP_WRITEV),
IORING_OP_FADVISE,
IORING_OP_MADVISE (versiones asíncronas de las llamadas posix_fadvise y madvise), IORING_OP_SEND,
IORING_OP_RECV (envío y recepción de datos de red),
IORING_OP_EPOLL_CTL (realización de operaciones sobre descriptores de archivo epoll). - Se ha añadido una llamada al sistema , que permite al proceso extraer de otro proceso un descriptor de archivo de un archivo abierto.
- el mecanismo «bootconfig», que permite además de las opciones de línea de comandos definir parámetros de funcionamiento del núcleo a través de un archivo de configuración. Se ha propuesto la utilidad bootconfig para añadir tales archivos a la imagen initramfs. Esta posibilidad puede aplicarse, por ejemplo, para configurar kprobes durante el arranque.
- mecanismo de espera para la grabación y lectura de datos en canales sin nombre (pipe). Esta modificación ha permitido acelerar la ejecución de tareas como la construcción paralela de grandes proyectos. Sin embargo, la optimización puede llevar a un estado de carrera en GNU make debido a un error en la versión 4.2.1, que fue corregido en la versión 4.3.
- Se ha agregado la bandera PR_SET_IO_FLUSHER a prctl(), que puede usarse para marcar procesos que liberan memoria, a los que no se deben aplicar restricciones en situaciones de falta de memoria en el sistema.
- Se ha implementado un subsistema basado en el sistema de distribución de memoria ION utilizado en Android , que permite gestionar la asignación de búferes DMA para el uso compartido de áreas de memoria por controladores, aplicaciones y distintos subsistemas.
- Arquitecturas de hardware
- Se ha añadido soporte para la extensión E0PD, que apareció en ARMv8.5 y permite implementar protección contra ataques relacionados con la ejecución especulativa de instrucciones en la CPU. La protección basada en E0PD conlleva menores costos que la protección KPTI (Aislamiento de Tablas de Páginas del Núcleo).
- Se ha agregado soporte para la instrucción RNG en sistemas basados en la arquitectura ARMv8.5, que proporciona acceso al generador de números pseudoaleatorios de hardware. En el núcleo, la instrucción RNG se utiliza para formar entropía durante la inicialización del generador de números pseudoaleatorios proporcionado por el núcleo.
- Se ha eliminado el soporte para las extensiones MPX (Extensiones de Protección de Memoria), añadidas al núcleo y que permitían organizar la verificación de punteros para cumplir con los límites de las áreas de memoria. Esta tecnología no tuvo una adopción generalizada en los compiladores y fue eliminada de GCC.
- Se ha implementado soporte para la herramienta de depuración KASan (Kernel Address Sanitizer) en la arquitectura RISC-V, que permite detectar errores al trabajar con memoria.
- Hardware
- Se ha implementado soporte para la especificación , que se basa en el protocolo Thunderbolt 3 y ofrece un ancho de banda de hasta 40 Gbps, manteniendo la compatibilidad hacia atrás con USB 2.0 y USB 3.2. De manera similar a , la interfaz USB 4.0 permite tunelizar varios protocolos sobre un solo cable con conector , incluyendo PCIe, Display Port y USB 3.x, así como implementaciones de protocolos de software, por ejemplo, para organizar enlaces de red entre hosts. La implementación se basa en el controlador Thunderbolt ya incluido en el núcleo de Linux y lo adapta para trabajar con hosts y dispositivos compatibles con USB4. Los cambios también añaden soporte para dispositivos Thunderbolt 3 en la implementación de software del administrador de conexiones (Connection Manager), que es responsable de crear túneles para conectar varios dispositivos a través de un solo conector.
- En el controlador amdgpu se ha añadido soporte inicial para la tecnología de protección contra copia HDCP 2.x (High-bandwidth Digital Content Protection). Se ha añadido soporte para el chip ASIC AMD Pollock, basado en Raven 2. Se ha implementado la posibilidad de reiniciar la GPU para las familias Renoir y Navi.
- En el controlador DRM para tarjetas gráficas Intel se ha añadido soporte DSI VDSC para chips basados en la microarquitectura Ice Lake y Tiger Lake, se ha implementado LMEM mmap (dispositivo de memoria local), se ha mejorado el análisis VBT (Video BIOS Table) y se ha añadido soporte HDCP 2.2 para chips Coffee Lake.
- Se ha continuado el trabajo de unificación del código del controlador amdkfd (para GPUs discretos como Fiji, Tonga, Polaris) con el controlador amdgpu.
- Se ha rediseñado el controlador k10temp, que ahora soporta la salida de parámetros de voltaje y corriente para CPUs AMD Zen, así como información ampliada de los sensores de temperatura utilizados en CPUs Zen y Zen 2.
- En el controlador nouveau se ha añadido soporte para el modo de carga verificada del firmware para GPUs NVIDIA basadas en la microarquitectura Turing (GeForce RTX 2000), lo que ha permitido habilitar el soporte para aceleración 3D para estas tarjetas (se requiere carga de firmware oficial con la firma digital de NVIDIA). Se ha añadido soporte para el motor gráfico TU10x. Se han solucionado problemas con HD Audio.
- Se ha añadido soporte para compresión de datos durante la transmisión a través de DisplayPort MST (Multi-Stream Transport).
- Se ha añadido un nuevo controlador "" para chips inalámbricos Qualcomm con soporte para 802.11ax.
El controlador se basa en la pila mac80211 y soporta modos de punto de acceso, estación de trabajo y nodo de red Mesh. - A través de sysfs se proporciona acceso a las lecturas de los sensores de temperatura utilizados en los discos duros y SSD modernos.
- cambios significativos en el sistema de sonido ALSA, destinados a eliminar código de (eliminación del uso del tipo de 32 bits time_t en las interfaces snd_pcm_mmap_status y snd_pcm_mmap_control). Se ha añadido soporte para nuevos códecs de audio
Qualcomm WCD9340/WCD9341, Realtek RT700, RT711, RT715, RT1308, Ingenic JZ4770. - controladores para paneles LCD Logic PD 28, Jimax8729d MIPI-DSI, igenic JZ4770, Sony acx424AKP, Leadtek LTK500HD1829, Xinpeng XPP055C272, AUO B116XAK01, GiantPlus GPM940B0,
BOE NV140FHM-N49,
Satoz SAT050AT40H12R2,
Sharp LS020B1DD01D. - compatibilidad con plataformas ARM y Gen1 Amazon Echo (basado en OMAP3630), Samsung Galaxy S III mini (GT-I8190), Allwinner Emlid Neutis, Libre Computer ALL-H3-IT, PineH64 Model B, Aibretech Amlogic GX PC,
Armada SolidRun Clearfog GTR, NXPGateworks GW59xx,
lector de libros electrónicos Tolino Shine 3,
Embedded Artists COM (i.MX7ULP), SolidRun Clearfog CX/ITX y HoneyComb (LX2160A), Google Coral Edge TPU (i.MX8MQ),
Rockchip Radxa Dalang Carrier, Radxa Rock Pi N10, VMARC RK3399Pro SOM
ST Ericsson HREF520, Inforce 6640, SC7180 IDP, Atmel/Microchip AM9X60 (SoC ARM926, Kizboxmini), ST stm32mp15, AM3703/AM3715/DM3725, ST Ericsson ab8505, Unisoc SC9863A, Qualcomm SC7180. Se añadió soporte para el controlador PCIe usado en Raspberry Pi 4.
Al mismo tiempo, el Fondo Latinoamericano de Software Libre
una variante — , depurado de elementos de firmware y controladores que contienen componentes no libres o secciones de código cuya área de aplicación está limitada por el fabricante. En esta nueva versión se deshabilitó la carga de blobs en los controladores para AMD TEE, ATH11K y Mediatek SCP. Se actualizó el código de limpieza de blobs en los controladores y subsistemas AMD PSP, amdgpu y nouveau.
Fuente: opennet.ru
