Lanzamiento del núcleo de Linux 5.12

Luego de dos meses de desarrollo, Linus Torvalds presentó el lanzamiento del kernel Linux 5.12. Entre los cambios más notables: soporte para dispositivos de bloques zonificados en Btrfs, la capacidad de asignar ID de usuario para el sistema de archivos, limpieza de arquitecturas ARM heredadas, un modo de escritura "ansioso" en NFS, el mecanismo LOOKUP_CACHED para determinar rutas de archivos desde el caché , soporte para instrucciones atómicas en BPF, un sistema de depuración KFENCE para identificar errores al trabajar con memoria, modo de sondeo NAPI que se ejecuta en un subproceso del kernel separado en la pila de red, hipervisor ACRN, la capacidad de cambiar el modelo preventivo sobre la marcha en la tarea programador y soporte para optimizaciones LTO al construir en Clang.

La nueva versión incluye 14170 (en la versión anterior 15480) correcciones de 1946 (1991) desarrolladores, el tamaño del parche es 38 MB (los cambios afectaron a 12102 (12090) archivos, se agregaron 538599 (868025) líneas de código, 333377 (261456) se eliminaron líneas). Aproximadamente el 43% de todos los cambios introducidos en 5.12 están relacionados con controladores de dispositivos, aproximadamente el 17% de los cambios están relacionados con la actualización de código específico para arquitecturas de hardware, el 12% están relacionados con la pila de red, el 5% están relacionados con sistemas de archivos y el 4% están relacionados con los subsistemas internos del núcleo.

