Lanzamiento del núcleo de Linux 5.3

Después de dos meses de desarrollo Linus Torvalds presentado lanzamiento del núcleo Linux 5.3. Los cambios notables incluyen: compatibilidad con GPU AMD Navi, procesadores Zhaoxi y tecnología de administración de energía Intel Speed ​​​​Select, la capacidad de usar instrucciones umwait para esperar sin usar bucles,
modo de 'sujeción de utilización' de interactividad para CPU asimétricas, llamada al sistema pidfd_open, capacidad de usar direcciones IPv4 desde la subred 0.0.0.0/8, capacidad de aceleración de hardware nftables, soporte HDR en el subsistema DRM, integración del hipervisor ACRN.

В anuncio Con la nueva versión, Linus recordó a todos los desarrolladores la regla principal del desarrollo del kernel: mantener sin cambios el comportamiento de los componentes del espacio de usuario. Los cambios en el kernel no deberían de ninguna manera dañar las aplicaciones existentes y provocar regresiones a nivel de usuario. Al mismo tiempo, una violación del comportamiento puede causar no solo un cambio de ABI, la eliminación de código obsoleto o la aparición de errores, sino también el impacto indirecto del funcionamiento correcto de mejoras útiles. Como ejemplo ilustrativo, hubo descartado útil optimización en código Ext4, que reduce la cantidad de accesos al disco al deshabilitar la captación previa de la tabla de inodos para pequeñas solicitudes de E/S.

La optimización resultó en el hecho de que, debido a la reducción de la actividad del disco, la entropía para el generador de números aleatorios getrandom() comenzó a acumularse más lentamente y, en algunas configuraciones, bajo ciertas circunstancias, se podían congelar durante la carga hasta que el grupo de entropía se agotara. lleno. Dado que la optimización es realmente útil, hubo una discusión entre los desarrolladores en la que se propuso solucionar el problema deshabilitando el comportamiento de bloqueo predeterminado de la llamada getrandom() con la adición de un indicador opcional para esperar la entropía, pero tal El cambio afectaría la calidad de los números aleatorios en la etapa inicial de carga.

La nueva versión aceptó 15794 correcciones de 1974 desarrolladores,
tamaño del parche: 92 MB (los cambios afectaron a 13986 archivos, se agregaron 258419 líneas de código,
599137 líneas eliminadas). Alrededor del 39% de todos presentados en 5.3
Los cambios están asociados con los controladores de dispositivos, aproximadamente el 12% de los cambios tienen
Actitud hacia la actualización de código específico para arquitecturas de hardware, 11%.
relacionados con la pila de red, 3% con sistemas de archivos y 3% con sistemas internos
subsistemas del núcleo.

