Lanzamiento del núcleo Linux 5.16

Después de dos meses de desarrollo, Linus Torvalds presentó la versión del núcleo Linux 5.16. Entre los cambios más destacados se encuentran: la llamada al sistema futex_waitv para mejorar el rendimiento de los juegos de Windows en Wine, el seguimiento de errores en el sistema de archivos a través de fanotify, el concepto de volúmenes en la gestión de memoria, soporte para instrucciones de procesador AMX, posibilidad de reservar memoria para sockets de red, soporte en netfilter para la clasificación de paquetes en la etapa «egress», utilización del subsistema DAMON para el desalojo proactivo de áreas de memoria no utilizadas, mejoras en el manejo de sobrecargas con un alto volumen de operaciones de escritura, y soporte para discos duros de múltiples unidades.

En esta nueva versión se aceptaron 15415 correcciones de 2105 desarrolladores, el tamaño del parche es de 45 MB (se modificaron 12023 archivos, se añadieron 685198 líneas de código y se eliminaron 263867 líneas). Alrededor del 44% de todos los cambios presentados en 5.16 están relacionados con controladores de dispositivos, aproximadamente el 16% con actualizaciones de código específico para arquitecturas de hardware, el 16% tiene que ver con la pila de red, el 4% con sistemas de archivos y el 4% con subsistemas internos del núcleo.

