Lanzamiento del núcleo de Linux 5.7

Después de dos meses de desarrollo Linus Torvalds presentado lanzamiento del núcleo Linux 5.7. Entre los cambios más notables: una nueva implementación del sistema de archivos exFAT, un módulo bareudp para crear túneles UDP, protección basada en autenticación de puntero para ARM64, la capacidad de adjuntar programas BPF a controladores LSM, una nueva implementación de Curve25519, un split- detector de bloqueo, compatibilidad de BPF con PREEMPT_RT, eliminación del límite en el tamaño de línea de 80 caracteres en el código, teniendo en cuenta los indicadores de temperatura de la CPU en el programador de tareas, la capacidad de usar clone() para generar procesos en otro cgroup, protección contra escritura a la memoria usando userfaultfd.

La nueva versión aceptó 15033 correcciones de 1961 desarrolladores,
tamaño del parche: 39 MB (los cambios afectaron a 11590 archivos, agregaron 570560 líneas de código,
297401 líneas eliminadas). Alrededor del 41% de todos presentados en 5.7
Los cambios están asociados con los controladores de dispositivos, aproximadamente el 16% de los cambios tienen
Actitud hacia la actualización de código específico para arquitecturas de hardware, 13%.
relacionados con la pila de red, 4% con sistemas de archivos y 4% con sistemas internos
subsistemas del núcleo.