El principal innovaciones:

  • Servicios de memoria y sistema.
    • Desarrollo continuo de la funcionalidad 'pidfd' para ayudar a manejar situaciones de reutilización de PID (pidfd está vinculado a un proceso particular y no cambia, mientras que un PID puede vincularse a otro proceso después de que termina el proceso actual asociado con ese PID). Anteriormente, el kernel ya ha sido agregado.
      la llamada al sistema pidfd_send_signal() y el indicador CLONE_PIDFD en la llamada clone() para obtener el pidfd para usar en idfd_send_signal(). Cuando se utiliza la llamada clone() con el indicador CLONE_PIDFD, podría haber problemas con los administradores de servicios o el sistema para finalizar forzosamente procesos con poca memoria en la plataforma Android. En este caso, se utiliza una llamada fork() o clone() sin CLONE_PIDFD para comenzar.

      El kernel 5.3 introduce la llamada al sistema. pidfd_open(), que le permite obtener un pidfd verificable para un proceso arbitrario existente no creado mediante una llamada a clone() con el indicador CLONE_PIDFD. También agregamos soporte para sondear pidfd con poll() y epoll(), lo que permite a los administradores de procesos rastrear la terminación de procesos arbitrarios sin preocuparse por una condición de carrera si se asigna un PID a un nuevo proceso. El mecanismo para notificar la salida de un proceso asociado con pidfd es similar a informar la salida de su proceso hijo;

    • Se agregó soporte para el mecanismo de fijación de carga al programador de tareas (Sujeción de utilización), que permite respetar los rangos de frecuencia mínimos o máximos, dependiendo de las tareas activas en la CPU. El mecanismo presentado acelera las tareas que afectan directamente la calidad de la interacción del usuario al ejecutar estas tareas al menos en el límite inferior de la frecuencia "solicitada". Las tareas de baja prioridad que no afectan el trabajo del usuario se inician utilizando el límite superior de la frecuencia "permitida". Los límites se establecen mediante los atributos sched_uclamp_util_min y sched_uclamp_util_max en la llamada al sistema sched_setattr().
    • Soporte agregado para la tecnología de gestión de energía. Selección de velocidad Intel, disponible en algunos servidores con procesadores Intel Xeon. Esta tecnología le permite establecer configuraciones de rendimiento y ancho de banda de partición para diferentes núcleos de CPU, lo que le permite priorizar el rendimiento de las tareas realizadas en ciertos núcleos, sacrificando el rendimiento de otros núcleos;
    • Procesos en el espacio del usuario. proporcionado por la capacidad de esperar un corto tiempo sin usar bucles usando la instrucción umwait. Esta instrucción, junto con las instrucciones umonitor y tpause, se ofrecerán en los próximos chips Intel "Tremont" y permitirán retrasos que ahorran energía y no afectan el rendimiento de otros subprocesos cuando se utiliza Hyper Threading;
    • Se ha agregado soporte para páginas de memoria grandes (páginas enormes) para la arquitectura RISC-V;
    • La capacidad de desreferenciar los punteros del kernel al espacio del usuario se ha agregado al mecanismo de rastreo "kprobes", que se puede usar, por ejemplo, para evaluar el contenido de las estructuras pasadas a las llamadas al sistema. También se agregó la capacidad de establecer controles en la etapa de arranque.
    • La opción PREEMPT_RT se ha agregado al archivo de configuración para operación en tiempo real. El código en tiempo real aún no se ha agregado al kernel, pero la aparición de la opción es una buena señal de que la saga a largo plazo de integración los parches Realtime-Preempt están a punto de completarse;
    • La llamada al sistema clone3() se ha agregado con la implementación de una versión más extensible de la interfaz clone(), que permite especificar una mayor cantidad de indicadores;
    • Se agregó el controlador bpf_send_signal() para permitir que los programas BPF envíen señales a procesos arbitrarios;
    • Para eventos de rendimiento en el entorno del hipervisor KVM, se agregó un nuevo mecanismo de filtrado de eventos para permitir al administrador determinar los tipos de eventos que están permitidos o no para el monitoreo en el lado invitado;
    • Se agregó la capacidad de procesar programas con ciclos al mecanismo de verificación de la aplicación eBPF si la ejecución del ciclo es limitada y no puede llevar a exceder el límite en el número máximo de instrucciones;
  • Subsistema de disco, E/S y sistemas de archivos
    • Para el sistema de archivos XFS, se implementa la posibilidad de atravesar inodos multiproceso (por ejemplo, al verificar cuotas). Se agregaron nuevos ioctl BULKSTAT e INUMBERS, que brindan acceso a las funciones introducidas en la quinta edición del formato FS, como la hora de nacimiento del inodo y la capacidad de configurar parámetros BULKSTAT e INUMBERS para cada grupo AG (Grupos de asignación);
    • En Ext4 soporte adicional vacíos en directorios (bloques no adjuntos).
      Procesamiento proporcionado bandera "i" (inmutable) para archivos abiertos (prohibición de escribir en una situación en la que la bandera se estableció en el momento en que el archivo ya estaba abierto);

    • Btrfs proporciona una definición para una implementación rápida de crc32c en todas las arquitecturas;
    • En CIFS, el código compatible con smbdirect ha quedado obsoleto. SMB3 agrega la capacidad de utilizar algoritmos criptográficos en modo GCM. Se ha agregado una nueva opción de montaje para extraer parámetros de modo de ACE (Entrada de control de acceso). Rendimiento optimizado de llamadas open();
    • Se ha agregado una opción a F2FS para restringir el recolector de basura cuando se ejecuta en modo checkpoint=disable. Se agregó ioctl para eliminar rangos de bloques de F2FS, lo que permite cambiar el tamaño de la partición sobre la marcha. Se agregó la capacidad de colocar un archivo de paginación en F2FS con E/S directa. Se agregó soporte para fijar un archivo y asignar bloques para archivos similares para todos los usuarios;
    • Se agregó soporte para operaciones asincrónicas sendmsg() y recvmsg() a la interfaz de E/S asincrónica io_uring;
    • Se ha agregado al sistema de archivos UBIFS soporte para la compresión utilizando el algoritmo zstd y la capacidad de verificar imágenes FS firmadas;
    • Se ha agregado a Ceph FS compatibilidad con etiquetas de seguridad SELinux para archivos;
    • Para NFSv4, se implementa una nueva opción de montaje "nconnect=", que determina la cantidad de conexiones establecidas con el servidor. El tráfico entre estas conexiones se distribuirá mediante equilibrio de carga. Además, el servidor NFSv4 ahora crea el directorio /proc/fs/nfsd/clients con información sobre los clientes actuales, incluida información sobre los archivos que han abierto;
  • Virtualización y seguridad
    • El kernel incluye un hipervisor para dispositivos integrados. ACRN, que está escrito teniendo en cuenta la preparación en tiempo real y la usabilidad 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. Se 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 control, sistemas de información automotriz, dispositivos IoT de consumo y otros equipos integrados;
    • En Linux en modo de usuario adicional un modo de viaje en el tiempo que le permite ralentizar o acelerar el tiempo en el entorno virtual UML para facilitar la depuración del código relacionado con el tiempo. También se agregó parámetro
      time-travel-start, que permite que el reloj del sistema se inicie desde la hora especificada en formato de época;

    • Se agregaron nuevas opciones de línea de comando del kernel "init_on_alloc" e "init_on_free", que, si se especifican, permiten poner a cero las áreas de memoria asignadas y liberadas (llenar con ceros durante malloc y free), lo que permite aumentar la seguridad debido a una sobrecarga de inicialización adicional;
    • Añadido nuevo controlador virtio-iommu con la implementación de un dispositivo paravirtualizado que permite enviar solicitudes IOMMU, como ATTACH, DETACH, MAP y UNMAP, sobre el transporte virtio sin emular tablas de páginas de memoria;
    • Añadido nuevo controlador virtio-pmemA que representa el acceso a dispositivos de almacenamiento asignados al espacio de direcciones físicas, como NVDIMM;
    • Se implementó la capacidad de adjuntar claves criptográficas a un espacio de nombres de usuario o de red (las claves se vuelven inaccesibles fuera del espacio de nombres seleccionado), así como también proteger las claves mediante ACL;
    • Al subsistema criptográfico agregado soporte para un algoritmo hash no criptográfico muy rápido xhash, cuya velocidad depende del rendimiento de la memoria;
  • Subsistema de red
    • Manejo admitido de direcciones IPv4 en el rango 0.0.0.0/8, que anteriormente no se podía utilizar. Introducción de esta subred voluntad asignar otros 16 millones de direcciones IPv4;
    • En Netfilter para nftables agregado soporte para mecanismos de filtrado de paquetes acelerados por hardware mediante el uso de lo que se agregó a los controladores API de bloque de flujo. Se pueden colocar tablas completas de reglas con todas las cadenas en el costado de los adaptadores de red. La habilitación se realiza vinculando el indicador NFT_TABLE_F_HW a la tabla. Admite metadatos de protocolos simples de capa 3 y 4, acciones de aceptación/rechazo, asignaciones por IP de origen/destino y puertos de red, y tipo de protocolo;
    • Añadido por soporte integrado para seguimiento de conexiones para puentes de red, que no requiere el uso de la capa de emulación br_netfilter;
    • En nf_tables agregado soporte para el módulo SYNPROXY, que repite una funcionalidad similar de iptables, así como la capacidad de verificar las reglas para opciones individuales en el encabezado IPv4;
    • Se agregó la capacidad de adjuntar programas BPF a las llamadas al sistema setsockopt() y getsockopt(), lo que, por ejemplo, le permite adjuntar controladores de acceso personalizados a estas llamadas. Además, se ha agregado un nuevo pulsador (gancho), con cuya ayuda es posible organizar una llamada al programa BPF una vez por cada intervalo RTT (tiempo de ida y vuelta, tiempo de ping);
    • Para IPv4 e IPv6 adicional un nuevo mecanismo para almacenar datos de enrutamiento nexthop, destinado a aumentar la escalabilidad de las tablas de enrutamiento. Las pruebas realizadas demostraron que utilizando el nuevo sistema se cargó en el kernel un conjunto de 743 mil rutas en sólo 4.3 segundos;
    • Para Bluetooth implementado funcionalidad requerida para admitir ping LE;
  • Equipo
    • Añadido por soporte para procesadores empresariales compatibles con x86 Zhaoxindesarrollado como resultado de un proyecto conjunto entre VIA Technologies y la municipalidad de Shanghai. La familia CPU ZX se basa en la arquitectura x86-64 Isaiah, continuando el desarrollo de la tecnología VÍA Centauro;
    • El subsistema DRM (Direct Rendering Manager), así como los controladores de gráficos amdgpu e i915, agregaron soporte para analizar, procesar y enviar metadatos HDR (alto rango dinámico) a través del puerto HDMI, lo que permite el uso de paneles y pantallas HDR capaces de mostrar rangos adicionales de brillo;
    • El controlador Amdgpu agrega soporte inicial para AMD NAVI GPU (RX5700), que incluye controlador central, código de interacción de pantalla (DCN2), GFX y soporte informático (GFX10).
      SDMA 5 (Sistema DMA0), gestión de energía y codificadores/decodificadores multimedia (VCN2). amdgpu también mejora el soporte para tarjetas GPU basadas en Vega12 y Vega20 con más opciones de memoria y administración de energía;

    • El controlador Amdkfd (para GPU discretas como Fiji, Tonga, Polaris) agregó soporte para tarjetas basadas en GPU VegaM;
    • En el controlador DRM para tarjetas de video Intel para chips Icelake implementado Nuevo modo de corrección gamma multisegmento. Se agregó la capacidad de generar salida a través de DisplayPort en formato YCbCr4:2:0. Añadido nuevo firmware guc para SKL, BXT, KBL, GLK e ICL. Implementada la capacidad de apagar la pantalla en modo asíncrono. Añadido por soporte para guardar y restaurar el contexto de renderizado para chips Ironlake (gen5) y gen4 (Broadwater - Cantiga), lo que permite restaurar el estado de la GPU desde el espacio del usuario al cambiar de una operación por lotes a otra;
    • El controlador Nouveau proporciona detección del chipset NVIDIA Turing TU116;
    • Capacidades ampliadas del controlador DRM/KMS para aceleradores de operaciones de pantalla ARM Komeda (Mali D71), soporte agregado para escalado, división/fusión de capas, rotación, escritura diferida, formatos de codificación de color AFBC, SMMU y Y0L2, P010, YUV420_8/10BIT;
    • Se agregó soporte para la serie Adreno GPU A540 de Qualcomm al controlador MSM, así como soporte para el controlador DSI MSM8998 para Snapdragon 835;
    • Se agregaron controladores para paneles LCD Samsung S6E63M0, Armadeus ST0700, EDT ETM0430G0DH6, OSD101T2045-53TS,
      Evervision VGG804821, FriendlyELEC HD702E, KOE tx14d24vm1bpa, TFC S9700RTWV43TR-01B, EDT ET035012DM6 y VXT VL050-8048NT-C01;

    • Добавлен controlador para habilitar herramientas de aceleración de decodificación
      vídeos disponibles en SoC Amlogic Meson;

    • Se presenta el controlador v3d (para la GPU Broadcom Video Core V utilizada en Raspberry Pi) apoyar enviar sombreadores informáticos;
    • Добавлен controlador para teclados y trackpads SPI utilizados en modelos modernos de portátiles Apple MacBook y MacBook Pro;
    • Añadido por protección adicional para llamadas ioctl asociadas con el controlador de disquete, y el controlador en sí está marcado como no mantenido
      ("huérfano"), lo que implica la terminación de sus pruebas. El controlador todavía está almacenado en el kernel, pero no se garantiza su correcto funcionamiento. El controlador se considera obsoleto porque es difícil encontrar hardware que funcione para probarlo; todas las unidades externas actuales, por regla general, utilizan la interfaz USB.

    • Добавлен controlador cpufreq para placas Raspberry Pi, que le permite controlar dinámicamente el cambio en la frecuencia del procesador;
    • Se agregó soporte para el nuevo ARM SoC Mediatek mt8183 (4x Cortex-A73 + 4x Cortex-A53), TI J721E (2x Cortex-A72 + 3x Cortex-R5F + 3 DSP + MMA) y Amlogic G12B (4x Cortex-A73 + 2x Cortex- A53 ), así como tableros:
      • Purismo Librem5,
      • velocidad bmc,
      • Microsoft Olympus BMC,
      • Kontron SMARC,
      • Novtech Suricata96 (i.MX7),
      • ST Micro Vengador96,
      • Google Cheza (Qualcomm SDM845),
      • Placa de dragón Qualcomm 845c (Qualcomm SDM845),
      • Caja de TV Hugsun X99 (Rockchip RK3399),
      • Khadas Edge/Edge-V/Capitán (Rockchip RK3399),
      • Hola esperanza RZ/G2M,
      • NXP LS1021A-TSN.

Simultáneamente, Fundación Software Libre América Latina formado
вариант kernel 5.3 completamente gratis - linux-libre 5.3-gnu, libre de elementos de firmware y controladores que contengan componentes o secciones de código no libres, cuyo alcance está limitado por el fabricante. La nueva versión deshabilita la carga de blobs en los controladores qcom, hdcp drm, allegro-dvt y meson-vdec.
Código de limpieza de blobs actualizado en controladores y subsistemas amdgpu, i915, netx, r8169, brcmfmac, rtl8188eu, adreno, si2157, pvrusb2, touchscreen_dmi, controlador de sonido skylake y documentación de microcódigo.

Fuente: opennet.ru

Añadir un comentario