Núcleo de Linux 5.14

Núcleo de Linux 5.14

Después de dos meses de desarrollo, Linus Torvalds presentó lanzamiento del núcleo Linux 5.14. Entre los cambios más notables: nuevas llamadas al sistema quotactl_fd() y memfd_secret(), eliminación de los controladores ide y raw, un nuevo controlador de prioridades de entrada/salida para cgroup, el modo de planificación de tareas SCHED_CORE, infraestructura para crear cargadores de programas BPF verificados.

En la nueva versión se han aceptado 15883 correcciones de 2002 desarrolladores, el tamaño del parche es de 69 MB (los cambios afectaron a 12580 archivos, se añadieron 861501 líneas de código, se eliminaron 321654 líneas). Alrededor del 47% de todos los cambios presentados en 5.14 están relacionados con los controladores de dispositivos, aproximadamente el 14% de los cambios están relacionados con la actualización de código específico de arquitecturas de hardware, el 13% está relacionado con la pila de red, el 3% con sistemas de archivos y el 3% con subsistemas internos del núcleo.

Principales novedades:

  • subsistema de disco, entrada/salida y sistemas de archivos:
    • para cgroup el modo «BACKUP LOCK», que se puede utilizar durante la copia de seguridad de archivos de la base de datos; nuevo controlador de priorización de entrada/salida — rq-qos, que puede gestionar la prioridad del procesamiento de solicitudes a dispositivos de bloque generadas por los miembros de cada cgroup. Soporte para el nuevo controlador de prioridades añadido al programador de entrada/salida mq-deadline;
    • en el sistema de archivos ext4 se ha implementado nuevo comando ioctl EXT4_IOC_CHECKPOINT, que fuerza a volcar en el disco todas las transacciones pendientes del registro y los búferes asociados, así como sobrescribir el área utilizada por el registro en el almacenamiento. Este cambio fue preparado en el marco de la iniciativa para prevenir filtraciones de información desde los sistemas de archivos;
    • en Btrfs han realizado optimización del rendimiento: al excluir el registro innecesario de atributos extendidos durante la ejecución de fsync, el rendimiento de las operaciones intensivas con atributos extendidos aumentó hasta un 17%. Además, al realizar operaciones de truncamiento que no afectan a los segmentos, se desactivó la ejecución de la sincronización completa, lo que redujo el tiempo de ejecución de la operación en un 12%. Se añadió una configuración en sysfs para limitar el ancho de banda de entrada/salida durante la verificación del sistema de archivos. Se añadieron llamadas ioctl para cancelar operaciones de cambio de tamaño y eliminación de dispositivos;
    • en XFS reimplementación del caché de búferes, que se ha trasladado a la asignación de páginas de memoria en modo lotes. Se ha mejorado la efectividad del caché;
    • En F2FS se ha añadido una opción para trabajar en modo solo lectura y se ha implementado un modo de almacenamiento en caché de bloques comprimidos (compress_cache) para mejorar el rendimiento de las lecturas aleatorias. Se ha implementado soporte para la compresión de archivos que se reflejan en la memoria mediante la operación mmap(). Se ha propuesto una nueva opción de montaje nocompress para desactivar selectivamente la compresión de archivos según una máscara;
    • Se han realizado mejoras en la compatibilidad del controlador exFAT con el almacenamiento de algunas cámaras digitales;
    • Se ha añadido una llamada al sistema quotactl_fd(), que permite gestionar las cuotas no a través de un archivo de dispositivo especial, sino indicando un descriptor de archivo asociado al sistema de archivos para el cual se aplica la cuota;
    • Se han eliminado del núcleo los viejos controladores para dispositivos de bloque con interfaz IDE, que han sido reemplazados hace tiempo por la subestructura libata. El soporte para los dispositivos antiguos se ha mantenido en su totalidad; los cambios solo afectan la posibilidad de usar los antiguos controladores, que nombraban los dispositivos como /dev/hd*, en lugar de /dev/sd*;
    • Se ha eliminado del núcleo el controlador «raw», que proporciona acceso sin búfer a dispositivos de bloque a través de la interfaz /dev/raw. Esta funcionalidad se realiza desde hace tiempo en aplicaciones mediante la bandera O_DIRECT;
  • Memoria y servicios del sistema:
    • En el programador de tareas se ha implementado un nuevo modo de planificación SCHED_CORE, que permite gestionar qué procesos pueden ejecutarse conjuntamente en un mismo núcleo de CPU. A cada proceso se le puede asignar un identificador de cookie que define el ámbito de confianza entre procesos (por ejemplo, pertenencia a un mismo usuario o contenedor). Al organizar la ejecución del código, el programador puede asegurar el uso compartido de un núcleo de CPU solo para procesos que estén relacionados con un mismo propietario, lo que puede usarse para bloquear ciertos ataques de la clase Spectre al evitar la ejecución de tareas de confianza y no confianza en un solo hilo SMT (Hyper Threading);
    • Para el mecanismo cgroup se ha implementado el soporte de la operación kill, que permite finalizar de una vez todos los procesos vinculados al grupo (enviar SIGKILL) mediante la escritura «1» en el archivo virtual cgroup.kill;
    • se han ampliado las capacidades relacionadas con la respuesta al detección de bloqueos divididos («split lock»), que ocurren 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é del CPU. Estos bloqueos provocan una caída significativa en el rendimiento, por lo que anteriormente había una opción para forzar la finalización de la aplicación que causaba el bloqueo. En la nueva versión, se ha añadido un parámetro de línea de comandos del núcleo «split_lock_detect=ratelimit:N», que permite establecer un límite de intensidad de operaciones de bloqueo por segundo a nivel del sistema, tras el cual cualquier proceso que genere un bloqueo dividido se detendrá de manera forzada durante 20 ms en lugar de finalizarse.
    • en el controlador de cgroup de ancho de banda CFS (CFS bandwidth controller), que determina cuánto tiempo de CPU se puede asignar a cada cgroup, se ha implementado la posibilidad de establecer límites restringidos por un tiempo determinado, lo que permite regular mejor las cargas sensibles a la latencia. Por ejemplo, establecer cpu.cfs_quota_us en 50000 y cpu.cfs_period_us en 100000 permitirá a un grupo de procesos gastar 50 ms de tiempo de CPU cada 100 ms.
    • se ha añadido infraestructura inicial para crear cargadores de programas BPF, que permitirá más adelante permitir la carga únicamente de programas BPF firmados con una clave digital de confianza.
    • se ha añadido una nueva operación futex FUTEX_LOCK_PI2, que utiliza un temporizador monótono para calcular el tiempo de espera, teniendo en cuenta el tiempo que el sistema ha estado en modo de suspensión.
    • para la arquitectura RISC-V se ha implementado soporte para páginas de memoria grandes (Transparent Huge-Pages) y la posibilidad de aplicar el mecanismo KFENCE para detectar errores en la gestión de la memoria.
    • en la llamada al sistema madvise(), que proporciona métodos para optimizar la gestión de la memoria del proceso, agregados los flags MADV_POPULATE_READ y MADV_POPULATE_WRITE para generar un «page fault» en todas las páginas de memoria reflejadas para operaciones de lectura o escritura, sin realizar la lectura o escritura real (prefault). La aplicación de estos flags puede ser útil para reducir la latencia durante la ejecución del programa, gracias a la ejecución anticipada del manejador de «page fault» a la vez para todas las páginas no asignadas, sin esperar a que se acceda a ellas.
    • en el sistema de pruebas unitarias kunit se ha añadido soporte para ejecutar pruebas en un entorno QEMU;
    • se han agregado nuevos rastreadores: «osnoise» para rastrear retrasos en aplicaciones causados por el manejo de interrupciones, y «timerlat» para proporcionar información detallada sobre los retrasos al despertar por señal de temporizador;
  • virtualización y seguridad:
    • se ha agregado la llamada al sistema memfd_secret(), que 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 directamente inaccesible para el núcleo;
    • en el sistema de filtrado de llamadas al sistema seccomp al mover los manejadores de bloqueo al espacio de usuario se ha proporcionado la posibilidad de usar una operación atómica para crear un descriptor de archivo para la tarea aislada y devolverlo durante el manejo de la llamada al sistema. La operación propuesta resuelve el problema con la interrupción del manejador en el espacio de usuario al recibir la señal;
    • se ha agregado nuevo mecanismo para gestionar la limitación de recursos en el espacio de nombres de identificadores de usuario, que vincula contadores rlimit individuales al usuario en «user namespace». El cambio resuelve el problema de aplicar contadores de recursos compartidos al ejecutar procesos de un solo usuario en diferentes contenedores;
    • en el hipervisor KVM para sistemas ARM64 se ha agregado la posibilidad de utilizar en los sistemas invitados la extensión MTE (MemTag, Memory Tagging Extension), que permite vincular etiquetas a cada operación de asignación de memoria y organizar la verificación de uso correcto de punteros para bloquear la explotación de vulnerabilidades causadas por el acceso a bloques de memoria ya liberados, desbordamientos de búfer, accesos antes de la inicialización y uso fuera del contexto actual;
    • los medios proporcionados por la plataforma ARM64 para la autenticación de punteros (Pointer Authentication) ahora se pueden configurar por separado para el núcleo y el espacio de usuario. La tecnología permite utilizar instrucciones especializadas ARM64 para verificar las direcciones de retorno mediante firmas digitales, que se almacenan en los bits superiores no utilizados del propio puntero;
    • en User-mode Linux se ha añadido se admite el uso de controladores para dispositivos PCI con un bus virtual PCI, implementado por el controlador PCI-over-virtio;
    • Se añadió soporte para el dispositivo paravirtualizado virtio-iommu en sistemas x86, permitiendo enviar solicitudes IOMMU como ATTACH, DETACH, MAP y UNMAP a través del transporte virtio sin la necesidad de emular tablas de páginas de memoria.
    • Para los procesadores Intel, desde la familia Skylake hasta Coffee Lake, el uso de las extensiones Intel TSX (Extensiones de Sincronización Transaccional) está desactivado por defecto, las cuales proporcionan herramientas para mejorar el rendimiento de aplicaciones multihilo mediante la exclusión dinámica de operaciones de sincronización innecesarias. Las extensiones están desactivadas debido a la posibilidad de ataques. Zombieload, que manipulan la filtración de información a través de canales externos, que ocurre durante el funcionamiento del mecanismo de interrupción asíncrona de operaciones (TAA, Abort Asincrónico TSX);
  • subsistema de red:
    • se continúa la integración en el núcleo de MPTCP (TCP Multicaminos), una expansión del protocolo TCP para establecer conexiones TCP entregando paquetes simultáneamente a través de múltiples rutas mediante diferentes interfaces de red, vinculadas a diferentes direcciones IP. En esta nueva versión, se ha agregado se implementó un mecanismo para definir políticas de hash propias para el tráfico IPv4 e IPv6 (política de hash multipath), que permite desde el espacio de usuario determinar qué campos en los paquetes, incluidos los encapsulados, se utilizarán para calcular el hash que define la elección de la ruta para el paquete;
    • se añadió soporte para sockets en el transporte virtual virtio SOCK_SEQPACKET (transmisión ordenada y confiable de datagramas);
    • se ampliaron las capacidades del mecanismo de sockets SO_REUSEPORT, que permite a varios sockets escuchando conectarse a un mismo puerto para recibir conexiones, distribuyendo las solicitudes entrantes entre todos los sockets conectados a través de SO_REUSEPORT, lo que simplifica la creación de aplicaciones de servidor multihilo. En esta nueva versión, agregados se incorporaron herramientas para transferir el control a otro socket en caso de falla al procesar una solicitud desde el socket originalmente seleccionado (resolviendo el problema de pérdida de conexiones individuales al reiniciar servicios);
  • hardware:
    • en el driver amdgpu se ha implementado soporte para las nuevas series de GPU AMD Radeon RX 6000, desarrolladas con los nombres en clave "Beige Goby" (Navi 24) y "Yellow Carp", así como un soporte mejorado para GPU Aldebaran (gfx90a) y APU Van Gogh. Se ha añadido la capacidad de trabajo simultáneo con múltiples 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 la extracción en caliente de tarjetas gráficas (hot-unplug). Para GPU Radeon RX 6000 (Navi 2x) y GPUs AMD más antiguas, se ha habilitado por defecto el soporte del mecanismo de ahorro de energía ASPM (Active State Power Management), que anteriormente solo estaba activado para GPUs Navi 1x, Vega y Polaris;
    • se ha añadido soporte para memoria virtual compartida (SVM, shared virtual memory) en chips AMD, basada en el subsistema HMM (Heterogeneous memory management), que permite utilizar dispositivos con unidades de gestión de memoria (MMU, memory management unit) propias, que pueden acceder a la memoria principal. Con HMM también se puede organizar un espacio de direcciones compartido entre GPU y CPU, donde la GPU puede acceder a la memoria principal del proceso;
    • se ha añadido soporte inicial para la tecnología AMD Smart Shift, que ajusta dinámicamente los parámetros de consumo de energía del CPU y GPU en laptops con chipset y tarjeta gráfica AMD para forzar el rendimiento en juegos, edición de video y renderizado 3D;
    • en el controlador i915 para tarjetas gráficas Intel incluida soporte para chips Intel Alderlake P;
    • se ha añadido un controlador drm/hyperv para el adaptador gráfico virtual Hyper-V;
    • se ha agregado el controlador gráfico simpledrm, que utiliza para la salida el framebuffer EFI-GOP o VESA, proporcionado por el firmware UEFI o BIOS. La principal función del controlador es proporcionar la posibilidad de salida gráfica en las etapas iniciales de arranque, antes de que sea posible utilizar un controlador DRM completo. El controlador también puede utilizarse como una solución temporal para el hardware para el cual aún no existen controladores DRM nativos;
    • se ha añadido soporte para el ordenador todo en uno Raspberry Pi 400;
    • se ha añadido el controlador dell-wmi-privacy para el soporte de interruptores de hardware de cámara y micrófono en los portátiles Dell;
    • para portátiles Lenovo se ha agregado interfaz WMI para modificar parámetros del BIOS a través de sysfs /sys/class/firmware-attributes/;
    • se ha ampliado el soporte para dispositivos con interfaz USB4;
    • se ha añadido 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. Mejorada la compatibilidad de audio en portátiles HP y ASUS. Añadidos Parches para reducir la latencia antes de iniciar la reproducción de audio en dispositivos con interfaz USB.

Fuente – opennet.ru.

Fuente: linux.org.ru

Compra un hosting fiable para sitios web con protección contra DDoS, servidores VPS VDS 🔥 Compra un hosting fiable para sitios web con protección contra DDoS, servidores VPS VDS | ProHoster