Lanzamiento del núcleo de Linux 5.16

Luego de dos meses de desarrollo, Linus Torvalds presentó el lanzamiento del kernel Linux 5.16. Entre los cambios más notables: la llamada al sistema futex_waitv para mejorar el rendimiento de los juegos de Windows en Wine, seguimiento de errores en el FS vía fanotify, el concepto de folios en el sistema de administración de memoria, soporte para instrucciones del procesador AMX, la capacidad de reservar memoria para sockets de red, soporte para clasificación de paquetes en la etapa de "salida" de netfilter, uso del subsistema DAMON para desalojar proactivamente áreas de memoria no utilizadas, mejora del manejo de sobrecargas con un gran volumen de operaciones de escritura, soporte para discos duros de múltiples unidades.

La nueva versión incluye 15415 correcciones de 2105 desarrolladores, el tamaño del parche es de 45 MB (los cambios afectaron a 12023 archivos, se agregaron 685198 líneas de código y se eliminaron 263867 líneas). Aproximadamente el 44% de todos los cambios introducidos en 5.16 están relacionados con controladores de dispositivos, aproximadamente el 16% de los cambios están relacionados con la actualización de código específico para arquitecturas de hardware, el 16% están relacionados con la pila de red, el 4% están relacionados con sistemas de archivos y el 4% están relacionados con los subsistemas internos del núcleo.