El principal innovaciones:

  • Subsistema de disco, E/S y sistemas de archivos
    • Se agregó una nueva implementación del controlador exFAT, fundado basado en el código base actual “sdfat” (2.x) desarrollado por Samsung para sus teléfonos inteligentes Android. El controlador agregado previamente al kernel se basó en el código heredado de Samsung (versión 1.2.9) y estaba aproximadamente un 10% por detrás del nuevo controlador en rendimiento. Recordemos que agregar soporte exFAT al kernel fue posible después de que Microsoft опубликовала especificaciones públicas y patentes exFAT disponibles para uso libre de regalías en Linux.
    • Btrfs implementa un nuevo comando ioctl(): BTRFS_IOC_SNAP_DESTROY_V2, que le permite eliminar una subsección por su identificador. Se proporciona soporte completo para la clonación de extensiones en línea. Se ha ampliado el número de puntos de cancelación para operaciones de redistribución, lo que ha reducido las largas esperas al ejecutar el comando 'cancelación de saldo'. Se ha acelerado la determinación de las extensiones de los vínculos de retroceso (por ejemplo, el tiempo de ejecución del script de prueba se ha reducido de una hora a varios minutos). Se agregó la capacidad de adjuntar extensiones de archivos a cada inodo de un árbol. Se ha rediseñado el esquema de bloqueo utilizado al escribir en subparticiones y al excluir NOCOW. Eficiencia mejorada de la ejecución de fsync para rangos.
    • XFS ha mejorado la comprobación de metadatos y fsck para particiones activas. Se ha propuesto una biblioteca para reconstruir estructuras btree, que en el futuro se utilizará para reelaborar xfs_repair e implementar la posibilidad de recuperación sin desmontar la partición.
    • Se ha agregado a CIFS soporte experimental para colocar una partición de intercambio en almacenamientos SMB3. Se implementaron extensiones POSIX para readdir, definidas en la especificación SMB3.1.1. Rendimiento de escritura mejorado para páginas de 64 KB cuando el modo caché = estricto está habilitado y se utilizan las versiones de protocolo 2.1+.
    • FS EXT4 se ha transferido de bmap e iopoll al uso de iomap.
    • F2FS proporciona soporte opcional para la compresión de datos mediante el algoritmo zstd. De forma predeterminada, se utiliza el algoritmo LZ4 para la compresión. Se agregó soporte para el comando "chattr -c commit". Se proporciona visualización del tiempo de montaje. Se agregó ioctl F2FS_IOC_GET_COMPRESS_BLOCKS para obtener información sobre la cantidad de bloques comprimidos. Se agregó salida de datos de compresión a través de statx.
    • El sistema de archivos Ceph ha agregado la capacidad de realizar operaciones de creación y eliminación de archivos localmente (desvincular) sin esperar una respuesta del servidor (trabajando en modo asíncrono). El cambio, por ejemplo, puede mejorar significativamente el rendimiento al ejecutar la utilidad rsync.
    • Se ha agregado a OVERLAYFS la capacidad de utilizar virtiofs como sistema de archivos de nivel superior.
    • Reescrito Se ha reelaborado el código de recorrido de ruta en VFS, se ha reelaborado el código de análisis de enlaces simbólicos y se ha unificado el recorrido del punto de montaje.
    • En el subsistema scsi para usuarios sin privilegios permitido Ejecución de comandos ZBC.
    • En dm_writecache implementado la capacidad de borrar gradualmente el caché según el parámetro max_age, que establece la vida útil máxima de un bloque.
    • En dm_integrity agregado soporte para la operación "descartar".
    • En null_blk agregado soporte para sustitución de errores para simular fallas durante las pruebas.
    • Añadido por capacidad de enviar notificaciones a udev sobre cambios en el tamaño del dispositivo de bloque.
  • Subsistema de red
    • Filtro de red incluido cambios, acelerando significativamente el procesamiento de grandes listas de coincidencias (conjuntos de nftables), que requieren verificar una combinación de subredes, puertos de red, protocolo y direcciones MAC.
      Optimizaciones ingresó en el módulo nft_set_pipapo (PIle PAcket POlicies), que resuelve el problema de hacer coincidir el contenido de un paquete con rangos de estado de campo arbitrarios utilizados en reglas de filtrado, como rangos de puertos de red e IP (nft_set_rbtree y nft_set_hash manipulan la coincidencia de intervalos y la reflexión directa de los valores ). La versión de pipapo vectorizada usando instrucciones AVX256 de 2 bits en un sistema con un procesador AMD Epyc 7402 mostró un aumento de rendimiento del 420 % al analizar 30 mil registros, incluidas combinaciones de puerto y protocolo. El aumento al comparar una combinación de una subred y un número de puerto al analizar 1000 registros fue del 87 % para IPv4 y del 128 % para IPv6.

    • Добавлен Módulo bareudp, que le permite encapsular varios protocolos L3, como MPLS, IP y NSH, en un túnel UDP.
    • Continuó la integración de los componentes MPTCP (MultiPath TCP), una extensión del protocolo TCP para organizar el funcionamiento de una conexión TCP con la entrega de paquetes simultáneamente a lo largo de varias rutas a través de diferentes interfaces de red vinculadas a diferentes direcciones IP.
    • Añadido por soporte para mecanismos de aceleración de hardware para encapsular tramas Ethernet en 802.11 (Wi-Fi).
    • Al mover un dispositivo de un espacio de nombres de red a otro, se ajustan los derechos de acceso y la propiedad de los archivos correspondientes en sysfs.
    • Se agregó la capacidad de usar el indicador SO_BINDTODEVICE para usuarios que no son root.
    • Se ha aceptado la tercera parte de los parches, convirtiendo el kit de herramientas ethtool de ioctl() a usar la interfaz netlink. La nueva interfaz facilita la adición de extensiones, mejora el manejo de errores, permite enviar notificaciones cuando cambia el estado, simplifica la interacción entre el kernel y el espacio del usuario y reduce la cantidad de listas con nombres que deben sincronizarse.
    • Se agregó la capacidad de utilizar aceleradores de hardware especiales para realizar operaciones de seguimiento de conexiones.
    • en filtro de red adicional un gancho para conectar clasificadores de paquetes salientes (salida), que complementaba el gancho previamente presente para paquetes entrantes (entrada).
  • Virtualización y seguridad
    • Se agregó implementación de hardware de autenticación de puntero (Autenticación de puntero), que utiliza instrucciones de CPU ARM64 especializadas para protegerse contra ataques utilizando técnicas de programación orientada al retorno (ROP), en las que el atacante no intenta colocar su código en la memoria, sino que opera con piezas de instrucciones de la máquina que ya están disponibles en las bibliotecas cargadas, terminando con una instrucción de retorno de control. La seguridad se reduce al uso de firmas digitales para verificar las direcciones de retorno a nivel del kernel. 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 lleva a cabo mediante instrucciones especiales de la CPU.
    • Añadido por la capacidad de proteger un área de memoria contra escritura usando la llamada al sistema userfaultfd(), diseñada para manejar fallas de página (acceso a páginas de memoria no asignadas) en el espacio del usuario. La idea es utilizar userfaultfd() tanto para detectar violaciones de acceso a páginas marcadas como protegidas contra escritura como para llamar a un controlador que pueda responder a dichos intentos de escritura (por ejemplo, para manejar cambios durante la creación de instantáneas en vivo de procesos en ejecución, estado capturar al volcar volcados de memoria al disco, implementar memoria compartida, rastrear cambios en la memoria). Funcionalidad equivalente usando mprotect() junto con el controlador de señales SIGSEGV, pero funciona notablemente más rápido.
    • SELinux ha desaprobado el parámetro "checkreqprot", que le permite deshabilitar las comprobaciones de protección de la memoria al procesar reglas (permitiendo el uso de áreas de memoria ejecutables, independientemente de las reglas especificadas en las reglas). Los enlaces simbólicos Kernfs pueden heredar el contexto de sus directorios principales.
    • La composición incluido módulo KRSI, que le permite adjuntar programas BPF a cualquier gancho LSM en el kernel. El cambio permite crear módulos LSM (Linux Security Module) en forma de programas BPF para resolver problemas de auditoría y control de acceso obligatorio.
    • Realizado Optimiza el rendimiento de /dev/random agrupando valores CRNG por lotes en lugar de llamar instrucciones RNG individualmente. Se mejoró el rendimiento de getrandom y /dev/random en sistemas ARM64 que proporcionan instrucciones RNG.
    • Implementación de una curva elíptica Curve25519 reemplazado para la opción de la biblioteca HACL, para cual dado prueba matemática de verificación de confiabilidad formal.
    • Добавлен Mecanismo de información sobre páginas de memoria libre. Con este mecanismo, los sistemas invitados pueden transmitir información sobre páginas que ya no se utilizan al sistema anfitrión, y el anfitrión puede recuperar los datos de la página.
    • En vfio/pci agregado soporte para SR-IOV (virtualización de E/S de raíz única).
  • Servicios de memoria y sistema.
    • De 80 a 100 caracteres aumentó limitación de la longitud máxima de línea en los textos fuente. Al mismo tiempo, se sigue recomendando a los desarrolladores que se mantengan dentro de los 80 caracteres por línea, pero este ya no es un límite estricto. Además, exceder el límite de tamaño de línea ahora generará una advertencia de compilación solo si se ejecuta checkpatch con la opción '--strict'. El cambio permitirá no distraer a los desarrolladores con manipulación con espacios y siéntete más libre al alinear el código, así como va a prevenir salto de línea excesivo, perturbador comprensión y búsqueda de código.
    • Añadido por soporte para el modo de arranque mixto EFI, que le permite cargar un kernel de 64 bits desde un firmware de 32 bits que se ejecuta en una CPU de 64 bits sin utilizar un gestor de arranque especializado.
    • Incluido sistema para identificar y depurar cerraduras divididas ("cerradura dividida"), que ocurre al acceder a datos no alineados en la memoria debido a que al ejecutar una instrucción atómica, los datos cruzan dos líneas de caché de la CPU. Este bloqueo produce un impacto significativo en el rendimiento (1000 ciclos más lento que una operación atómica en datos que caen en una línea de caché). Dependiendo del parámetro de arranque "split_lock_detect", el kernel puede detectar dichos bloqueos sobre la marcha y emitir advertencias o enviar una señal SIGBUS a la aplicación que causa el bloqueo.
    • El programador de tareas proporciona seguimiento de sensores de temperatura (Presión térmica) e implementado teniendo en cuenta el sobrecalentamiento al realizar tareas. Utilizando las estadísticas proporcionadas, el regulador térmico puede ajustar la frecuencia máxima de la CPU cuando se sobrecalienta, y el programador de tareas ahora tiene en cuenta la reducción en la potencia informática debido a dicha reducción en la frecuencia al programar las tareas para ejecutar (anteriormente, el programador respondía a los cambios en frecuencia con cierto retraso, durante algún tiempo tomando decisiones basadas en suposiciones infladas sobre los recursos informáticos disponibles).
    • El programador de tareas incluye indicadores invariantes seguimiento de carga, lo que le permite estimar correctamente la carga, independientemente de la frecuencia de funcionamiento actual de la CPU. El cambio le permite predecir con mayor precisión el comportamiento de las tareas en condiciones de cambios dinámicos en el voltaje y la frecuencia de la CPU. Por ejemplo, una tarea que consumió 1/3 de los recursos de la CPU a 1000 MHz consumirá 2/3 de los recursos cuando la frecuencia caiga a 500 MHz, lo que anteriormente creaba una suposición falsa de que se estaba ejecutando a plena capacidad (es decir, las tareas aparecían mayor para el planificador solo al reducir la frecuencia, lo que llevó a que se tomaran decisiones incorrectas en el gobernador schedutil cpufreq).
    • El controlador Intel P-state, que es responsable de seleccionar los modos de rendimiento, se ha cambiado para usar programar.
    • Se ha implementado la capacidad de utilizar el subsistema BPF cuando el kernel se ejecuta en tiempo real (PREEMPT_RT). Anteriormente, cuando se habilitaba PREEMPT_RT, era necesario deshabilitar BPF.
    • Se ha agregado un nuevo tipo de programa BPF: BPF_MODIFY_RETURN, que se puede adjuntar a una función en el kernel y cambiar el valor devuelto por esta función.
    • Añadido por oportunidad Usar la llamada al sistema clone3() para crear un proceso en un cgroup que sea diferente del cgroup principal, permitiendo que el proceso principal aplique restricciones y habilite la contabilidad inmediatamente después de generar un nuevo proceso o subproceso. Por ejemplo, un administrador de servicios puede asignar directamente nuevos servicios a grupos c separados, y los nuevos procesos, cuando se colocan en grupos c "congelados", se detendrán inmediatamente.
    • en Kbuild agregado soporte para la variable de entorno "LLVM=1" para cambiar al kit de herramientas Clang/LLVM al compilar el kernel. Se han elevado los requisitos para la versión binutils (2.23).
    • Se ha agregado una sección /sys/kernel/debug/kunit/ a debugfs con los resultados de las pruebas de kunit.
    • Se agregó el parámetro de arranque del kernel pm_debug_messages (análogo a /sys/power/pm_debug_messages), que permite la salida de información de depuración sobre el funcionamiento del sistema de administración de energía (útil al depurar problemas con la hibernación y el modo de espera).
    • A la interfaz de E/S asíncrona io_durante soporte adicional empalme() и selección de buffer atómico.
    • Perfilado de cgroup mejorado utilizando el kit de herramientas de rendimiento. Anteriormente, perf solo podía perfilar tareas en un cgroup específico y no podía descubrir a qué cgroup pertenece la muestra actual. perf ahora recibe información de cgroup para cada muestra, lo que le permite crear perfiles de más de un cgroup y aplicar la clasificación por
      cgroup en informes.

    • cgroupfs, un pseudo-FS para administrar cgroups, ha agregado soporte para atributos extendidos (xattrs), con los que, por ejemplo, puede dejar información adicional para los controladores en el espacio de usuario.
    • En el controlador de memoria de cgroup adicionaly soporte para protección recursiva del valor “memory.low”, que regula la cantidad mínima de RAM proporcionada a los miembros del grupo. Al montar una jerarquía de cgroup con la opción "memory_recursiveprot", el valor de "memory.low" que se establece para los nodos inferiores se distribuirá automáticamente a todos los nodos secundarios.
    • Добавлен Marco Uacce (Marco de aceleración unificado/de acceso al espacio de usuario previsto) para compartir direcciones virtuales (SVA, direccionamiento virtual compartido) entre la CPU y los dispositivos periféricos, lo que permite que los aceleradores de hardware accedan a estructuras de datos en la CPU principal.
  • Arquitecturas de hardware
    • Para la arquitectura ARM, se implementa la capacidad de recuperar memoria en caliente.
    • Para la arquitectura RISC-V, se agregó soporte para conexión y extracción en caliente de CPU (CPU hotplug). Para RISC-V de 32 bits, se implementa eBPF JIT.
    • Se eliminó la capacidad de utilizar sistemas ARM de 32 bits para ejecutar entornos invitados KVM.
    • Se eliminó la implementación NUMA "ficticia" para la arquitectura s390, para la cual no se encontraron casos de uso para lograr mejoras de rendimiento.
    • Para ARM64, se agregó soporte para la extensión AMU (Unidad de monitores de actividad), definida en ARMv8.4 y que proporciona contadores de rendimiento que se utilizan para calcular factores de corrección de escala de frecuencia en el programador de tareas.
  • Equipo
    • Añadido por soporte para dispositivos vDPA que utilizan un canal de intercambio de datos que cumple con las especificaciones virtio. Los dispositivos vDPA pueden ser equipos conectados físicamente o dispositivos virtuales emulados por software.
    • En el subsistema GPIO apareció un nuevo comando ioctl() para monitorear cambios, permitiéndole informar al proceso sobre cambios en el estado de cualquier línea GPIO. Como ejemplo del uso del nuevo comando propuesto Utilidad gpio-watch.
    • En el controlador DRM i915 para tarjetas de video Intel incluido soporte predeterminado para chips Tigerlake (“Gen12”) y soporte inicial agregado para control de retroiluminación OLED. Soporte mejorado para chips Ice Lake, Elkhart Lake, Baytrail y Haswell.
    • En el controlador amdgpu agregado capacidad de cargar firmware en el chip USBC para ASIC. Soporte mejorado para chips AMD Ryzen 4000 "Renoir". Ahora hay soporte para controlar paneles OLED. Se proporcionó visualización del estado del firmware en debugfs.
    • La capacidad de utilizar OpenGL 4 en sistemas invitados se ha agregado al controlador DRM vmwgfx para sistemas de virtualización VMware (anteriormente se admitía OpenGL 3.3).
    • Se agregaron nuevos controladores DRM para el sistema de visualización de la plataforma TI Keystone.
    • Controladores agregados para paneles LCD: Feixin K101 IM2BA02, Samsung s6e88a0-ams452ef01, Novatek NT35510, Elida KD35T133, EDT, NewEast Optoelectronics WJFH116008A, Rocktech RK101II01D-CT, Frida FRD350H54004.
    • Al sistema de gestión de energía agregado soporte para la plataforma Intel Jasper Lake (JSL) basada en Atom.
    • Se agregó soporte para la computadora portátil Pinebook Pro basada en Rockchip RK3399, la tableta Pine64 PineTab y el teléfono inteligente PinePhone basado en Allwinner A64.
    • Se agregó soporte 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 agregó soporte para placas y plataformas ARM Qualcomm Snapdragon 865 (SM8250), IPQ6018, NXP i.MX8M Plus, Kontron “sl28”, 11 opciones de placa i.MX6 TechNexion Pico, tres nuevas opciones de Toradex Colibri, Samsung S7710 Galaxy Xcover 2 basado en ST -Ericsson u8500, DH Electronics DHCOM SoM y PDK2, Renesas M3ULCB, Hoperun HiHope, Linutronix Testbox v2, PocketBook Touch Lux 3.

Fuente: opennet.ru

Añadir un comentario