Novedades principales en el núcleo 5.16:

  • Subsistema de disco, entrada/salida y sistemas de archivos
    • Se han añadido herramientas al mecanismo fanotify para monitorear el estado del sistema de archivos y detectar la aparición de errores. La información sobre los errores se transmite mediante un nuevo tipo de eventos: FAN_FS_ERROR, que pueden ser interceptados en sistemas de monitoreo en espacio de usuario para informar rápidamente al administrador o iniciar procesos de recuperación. En caso de una serie de errores en cascada, fanotify asegura la entrega de un mensaje sobre el primer error junto con un contador general de problemas, para facilitar el análisis posterior de las causas de la falla. Actualmente, el soporte para el seguimiento de errores está implementado solo para el sistema de archivos Ext4.
    • Se ha mejorado el manejo de la congestión de escritura (write congestion) que ocurre cuando el volumen de operaciones de escritura excede el ancho de banda del dispositivo, obligando al sistema a bloquear las solicitudes de proceso de escritura hasta que se completen las solicitudes ya enviadas. En la nueva versión, se ha reformulado completamente el mecanismo del núcleo utilizado para obtener información sobre la congestión y el bloqueo de tareas, ya que en la implementación anterior se observaban problemas con la sincronización del procesamiento de la congestión de escritura y el desalojo de páginas de memoria hacia el espacio de intercambio en situaciones de falta de memoria del sistema.
    • En Btrfs se ha implementado el soporte para la tecnología de zonificación de dispositivos (Zoned Namespace), utilizada en discos duros o SSD NVMe para dividir el espacio de almacenamiento en zonas que consisten en grupos de bloques o sectores, donde solo se permite la adición secuencial de datos con actualizaciones de todo el grupo de bloques. Además, se han realizado pequeñas optimizaciones en el registro de inode, logrando un aumento del 3% en la capacidad de rendimiento en la prueba dbench y reduciendo la latencia en un 11%. Se ha reformulado el mecanismo de registro de directorios, en el que se ha reducido el número de operaciones de búsqueda y bloqueos en el árbol para aumentar la eficiencia. Se ha acelerado la inserción de elementos en la estructura btree en modo por lotes (el tiempo de inserción masiva de elementos se ha reducido en un 4% y el de eliminación en un 12%). Se ha añadido soporte limitado para el uso de compresión al escribir páginas incompletas, así como la posibilidad de desfragmentar subpáginas (subpage). Se han realizado preparativos para habilitar el soporte para la segunda versión del protocolo para el comando "send".
    • En el sistema de archivos XFS se ha reducido el consumo de memoria mediante el uso de cachés slab individuales para elementos de uso frecuente y la reducción de algunas estructuras de datos.
    • En el sistema de archivos Ext4 solo se han registrado correcciones de errores y un cálculo más preciso de los parámetros de inicialización diferida de la tabla de Inode.
    • A nivel de dispositivos de bloque se han implementado optimizaciones que permiten aumentar significativamente la eficiencia de la asignación de operaciones a los núcleos de CPU.
    • Se ha añadido soporte inicial para discos duros con múltiples actuadores independientes (multi-actuator), que permiten acceder simultáneamente a varios sectores en diferentes zonas de la placa magnética.
    • Se ha añadido un nuevo comando ioctl CDROM_TIMED_MEDIA_CHANGE para detectar eventos de cambio de medio en la unidad de discos ópticos.
    • Se ha añadido la capacidad de trabajar sobre varios dispositivos de almacenamiento en el sistema de archivos EROFS (Enhanced Read-Only File System). Diferentes dispositivos pueden ser reflejados en un único espacio de direcciones de bloques de 32 bits. También se ha añadido soporte para compresión utilizando el algoritmo LZMA.
    • Se han añadido opciones de montaje en el sistema de archivos F2FS para gestionar la fragmentación de archivos al ubicarlos en el almacenamiento (por ejemplo, para depurar optimizaciones en trabajos con almacenamientos fragmentados).
    • En CEPH, se han habilitado por defecto las operaciones de creación y eliminación de directorios en modo asíncrono (para revertir el comportamiento anterior, se debe usar la opción ‘-o wsync’ al montar). Se ha añadido la recopilación de métricas que rastrean las operaciones de copia de objetos externos.
    • Se ha añadido un parámetro de montaje tcpnodelay en CIFS, con el cual se establece el modo tcp_sock_set_nodelay para el socket de red, desactivando la espera para llenar la cola en la pila TCP. También se ha añadido soporte para enlaces DFS (Distributed File System) anidados al remontar.
    • Se ha añadido soporte para la finalización de solicitudes a dispositivos de bloque en modo por lotes. Las pruebas de este cambio han demostrado un aumento en la intensidad de las operaciones de lectura aleatoria desde dispositivos Optane, de 6.1 a 6.6 millones de IOPS en un solo núcleo de CPU.
  • Memoria y servicios del sistema
    • Se ha añadido una nueva llamada al sistema futex_waitv, que permite monitorear el estado de varios futexes mediante una única llamada al sistema. Esta funcionalidad es similar a lo que ofrece Windows con WaitForMultipleObjects, cuya emulación a través de futex_waitv puede ser útil para mejorar el rendimiento de los juegos de Windows que se ejecutan bajo Wine o Proton. Además, la espera simultánea de futexes también puede aplicarse para optimizar el rendimiento de las versiones nativas de los juegos para Linux.
    • Se ha implementado la concepción de folios de páginas de memoria (page folios), cuyo uso en algunos subsistemas del núcleo permitirá acelerar la gestión de memoria bajo cargas típicas. Actualmente, la principal subsistema de gestión de memoria en el núcleo ya ha sido convertida a folios y se ha implementado el caché de páginas, mientras que en el futuro se prevé la conversión de sistemas de archivos. Además, se planea añadir soporte para folios de múltiples páginas en el núcleo.

      Los folios son similares a las páginas de memoria compuestas (compound pages), pero se diferencian por una semántica mejorada y una organización de trabajo más clara. Para gestionar la memoria del sistema, la RAM disponible se divide en páginas de memoria, cuyo tamaño depende de la arquitectura; en los sistemas x86, se mide en kilobytes (normalmente 4096 bytes). Los sistemas modernos vienen equipados con decenas de gigabytes de RAM, lo que complica la gestión de memoria debido a la necesidad de procesar un gran número de páginas de memoria. Para reducir la cantidad de páginas, previamente se implementó en el núcleo el concepto de páginas compuestas (compound pages) con estructuras que abarcan más de una página de memoria física. Sin embargo, la API para manipular las páginas compuestas dejaba mucho que desear y generaba costes adicionales.

    • Se ha añadido un controlador al planificador de tareas que tiene en cuenta la agrupación del caché en la CPU. En algunos procesadores, como el Kunpeng 920 (ARM) y el Intel Jacobsville (x86), un número determinado de núcleos de CPU, generalmente 4, puede compartir el caché L3 o L2. Tener en cuenta tales topologías puede aumentar significativamente la eficiencia en la distribución de tareas entre los núcleos de la CPU en el planificador de tareas, ya que mover tareas dentro de un mismo clúster de CPU aumenta el rendimiento del acceso a la memoria y reduce la competencia en el caché.
    • Se ha añadido soporte para las instrucciones AMX (Advanced Matrix Extensions), que se implementarán en los futuros procesadores de servidor Intel Xeon Scalable, desarrollados bajo el nombre en clave Sapphire Rapids. AMX ofrece nuevos registros configurables TMM "TILE" e instrucciones para manipular datos en estos registros, como TMUL (Tile matrix MULtiply) para multiplicación de matrices.
    • Se han implementado varias nuevas funcionalidades basadas en el subsistema DAMON (Data Access MONitor) añadido en la versión anterior, que permite rastrear el acceso a los datos en la memoria RAM en relación con un proceso seleccionado que se ejecuta en el espacio de usuario. Por ejemplo, el subsistema permite analizar a qué áreas específicas de la memoria ha accedido el proceso a lo largo de su ejecución, y qué áreas de la memoria han permanecido sin uso.
      • DAMON_RECLAIM para identificar y desalojar áreas de memoria a las que no se ha accedido. Este mecanismo se puede utilizar para el desalojo proactivo suave de páginas de memoria cuando se está acercando al agotamiento de la memoria libre.
      • DAMOS (Data Access Monitoring-based Operation Schemes) para aplicar operaciones dadas madvise(), como liberar memoria libre adicional, a las áreas de memoria del proceso que registran una cierta frecuencia de acceso a la memoria. La configuración de los parámetros de DAMOS se realiza a través de debugfs.
      • La capacidad de monitorear el espacio de direcciones física de la memoria (anteriormente solo se podían rastrear direcciones virtuales).
    • La implementación del algoritmo de compresión zstd se ha actualizado a la versión 1.4.10, lo que ha permitido mejorar significativamente el rendimiento de varios subsistemas del núcleo donde se aplica la compresión (por ejemplo, la descompresión de la imagen del núcleo se ha acelerado en un 35%, el rendimiento de la descompresión de datos comprimidos en Btrfs y SquashFS ha aumentado en un 15%, y en ZRAM — en un 30%). Originalmente, el núcleo utilizaba una implementación separada de zstd, basada en la versión 1.3.1, lanzada hace más de tres años y que no incluía muchas optimizaciones importantes. Además de la transición a la versión actual, el parche añadido también simplifica la sincronización con la rama upstream de zstd, permitiendo generar el código para inclusión en el núcleo directamente desde el repositorio principal de zstd. En el futuro, se planifica actualizar el código de zstd en el núcleo a medida que se lancen nuevas versiones de la biblioteca zstd.
    • Se ha realizado una gran cantidad de mejoras en el subsistema eBPF. Se ha añadido la capacidad de invocar funciones de módulos del núcleo desde programas BPF. Se ha implementado la función bpf_trace_vprintk(), que a diferencia de bpf_trace_printk() permite imprimir más de tres argumentos a la vez. Se ha añadido una nueva estructura de almacenamiento de datos (BPF map) llamada bloom filter, que permite utilizar esta estructura probabilística para determinar la existencia de un elemento en un conjunto. Se ha añadido un nuevo atributo BTF_KIND_TAG, que puede ser utilizado en programas BPF para vincular etiquetas a los parámetros de funciones, por ejemplo, para facilitar la detección de errores en programas de usuario. En libbpf se permite la creación de secciones personalizadas .rodata.* / .data.*, se ha implementado soporte para eventos de traza uprobe y kprobe, y se ha añadido API para copiar todos los tipos de BTF de un objeto a otro. El soporte para AF_XDP se ha trasladado de libbpf a una biblioteca separada llamada libxdp. Para la arquitectura MIPS se ha implementado un compilador JIT para la máquina virtual BPF.
    • Para la arquitectura ARM64, se ha implementado el soporte para las extensiones ARMv8.6 del temporizador, que permiten proporcionar la auto-sincronización de la representación de los registros del sistema sin utilizar instrucciones ISB.
    • Para la arquitectura PA-RISC, se ha habilitado el uso del mecanismo KFENCE para detectar errores en la gestión de memoria, así como se ha añadido soporte para el detector de condiciones de carrera KCSAN.
    • Se ha proporcionado la capacidad de configurar los permisos de acceso a tracefs a nivel de usuarios y grupos individuales, por ejemplo, ahora se puede permitir el acceso a las herramientas de trazado solo a los miembros de un grupo específico.
  • Virtualización y seguridad
    • En los subsistemas io_uring y device-mapper se ha implementado soporte para la generación de eventos de auditoría. En io_uring se ha añadido la capacidad de gestionar el acceso a través de módulos LSM. Se ha añadido la capacidad de auditar la llamada al sistema openat2().
    • El código del núcleo se ha liberado completamente de las expresiones ininterrumpidas case en switch (sin return ni break después de cada bloque case). Ahora, al compilar el núcleo, se podrá aplicar el modo "-Wimplicit-fallthrough".
    • Se han incluido cambios para endurecer las revisiones de límites al ejecutar la función memcpy().
    • En la interfaz de entrada/salida asíncrona io_uring se ha implementado la capacidad de aplicar políticas de seguridad a las operaciones de entrada/salida, definidas por los módulos SELinux y Smack.
    • En el subsistema IMA (Arquitectura de Medición de Integridad), que permite a un servicio externo verificar el estado de los subsistemas del núcleo para asegurarse de su autenticidad, se implementó la posibilidad de aplicar reglas basadas en el identificador de grupo (GID) al que pertenece el archivo o en el que está el usuario que accede al archivo.
    • Se han deshabilitado de forma predeterminada algunos mecanismos de protección avanzados de hilos seccomp() contra ataques de la clase Spectre, que se consideraron innecesarios y que no mejoraban significativamente la seguridad, pero que impactaban negativamente en el rendimiento. Se ha revisado la aplicación de la protección Retpoline.
    • Se ha eliminado la implementación del mecanismo cryptoloop, que fue reemplazado en 2004 por dm-crypt y que, si es necesario, soporta los mismos algoritmos.
    • Por defecto, se prohíbe el acceso no privilegiado al subsistema eBPF. Este cambio se realizó para prevenir el uso de programas BPF que eludan la protección contra ataques de canal lateral. Si es necesario, el administrador puede restaurar la posibilidad de uso de eBPF por parte de usuarios no privilegiados.
    • En el hipervisor ACRN, diseñado para realizar tareas en tiempo real y usar en sistemas críticos, se añadió soporte para la creación/eliminación de dispositivos virtuales y la asignación de dispositivos MMIO.
    • En el motor criptográfico se añadió soporte para definiciones KPP (Primitivas de Protocolo de Acordamiento de Clave), que simplifican la lógica de desarrollo de controladores para sistemas criptográficos.
    • Para el hipervisor Hyper-V se implementó el soporte de modo de aislamiento máquinas virtuales, que implica el cifrado del contenido de la memoria.
    • En el hipervisor KVM se añadió soporte para la arquitectura RISC-V. Se implementó la posibilidad de migración dentro del entorno host de máquinas virtuales que se ejecutan utilizando las extensiones AMD SEV y SEV-ES. Se añadió una API para la migración en vivo de sistemas invitados cifrados utilizando AMD SEV (Virtualización Encriptada Segura).
    • Para la arquitectura PowerPC, el modo STRICT_KERNEL_RWX está habilitado por defecto, bloqueando el uso de páginas de memoria que son accesibles tanto para escritura como para ejecución.
    • En sistemas x86 de 32 bits se ha descontinuado el soporte para la conexión en caliente de memoria (Memory hotplug), que ha estado fuera de servicio durante más de un año.
    • Se ha eliminado la biblioteca liblockdep del núcleo, que ahora se supervisará por separado del núcleo.
  • Subsistema de red
    • Se ha implementado una nueva opción SO_RESERVE_MEM para sockets, que permite reservar una cantidad específica de memoria que permanecerá siempre disponible para el socket y no será retirada. El uso de esta opción permite mejorar el rendimiento al reducir las operaciones de asignación y liberación de memoria en la pila de red, especialmente en situaciones de escasez de memoria en el sistema.
    • Se ha añadido soporte para el protocolo de tunelización automática de tráfico multicast (Automatic Multicast Tunneling, RFC 7450), que permite entregar tráfico multicast desde redes que soportan Multicast a receptores en redes sin Multicast. El protocolo funciona a través de la encapsulación en paquetes UDP.
    • Se ha mejorado la encapsulación de datos IOAM (In-situ Operations, Administration, and Maintenance) en paquetes de tránsito.
    • Se ha añadido la capacidad de gestionar los modos de consumo de energía de los transceptores a la API de netlink ethtool.
    • En el subsistema netfilter, se ha implementado la clasificación de paquetes a nivel de egress, es decir, en el momento en que el controlador recibe un paquete de la pila de red del núcleo. En nftables, el soporte para los filtros correspondientes se introdujo en la versión 1.0.1. En netfilter, se ha añadido la posibilidad de emparejar y modificar encabezados internos y datos para UDP y TCP (inner header / payload) que siguen al encabezado de transporte (transport header).
    • Se han añadido nuevos parámetros sysctl arp_evict_nocarrier y ndisc_evict_nocarrier que, al configurarse, limpiarán la caché ARP y la tabla ndisc (neighbor discovery) en caso de pérdida de conexión (NOCARRIER).
    • Se han añadido los modos Low Latency, Low Loss y Scalable Throughput (L4S) al mecanismo de gestión de colas de red fq_codel (Controlled Delay).
  • Hardware
    • En el controlador amdgpu se ha implementado el soporte inicial para la especificación DP 2.0 (DisplayPort 2.0) y la capacidad de tunelizar DisplayPort a través de USB4. Para el APU Cyan Skillfish (equipados con GPU Navi 1x) se ha añadido soporte para controladores de pantalla. Se ha ampliado el soporte para el APU Yellow Carp (procesadores móviles Ryzen 6000 'Rembrandt').
    • En el controlador i915 se ha estabilizado el soporte para los chips Intel Alder Lake S y se ha implementado el soporte para la tecnología Intel PXP (Protected Xe Path), que permite establecer un sesión gráfica protegida por hardware en sistemas con chips Intel Xe.
    • En el controlador nouveau se han realizado correcciones de errores y mejoras en el estilo del código.
    • Se ha añadido soporte para CPU compatibles con x86 Vortex (Vortex86MX). Linux ya funcionaba en estos procesadores, pero fue necesaria una identificación explícita de las CPU para deshabilitar la protección contra ataques Spectre/Meltdown, que no son aplicables a estos chips.
    • Se ha añadido soporte inicial para plataformas x86 Surface Pro 8 y Surface Laptop Studio.
    • Se ha añadido un controlador para soportar chips de audio utilizados en APU AMD Yellow Carp, Van Gogh, así como soporte para sistemas de audio y códecs Cirrus CS35L41, Maxim MAX98520/MAX98360A, Mediatek MT8195, Nuvoton NAU8821, NVIDIA Tegra210, NXP i.MX8ULP, Qualcomm AudioReach, Realtek ALC5682I-VS, RT5682S, RT9120, Rockchip RV1126 y RK3568.
    • Se ha añadido el controlador ishtp_eclite para acceder a los controladores integrados Intel PSE (Programmable Service Engine) mediante el protocolo ISHTP (Integratd Sensor Hub Transport Protocol), por ejemplo, para obtener datos sobre la batería, temperatura e información relacionada con UCSI (USB Type-C Connector System Software Interface).
    • Se ha añadido un controlador para los controladores de juegos Nintendo Switch, que soporta dispositivos Switch Pro y Joy-Cons. Se ha añadido soporte para tabletas Wacom Intuos BT (CTL-4100WL/CTL-6100WL) y el teclado Apple 2021 Magic Keyboard. Se ha mejorado el soporte para controladores Sony PlayStation DualSense. Se ha añadido soporte para los botones laterales del ratón Xiaomi Mi.
    • Se ha añadido el controlador RT89 con soporte para chips inalámbricos Realtek 802.11ax, así como controladores para adaptadores Ethernet Asix AX88796C-SPI y conmutadores Realtek RTL8365MB-VC.
    • Para los chips Apple M1 se han añadido controladores para PCI y PASemi i2c.
    • Se ha añadido soporte para SoC ARM, dispositivos y placas Raspberry Pi Compute Module 4, Fairphone 4, Snapdragon 690, LG G Watch R, Sony Xperia 10 III, Samsung Galaxy S4 Mini Value Edition, Xiaomi MSM8996 (Mi 5, Mi Note 2, Mi 5s, Mi Mix, Mi 5s Plus y Xiaomi Mi 5), Sony Yoshino (Sony Xperia XZ1 y Sony Xperia XZ Premium), F(x)tec Pro1 QX1000, Microchip LAN966, CalAmp LMU5000, Exegin Q5xR5, sama7g5, Samsung ExynosAutov9, Rockchip RK3566, RK3399 ROCK Pi 4A+, RK3399 ROCK Pi 4B+, Firefly ROC-RK3328-PC, Firefly ROC-RK3399-PC-PLUS, ASUS Chromebook Tablet CT100, Pine64 Quartz64-A, Netgear GS110EMX, Globalscale MOCHAbin 7040, NXP S32G2, Renesas R8A779M*, Xilinx Kria, Radxa Zero, JetHub D1/H1, Netronix E70K02.

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