Lanzamiento del núcleo de Linux 5.14

Luego de dos meses de desarrollo, Linus Torvalds presentó el lanzamiento del kernel 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 núcleo.

Principales novedades:

  • Subsistema de disco, E/S y sistemas de archivos
    • Se implementó un nuevo controlador de priorización de E/S para cgroups, rq-qos, que puede controlar la prioridad de procesamiento de las solicitudes para bloquear dispositivos generadas por los miembros de cada cgroup. Se ha agregado nueva compatibilidad con el controlador de prioridad al programador de E/S mq-deadline.
    • El sistema de archivos ext4 implementa un nuevo comando ioctl, EXT4_IOC_CHECKPOINT, que fuerza que todas las transacciones pendientes del diario y sus buffers asociados se vacíen en el disco, y también sobrescribe el área utilizada por el diario en el almacenamiento. El cambio se preparó como parte de una iniciativa para evitar fugas de información de los sistemas de archivos.
    • Se han realizado optimizaciones de rendimiento en Btrfs: al eliminar el registro innecesario de atributos extendidos durante la ejecución de fsync, el rendimiento de operaciones intensivas con atributos extendidos ha aumentado 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, se rediseñó la implementación del caché del búfer, que se cambió para asignar páginas de memoria en modo por lotes. Eficiencia de caché mejorada.
    • F2FS agrega una opción para operar en modo de solo lectura e implementa un modo de caché de bloque comprimido (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 deshabilitar selectivamente la compresión de archivos basada en una 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.
    • Se agregó la llamada al sistema quotectl_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 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.
  • Servicios de memoria y sistema.
    • El programador de tareas implementa un nuevo modo de programación, 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 se puede usar para bloquear algunos ataques de Spectre al evitar que se ejecuten tareas confiables y no confiables en el mismo subproceso SMT (Hyper Threading). .
    • Para cgroup, se implementó soporte para la operación de eliminación, que le permite eliminar 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 un 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 se verá 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, implementa la capacidad de definir límites de tiempo limitado, lo que permite una mejor regulación de las cargas de trabajo 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.
    • Se agregó infraestructura inicial para crear cargadores de programas BPF, lo que permitirá además cargar solo 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 un tiempo de espera que tiene en cuenta el tiempo que pasa el sistema en modo de suspensión.
    • Para la arquitectura RISC-V, se implementa soporte para páginas de memoria grandes (Transparent Huge-Pages) y la capacidad de utilizar el mecanismo KFENCE para detectar errores al trabajar con memoria.
    • La llamada al sistema madvise(), que proporciona un medio para optimizar la gestión de la memoria del proceso, ha agregado los indicadores MADV_POPULATE_READ y MADV_POPULATE_WRITE para generar un "fallo de página" en todas las páginas de memoria asignadas a operaciones de lectura o escritura sin realizar una lectura o escritura real (predeterminado). ). El uso de banderas puede ser útil para reducir los retrasos en la ejecución del programa, debido 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.
    • El sistema de pruebas unitarias Kunit ha agregado soporte para ejecutar pruebas en el entorno QEMU.
    • Se han agregado nuevos trazadores: "osnoise" para rastrear 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
    • La llamada al sistema memfd_secret() se agregó para crear un área de memoria privada en un espacio de direcciones aislado, visible solo para el proceso propietario, no reflejada para 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 utilizar una única 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 de interrumpir un controlador en el espacio del usuario cuando llega una señal.
    • Se agregó un nuevo mecanismo para administrar los límites 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 del buffer, accesos antes de la inicialización y uso fuera del contexto actual.
    • Las funciones de autenticación de puntero de la plataforma ARM64 ahora se pueden 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 puntero.
    • Linux en modo de usuario ha 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, lo que 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. Las extensiones están deshabilitadas debido a la posibilidad de ataques Zombieload que manipulen la fuga de información a través de canales de terceros que se produce durante el funcionamiento del mecanismo TAA (TSX Asynchronous Abort).
  • Subsistema de red
    • 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 un mecanismo para configurar sus propias políticas de hash de tráfico para IPv4 e IPv6 (política de hash multiruta), lo que permite determinar desde el espacio del usuario qué campos de los paquetes, incluidos los encapsulados, se utilizarán al calcular el hash que determina el elección de la ruta para el paquete.
    • Se ha agregado al transporte virtual virtio soporte para sockets 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. . La nueva versión agrega herramientas 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
    • El controlador amdgpu brinda 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 la GPU Aldebaran (gfx90a) y la APU Van Gogh. 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 ASPM (Active State Power Management) está habilitada de forma predeterminada, que anteriormente solo estaba habilitada para las GPU Navi 1x, Vega y Polaris.
    • Para los chips AMD se ha añadido soporte para memoria virtual compartida (SVM, Shared Virtual Memory) basado en el subsistema HMM (Heterogeneous Memory Management), que permite el uso de dispositivos con sus propias unidades de gestión de memoria (MMU, Memory Management Unit), 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.
    • Se agregó soporte inicial para la tecnología AMD Smart Shift, que cambia dinámicamente la configuración de energía de CPU y GPU en computadoras portátiles con un chipset y tarjeta gráfica AMD para mejorar el rendimiento de juegos, edición de video y renderizado 3D.
    • El controlador i915 para tarjetas gráficas Intel incluye soporte para chips Intel Alderlake P.
    • Se agregó el controlador drm/hyperv para el adaptador de gráficos virtuales Hyper-V.
    • Se agregó soporte para la computadora todo en uno Raspberry Pi 400.
    • Se agregó el controlador dell-wmi-privacy para admitir los interruptores de cámara y micrófono de hardware incluidos en las computadoras portátiles Dell.
    • Para las computadoras portátiles Lenovo, se agregó una interfaz WMI para cambiar la configuración del BIOS a través de sysfs /sys/class/firmware-attributes/.
    • Soporte ampliado para dispositivos con interfaz USB4.
    • Se agregó 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. Se agregaron parches para reducir los retrasos antes de que el audio comience a reproducirse en dispositivos USB.

Fuente: opennet.ru

Añadir un comentario