Lanzamiento del núcleo de Linux 5.15

Luego de dos meses de desarrollo, Linus Torvalds presentó el lanzamiento del kernel Linux 5.15. Los cambios notables incluyen: nuevo controlador NTFS con soporte de escritura, módulo ksmbd con implementación de servidor SMB, subsistema DAMON para monitoreo de acceso a memoria, primitivas de bloqueo en tiempo real, soporte fs-verity en Btrfs, llamada al sistema Process_mrelease para memoria de sistemas de respuesta al hambre, módulo de certificación remota dm-ima.

La nueva versión incluye 13499 correcciones de 1888 desarrolladores, el tamaño del parche es de 42 MB (los cambios afectaron a 10895 archivos, se agregaron 632522 líneas de código y se eliminaron 299966 líneas). Aproximadamente el 45% de todos los cambios introducidos en 5.15 están relacionados con controladores de dispositivos, aproximadamente el 14% de los cambios están relacionados con la actualización de código específico para arquitecturas de hardware, el 14% están relacionados con la pila de redes, el 6% están relacionados con sistemas de archivos y el 3% están relacionados con los subsistemas internos del kernel.

Principales novedades:

  • Subsistema de disco, E/S y sistemas de archivos
    • El kernel ha adoptado una nueva implementación del sistema de archivos NTFS, abierto por Paragon Software. El nuevo controlador puede funcionar en modo de escritura y admite todas las funciones de la versión actual de NTFS 3.1, incluidos atributos de archivos extendidos, listas de acceso (ACL), modo de compresión de datos, trabajo efectivo con espacios vacíos en archivos (dispersos) y reproducción de cambios desde el registro para restaurar la integridad después de fallas.
    • El sistema de archivos Btrfs admite el mecanismo fs-verity, que se utiliza para controlar de forma transparente la integridad y autenticidad de archivos individuales utilizando hashes criptográficos o claves asociadas con los archivos, almacenados en el área de metadatos. Anteriormente, fs-verity sólo estaba disponible para sistemas de archivos Ext4 y F2fs.

      Btrfs también agrega soporte para mapear ID de usuario para sistemas de archivos montados (anteriormente compatible con sistemas de archivos FAT, ext4 y XFS). Esta característica le permite comparar archivos de un usuario específico en una partición externa montada con otro usuario en el sistema actual.

      Otros cambios a Btrfs incluyen: adición más rápida de claves al índice del directorio para mejorar el rendimiento de la creación de archivos; la capacidad de trabajar con raid0 con un dispositivo y raid10 con dos (por ejemplo, durante el proceso de reconfiguración de la matriz); opción “rescue=ibadroots” para ignorar un árbol de extensión incorrecto; aceleración de la operación de “envío”; reducción de conflictos de bloqueo durante las operaciones de cambio de nombre; la capacidad de utilizar sectores de 4K en sistemas con un tamaño de página de memoria de 64K.

    • En XFS, se ha estabilizado la capacidad de utilizar fechas posteriores a 2038 en el sistema de archivos. Se implementó un mecanismo para la desactivación retrasada del inodo y soporte para la instalación y eliminación retrasadas de atributos de archivos. Para eliminar los problemas, se eliminó la capacidad de deshabilitar las cuotas de disco para particiones ya montadas (puede deshabilitar las cuotas a la fuerza, pero el cálculo asociado con ellas continuará, por lo que es necesario volver a montarlas para deshabilitarlas por completo).
    • En EXT4, se ha trabajado para aumentar el rendimiento de la escritura de buffers delalloc y el procesamiento de archivos huérfanos que continúan existiendo debido a que permanecen abiertos, pero no están asociados a un directorio. El procesamiento de operaciones de descarte se ha eliminado del subproceso jbd2 kthread para evitar el bloqueo de operaciones con metadatos.
    • F2FS agregó la opción "discard_unit=block|segment|section" para vincular las operaciones de descarte (marcar bloques liberados que ya no pueden almacenarse físicamente) a la alineación relativa a un bloque, sector, segmento o sección. Se agregó soporte para rastrear cambios en la latencia de E/S.
    • El sistema de archivos EROFS (Sistema de archivos extensible de solo lectura) agrega soporte de E/S directa para archivos guardados sin compresión, así como soporte de fiemap.
    • OverlayFS implementa el manejo correcto de los indicadores de montaje "inmutable", "solo agregar", "sincronización" y "noatime".
    • NFS ha mejorado el manejo de situaciones en las que el servidor NFS deja de responder a las solicitudes. Se agregó la capacidad de montar desde un servidor que ya está en uso, pero al que se puede acceder a través de una dirección de red diferente.
    • Han comenzado los preparativos para reescribir el subsistema FSCACHE.
    • Se agregó soporte para particiones EFI con ubicación no estándar de tablas GPT.
    • El mecanismo de fanotify implementa un nuevo indicador, FAN_REPORT_PIDFD, que hace que pidfd se incluya en los metadatos devueltos. Pidfd ayuda a manejar situaciones de reutilización de PID para identificar con mayor precisión los procesos que acceden a archivos monitoreados (un pidfd está asociado con un proceso específico y no cambia, mientras que un PID puede asociarse con otro proceso después de que finaliza el proceso actual asociado con ese PID).
    • Se agregó la capacidad de agregar puntos de montaje a grupos compartidos existentes a la llamada al sistema move_mount(), lo que resuelve problemas al guardar y restaurar el estado del proceso en CRIU cuando hay múltiples espacios de montaje compartidos en contenedores aislados.
    • Se agregó protección contra condiciones de carrera ocultas que podrían causar daños en los archivos al realizar lecturas de caché mientras se procesan vacíos en un archivo.
    • Se ha descontinuado el soporte para el bloqueo obligatorio (obligatorio) de archivos, implementado mediante el bloqueo de llamadas al sistema que conducen a un cambio de archivo. Debido a posibles condiciones de carrera, estos bloqueos se consideraron poco confiables y quedaron obsoletos hace muchos años.
    • Se eliminó el subsistema LightNVM, que permitía el acceso directo a la unidad SSD, sin pasar por la capa de emulación. LightNVM perdió su significado después de la llegada de los estándares NVMe que prevén la zonificación (ZNS, Zoned Namespace).
  • Servicios de memoria y sistema.
    • Se ha implementado el subsistema DAMON (Data Access MONitor), que le permite monitorear la actividad relacionada con el acceso a datos en la RAM en relación con un proceso seleccionado que se ejecuta en el espacio del usuario. El subsistema le permite analizar a qué áreas de memoria accedió el proceso durante toda su operación y qué áreas de memoria quedaron sin reclamar. DAMON presenta baja carga de CPU, bajo consumo de memoria, alta precisión y sobrecarga constante predecible, independientemente del tamaño. El subsistema puede ser utilizado tanto por el kernel para optimizar la administración de la memoria como por las utilidades en el espacio del usuario para comprender qué está haciendo exactamente un proceso y optimizar el uso de la memoria, por ejemplo, liberando el exceso de memoria para el sistema.
    • La llamada al sistema Process_mrelease se ha implementado para acelerar el proceso de liberación de memoria de un proceso que completa su ejecución. En circunstancias normales, la liberación de recursos y la terminación del proceso no son instantáneas y pueden retrasarse por diversas razones, lo que interfiere con los sistemas de respuesta temprana de la memoria del espacio del usuario, como oomd (proporcionado por systemd) y lmkd (utilizado por Android). Al llamar a Process_mrelease, dichos sistemas pueden desencadenar de manera más predecible la recuperación de memoria de procesos forzados.
    • Desde la rama del kernel PREEMPT_RT, que desarrolla soporte para operación en tiempo real, se han transferido variantes de primitivas para organizar bloqueos mutex, ww_mutex, rw_semaphore, spinlock y rwlock, basadas en el subsistema RT-Mutex. Se agregaron cambios al asignador de losas SLUB para mejorar la operación en el modo PREEMPT_RT y reducir el impacto en las interrupciones.
    • Se agregó compatibilidad con el atributo del programador de tareas SCHED_IDLE a cgroup, lo que le permite proporcionar este atributo a todos los procesos de un grupo incluido en un cgroup específico. Aquellos. Estos procesos solo se ejecutarán cuando no haya otras tareas esperando a ser ejecutadas en el sistema. A diferencia de configurar el atributo SCHED_IDLE para cada proceso individualmente, al vincular SCHED_IDLE a un cgroup, el peso relativo de las tareas dentro del grupo se tiene en cuenta al seleccionar una tarea para ejecutar.
    • El mecanismo para contabilizar el consumo de memoria en cgroup se ha ampliado con la capacidad de rastrear estructuras de datos adicionales del kernel, incluidas las creadas para sondeo, procesamiento de señales y espacios de nombres.
    • Se agregó soporte para la programación asimétrica de la vinculación de tareas a los núcleos del procesador en arquitecturas en las que algunas CPU permiten la ejecución de tareas de 32 bits y otras funcionan solo en modo de 64 bits (por ejemplo, ARM). El nuevo modo le permite considerar solo las CPU que admiten tareas de 32 bits al programar tareas de 32 bits.
    • La interfaz de E/S asíncrona io_uring ahora admite la apertura de archivos directamente en la tabla de índice de archivos fijos, sin utilizar un descriptor de archivos, lo que permite acelerar significativamente algunos tipos de operaciones, pero va en contra del proceso tradicional de Unix de utilizar descriptores de archivos. para abrir archivos.

      io_uring para el subsistema BIO (Block I/O Layer) implementa un nuevo mecanismo de reciclaje (“reciclaje BIO”), que reduce la sobrecarga en el proceso de gestión de la memoria interna y aumenta el número de operaciones de E/S procesadas por segundo en aproximadamente un 10 %. . io_uring también agrega soporte para las llamadas al sistema mkdirat(), symlinkat() y linkat().

    • Para los programas BPF, se implementó la capacidad de solicitar y procesar eventos del temporizador. Se agregó un iterador para sockets UNIX y se implementó la capacidad de obtener y configurar opciones de socket para setsockopt. El volcado BTF ahora admite datos escritos.
    • En sistemas NUMA con diferentes tipos de memoria que difieren en rendimiento, cuando se agota el espacio libre, las páginas de memoria desalojadas se transfieren de la memoria dinámica (DRAM) a una memoria permanente más lenta (memoria persistente) en lugar de eliminar estas páginas. Las pruebas han demostrado que estas tácticas suelen mejorar el rendimiento de dichos sistemas. NUMA también brinda la capacidad de asignar páginas de memoria para un proceso de un conjunto seleccionado de nodos NUMA.
    • Para la arquitectura ARC, se implementó soporte para tablas de páginas de memoria de tres y cuatro niveles, lo que permitirá aún más soporte para procesadores ARC de 64 bits.
    • Para la arquitectura s390, 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.
    • Se agregó soporte para indexar la lista de mensajes generados a través de printk(), lo que le permite recuperar todos esos mensajes a la vez y realizar un seguimiento de los cambios en el espacio del usuario.
    • mmap() ha eliminado la compatibilidad con la opción VM_DENYWRITE y se ha eliminado el uso del modo MAP_DENYWRITE en el código del kernel, lo que ha reducido el número de situaciones que conducen al bloqueo de escrituras en un archivo con el error ETXTBSY.
    • Se ha agregado un nuevo tipo de comprobaciones, "sondeos de eventos", al subsistema de seguimiento, que se puede adjuntar a eventos de seguimiento existentes, definiendo su propio formato de salida.
    • Al construir el kernel usando el compilador Clang, ahora se usa el ensamblador predeterminado del proyecto LLVM.
    • Como parte de un proyecto para eliminar del núcleo el código que genera advertencias en el compilador, se llevó a cabo un experimento con el modo "-Werror" habilitado de forma predeterminada, en el que las advertencias del compilador se procesan como errores. En preparación para la versión 5.15, Linus comenzó a aceptar sólo cambios que no dieran como resultado advertencias al compilar el kernel y habilitaron la compilación con "-Werror", pero luego acordaron que tal decisión era prematura y retrasaron la habilitación de "-Werror" de forma predeterminada. . La inclusión del indicador "-Werror" durante el ensamblaje se controla mediante el parámetro WERROR, que está configurado en COMPILE_TEST de forma predeterminada, es decir. Por ahora sólo está habilitado para versiones de prueba.
  • Virtualización y seguridad
    • Se agregó un nuevo controlador dm-ima a Device Mapper (DM) con la implementación de un mecanismo de certificación remota basado en el subsistema IMA (Integrity Measurement Architecture), que permite a un servicio externo verificar el estado de los subsistemas del kernel para garantizar su autenticidad. . En la práctica, dm-ima le permite crear almacenamientos utilizando Device Mapper que están vinculados a sistemas de nube externos, en los que la validez de la configuración objetivo de DM iniciada se verifica mediante IMA.
    • prctl() implementa una nueva opción PR_SPEC_L1D_FLUSH, que cuando está habilitada, hace que el kernel vacíe el contenido de la caché de primer nivel (L1D) cada vez que ocurre un cambio de contexto. Este modo permite, de forma selectiva para los procesos más importantes, implementar protección adicional contra el uso de ataques de canal lateral realizados para determinar datos que se han almacenado en el caché como resultado de vulnerabilidades causadas por la ejecución especulativa de instrucciones en la CPU. El costo de habilitar PR_SPEC_L1D_FLUSH (no habilitado de forma predeterminada) es una penalización de rendimiento significativa.
    • Es posible construir el kernel agregando el indicador “-fzero-call-used-regs=used-gpr” a GCC, lo que garantiza que todos los registros se restablezcan a cero antes de devolver el control de la función. Esta opción le permite protegerse contra la fuga de información de las funciones y reducir en un 20% la cantidad de bloques adecuados para construir dispositivos ROP (programación orientada al retorno) en exploits.
    • Se ha implementado la capacidad de crear núcleos para la arquitectura ARM64 en forma de clientes para el hipervisor Hyper-V.
    • Se propone un nuevo marco de desarrollo de controladores “VDUSE”, que permite implementar dispositivos de bloques virtuales en el espacio del usuario y utilizar Virtio como transporte para el acceso desde sistemas invitados.
    • Se agregó el controlador Virtio para el bus I2C, lo que permite emular controladores I2C en modo paravirtualización utilizando backends separados.
    • Se agregó el controlador Virtio gpio-virtio para permitir a los invitados acceder a las líneas GPIO proporcionadas por el sistema host.
    • Se agregó la capacidad de restringir el acceso a las páginas de memoria para controladores de dispositivos con soporte DMA en sistemas sin una MMU (unidad de administración de memoria) de E/S.
    • El hipervisor KVM tiene la capacidad de mostrar estadísticas en forma de histogramas lineales y logarítmicos.
  • Subsistema de red
    • El módulo ksmbd se agregó al kernel con la implementación de un servidor de archivos que utiliza el protocolo SMB3. El módulo complementa la implementación del cliente SMB previamente disponible en el kernel y, a diferencia del servidor SMB que se ejecuta en el espacio del usuario, es más eficiente en términos de rendimiento, consumo de memoria e integración con capacidades avanzadas del kernel. Ksmbd se promociona como una extensión de Samba lista para integrar y de alto rendimiento que se integra con herramientas y bibliotecas de Samba según sea necesario. Las capacidades de ksmbd incluyen soporte mejorado para la tecnología de almacenamiento en caché de archivos distribuidos (arrendamientos SMB) en sistemas locales, lo que puede reducir significativamente el tráfico. En el futuro, planean agregar soporte para RDMA (“smbdirect”) y extensiones de protocolo relacionadas con el aumento de la confiabilidad del cifrado y la verificación mediante firmas digitales.
    • El cliente CIFS ya no admite NTLM ni los algoritmos de autenticación más débiles basados ​​en DES utilizados en el protocolo SMB1.
    • El soporte de multidifusión se implementa en la implementación de puentes de red para VLAN.
    • El controlador de enlace, utilizado para agregar interfaces de red, ha agregado soporte para el subsistema XDP (eXpress Data Path), que le permite manipular paquetes de red en la etapa anterior a que sean procesados ​​por la pila de red del kernel de Linux.
    • La pila inalámbrica mac80211 admite STA (autorización temporal especial) de 6 GHZ en modos LPI, SP y VLP, así como la capacidad de configurar TWT (tiempo de activación objetivo) individual en modo de punto de acceso.
    • Se agregó soporte para MCTP (Protocolo de transporte de componentes de administración), utilizado para la interacción entre controladores de administración y dispositivos asociados (procesadores host, dispositivos periféricos, etc.).
    • Integración en el núcleo de 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 asociadas con diferentes direcciones IP. La nueva versión agrega soporte para direcciones en modo de malla completa.
    • Se han agregado a netfilter controladores para transmisiones de red encapsuladas en el protocolo SRv6 (Segment Routing IPv6).
    • Se agregó compatibilidad con mapas de calcetines para sockets de transmisión Unix.
  • Equipo
    • El controlador amdgpu admite APU Cyan Skillfish (equipadas con GPU Navi 1x). La APU Yellow Carp ahora admite códecs de vídeo. Soporte mejorado para GPU Aldebaran. Se agregaron nuevos identificadores de mapas basados ​​en GPU Navi 24 “Beige Goby” y RDNA2. Se propone una implementación mejorada de pantallas virtuales (VKMS). Se ha implementado soporte para monitorear la temperatura de los chips AMD Zen 3.
    • El controlador amdkfd (para GPU discretas, como Polaris) implementa un administrador de memoria virtual compartida (SVM, memoria virtual compartida) basado en el subsistema HMM (Heterogeneous Memory Management), que permite el uso de dispositivos con sus propias unidades de administración de memoria (MMU). , unidad de gestión de memoria), que puede acceder a la memoria principal. En particular, utilizando HMM, puede organizar un espacio de direcciones compartido entre la GPU y la CPU, en el que la GPU puede acceder a la memoria principal del proceso.
    • El controlador i915 para tarjetas de video Intel amplía el uso del administrador de memoria de video TTM e incluye la capacidad de administrar el consumo de energía basado en GuC (microcontrolador de gráficos). Han comenzado los preparativos para la implementación del soporte para la tarjeta gráfica Intel ARC Alchemist y la GPU Intel Xe-HP.
    • El controlador nouveau implementa el control de retroiluminación para paneles eDP mediante DPCD (datos de configuración de DisplayPort).
    • Se agregó compatibilidad con las GPU Adreno 7c Gen 3 y Adreno 680 al controlador msm.
    • El controlador IOMMU está implementado para el chip Apple M1.
    • Se agregó un controlador de sonido para sistemas basados ​​en APU AMD Van Gogh.
    • El controlador Realtek R8188EU se agregó a la rama provisional, que reemplazó la versión anterior del controlador (rtl8188eu) para los chips inalámbricos Realtek RTL8188EU 802.11 b/g/n.
    • El controlador ocp_pt se incluye para la placa PCIe desarrollada por Meta (Facebook) con la implementación de un reloj atómico en miniatura y un receptor GNSS, que se puede utilizar para organizar el funcionamiento de servidores separados de sincronización de hora exacta.
    • Se agregó soporte para teléfonos inteligentes Sony Xperia 10II (Snapdragon 665), Xiaomi Redmi 2 (Snapdragon MSM8916), Samsung Galaxy S3 (Snapdragon MSM8226), Samsung Gavini/Codina/Kyle.
    • Se agregó soporte para ARM SoС y NVIDIA Jetson TX2 NX Developer Kit, Sancloud BBE Lite, PicoITX, DRC02, SolidRun SolidSense, SKOV i.MX6, Nitrogen8, Traverse Ten64, GW7902, Microchip SAMA7, ualcomm Snapdragon SDM636/SM8150, Renesas R-Car H3e placas -2G/M3e-2G, Marvell CN913x, ASpeed ​​​​AST2600 (placas de servidor Facebook Cloudripper, Elbert y Fuji), 4KOpen STiH418-b2264.
    • Se agregó soporte para paneles LCD Gopher 2b, EDT ETM0350G0DH6/ETMV570G2DHU, LOGIC Technologies LTTD800480070-L6WH-RT, Multi-Innotechnology MI1010AIT-1CP1, Innolux EJ030NA 3.0, ilitek ili9341, E Ink VB3300-KCA, Samsung ATNA33XC20 7430 , Samsung DB2401, WideChips WSXNUMX .
    • Se agregó el controlador LiteETH con soporte para controladores Ethernet utilizados en SoC del software LiteX (para FPGA).
    • Se ha agregado una opción de baja latencia al controlador de audio USB para controlar la inclusión del funcionamiento en el modo de latencia mínima. También se agregó la opción quirk_flags para pasar configuraciones específicas del dispositivo.

Al mismo tiempo, la Fundación Latinoamericana de Software Libre creó una versión del kernel 5.15 completamente libre - Linux-libre 5.15-gnu, sin elementos de firmware y controladores que contengan componentes o secciones de código no libres, cuyo alcance es limitado. por el fabricante. La nueva versión implementa la salida de un mensaje al registro sobre la finalización de la limpieza. Se han solucionado los problemas con la generación de paquetes utilizando mkspec y se ha mejorado la compatibilidad con paquetes instantáneos. Se eliminaron algunas advertencias mostradas al procesar el archivo de encabezado firmware.h. Se permitió la salida de algunos tipos de advertencias (“format-extra-args”, comentarios, funciones y variables no utilizadas) al compilar en el modo “-Werror”. Se agregó limpieza del controlador gehc-achc. Código de limpieza de blobs actualizado en controladores y subsistemas adreno, btusb, btintel, brcmfmac, aarch64 qcom. Se ha detenido la limpieza de los controladores prism54 (eliminado) y rtl8188eu (reemplazado por r8188eu).

Fuente: opennet.ru

Añadir un comentario