Principales novedades:

  • Subsistema de disco, E/S y sistemas de archivos
    • Se ha implementado la capacidad de asignar ID de usuario para sistemas de archivos montados (puede asignar archivos de un usuario en una partición externa montada con otro usuario en el sistema actual). El mapeo es compatible con sistemas de archivos FAT, ext4 y XFS. La funcionalidad propuesta hace que sea más fácil compartir archivos entre diferentes usuarios y en diferentes computadoras, incluido el mapeo que se usará en el mecanismo de directorio de inicio portátil systemd-homed, lo que permitirá a los usuarios mover sus directorios de inicio a medios externos y usarlos en diferentes computadoras, mapeando. ID de usuario con los que no coincide. Otra aplicación útil es organizar la provisión de acceso compartido a archivos desde un host externo, sin cambiar realmente los datos sobre los propietarios de los archivos en el sistema de archivos.
    • Los parches LOOKUP_CACHED se han adoptado en el kernel, lo que permite que las operaciones determinen una ruta de archivo desde el espacio del usuario sin bloquear, basándose únicamente en los datos disponibles en la memoria caché. El modo LOOKUP_CACHED se activa en la llamada openat2() pasando el indicador RESOLVE_CACHED, en el que los datos se sirven solo desde el caché, y si la determinación de la ruta requiere acceso a la unidad, se devuelve el error EAGAIN.
    • El sistema de archivos Btrfs ha agregado soporte inicial para dispositivos de bloques zonificados (dispositivos en discos magnéticos duros o SSD NVMe, cuyo espacio de almacenamiento se divide en zonas que forman grupos de bloques o sectores, a los que solo se permite la adición secuencial de datos. actualizando todo el grupo de bloques). En modo de solo lectura, se implementa soporte para bloques con metadatos y datos más pequeños que una página (subpágina).
    • En el sistema de archivos F2FS, se agregó la capacidad de seleccionar el algoritmo y el nivel de compresión. Se agregó soporte para compresión de alto nivel para el algoritmo LZ4. Implementada la opción de montaje checkpoint_merge.
    • Se ha implementado un nuevo comando ioctl FS_IOC_READ_VERITY_METADATA para leer metadatos de archivos protegidos con fs-verity.
    • El cliente NFS implementa un modo de escritura "ansioso" (escrituras = ansioso); cuando está habilitado, las operaciones de escritura en un archivo se transfieren inmediatamente al servidor, sin pasar por el caché de la página. Este modo le permite reducir el consumo de memoria, proporciona recepción instantánea de información sobre el fin del espacio libre en el sistema de archivos y, en algunas situaciones, permite lograr un mayor rendimiento.
    • Se han agregado nuevas opciones de montaje a CIFS (SMB): acregmax para controlar el almacenamiento en caché de archivos y acdirmax para controlar el almacenamiento en caché de metadatos del directorio.
    • En XFS, se ha habilitado el modo de verificación de cuotas de subprocesos múltiples, se ha acelerado la ejecución de fsync y se ha preparado el código growfs para implementar la función de reducir el tamaño del sistema de archivos.
  • Servicios de memoria y sistema.
    • Se ha agregado el subsistema DTMP (Dynamic Thermal Power Management), que permite regular dinámicamente el consumo de energía de diferentes dispositivos en función de los límites generales de temperatura establecidos.
    • Se ha implementado la capacidad de construir el kernel utilizando el compilador Clang con la inclusión de optimizaciones en la etapa de vinculación (LTO, Link Time Optimization). Las optimizaciones LTO se diferencian al tener en cuenta el estado de todos los archivos involucrados en el proceso de compilación, mientras que los modos de optimización tradicionales optimizan cada archivo por separado y no tienen en cuenta las condiciones para llamar a funciones definidas en otros archivos. Por ejemplo, con LTO, es posible la implementación en línea para funciones de otros archivos, el código no utilizado no se incluye en el archivo ejecutable, la verificación de tipos y la optimización general se llevan a cabo a nivel de proyecto en su conjunto. La compatibilidad con LTO está actualmente limitada a arquitecturas x86 y ARM64.
    • Es posible seleccionar modos de preferencia (PREEMPT) en el programador de tareas en la etapa de arranque (preempt=none/voluntario/completo) o mientras se trabaja con debugfs (/debug/sched_debug), si se especificó la configuración PREEMPT_DYNAMIC al compilar el kernel. Anteriormente, el modo de extrusión solo se podía configurar en el nivel de parámetros de ensamblaje. El cambio permite que las distribuciones envíen kernels con el modo PREEMPT habilitado, que proporciona una latencia mínima para los escritorios a costa de una pequeña penalización en el rendimiento y, si es necesario, recurrir a PREEMPT_VOLUNTARY (un modo intermedio para escritorios) o PREEMPT_NONE (proporciona el máximo rendimiento para los servidores). .
    • Se ha agregado soporte para las operaciones atómicas BPF_ADD, BPF_AND, BPF_OR, BPF_XOR, BPF_XCHG y BPF_CMPXCHG al subsistema BPF.
    • Los programas BPF tienen la capacidad de acceder a datos en la pila utilizando punteros con desplazamientos variables. Por ejemplo, si antes solo podía usar un índice de elemento constante para acceder a una matriz en la pila, ahora puede usar uno cambiante. El control de acceso solo dentro de los límites existentes lo lleva a cabo el verificador BPF. Esta característica solo está disponible para programas privilegiados debido a preocupaciones sobre la explotación de vulnerabilidades de ejecución de código especulativo.
    • Se agregó la capacidad de adjuntar programas BPF a puntos de seguimiento básicos que no están asociados con eventos de seguimiento visibles en el espacio del usuario (la preservación de ABI no está garantizada para dichos puntos de seguimiento).
    • Se implementó soporte para el bus CXL 2.0 (Compute Express Link), que se utiliza para organizar la interacción de alta velocidad entre la CPU y los dispositivos de memoria (le permite usar dispositivos de memoria externos como parte de la RAM o memoria permanente, como si esta memoria estaban conectados a través de un controlador de memoria estándar en la CPU).
    • Se agregó el controlador nvmem para recuperar datos de áreas de memoria reservadas por firmware a las que Linux no puede acceder directamente (por ejemplo, memoria EEPROM a la que solo puede acceder físicamente el firmware o datos a los que solo se puede acceder durante la fase de arranque inicial).
    • Se eliminó el soporte para el sistema de creación de perfiles “oprofile”, que no se usaba ampliamente y fue reemplazado por el mecanismo perf más moderno.
    • La interfaz de E/S asíncrona io_uring proporciona integración con cgroups que controlan el uso de la memoria.
    • La arquitectura RISC-V admite sistemas NUMA, así como mecanismos kprobes y uprobes.
    • Se agregó la capacidad de usar la llamada al sistema kcmp() independientemente de la funcionalidad de las instantáneas del estado del proceso (punto de control/restauración).
    • Se han eliminado las macros EXPORT_UNUSED_SYMBOL() y EXPORT_SYMBOL_GPL_FUTURE(), que no se utilizan en la práctica desde hace muchos años.
  • Virtualización y seguridad
    • Se agregó el mecanismo de protección KFence (Kernel Electric Fence), que detecta errores al trabajar con la memoria, como desbordamientos del búfer y acceso después de liberar la memoria. A diferencia del mecanismo de depuración KASAN, el subsistema KFence se caracteriza por una alta velocidad de funcionamiento y una baja sobrecarga, lo que le permite detectar errores de memoria que aparecen solo en sistemas en funcionamiento o durante un funcionamiento prolongado.
    • Se agregó soporte para el hipervisor ACRN, escrito teniendo en cuenta la preparación para tareas en tiempo real y la idoneidad para su uso en sistemas de misión crítica. ACRN proporciona una sobrecarga mínima, garantiza una baja latencia y una capacidad de respuesta adecuada al interactuar con el equipo. Admite la virtualización de recursos de CPU, E/S, subsistema de red, gráficos y operaciones de sonido. ACRN se puede utilizar para ejecutar múltiples máquinas virtuales aisladas en unidades de control electrónico, paneles de instrumentos, sistemas de información automotriz, dispositivos IoT de consumo y otras tecnologías integradas. ACRN admite dos tipos de sistemas invitados: máquinas virtuales de servicio privilegiadas, que se utilizan para administrar los recursos del sistema (CPU, memoria, E/S, etc.) y máquinas virtuales de usuario personalizadas, que pueden ejecutar distribuciones de Linux, Android y Windows.
    • En el subsistema IMA (Integrity Measurement Architecture), que mantiene una base de datos hash para verificar la integridad de los archivos y metadatos asociados, ahora es posible verificar la integridad de los datos del propio kernel, por ejemplo, para rastrear cambios en las reglas de SELinux. .
    • Se ha agregado al hipervisor KVM la capacidad de interceptar hiperllamadas de Xen y reenviarlas al emulador que se ejecuta en el espacio del usuario.
    • Se agregó la capacidad de usar Linux como entorno raíz para el hipervisor Hyper-V. El entorno raíz tiene acceso directo al hardware y se utiliza para ejecutar sistemas invitados (análogo a Dom0 en Xen). Hasta ahora, Hyper-V (Microsoft Hypervisor) admitía Linux sólo en entornos invitados, pero el propio hipervisor se controlaba desde un entorno basado en Windows.
    • Se agregó soporte para cifrado en línea para tarjetas eMMC, lo que le permite utilizar mecanismos de cifrado integrados en el controlador de la unidad que cifran y descifran E/S de forma transparente.
    • El soporte para los hashes RIPE-MD 128/256/320 y Tiger 128/160/192, que no se utilizan en el núcleo, así como el cifrado de flujo Salsa20, que fue reemplazado por el algoritmo ChaCha20, se ha eliminado del subsistema criptográfico. El algoritmo blake2 se ha actualizado para implementar blake2s.
  • Subsistema de red
    • Se agregó la capacidad de mover el controlador de sondeo NAPI para dispositivos de red a un subproceso del kernel separado, lo que permite mejorar el rendimiento para algunos tipos de carga de trabajo. Anteriormente, el sondeo se realizaba en el contexto de softirq y no estaba cubierto por el programador de tareas, lo que dificultaba la realización de optimizaciones detalladas para lograr el máximo rendimiento. La ejecución en un subproceso del kernel separado permite observar el controlador de sondeo desde el espacio del usuario, adjuntarlo a núcleos de CPU individuales y tenerlo en cuenta al programar el cambio de tareas. Para habilitar el nuevo modo en sysfs, se propone el parámetro /sys/class/net//threaded.
    • 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 la capacidad de asignar prioridad a ciertos subprocesos, lo que permite, por ejemplo, organizar el trabajo de los subprocesos de respaldo que se activan solo si hay problemas con el subproceso principal.
    • IGMPv3 agrega soporte para el mecanismo EHT (Seguimiento explícito de host).
    • El motor de filtrado de paquetes de Netfilter brinda la capacidad de poseer ciertas tablas para obtener control exclusivo (por ejemplo, un proceso de firewall en segundo plano puede tomar posesión de ciertas tablas, evitando que alguien más interfiera con ellas).
  • Equipo
    • Limpiamos plataformas ARM obsoletas y sin mantenimiento. Se ha eliminado el código de las plataformas efm32, picoxcell, prima2, tango, u300, zx y c6x, así como sus controladores asociados.
    • El controlador amdgpu brinda la capacidad de overclockear (OverDrive) tarjetas basadas en la GPU Sienna Cichlid (Navi 22, Radeon RX 6xxx). Se agregó soporte para el formato de píxeles FP16 para DCE (motor de controlador de pantalla) de 8.ª a 11.ª generación. Para GPU Navy Flounder (Navi 21) y APU Van Gogh, se implementó la capacidad de restablecer la GPU.
    • El controlador i915 para tarjetas gráficas Intel implementa el parámetro i915.mitigations para deshabilitar los mecanismos de aislamiento y protección a favor de un mejor rendimiento. Para los chips a partir de Tiger Lake, se incluye soporte para el mecanismo VRR (Variable Rate Refresh), que le permite cambiar de forma adaptativa la frecuencia de actualización del monitor para garantizar la fluidez y la ausencia de espacios durante los juegos. Se incluye compatibilidad con la tecnología Intel Clear Color para mejorar la precisión del color. Se agregó soporte para DP-HDMI 2.1. Se ha implementado la capacidad de controlar la retroiluminación de los paneles eDP. Para las GPU Gen9 con compatibilidad con LSPCON (Level Shifter and Protocol Converter), la compatibilidad con HDR está habilitada.
    • El controlador nouveau agrega soporte inicial para GPU NVIDIA basadas en la arquitectura GA100 (Ampere).
    • El controlador msm agrega soporte para las GPU Adreno 508, 509 y 512 utilizadas en los chips SDM (Snapdragon) 630, 636 y 660.
    • Se agregó soporte para tarjetas de sonido Sound BlasterX AE-5 Plus, Lexicon I-ONIX FW810 y Pioneer DJM-750. Se agregó soporte para el subsistema de audio Intel Alder Lake PCH-P. Se ha implementado soporte para la simulación de software de conexión y desconexión de un conector de audio para los controladores de depuración en el espacio del usuario.
    • Se agregó soporte para consolas de juegos Nintendo 64 fabricadas entre 1996 y 2003 (los intentos anteriores de portar Linux a Nintendo 64 no se completaron y se clasificaron como Vaporware). La motivación para crear un nuevo port para una plataforma obsoleta, que no se lanza desde hace casi veinte años, es el deseo de estimular el desarrollo de emuladores y simplificar el port de juegos.
    • Se agregó un controlador para el controlador de juegos Sony PlayStation 5 DualSense.
    • Se agregó soporte para placas, dispositivos y plataformas ARM: PineTab, Snapdragon 888 / SM8350, Snapdragon MTP, Two Beacon EmbeddedWorks, Intel eASIC N5X, Netgear R8000P, Plymovent M2M, Beacon i.MX8M Nano, NanoPi M4B.
    • Se agregó soporte para los teléfonos inteligentes Purism Librem5 Evergreen, Xperia Z3+/Z4/Z5, ASUS Zenfone 2 Laser, BQ Aquaris X5, OnePlus6, OnePlus6T, Samsung GT-I9070.
    • Se agregó el controlador bcm-vk para placas aceleradoras Broadcom VK (por ejemplo, placas Valkyrie y Viper PCIe), que se pueden usar para descargar operaciones de procesamiento de audio, video e imágenes, así como operaciones relacionadas con el cifrado, a un dispositivo separado.
    • Se agregó soporte para la plataforma Lenovo IdeaPad con la capacidad de controlar la carga constante y la retroiluminación del teclado. También se proporciona soporte para el perfil ACPI de la plataforma ThinkPad con la capacidad de controlar los modos de consumo de energía. Se agregó un controlador para el subsistema HID Lenovo ThinkPad X1 Tablet Gen 2.
    • Se agregó el controlador ov5647 con soporte para el módulo de cámara para Raspberry Pi.
    • Se agregó soporte para placas RISC-V SoC FU740 y HiFive Unleashed. También se agregó un nuevo controlador para el chip Kendryte K210.

Fuente: opennet.ru

Añadir un comentario