Lanzamiento del núcleo de Linux 5.1

Después de dos meses de desarrollo, Linus Torvalds presentó el lanzamiento del núcleo Linux 5.1. Entre los cambios más destacados se incluyen: nueva interfaz para entrada/salida asincrónica io_uring, posibilidad de utilizar NVDIMM como RAM, soporte en Nouveau para memoria virtual compartida, soporte para monitoreo escalable de sistemas de archivos muy grandes a través de fanotify, posibilidad de ajustar los niveles de compresión Zstd en Btrfs, nuevo controlador cpuidle TEO, implementación de llamadas al sistema para resolver el problema del año 2038, posibilidad de arranque desde dispositivos de mapeo de dispositivos sin initramfs, módulo LSM SafeSetID, soporte para parches live combinados.

Principales novedades:

  • Subsistema de disco, entrada/salida y sistemas de archivos
    • Se ha implementado una nueva interfaz para entrada/salida asincrónica — io_uring, que se distingue por su soporte para polling de entrada/salida y la posibilidad de trabajar tanto con bufferización como sin ella. Recordemos que el mecanismo de entrada/salida asincrónica "aio" propuesto anteriormente no soportaba la entrada/salida buffered, solo podía operar en modo O_DIRECT (sin bufferización y evitando la caché), presentaba problemas de bloqueo debido a la espera de disponibilidad de metadatos y mostraba grandes sobrecostos por la copia de datos en memoria.

      En el marco de la API
      io_uring, los desarrolladores intentaron abordar las deficiencias de la antigua interfaz aio. Según rendimiento io_uring es muy cercano a SPDK y supera sustancialmente a libaio al trabajar con polling habilitado. Para el uso de io_uring en aplicaciones finales que operan en espacio de usuario, se ha preparado la biblioteca liburing, que proporciona un enlace de alto nivel sobre la interfaz del núcleo;

    • En el mecanismo de seguimiento de eventos en el sistema de archivos fanotify() se ha añadido hay soporte para el seguimiento de situaciones que alteran el superbloque y la estructura dirent (eventos de creación, eliminación y movimiento de directorios). Las capacidades presentadas ayudan a resolver problemas de escalabilidad que surgen al crear seguimientos recursivos de cambios en sistemas de archivos muy grandes utilizando el mecanismo inotify (los cambios en dirent anteriormente solo podían ser rastreados a través de inotify, pero
      la eficacia en el seguimiento recursivo de grandes directorios anidados dejaba mucho que desear). Ahora, tal monitoreo se puede realizar de manera efectiva a través de fanotify;
    • En el sistema de archivos Btrfs se ha añadido la posibilidad de ajustar el nivel de compresión para el algoritmo zstd, que puede considerarse un compromiso óptimo entre el lz4, que es rápido pero ineficaz, y el xz, que es lento pero comprime bien. De manera similar a cómo antes se podía establecer el nivel de compresión al aplicar zlib, se ha añadido soporte para la opción de montaje "-o compress=zstd:level". En las pruebas, el primer nivel mínimo logró 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, mientras que el nivel máximo 15 alcanzó 3.126 veces, pero con una velocidad de compresión de 37.30 MB/s, una velocidad de descompresión de 878.84 MB/s y un consumo de memoria de 2547 MB;
    • Se ha añadido la capacidad de arranque desde un sistema de archivos alojado en un dispositivo device-mapper, sin necesidad de usar initramfs. A partir de la versión actual del núcleo, el dispositivo device-mapper puede usarse directamente en el proceso de arranque, por ejemplo, como la partición con el sistema de archivos raíz. La configuración de la partición se realiza mediante el parámetro de arranque "dm-mod.create". Los módulos permitidos para el arranque en device-mapper incluyen: "crypt", "delay", "linear", "snapshot-origin" y "verity";
    • En el sistema de archivos orientado a unidades flash F2FS se ha añadido la bandera F2FS_NOCOW_FL, que permite desactivar el modo de copia en escritura para un archivo específico;
    • Se ha eliminado del núcleo el sistema de archivos Exofs, que es una variante de ext2, adaptada para trabajar con dispositivos de almacenamiento basado en objetos OSD (Object-based Storage Device). También se ha eliminado el soporte para el protocolo SCSI para tales dispositivos de almacenamiento de objetos;
  • Virtualización y seguridad
    • Se ha añadido a prctl() la opción PR_SPEC_DISABLE_NOEXEC para controlar la ejecución especulativa de instrucciones para un proceso seleccionado. Esta nueva opción permite desactivar de forma selectiva la ejecución especulativa para procesos que pueden ser atacados potencialmente mediante un ataque tipo Spectre. El bloqueo se mantiene hasta el primer llamado a exec();
    • Se ha implementado el módulo LSM SafeSetID, que permite a los servicios del sistema gestionar usuarios de forma segura sin elevar privilegios (CAP_SETUID) y sin obtener los derechos del usuario root. La asignación de privilegios se realiza mediante la definición en securityfs de reglas basadas en una lista blanca de enlaces permitidos (en forma de "UID1:UID2");
    • Se han añadido cambios de bajo nivel necesarios para la organización de carga de módulos de seguridad (LSM). Se ha presentado el parámetro de carga del núcleo "lsm", que permite gestionar qué módulos se cargan y en qué orden;
    • Se ha añadido soporte para espacios de nombres de archivos en el subsistema de auditoría;
    • Ampliadas las capacidades del complemento de GCC structleak, que permite bloquear posibles fugas de contenido de memoria. Se asegura la inicialización de cualquier variable que se utilice en el código a través de referencias en la pila;
  • Subsistema de red
    • Para los sockets se ha implementado una nueva opción "SO_BINDTOIFINDEX", similar a
      "SO_BINDTODEVICE", pero que acepta como argumento el número de índice de la interfaz de red en lugar del nombre de la interfaz;
    • En la pila mac80211 se ha añadido la posibilidad de asignar múltiples BSSID (direcciones MAC) a un dispositivo. En el marco de un proyecto para optimizar el rendimiento de WiFi, se ha añadido en la pila mac80211 el monitoreo de la distribución del tiempo aéreo y la capacidad de distribuir el tiempo aéreo entre múltiples estaciones (en modo de punto de acceso, asignando menos tiempo a estaciones inalámbricas lentas, en lugar de distribuir el tiempo equitativamente entre todas las estaciones);
    • Se ha añadido el mecanismo "devlink health", que proporciona notificaciones al surgir problemas con la interfaz de red;
  • Memoria y servicios del sistema
    • Se ha implementado la entrega segura de señales, teniendo en cuenta la posibilidad de reutilización de PID. Por ejemplo, al realizar una llamada kill, anteriormente podía surgir la situación en la que, justo después de enviar la señal, el PID objetivo pudiera haber sido liberado debido a la finalización del proceso y ocupado por otro proceso, y al final la señal se transfería a otro proceso. Para evitar tales situaciones, se ha añadido una nueva llamada al sistema pidfd_send_signal, que utiliza descriptores de archivos de /proc/pid para garantizar un enlace estable al proceso. Incluso si el PID es reutilizado durante el manejo de la llamada al sistema, el descriptor de archivo no cambiará y se puede utilizar de manera segura para enviar señales al proceso;
    • Se ha añadido la posibilidad de utilizar dispositivos de memoria persistente (persistent-memory, por ejemplo NVDIMM) como RAM. Hasta ahora, dispositivos similares en el núcleo se han utilizado como dispositivos de almacenamiento, pero ahora también se pueden aplicar como memoria RAM adicional. Esta capacidad se implementó en respuesta a las solicitudes de los usuarios dispuestos a tolerar el descenso del rendimiento y que desean utilizar la API de gestión de memoria del núcleo de Linux en lugar de los sistemas existentes de asignación de memoria en el espacio de usuario, que funcionan sobre mmap para el archivo dax;
    • Se ha añadido un nuevo controlador de inactividad de la CPU (cpuidle, que determina cuándo se puede poner la CPU en modos de ahorro de energía profundos; cuanto más profundo es el modo, mayor es el ahorro pero también más tiempo se necesita para salir de él) — TEO (Gobernador Orientado a Eventos de Temporizadores). Hasta ahora, se han ofrecido dos controladores cpuidle — 'menu' y 'ladder', que se diferencian en su heurística. El controlador 'menu' tiene problemas conocidos con la toma de decisiones heurísticas, por lo que se decidió desarrollar un nuevo controlador. TEO se posiciona como una alternativa al controlador 'menu', que permite lograr un mayor rendimiento manteniendo el mismo nivel de consumo de energía.
      El nuevo controlador se puede activar mediante el parámetro de arranque 'cpuidle.governor=teo';
    • En el marco de los esfuerzos por rectificar el problema del año 2038, causado por el desbordamiento del tipo de 32 bits time_t, se han incluido llamadas al sistema que ofrecen contadores de tiempo de 64 bits para arquitecturas de 32 bits. Como resultado, ahora se puede utilizar la estructura time_t de 64 bits en todas las arquitecturas. Cambios similares también se han implementado en el subsistema de red para las opciones timestamp de los sockets de red;
    • En el sistema de parcheo en caliente del núcleo (live patching) se ha añadido la función «Atomic Replace» para aplicar de manera atómica una serie de cambios a una función. Esta función permite distribuir parches agregados que abarcan varios cambios a la vez, en lugar de un proceso de superposición de parches en vivo, que es bastante complicado de manejar y debe hacerse en un orden estrictamente definido. Anteriormente, cada cambio posterior debía basarse en el estado de la función después del cambio anterior, pero ahora es posible distribuir varios cambios atados a un solo estado original (es decir, los desarrolladores pueden mantener un parche agregado respecto al núcleo base en lugar de una cadena de parches que dependen unos de otros).
    • Anunciado obsoleto el soporte para el formato de archivos ejecutables a.out y
      eliminado el código para la generación de archivos core en formato a.out, que se encuentra en estado abandonado. El formato a.out hace tiempo que no se utiliza en sistemas Linux, y la generación de archivos a.out ya no es compatible con las herramientas modernas en configuraciones predeterminadas para Linux. Además, el cargador para archivos a.out puede ser implementado completamente en el espacio del usuario;
    • Se ha agregado al mecanismo de verificación de programas BPF la posibilidad de identificar y eliminar código no utilizado. También se han incluido parches en el núcleo con soporte para spinlock en el subsistema BPF, proporcionando capacidades adicionales para manejar la ejecución paralela de programas BPF;
  • Hardware
    • En el controlador Nouveau se ha añadido se ha incluido el soporte para la gestión heterogénea de memoria, que permite el acceso a áreas de memoria compartidas y sincronizadas por parte de la CPU y la GPU. El sistema de memoria virtual compartida (SVM, shared virtual memory) se ha implementado sobre la base del subsistema HMM (Heterogeneous memory management), que permite utilizar dispositivos con sus propias unidades de gestión de memoria (MMU, memory management unit), las cuales pueden acceder a la memoria principal. También, mediante HMM, se puede organizar un espacio de direcciones conjunto entre la GPU y la CPU, donde la GPU puede acceder a la memoria principal del proceso. El soporte para SVM actualmente está habilitado solo para GPUs de la familia Pascal, aunque también se ha proporcionado soporte para GPUs Volta y Turing. Además, en Nouveau se ha agregado un nuevo ioctl para gestionar la migración de áreas de memoria de procesos a la memoria de la GPU;
    • En el controlador DRM de Intel para GPU Skylake y versiones posteriores (gen9+) activado por defecto el modo fastboot, excluyendo cambios innecesarios de modo durante el arranque. Añadidos nuevos identificadores de dispositivos basados en las microarquitecturas Coffeelake e Ice Lake. Para los chips Coffeelake se ha añadido soporte GVT (virtualización de GPU). Para GPU virtuales se ha implementado soporte VFIO EDID. Para pantallas LCD MIPI/DSI se ha añadido soporte para elementos ACPI/PMIC. Implementados nuevos modos TV 1080p30/50/60;
    • En el controlador amdgpu se ha añadido soporte para GPU Vega10/20 BACO. Se han implementado herramientas de gestión de energía para Vega 10/20 y tablas de gestión del ventilador para Vega 10. Se han añadido nuevos identificadores PCI para dispositivos GPU Picasso. Se añadió interfaz de gestión de dependencias planificadas para evitar bloqueos mutuos;
    • Se añadió controlador DRM/KMS para aceleradores de operaciones de pantalla ARM Komeda (Mali D71);
    • Se ha añadido soporte para paneles de pantalla Toppoly TPG110, Sitronix ST7701, PDA 91-00156-A0, LeMaker BL035-RGB-002 3.5 y Kingdisplay kd097d04;
    • Se ha añadido soporte para codecs de audio Rockchip RK3328, Cirrus Logic CS4341 y CS35L36, MediaTek MT6358, Qualcomm WCD9335 e Ingenic JZ4725B, así como para la plataforma de audio Mediatek MT8183;
    • Se ha añadido soporte para controladores NAND Flash STMicroelectronics FMC2, Amlogic Meson;
    • Se ha añadido soporte para aceleradores para sistemas de hardware Habana AI;
    • Se ha añadido soporte para controladores Ethernet de gigabit NXP ENETC e interfaces inalámbricas MediaTek MT7603E (PCIe) y MT76x8.

Al mismo tiempo, la Fundación Latinoamericana de Software Libre formó
una variante del núcleo completamente libre 5.1 — Linux-libre 5.1-gnu, libre de elementos de firmware y controladores que contienen componentes o secciones de código no libres, cuyo ámbito de aplicación está restringido por el fabricante. En esta nueva versión se ha deshabilitado la carga de blobs en los controladores mt7603 y goya. Se ha actualizado el código de limpieza de blobs en los controladores y subsistemas wilc1000, iwlwifi, soc-acpi-intel, brcmfmac, mwifiex, btmrvl, btmtk y touchscreen_dmi. Se ha interrumpido la limpieza de blobs en el cargador de firmware lantiq xrx200 debido a su eliminación del núcleo.

Fuente: opennet.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