Kernel de Linux 5.14

Kernel de Linux 5.14

Después de dos meses de desarrollo Linus Torvalds presentado lanzamiento del núcleo Linux 5.14. Entre los cambios más notables: nuevas llamadas al sistema quotectl_fd() y memfd_secret(), eliminación de controladores ide y raw, nuevo controlador de prioridad de E/S para cgroup, modo de programación de tareas SCHED_CORE, infraestructura para crear cargadores de programas BPF verificados.

La nueva versión incluye 15883 correcciones de 2002 desarrolladores, el tamaño del parche es de 69 MB (los cambios afectaron a 12580 archivos, se agregaron 861501 líneas de código y se eliminaron 321654 líneas). Aproximadamente el 47% de todos los cambios introducidos en 5.14 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 13% están relacionados con la pila de redes, el 3% están relacionados con sistemas de archivos y el 3% están relacionados con los subsistemas internos del kernel.

El principal innovaciones:

  • subsistema de disco, entrada/salida y sistemas de archivos:
    • para cgrupo implementado Nuevo controlador de prioridad de E/S: rq-qos, que puede controlar la prioridad de procesamiento de solicitudes para bloquear dispositivos generados por miembros de cada cgroup. Se ha agregado nueva compatibilidad con el controlador de prioridad al programador de E/S mq-deadline;
    • en el sistema de archivos ext4 implementado Nuevo comando ioctl EXT4_IOC_CHECKPOINT, que fuerza todas las transacciones pendientes del registro y los buffers asociados al disco, y también sobrescribe el área utilizada por el registro en el almacenamiento. El cambio se preparó como parte de una iniciativa para evitar fugas de información de los sistemas de archivos;
    • en Btrfs ingresó Optimizaciones de rendimiento: al eliminar el registro innecesario de atributos extendidos durante la ejecución de fsync, el rendimiento de operaciones intensivas con atributos extendidos aumentó hasta en un 17 %. Además, al realizar operaciones de recorte que no afectan las extensiones, se desactiva la sincronización completa, lo que redujo el tiempo de operación en un 12 %. Se ha agregado una configuración a sysfs para limitar el ancho de banda de E/S al verificar el FS. Se agregaron llamadas ioctl para cancelar las operaciones de cambio de tamaño y eliminación del dispositivo;
    • en XFS reelaborado implementación de un caché de búfer, que se transfiere a la asignación de páginas de memoria en modo por lotes. Eficiencia de caché mejorada;
    • F2FS agregó una opción para trabajar en modo de solo lectura e implementó un modo de almacenamiento en caché de bloques comprimidos (compress_cache) para mejorar el rendimiento de lectura aleatoria. Se ha implementado soporte para comprimir archivos asignados a la memoria mediante la operación mmap(). Para desactivar selectivamente la compresión de archivos mediante máscara, se ha propuesto una nueva opción de montaje, nocompress;
    • se ha trabajado en el controlador exFAT para mejorar la compatibilidad con el almacenamiento de algunas cámaras digitales;
    • llamada al sistema agregada cuotactl_fd(), que le permite administrar cuotas no a través de un archivo de dispositivo especial, sino especificando un descriptor de archivo asociado con el sistema de archivos para el cual se aplica la cuota;
    • Los controladores antiguos para dispositivos de bloque con interfaz IDE se eliminaron del kernel y hace tiempo que fueron reemplazados por el subsistema libata. El soporte para dispositivos antiguos se ha mantenido en su totalidad, los cambios se refieren sólo a la capacidad de usar controladores antiguos, cuando se usaban los discos se llamaban /dev/hd* y no /dev/sd*;
    • El controlador "sin formato" se eliminó del kernel, lo que proporciona acceso sin búfer para bloquear dispositivos a través de la interfaz /dev/raw. Esta funcionalidad se ha implementado desde hace mucho tiempo en aplicaciones que utilizan el indicador O_DIRECT;
  • memoria y servicios del sistema:
    • Se ha implementado un nuevo modo de programación en el programador de tareas. SCHED_CORE, que le permite controlar qué procesos se pueden ejecutar juntos en el mismo núcleo de CPU. A cada proceso se le puede asignar un identificador de cookie que define el alcance de la confianza entre procesos (por ejemplo, pertenecer al mismo usuario o contenedor). Al organizar la ejecución del código, el programador puede garantizar que un núcleo de CPU se comparta solo entre procesos asociados con el mismo propietario, lo que puede usarse para bloquear algunos ataques de Spectre al evitar que se ejecuten tareas confiables y no confiables en el mismo subproceso SMT (Hyper Threading). ;
    • para el mecanismo cgroup, se implementó soporte para la operación kill, que le permite matar todos los procesos asociados con el grupo a la vez (enviar SIGKILL) escribiendo "1" en el archivo virtual cgroup.kill;
    • capacidades ampliadas relacionadas con la respuesta a la detección de bloqueos divididos (“bloqueos divididos”) que ocurren al acceder a datos no alineados en la memoria debido al hecho de que al ejecutar una instrucción atómica, los datos cruzan dos líneas de caché de la CPU. Este tipo de bloqueo provoca una caída significativa del rendimiento, por lo que anteriormente era posible cerrar por la fuerza la aplicación que provocaba el bloqueo. La nueva versión agrega el parámetro de línea de comando del kernel “split_lock_detect=ratelimit:N”, que le permite definir un límite en todo el sistema en la tasa de operaciones de bloqueo por segundo, después de exceder el cual cualquier proceso que se haya convertido en la fuente de un bloqueo dividido será verse obligado a detenerse durante 20 ms en lugar de terminar;
    • El controlador de ancho de banda de cgroup CFS (controlador de ancho de banda CFS), que determina cuánto tiempo de procesador se puede asignar a cada cgroup, tiene la capacidad de definir límites limitados por una duración determinada de la acción, lo que permite una mejor regulación de las cargas sensibles a la latencia. Por ejemplo, configurar cpu.cfs_quota_us en 50000 y cpu.cfs_period_us en 100000 permitirá que un grupo de procesos desperdicie 100 ms de tiempo de CPU cada 50 ms;
    • agregado infraestructura inicial para crear cargadores de programas BPF, que además permitirán la descarga únicamente de programas BPF firmados con una clave digital confiable;
    • se agregó una nueva operación futex FUTEX_LOCK_PI2, que utiliza un temporizador monótono para calcular el tiempo de espera, que tiene en cuenta el tiempo que pasa el sistema en modo de suspensión;
    • para la arquitectura RISC-V, soporte para páginas de memoria grandes (Transparent Huge-Pages) y la capacidad de utilizar el KVALLA identificar errores al trabajar con la memoria;
    • en la llamada al sistema madvise(), que proporciona un medio para optimizar la gestión de la memoria del proceso, agregado Los indicadores MADV_POPULATE_READ y MADV_POPULATE_WRITE generan un "fallo de página" en todas las páginas de memoria asignadas para operaciones de lectura o escritura, sin realizar una lectura o escritura real (prefallo). El uso de banderas puede resultar útil para reducir los retrasos en la ejecución del programa, gracias a la ejecución proactiva del controlador de "fallo de página" para todas las páginas no asignadas a la vez, sin esperar el acceso real a ellas;
    • en un sistema de pruebas unitarias unidad agregado soporte para ejecutar pruebas en el entorno QEMU;
    • Se agregaron nuevos trazadores: "osruido" para realizar un seguimiento de los retrasos en las aplicaciones causados ​​por el manejo de interrupciones y " timerlat " para mostrar información detallada sobre los retrasos al despertar de una señal del temporizador;
  • virtualización y seguridad:
    • adicional llamada al sistema memfd_secret(), que le permite crear un área de memoria privada en un espacio de direcciones aislado, visible solo para el proceso propietario, no reflejada en otros procesos y no accesible directamente al kernel;
    • en el sistema de filtrado de llamadas al sistema seccomp, al mover controladores de bloqueo al espacio del usuario, es posible usar una operación atómica para crear un descriptor de archivo para una tarea aislada y devolverlo al procesar una llamada al sistema. La operación propuesta resuelve el problema con interrupción del manejador en el espacio del usuario cuando llega una señal;
    • adicional nuevo mecanismo para administrar la limitación de recursos en el espacio de nombres de ID de usuario, que vincula contadores rlimit individuales a un usuario en el "espacio de nombres de usuario". El cambio resuelve el problema del uso de contadores de recursos comunes cuando un usuario ejecuta procesos en diferentes contenedores;
    • El hipervisor KVM para sistemas ARM64 ha agregado la capacidad de usar la extensión MTE (MemTag, Memory Tagging Extension) en sistemas invitados, lo que le permite vincular etiquetas a cada operación de asignación de memoria y organizar la verificación del uso correcto de punteros para bloquear la explotación de vulnerabilidades causadas por el acceso a bloques de memoria ya liberados, desbordamientos de buffers, accesos antes de la inicialización y uso fuera del contexto actual;
    • La autenticación de puntero proporcionada por la plataforma ARM64 ahora se puede configurar por separado para el kernel y el espacio de usuario. La tecnología le permite utilizar instrucciones ARM64 especializadas para verificar las direcciones de retorno mediante firmas digitales que se almacenan en los bits superiores no utilizados del propio puntero;
    • en modo usuario Linux agregado soporte para el uso de controladores para dispositivos PCI con un bus PCI virtual, implementado por el controlador PCI-over-virtio;
    • para sistemas x86, se agregó soporte para el dispositivo paravirtualizado virtio-iommu, que le permite enviar solicitudes IOMMU, como ATTACH, DETACH, MAP y UNMAP, a través del transporte virtio sin emular tablas de páginas de memoria;
    • Para las CPU Intel, desde la familia Skylake hasta Coffee Lake, el uso de Intel TSX (Extensiones de sincronización transaccional), que proporcionan herramientas para mejorar el rendimiento de aplicaciones multiproceso eliminando dinámicamente operaciones de sincronización innecesarias, está deshabilitado de forma predeterminada. Extensiones deshabilitadas por posibilidad de ataques Zombieload, manipulando la fuga de información a través de canales de terceros que se produce durante el funcionamiento del mecanismo de interrupción asíncrona de operaciones (TAA, TSX Asynchronous Abort);
  • subsistema de red:
    • integración continua 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. En el nuevo número adicional un mecanismo para establecer sus propias políticas de hash de tráfico para IPv4 e IPv6 (política de hash de múltiples rutas), que permite desde el espacio del usuario determinar qué campos de los paquetes, incluidos los encapsulados, se utilizarán al calcular el hash que determina la elección de la ruta. por el paquete;
    • Se ha agregado soporte de socket al virtio de transporte virtual. SOCK_SEQPACKET (transmisión ordenada y confiable de datagramas);
    • Se han ampliado las capacidades del mecanismo de socket SO_REUSEPORT, lo que permite que varios sockets de escucha se conecten a un puerto a la vez para recibir conexiones con la distribución de solicitudes entrantes simultáneamente en todos los sockets conectados a través de SO_REUSEPORT, lo que simplifica la creación de aplicaciones de servidor multiproceso. . En la nueva versión agregado medios para transferir el control a otro socket en caso de falla al procesar una solicitud por parte del socket seleccionado inicialmente (resuelve el problema de la pérdida de conexiones individuales al reiniciar los servicios);
  • equipo:
    • en el controlador amdgpu implementado soporte para la nueva serie de GPU AMD Radeon RX 6000, con nombre en código “Beige Goby” (Navi 24) y “Yellow Carp”, así como soporte mejorado para Aldebaran GPU (gfx90a) y Van Gogh APU. Se agregó la capacidad de trabajar simultáneamente con varios paneles eDP. Para APU Renoir, se ha implementado soporte para trabajar con buffers cifrados en la memoria de video (TMZ, Trusted Memory Zone). Se agregó soporte para tarjetas gráficas de desconexión en caliente. Para las GPU Radeon RX 6000 (Navi 2x) y las GPU AMD más antiguas, la compatibilidad con el mecanismo de ahorro de energía ASPM (Active State Power Management) está habilitado de forma predeterminada, que anteriormente solo estaba habilitado para las GPU Navi 1x, Vega y Polaris;
    • para los chips AMD, se ha agregado soporte para 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, Memory Management Unit), que puede acceder a la memoria principal. Incluyendo el uso de 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;
    • soporte tecnológico inicial agregado Cambio inteligente AMD, que cambia dinámicamente los parámetros de consumo de energía de la CPU y GPU en portátiles con chipset y tarjeta gráfica AMD para mejorar el rendimiento al jugar, editar vídeo y renderizar 3D;
    • en el controlador i915 para tarjetas de video Intel incluido soporte para chips Intel Alderlake P;
    • se agregó el controlador drm/hyperv para el adaptador de gráficos virtuales Hyper-V;
    • adicional Controlador de gráficos simpledrm que utiliza el framebuffer EFI-GOP o VESA proporcionado por el firmware UEFI o BIOS para la salida. El objetivo principal del controlador es proporcionar capacidades de salida gráfica durante las etapas iniciales del arranque, antes de que se pueda utilizar un controlador DRM completo. El controlador también se puede utilizar como solución temporal para equipos que aún no cuentan con controladores DRM nativos;
    • agregado soporte informático todo en uno Frambuesa Pi 400;
    • Se agregó el controlador dell-wmi-privacy para admitir los interruptores de hardware de cámara y micrófono incluidos en las computadoras portátiles Dell;
    • para portátiles lenovo adicional Interfaz WMI para cambiar los parámetros del BIOS a través de sysfs /sys/class/firmware-attributes/;
    • expandido soporte para dispositivos con interfaz USB4;
    • agregado soporte para tarjetas de sonido y códecs AmLogic SM1 TOACODEC, Intel AlderLake-M, NXP i.MX8, NXP TFA1, TDF9897, Rockchip RK817, Qualcomm Quinary MI2 y Texas Instruments TAS2505. Soporte de audio mejorado en portátiles HP y ASUS. Adicional parches para reducir los retrasos antes de que el audio comience a reproducirse en dispositivos con una interfaz USB.

Fuente – opennet.ru.

Fuente: linux.org.ru