Innovaciones clave en el kernel 5.16:

  • Subsistema de disco, E/S y sistemas de archivos
    • Se han agregado herramientas al mecanismo de fanotify para monitorear el estado del sistema de archivos y rastrear la aparición de errores. La información sobre errores se transmite mediante un nuevo tipo de eventos: FAN_FS_ERROR, que puede interceptarse en los sistemas de monitoreo que se ejecutan en el espacio del usuario para informar rápidamente al administrador o iniciar procesos de recuperación. Cuando se produce una serie de errores en cascada, fanotify garantiza que el primer mensaje de error se entregue junto con un contador de problemas general para simplificar el análisis posterior de la causa del fallo. Actualmente, la compatibilidad con el seguimiento de errores solo se implementa para el sistema de archivos Ext4.
    • Manejo mejorado de la congestión de escritura, que ocurre cuando el volumen de operaciones de escritura excede el rendimiento de la unidad y el sistema se ve obligado a bloquear las solicitudes de escritura de un proceso hasta que se completen las solicitudes que ya se han enviado. En la nueva versión, el mecanismo del kernel utilizado para obtener información sobre la ocurrencia de sobrecarga y bloqueo de tareas se ha rediseñado por completo, ya que en la implementación anterior había problemas al acoplar el procesamiento de la sobrecarga de escritura con el desplazamiento de las páginas de memoria al intercambio. sección cuando no hay suficiente memoria en el sistema.
    • Btrfs implementa 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 conforman grupos de bloques o sectores, en los que solo se permite la adición secuencial de datos, actualizando todo el grupo de bloques. Además, se realizaron optimizaciones menores en el registro de inodos, lo que aumentó el rendimiento en la prueba dbench en un 3 % y redujo la latencia en un 11 %. Se ha rediseñado el mecanismo de registro del directorio, en el que se ha reducido el número de operaciones de búsqueda y bloqueo 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 agregó soporte limitado para usar compresión al escribir páginas parciales, así como la capacidad de desfragmentar subpáginas. Se han realizado preparativos para habilitar la compatibilidad con la segunda versión del protocolo para el comando "enviar".
    • El sistema de archivos XFS reduce el consumo de memoria mediante el uso de cachés de losa independientes para los elementos utilizados con frecuencia y la reducción de algunas estructuras de datos.
    • En el sistema de archivos Ext4, solo se notan correcciones de errores y un cálculo más preciso de los parámetros de inicialización diferida de la tabla Inode.
    • Se han implementado optimizaciones a nivel de dispositivo de bloque para aumentar significativamente la eficiencia de vincular operaciones a los núcleos de la CPU.
    • Se agregó soporte inicial para discos duros con múltiples unidades independientes (multiactuador), lo que permite acceder simultáneamente a varios sectores en diferentes áreas del plato magnético.
    • Se agregó un nuevo comando ioctl CDROM_TIMED_MEDIA_CHANGE para detectar eventos de cambio de medios en una unidad de disco óptico.
    • El sistema de archivos EROFS (Sistema de archivos de solo lectura mejorado) ha agregado la capacidad de trabajar sobre múltiples dispositivos de almacenamiento. Se pueden asignar diferentes dispositivos a un único espacio de direcciones de bloque de 32 bits. También se ha agregado soporte para compresión usando el algoritmo LZMA.
    • Se han agregado opciones de montaje al sistema de archivos F2FS para controlar la fragmentación de archivos cuando se almacenan (por ejemplo, para depurar optimizaciones para trabajar con almacenamiento fragmentado).
    • CEPH permite la creación y eliminación asincrónica de directorios de forma predeterminada (use el indicador '-o wsync' al montar para volver al comportamiento anterior). Se agregó mantenimiento de métricas que rastrean las operaciones de copia de objetos externos.
    • Se agregó un parámetro de montaje tcpnodelay a CIFS, que establece el modo tcp_sock_set_nodelay para el socket de red, lo que deshabilita la espera a que la cola llene la pila TCP. Se agregó soporte para enlaces DFS anidados (sistema de archivos distribuido) al volver a montar.
    • Se agregó soporte para completar solicitudes a un dispositivo de bloque en modo por lotes. Las pruebas del cambio mostraron un aumento en la intensidad de las operaciones de lectura aleatoria de las unidades Optane de 6.1 a 6.6 millones de IOPS en un solo núcleo de CPU.
  • Servicios de memoria y sistema.
    • Se agregó una nueva llamada al sistema futex_waitv, que le permite monitorear el estado de varios futex a la vez usando una sola llamada al sistema. Esta característica recuerda a la funcionalidad WaitForMultipleObjects disponible en Windows, cuya emulación a través de futex_waitv puede ser útil para mejorar el rendimiento de los juegos de Windows que se ejecutan en Wine o Proton. Además, la espera simultánea de futexes también se puede utilizar para optimizar el rendimiento de las versiones nativas de juegos para Linux.
    • Se ha implementado el concepto de páginas en folio, cuyo uso en algunos subsistemas del kernel acelerará la administración de la memoria bajo cargas de trabajo típicas. Actualmente, el subsistema principal de administración de memoria en el kernel y la implementación del caché de páginas ya se han transferido a folios, y se planea transferir sistemas de archivos en el futuro. En el futuro, también está previsto añadir al kernel soporte para publicaciones de varias páginas.

      Los tomos se parecen a páginas compuestas, pero tienen una semántica mejorada y una organización del trabajo más clara. Para administrar la memoria del sistema, la RAM disponible se divide en páginas de memoria, cuyo tamaño varía según la arquitectura, pero en los sistemas x86 se mide en kilobytes (normalmente 4096 bytes). Los sistemas modernos vienen con decenas de gigabytes de RAM, lo que hace que la gestión de la memoria sea más compleja debido a la necesidad de procesar una gran cantidad de páginas de memoria. Para reducir el número de páginas, el kernel implementó previamente el concepto de páginas compuestas con estructuras que abarcan más de una página física de memoria. Pero la API para manipular páginas de memoria fusionadas dejaba mucho que desear y generaba una sobrecarga adicional.

    • Se ha agregado un controlador al programador de tareas que tiene en cuenta la agrupación de caché en la CPU. En algunos procesadores, como Kunpeng 920 (ARM) e Intel Jacobsville (x86), una cierta cantidad de núcleos de CPU, generalmente 4, pueden combinar caché L3 o L2. Tener en cuenta dichas topologías puede mejorar significativamente la eficiencia de la distribución de tareas entre los núcleos de la CPU en el programador de tareas, ya que mover tareas dentro del mismo clúster de CPU permite aumentar el rendimiento del acceso a la memoria y reducir la contención de la caché.
    • Se agregó soporte para instrucciones AMX (Advanced Matrix Extensions) implementadas en los próximos procesadores de servidor escalables Intel Xeon, con nombre en código Sapphire Rapids. AMX ofrece nuevos registros TMM "TILE" configurables e instrucciones para manipular datos en estos registros, como TMUL (Tile Matrix MULtiply) para la multiplicación de matrices.
    • Se han implementado varias características nuevas basadas en el subsistema DAMON (Data Access MONitor) agregado en la última versión, que le permite monitorear el acceso a los datos en la RAM en relación con el proceso seleccionado que se ejecuta en el espacio del usuario. Por ejemplo, el subsistema permite analizar a qué áreas de memoria accedió el proceso durante toda su operación y qué áreas de memoria quedaron sin reclamar.
      • DAMON_RECLAIM para identificar y desalojar áreas de memoria a las que no se ha accedido. El mecanismo se puede utilizar para desalojar proactivamente páginas de memoria cuando la memoria libre está a punto de agotarse.
      • DAMOS (Esquemas de operación basados ​​en monitoreo de acceso a datos) para aplicar operaciones madvise() específicas, como liberar memoria libre adicional, para procesar áreas de memoria para las cuales se fija una cierta frecuencia de acceso a la memoria. Los parámetros de DAMOS se configuran mediante debugfs.
      • Capacidad de monitorear el espacio de direcciones físicas de la memoria (anteriormente solo se podían monitorear direcciones virtuales).
    • La implementación del algoritmo de compresión zstd se actualizó a la versión 1.4.10, lo que mejoró significativamente el rendimiento de varios subsistemas del kernel que usan compresión (por ejemplo, descomprimir una imagen del kernel se aceleró en un 35%, el rendimiento de descomprimir datos comprimidos en Btrfs y SquashFS ha aumentado un 15%, y en ZRAM, un 30%). Inicialmente, el kernel utilizó una implementación separada de zstd, basada en la versión 1.3.1, que se lanzó hace más de tres años y no incluía muchas optimizaciones importantes. Además de pasar a la versión actual, el parche agregado también simplifica la sincronización con la rama ascendente de zstd, lo que le permite generar código para incluirlo en el kernel directamente desde el repositorio principal de zstd. En el futuro, se planea actualizar el código zstd en el kernel a medida que se publiquen nuevas versiones de la biblioteca zstd.
    • Se han realizado una gran parte de las mejoras en el subsistema eBPF. Se agregó la capacidad de llamar a funciones del módulo del kernel desde programas BPF. Se ha implementado la función bpf_trace_vprintk(), a diferencia de bpf_trace_printk(), que le permite generar más de tres argumentos a la vez. Se ha agregado un nuevo filtro de floración de estructura de almacenamiento de datos (mapa BPF), que le permite utilizar la estructura de datos probabilística del mismo nombre para determinar la presencia de un elemento en el conjunto. Se ha agregado un nuevo atributo BTF_KIND_TAG, que se puede utilizar en programas BPF para vincular etiquetas a parámetros de función, por ejemplo, para simplificar la detección de errores en programas de usuario. En libbpf, es posible crear sus propias secciones .rodata.*/.data.*, se implementó soporte para eventos de seguimiento uprobe y kprobe y se agregó una API para copiar todos los tipos de BTF de un objeto a otro. La compatibilidad con AF_XDP se ha trasladado de libbpf a una biblioteca libxdp independiente. Para la arquitectura MIPS se ha implementado un compilador JIT para la máquina virtual BPF.
    • Para la arquitectura ARM64, se ha implementado soporte para extensiones ARMv8.6 para el temporizador, incluidas aquellas que permiten la representación autosincronizada de los registros del sistema sin utilizar instrucciones ISB.
    • Para la arquitectura PA-RISC, se implementó la capacidad de utilizar el mecanismo KFENCE para detectar errores cuando se trabaja con memoria y se agregó soporte para el detector de condiciones de carrera KCSAN.
    • Es posible configurar derechos de acceso a tracefs a nivel de usuarios y grupos individuales; por ejemplo, ahora puede permitir el acceso a herramientas de seguimiento solo a miembros de un determinado grupo.
  • Virtualización y seguridad
    • Los subsistemas io_uring y device-mapper implementan soporte para generar eventos de auditoría. io_uring proporciona la capacidad de controlar el acceso a través de módulos LSM. Se agregó la capacidad de auditar la llamada al sistema openat2().
    • El código del kernel está completamente libre de expresiones de casos continuas en switch (sin retorno ni interrupción después de cada bloque de casos). Al compilar el kernel, ahora será posible utilizar el modo "-Wimplicit-fallthrough".
    • Se incluyeron cambios para reforzar las comprobaciones de límites al ejecutar la función memcpy().
    • La interfaz de E/S asíncrona io_uring implementa la capacidad de aplicar políticas de seguridad definidas por los módulos SELinux y Smack a las operaciones de E/S.
    • El subsistema IMA (Integrity Measurement Architecture), que permite a un servicio externo verificar el estado de los subsistemas del kernel para garantizar su autenticidad, implementa la capacidad de aplicar reglas basadas en el identificador de grupo (GID) al que pertenece el archivo o al que el usuario pertenece el acceso al archivo.
    • Se deshabilitaron de forma predeterminada algunos mecanismos avanzados para proteger los subprocesos seccomp() de los ataques de Spectre, que se consideraron innecesarios y no mejoraron significativamente la seguridad, pero impactaron negativamente el rendimiento. Se ha revisado el uso de la protección Retpoline.
    • Se eliminó la implementación del mecanismo cryptoloop, que fue reemplazado en 2004 por dm-crypt y, si es necesario, admite los mismos algoritmos.
    • De forma predeterminada, el acceso sin privilegios al subsistema eBPF está prohibido. El cambio se realizó para evitar que los programas BPF se utilicen para eludir la protección contra ataques de canal lateral. Si es necesario, el administrador puede restaurar la capacidad de que los usuarios sin privilegios utilicen eBPF.
    • El hipervisor ACRN, diseñado para tareas en tiempo real y uso en sistemas de misión crítica, ha agregado soporte para crear/eliminar dispositivos virtuales y reenviar dispositivos MMIO.
    • Se ha agregado compatibilidad con definiciones KPP (Primitivas de protocolo de acuerdo clave) al motor criptográfico, lo que simplifica la lógica del desarrollo de controladores para criptosistemas.
    • El hipervisor Hyper-V ahora admite el modo de aislamiento de máquina virtual, que implica el cifrado del contenido de la memoria.
    • El hipervisor KVM ha agregado soporte para la arquitectura RISC-V. Se ha implementado la capacidad de migrar máquinas virtuales que se ejecutan utilizando las extensiones AMD SEV y SEV-ES dentro del entorno host. Se agregó API para la migración en vivo de sistemas invitados cifrados mediante AMD SEV (virtualización cifrada segura).
    • Para la arquitectura PowerPC, el modo STRICT_KERNEL_RWX está habilitado de forma predeterminada, que bloquea el uso de páginas de memoria que están disponibles simultáneamente para escritura y ejecución.
    • En los sistemas x32 de 86 bits, se suspendió la compatibilidad con la conexión en caliente de memoria, que ha estado inoperativa durante más de un año.
    • La biblioteca liblockdep se eliminó del kernel y ahora se mantendrá separada del kernel.
  • Subsistema de red
    • Para los sockets se ha implementado una nueva opción SO_RESERVE_MEM, con la que se puede reservar una determinada cantidad de memoria para un socket, que siempre permanecerá disponible para el socket y no será eliminada. El uso de esta opción le permite lograr un mayor rendimiento al reducir la asignación de memoria y las operaciones de recuperación en la pila de red, especialmente cuando ocurren condiciones de poca memoria en el sistema.
    • Se agregó soporte para el protocolo de túnel de multidifusión automático (RFC 7450), que permite entregar tráfico de multidifusión desde redes que admiten multidifusión a destinatarios en redes sin multidifusión. El protocolo funciona mediante encapsulación en paquetes UDP.
    • Encapsulación mejorada de datos IOAM (operaciones, administración y mantenimiento in situ) en paquetes de tránsito.
    • La capacidad de controlar los modos de consumo de energía del transceptor se ha agregado a la API ethtool netlink.
    • El subsistema netfilter implementa la capacidad de clasificar paquetes en el nivel de salida, es decir. en la etapa en la que el controlador recibe un paquete de la pila de red del núcleo. En nftables, la compatibilidad con los filtros correspondientes apareció en la versión 1.0.1. Netfilter ha agregado la capacidad de comparar y cambiar encabezados internos y datos para UDP y TCP (encabezado interno/carga útil) que vienen después del encabezado de transporte.
    • Se agregaron nuevos parámetros sysctl arp_evict_nocarrier y ndisc_evict_nocarrier. Cuando se configuran, la caché ARP y la tabla ndisc (descubrimiento de vecinos) se borrarán en caso de una falla de conexión (NOCARRIER).
    • Se han agregado modos de baja latencia, baja pérdida y rendimiento escalable (L4S) al mecanismo de gestión de colas de red fq_codel (retraso controlado).
  • Equipo
    • El controlador amdgpu proporciona soporte inicial para la especificación DP 2.0 (DisplayPort 2.0) y el túnel DisplayPort a través de USB4. Para las APU Cyan Skillfish (equipadas con GPU Navi 1x), se ha agregado compatibilidad con controladores de pantalla. Se ha ampliado la compatibilidad con las APU Yellow Carp (procesadores móviles Ryzen 6000 “Rembrandt”).
    • El controlador i915 estabiliza la compatibilidad con los chips Intel Alderlake S e implementa la compatibilidad con la tecnología Intel PXP (Protected Xe Path), que le permite organizar una sesión de gráficos protegida por hardware en sistemas con chips Intel Xe.
    • Se ha trabajado en el nuevo controlador para corregir errores y mejorar el estilo del código.
    • Se agregó soporte para CPU Vortex compatibles con x86 (Vortex86MX). Linux ha trabajado en procesadores similares antes, pero se requirió la identificación explícita de las CPU especificadas para desactivar la protección contra ataques Spectre/Meltdown, que no son aplicables a los chips especificados.
    • Se agregó soporte inicial para plataformas x86 para Surface Pro 8 y Surface Laptop Studio.
    • Se agregó un controlador para admitir chips de sonido utilizados en las APU AMD Yellow Carp y Van Gogh, también se agregó soporte para sistemas de sonido 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 agregó el controlador ishtp_eclite para acceder a los controladores integrados Intel PSE (motor de servicio programable) mediante ISHTP (Protocolo de transporte de concentrador de sensores integrado), como la batería, la temperatura y la interfaz de información relacionada con UCSI (software del sistema de conector USB tipo C).
    • Se agregó un controlador para controladores de juegos de Nintendo Switch que admite Switch Pro y Joy-Cons. Se agregó soporte para tabletas Wacom Intuos BT (CTL-4100WL/CTL-6100WL) y Apple 2021 Magic Keyboard. Soporte mejorado para controladores Sony PlayStation DualSense. Se agregó soporte para los botones laterales del mouse Xiaomi Mi.
    • Se agregó 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.
    • Se han agregado controladores para PCI y PASemi i1c para los chips Apple M2.
    • Se agregó soporte para ARM SoС, 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, Ren esas R8A779M*, Xilinx Kria, Radxa Zero, JetHub D1/H1, Netronix E70K02.

Fuente: opennet.ru

Añadir un comentario