Lanzamiento del núcleo de Linux 5.1

Después de dos meses de desarrollo Linus Torvalds presentado lanzamiento del núcleo Linux 5.1. Entre los cambios más notables: una nueva interfaz para E/S asíncrona io_uring, la capacidad de usar NVDIMM como RAM, soporte para memoria virtual compartida en Nouveau, soporte para monitoreo escalable de sistemas de archivos muy grandes a través de fanotify, la capacidad de configurar la compresión Zstd niveles en Btrfs, un nuevo controlador CPUIDLE TEO, implementación de llamadas al sistema para resolver el problema 2038, la capacidad de arrancar desde dispositivos mapeadores de dispositivos sin initramfs, módulo SafeSetID LSM, soporte para parches en vivo combinados.

El principal innovaciones:

  • Subsistema de disco, E/S y sistemas de archivos
    • Implementada una nueva interfaz para E/S asíncronas - io_durante, que se destaca por su soporte para sondeo de E/S y la capacidad de trabajar con o sin almacenamiento en búfer. Recordemos que el mecanismo de E/S asíncrono “aio” propuesto anteriormente no admitía E/S almacenadas en búfer, solo podía funcionar en modo O_DIRECT (sin almacenamiento en búfer y sin omitir el caché), tenía problemas con el bloqueo debido a la espera de disponibilidad de metadatos, y exhibió grandes costos generales debido a la copia de datos en la memoria.

      Dentro de la API
      Los desarrolladores de io_uring intentaron eliminar las deficiencias de la antigua interfaz aio. Por productividad io_uring está muy cerca de SPDK y está significativamente por delante de libaio cuando trabaja con el sondeo habilitado. Se ha preparado una biblioteca para usar io_uring en aplicaciones finales que se ejecutan en el espacio del usuario. librando, que proporciona un marco de alto nivel sobre la interfaz del kernel;

    • En el mecanismo de seguimiento de eventos en FS fanotify() agregado soporte para el seguimiento de situaciones de cambio de estructuras y superbloques dirente (eventos de creación, eliminación y movimiento de directorios). Las características presentadas ayudan a resolver los problemas de escalabilidad que surgen al crear un seguimiento de cambios recursivo en sistemas de archivos muy grandes utilizando el mecanismo inotify (anteriormente, los cambios directos solo se podían rastrear a través de inotify, pero
      el rendimiento en condiciones de seguimiento recursivo de grandes directorios anidados dejaba mucho que desear). Ahora dicho seguimiento se puede realizar de manera efectiva a través de fanotify;

    • En el sistema de archivos Btrfs agregado la capacidad de personalizar el nivel de compresión para el algoritmo zstd, que puede considerarse como un compromiso óptimo entre el rápido pero ineficaz lz4 y el lento pero bueno compresión xz. Por analogía con cómo anteriormente era posible establecer el nivel de compresión cuando se usaba zlib, se agregó soporte para la opción de montaje “-o compress=zstd:level” para zstd. Durante las pruebas, el primer nivel mínimo proporcionó una compresión de datos de 2.658 veces con una velocidad de compresión de 438.47 MB/s, una velocidad de descompresión de 910.51 MB/s y un consumo de memoria de 780 MB, y el nivel máximo 15 proporcionó 3.126 veces, pero con una compresión velocidad de 37.30 MB/s, desembalaje 878.84 MB/s y consumo de memoria 2547 MB;
    • Añadido por la capacidad de arrancar desde un sistema de archivos ubicado en el dispositivo mapeador de dispositivos, sin usar initramfs. A partir de la versión actual del kernel, los dispositivos mapeadores de dispositivos se pueden usar directamente durante el proceso de arranque, por ejemplo, como una partición con el sistema de archivos raíz. La partición se configura utilizando el parámetro de arranque "dm-mod.create". Los módulos de mapeador de dispositivos permitidos para la carga incluyen: “crypt”, “delay”, “linear”, “snapshot-origin” y “verity”;
    • El indicador F2FS_NOCOW_FL se agregó al sistema de archivos F2FS orientado a unidades flash, lo que le permite deshabilitar el modo de copia en escritura para un archivo determinado;
    • Sistema de archivos eliminado del kernel Exofs, que es una variante de ext2, adaptada para trabajar con almacenamientos de objetos OSD (Dispositivo de almacenamiento basado en objetos). También se ha eliminado la compatibilidad con el protocolo SCSI para dichos dispositivos de almacenamiento de objetos;
  • Virtualización y seguridad
    • Se agregó la opción PR_SPEC_DISABLE_NOEXEC a prctl() para controlar la ejecución especulativa de instrucciones para el proceso seleccionado. Una nueva opción le permite deshabilitar selectivamente la ejecución especulativa para procesos que potencialmente podrían verse afectados por un ataque de Spectre. El bloqueo dura hasta la primera llamada a exec();
    • Módulo LSM implementado ID de conjunto seguro, que permite a los servicios del sistema administrar usuarios de forma segura sin aumentar los privilegios (CAP_SETUID) y sin obtener privilegios de root. Los privilegios se asignan definiendo reglas en securityfs basadas en una lista blanca de enlaces válidos (en el formato "UID1:UID2");
    • Se agregaron cambios de bajo nivel necesarios para la carga basada en pila de módulos de seguridad (LSM). Se introdujo la opción de arranque del kernel "lsm" para controlar qué módulos se cargan y en qué orden;
    • Se agregó soporte para espacios de nombres de archivos al subsistema de auditoría;
    • Expandido las capacidades del complemento GCC structleak, que le permite bloquear posibles fugas de contenido de la memoria. Se proporciona la inicialización de cualquier variable que se utilice en el código a través del acceso de referencia en la pila;
  • Subsistema de red
    • Para enchufes implementado nueva opción "SO_BINDTOIFINDEX" similar a
      "SO_BINDTODEVICE", pero tomando como argumento el número de índice de la interfaz de red en lugar del nombre de la interfaz;

    • La pila mac80211 ha agregado la capacidad de asignar múltiples BSSID (direcciones MAC) a un dispositivo. Como parte de un proyecto para optimizar el rendimiento WiFi, la pila mac80211 ha agregado contabilidad de tiempo aire y la capacidad de distribuir tiempo aire entre múltiples estaciones (cuando se opera en modo punto de acceso, asignando menos tiempo de transmisión a estaciones inalámbricas lentas, en lugar de distribuir el tiempo uniformemente entre todas estaciones);
    • Mecanismo añadido "salud del enlace dev", que proporciona notificaciones cuando ocurren problemas con la interfaz de red;
  • Servicios de memoria y sistema.
    • Implementado Entrega de señal segura que permite la reutilización de PID. Por ejemplo, al llamar a kill previamente, podría surgir una situación en la que, inmediatamente después de enviar una señal, el PID objetivo podría quedar libre debido a la terminación del proceso y ocupado por otro proceso, y la señal terminaría pasando a otro proceso. Para eliminar este tipo de situaciones, se ha agregado una nueva llamada al sistema pidfd_send_signal, que utiliza descriptores de archivos de /proc/pid para garantizar un enlace estable del proceso. Incluso si el PID se reutiliza durante el procesamiento de llamadas al sistema, el descriptor de archivo no cambiará y puede usarse de manera segura para enviar una señal al proceso;
    • Añadido por la capacidad de utilizar dispositivos de memoria permanente (memoria persistente, por ejemplo) NVDIMM) como RAM. Hasta ahora, el kernel admitía dispositivos como dispositivos de almacenamiento, pero ahora también se pueden utilizar como RAM adicional. La característica se implementa en respuesta a los deseos de los usuarios que están dispuestos a soportar un retraso en el rendimiento y desean utilizar la API nativa de administración de memoria del kernel de Linux en lugar de usar sistemas de asignación de memoria de espacio de usuario existentes que se ejecutan sobre mmap para dax. archivo;
    • Se agregó un nuevo controlador inactivo de CPU (cpuidle, decide cuándo se puede poner la CPU en modos de ahorro de energía profundo; cuanto más profundo sea el modo, mayores serán los ahorros, pero también más tiempo llevará salir del modo): TEO (regulador orientado a eventos del temporizador). ). Hasta ahora, se han propuesto dos controladores de CPU: "menú" y "escalera", que se diferencian en heurísticas. El controlador del "menú" tiene problemas conocidos al tomar decisiones heurísticas, para eliminarlos se decidió preparar un nuevo controlador. TEO se posiciona como una alternativa al controlador de "menú", lo que permite un mayor rendimiento manteniendo el mismo nivel de consumo de energía.
      Puede activar el nuevo controlador utilizando el parámetro de arranque “cpuidle.governor=teo”;

    • Como parte del trabajo para eliminar problemas de 2038, causado por un desbordamiento del tipo time_t de 32 bits, incluye llamadas al sistema que ofrecen contadores de tiempo de 32 bits para arquitecturas de 64 bits. Como resultado, la estructura time_t de 64 bits ahora se puede utilizar en todas las arquitecturas. También se han implementado cambios similares en el subsistema de red para opciones. fecha y hora enchufes de red;
    • En el sistema de parches en caliente para el núcleo (parches en vivo) agregado Función "Reemplazo atómico" para aplicar atómicamente una serie de cambios a una sola función. Esta característica le permite distribuir parches resumidos que cubren varios cambios a la vez, en lugar del proceso de aplicación paso a paso de parches en vivo en un orden estrictamente definido, que es bastante difícil de mantener. Mientras que anteriormente cada cambio posterior tenía que basarse en el estado de la función después del último cambio, ahora es posible propagar varios cambios vinculados a un estado inicial a la vez (es decir, los mantenedores pueden mantener un parche consolidado relativo al kernel base en lugar de de una cadena de parches que dependen unos de otros);
    • Anunciado soporte obsoleto para el formato de archivo ejecutable a.out y
      remoto código para generar archivos principales en formato.out, que se encuentra en un estado abandonado. El formato a.out no se ha utilizado en sistemas Linux durante mucho tiempo, y la generación de archivos a.out hace tiempo que no es compatible con herramientas modernas en las configuraciones predeterminadas de Linux. Además, el cargador de archivos a.out se puede implementar completamente en el espacio del usuario;

    • Se ha agregado la capacidad de identificar y eliminar código no utilizado al mecanismo de verificación del programa BPF. El kernel también incluye parches con soporte spinlock para el subsistema BPF, lo que proporciona capacidades adicionales para gestionar la ejecución paralela de programas BPF;
  • Equipo
    • En el nuevo conductor agregado soporte para administración de memoria heterogénea, lo que permite que la CPU y la GPU accedan a áreas comunes de memoria sincronizada. El sistema de memoria virtual compartida (SVM, memoria virtual compartida) se implementa sobre la base del subsistema HMM (Gestión de memoria heterogénea), que permite el uso de dispositivos con unidades de gestión de memoria propias (MMU, unidad de gestión de memoria), que pueden acceder 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. Actualmente, la compatibilidad con SVM solo está habilitada para las GPU de la familia Pascal, aunque también se proporciona compatibilidad con las GPU Volta y Turing. Además, en el Nouveau adicional nuevo ioctl para controlar la migración de áreas de memoria de proceso a la memoria de GPU;
    • En el controlador Intel DRM para GPU Skylake y posteriores (gen9+) incluido De forma predeterminada, el modo fastboot elimina los cambios de modo innecesarios durante el arranque. Adicional nuevo Identificadores de dispositivos basados ​​en las microarquitecturas Coffelake y Ice Lake. Para chips Coffelake agregado Soporte GVT (Virtualización de GPU). Para GPU virtuales implementado Soporte VFIO EDID. Para paneles LCD MIPI/DSI agregado soporte para elementos ACPI/PMIC. Implementado nuevos modos de TV 1080p30/50/60 TV;
    • Se agregó soporte para GPU Vega10/20 BACO al controlador amdgpu. Se implementó la administración de energía Vega 10/20 y las tablas de control del enfriador Vega 10. Se agregaron nuevos identificadores de dispositivos PCI para las GPU Picasso. Добавлен interfaz para gestionar dependencias programables para evitar puntos muertos;
    • Добавлен Controlador DRM/KMS para aceleradores de pantalla brazo komeda (Malí D71);
    • Se agregó soporte para paneles de pantalla Toppoly TPG110, Sitronix ST7701, PDA 91-00156-A0, LeMaker BL035-RGB-002 3.5 y Kingdisplay kd097d04;
    • Se agregó soporte para los códecs de audio Rockchip RK3328, Cirrus Logic CS4341 y CS35L36, MediaTek MT6358, Qualcomm WCD9335 e Ingenic JZ4725B, así como la plataforma de audio Mediatek MT8183;
    • Se agregó soporte para controladores NAND Flash STMicroelectronics FMC2, Amlogic Meson;
    • Se agregó soporte de acelerador para los sistemas de hardware Habana AI;
    • Se agregó soporte para controladores gigabit Ethernet NXP ENETC e interfaces inalámbricas MediaTek MT7603E (PCIe) y MT76x8.

Simultáneamente, Fundación Software Libre América Latina formado
вариант kernel 5.1 completamente gratis - linux-libre 5.1-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. En la nueva versión, la carga de blobs está deshabilitada en los controladores mt7603 y goya. Código de limpieza de blobs actualizado en controladores y subsistemas wilc1000, iwlwifi, soc-acpi-intel, brcmfmac, mwifiex, btmrvl, btmtk y touchscreen_dmi. La limpieza de blobs en el cargador de firmware del lantiq xrx200 se detuvo debido a su eliminación del kernel.

Fuente: opennet.ru

Añadir un comentario