Lanzamiento del núcleo de Linux 5.6

Después de dos meses de desarrollo, Linus Torvalds presentó el lanzamiento del núcleo Linux 5.6. Entre los cambios más destacados se encuentran: la integración de la interfaz VPN WireGuard, soporte para USB4, espacios de nombres para el tiempo, la posibilidad de crear manejadores de sobrecarga TCP mediante BPF, soporte inicial para MultiPath TCP, eliminación del problema del año 2038 del núcleo, el mecanismo 'bootconfig', y el sistema de archivos ZoneFS.

En la nueva versión se han incluido 13702 correcciones de 1810 desarrolladores,
el tamaño del parche es de 40 MB (los cambios afectaron a 11577 archivos, se añadieron 610012 líneas de código,
se eliminaron 294828 líneas). Aproximadamente el 45% de todas las modificaciones en 5.6
están relacionados con los controladores de dispositivos, aproximadamente el 15% de los cambios tienen
se relaciona con la actualización del código específico de arquitecturas de hardware, el 12%
se refiere a la pila de red, el 4% a sistemas de archivos y el 3% a elementos internos.
del núcleo.

Principales novedades:

  • Subsistema de red
    • Se ha añadido Implementación de la interfaz VPN WireGuard, que se basa en métodos de cifrado modernos (ChaCha20, Poly1305, Curve25519, BLAKE2s), es fácil de usar, carece de complicaciones, ha demostrado ser eficaz en varias implementaciones importantes y ofrece un rendimiento muy alto (supera a OpenVPN en capacidad de 3.9 veces). En WireGuard se aplica el concepto de enrutamiento basado en claves de cifrado, que implica vincular una clave privada a cada interfaz de red y usarla para asociar claves públicas. El intercambio de claves públicas para establecer la conexión se realiza de manera similar a SSH. Los elementos criptográficos necesarios para el funcionamiento de WireGuard fueron se han trasladado de la biblioteca Zinc en el Crypto API estándar y se incluyen en el núcleo 5.5.
    • Comenzó Integración de componentes necesarios para soportar MPTCP (MultiPath TCP), una extensión del protocolo TCP para organizar conexiones TCP con entrega de paquetes simultáneamente a través de múltiples rutas a través de diferentes interfaces de red, vinculadas a diferentes direcciones IP. Para las aplicaciones de red, esta conexión agregada se presenta como una conexión TCP normal, y toda la lógica de separación de flujos es manejada por MPTCP. MultiPath TCP puede ser utilizado tanto para aumentar el ancho de banda como para mejorar la fiabilidad. Por ejemplo, MPTCP puede usarse para transferir datos en un smartphone utilizando simultáneamente enlaces WiFi y 4G o para reducir costos al conectar un servidor utilizando varios enlaces baratos en lugar de uno caro.
    • Se ha añadido Soporte para la disciplina de gestión de colas de red sch_ets (Enhanced Transmission Selection, IEEE 802.1Qaz), que permite distribuir el ancho de banda entre diferentes clases de tráfico. Si la carga de una clase de tráfico específica está por debajo del ancho de banda asignado, ETS permite que otras clases de tráfico utilicen el ancho de banda disponible (no utilizado). La disciplina Qdisc sch_ets se configura como PRIO y utiliza las clases de tráfico para determinar los límites de ancho de banda estrictos y compartidos. ETS funciona como una combinación de disciplinas. PRIO y DRR — cuando hay clases de tráfico limitadas estrictamente, se usa PRIO, pero si no hay tráfico en la cola, funciona como DRR.
    • Se ha añadido un nuevo tipo de programas BPF. BPF_PROG_TYPE_STRUCT_OPS, que permite implementar manejadores de funciones del núcleo a través de BPF. Actualmente, esta funcionalidad ya se puede usar para implementar algoritmos de control de congestión TCP en forma de programas BPF. Como ejemplo una técnica similar de sustitución de solicitudes un programa BPF que implementa el algoritmo DCTCP.
    • Ha sido aceptado en el núcleo. cambios, trasladando la herramienta ethtool de ioctl() a usar la interfaz netlink.La nueva interfaz simplifica la adición de extensiones, mejora el manejo de errores, permite enviar notificaciones al cambiar el estado, facilita la interacción entre el núcleo y el espacio de usuario y reduce el número de listas nombradas sincronizadas.
    • Se ha añadido la implementación del algoritmo de control de colas de red FQ-PIE (Flow Queue PIE), que está diseñado para reducir el impacto negativo del almacenamiento intermedio de paquetes en el equipo de red perimetral (bufferbloat). FQ-PIE muestra una alta eficiencia cuando se utiliza en sistemas con módems por cable.
  • Subsistema de disco, entrada/salida y sistemas de archivos
    • Para el sistema de archivos Btrfs se ha añadido se implementa de manera asíncrona la operación DISCARD (marcación de bloques liberados que ya no es necesario almacenar físicamente). Originalmente, las operaciones DISCARD se realizaban de manera síncrona, lo que podía generar caídas de rendimiento debido a la espera de que los comandos correspondientes fueran completados por los dispositivos de almacenamiento. La implementación asíncrona permite no esperar a que el dispositivo complete el DISCARD y realizar esta operación en segundo plano.
    • En XFS se ha llevado a cabo limpieza de código que utilizaba antiguos contadores de tiempo de 32 bits (tipo time_t reemplazado por time64_t), lo que causaba el problema del año 2038. Se han corregido errores y daños de memoria que surgían en plataformas de 32 bits. Se ha reestructurado el código para trabajar con atributos extendidos.
    • en el sistema de archivos ext4 han realizado optimización del rendimiento relacionada con el procesamiento del bloqueo de inode durante las operaciones de lectura y escritura. Se ha mejorado el rendimiento de la reescritura en modo de entrada/salida directa (Direct I/O). Para simplificar el diagnóstico de problemas, se ha asegurado la preservación en el super bloque de los primeros y últimos códigos de error.
    • en el sistema de archivos F2FS se ha implementado la capacidad de almacenar datos en forma comprimida. Para un archivo o directorio individual, la compresión se puede habilitar mediante el comando «chattr +c file» o «chattr +c dir; touch dir/file». Para comprimir toda la partición en la herramienta mount, se puede utilizar la opción «-o compress_extension=ext».
    • se ha adoptado en el núcleo el sistema de archivos ZoneFS, que simplifica el trabajo de bajo nivel con dispositivos de almacenamiento zonificados. Por dispositivos zonificados se entienden los dispositivos de discos magnéticos o NVMe SSD, cuyo espacio de almacenamiento está dividido en zonas, que son grupos de bloques o sectores donde solo se permite la adición secuencial de datos actualizando todo el grupo de bloques. El sistema de archivos ZoneFS fue desarrollado por Western Digital y vincula cada zona en el almacenamiento con un archivo separado, que se puede utilizar para almacenar datos en modo raw sin manipulación a nivel de sectores y bloques, es decir, permite a las aplicaciones utilizar la API de archivos en lugar de acceder directamente al dispositivo de bloques mediante ioctl.
    • En NFS, por defecto se ha desactivado el montaje de particiones sobre UDP. Se ha añadido soporte para la función de copia directa de archivos entre servidores, especificada en NFS 4.2. Se ha introducido una nueva opción de montaje «softreval», que en caso de fallo del servidor permite el uso de valores de atributos en caché. Por ejemplo, al activar esta opción, tras la inactividad del servidor, se mantiene la capacidad de navegar por rutas en la partición NFS y acceder a información almacenada en la caché.
    • Se ha realizado optimización del rendimiento del mecanismo fs-verity, utilizado para el control de la integridad y autenticidad de archivos individuales. Se ha incrementado la velocidad de lectura secuencial gracias a la implementación de un árbol hash de Merkle. Se ha optimizado el rendimiento de FS_IOC_ENABLE_VERITY en situaciones sin datos en caché (se ha aplicado la lectura anticipada de páginas de datos).
  • Virtualización y seguridad
    • Se ha declarado obsoleta la opción de desactivar el módulo SELinux durante su funcionamiento, y en el futuro se prohibirá la descarga del SELinux ya activado. Para desactivar SELinux será necesario pasar el parámetro "selinux=0" en la línea de comandos del núcleo.
    • Se ha añadido soporte para espacios de nombres de tiempo (time namespaces), que permiten vincular al contenedor el estado de los relojes del sistema (CLOCK_REALTIME,
      CLOCK_MONOTONIC, CLOCK_BOOTTIME), utilizar su propio tiempo dentro del contenedor y garantizar la inmutabilidad de CLOCK_MONOTONIC y CLOCK_BOOTTIME durante la migración del contenedor a otro host (considerar el tiempo después de la carga teniendo en cuenta o no el estado de suspensión).
    • Se eliminó el grupo bloqueante /dev/random. El comportamiento de /dev/random se ha acercado al de /dev/urandom en términos de evitar el bloqueo de la entropía tras la inicialización del grupo.
    • Se ha incluido un controlador en el núcleo que permite a los sistemas huéspedes, que funcionan bajo VirtualBox, montar carpetas exportadas por el entorno host (VirtualBox Shared Folder).
    • Se ha añadido un conjunto de parches al subsistema BPF (despachador BPF), en el contexto de la aplicación del mecanismo Retpoline para protegerse contra ataques de la clase Spectre V2, que permite aumentar la eficiencia de la llamada a programas BPF cuando ocurren eventos asociados (por ejemplo, permite acelerar la llamada a los manejadores XDP al recibir un paquete de red).
    • Se ha añadido un controlador para soportar entornos TEE (Trusted Execution Environment) integrados en APU AMD.
  • Memoria y servicios del sistema
    • Se ha añadido soporte para funciones globales en BPF. El desarrollo se lleva a cabo en el marco de una iniciativa para añadir el soporte de bibliotecas de funciones que se pueden integrar en programas BPF. El siguiente paso será la implementación de extensiones dinámicas que permitirán cargar funciones globales, incluidas las que reemplazan funciones globales existentes durante su uso. También se ha añadido soporte en el subsistema BPF para una variante de operación map (que se utiliza para almacenar datos persistentes) que admite la ejecución en modo por lotes.
    • Se han añadido el dispositivo «cpu_cooling» que permite enfriar una CPU sobrecalentada al ponerla en estado de inactividad (idle) durante cortos períodos de tiempo.
    • Se añadió una llamada al sistema openat2(), que ofrece un conjunto de banderas adicionales para restringir la resolución de la ruta del archivo (prohibiendo la intersección de puntos de montaje, enlaces simbólicos, enlaces mágicos (/proc/PID/fd), componentes «..»).
    • Para sistemas heterogéneos basados en la arquitectura big.LITTLE, que combinan núcleos de CPU potentes y de menor rendimiento en un solo chip, se garantiza el establecimiento del parámetro uclamp_min (aparecido en el núcleo 5.3, un mecanismo de fijación de carga). Este parámetro garantiza que la tarea será colocada por el planificador en un núcleo de CPU que tenga suficiente rendimiento.
    • El núcleo se ha deshecho de el problema del año 2038. Se han reemplazado los últimos controladores restantes, en los que el contador de tiempo de época utilizaba un tipo de 32 bits (signed int) time_t, que considerando el informe desde 1970, debería desbordarse en 2038.
    • Se ha continuado la mejora de la interfaz de entrada/salida asíncrona io_uring, en la que se ha asegurado con el soporte de nuevas operaciones: IORING_OP_FALLOCATE (reservar áreas vacías), IORING_OP_OPENAT,
      IORING_OP_OPENAT2,
      IORING_OP_CLOSE (apertura y cierre de archivos),
      IORING_OP_FILES_UPDATE (añadir y eliminar archivos de la lista de acceso rápido),
      IORING_OP_STATX (solicitar información sobre un archivo),
      IORING_OP_READ,
      IORING_OP_WRITE (análogos simplificados de IORING_OP_READV e IORING_OP_WRITEV),
      IORING_OP_FADVISE,
      IORING_OP_MADVISE (variantes asíncronas de las llamadas posix_fadvise y madvise), IORING_OP_SEND,
      IORING_OP_RECV (envío y recepción de datos de red),
      IORING_OP_EPOLL_CTL (realización de operaciones sobre descriptores de archivo epoll).
    • Se añadió una llamada al sistema pidfd_getfd(), que permite a un proceso extraer de otro proceso un descriptor de archivo de un archivo abierto.
    • Se implementó el mecanismo «bootconfig», que permite definir los parámetros de funcionamiento del núcleo a través de un archivo de configuración, además de las opciones de la línea de comandos. Se ha propuesto la utilidad bootconfig para agregar tales archivos a la imagen initramfs. Esta opción puede aplicarse, por ejemplo, para configurar kprobes durante el arranque.
    • Redesigned mecanismo de espera para la lectura y escritura de datos en canales sin nombre (pipe). Este cambio ha permitido acelerar la ejecución de tareas como la compilación paralela de grandes proyectos. Sin embargo, la optimización puede llevar a una condición de carrera en GNU make debido a un error en la versión 4.2.1, que fue corregido en la versión 4.3.
    • Se ha añadido el flag PR_SET_IO_FLUSHER a prctl(), que se puede usar para marcar procesos que liberan memoria, para los cuales no deben aplicarse restricciones en situaciones de falta de memoria en el sistema.
    • Basada en el sistema de distribución de memoria ION utilizado en Android, se ha implementado una subsistema dma-buf heaps, que permite gestionar la asignación de buffers DMA para compartir áreas de memoria entre controladores, aplicaciones y diversas subsistemas.
  • Arquitecturas de hardware
    • Se ha añadido soporte para la extensión E0PD, que se introdujo en ARMv8.5 y permite implementar protección contra ataques relacionados con la ejecución especulativa de instrucciones en la CPU. La protección basada en E0PD conlleva menores costos que la protección KPTI (Aislamiento de la Tabla de Páginas del Núcleo).
    • Para sistemas basados en la arquitectura ARMv8.5, se ha añadido soporte para la instrucción RNG, que proporciona acceso al generador de números pseudoaleatorios de hardware. En el núcleo, la instrucción RNG se utiliza para generar entropía al inicializar el generador de números pseudoaleatorios proporcionado por el núcleo.
    • Se ha eliminado el soporte para las extensiones MPX (Extensiones de Protección de Memoria), que se añadieron en el núcleo 3.19 y que permitían organizar la verificación de punteros para garantizar el cumplimiento de los límites de las áreas de memoria. Esta tecnología no se ha difundido en los compiladores y fue eliminada de GCC.
    • Para la arquitectura RISC-V se ha implementado soporte para la herramienta de depuración KASan (Kernel Address Sanitizer), que facilita la detección de errores al trabajar con memoria.
  • Hardware
    • Se ha implementado soporte para la especificación USB 4.0, que se basa en el protocolo Thunderbolt 3 y ofrece un ancho de banda de hasta 40 Gbit/s, manteniendo la compatibilidad con USB 2.0 y USB 3.2. Al igual que Thunderbolt , la interfaz USB 4.0 permite túnelizar diversos protocolos a través de un solo cable con conector Type-C, incluyendo PCIe, Display Port y USB 3.x, así como implementaciones de software de protocolos, por ejemplo, para organizar enlaces de red entre hosts. La implementación se basa en el controlador Thunderbolt que ya forma parte del núcleo de Linux y lo adapta para trabajar con hosts y dispositivos compatibles con USB4. Los cambios también añaden soporte para dispositivos Thunderbolt 3 en la implementación de software del gestor de conexiones (Connection Manager), que es responsable de crear túneles para conectar varios dispositivos a través de un solo puerto.
    • En el controlador amdgpu se ha añadido se ha añadido soporte inicial para la tecnología de protección contra copia HDCP 2.x (High-bandwidth Digital Content Protection). Se ha añadido soporte para el chip ASIC AMD Pollock, basado en Raven 2. Se ha implementado la posibilidad de reiniciar la GPU para las familias Renoir y Navi.
    • En el controlador DRM para tarjetas gráficas Intel se ha añadido se ha añadido soporte para DSI VDSC para chips basados en la microarquitectura Ice Lake y Tiger Lake, se ha implementado LMEM mmap (memoria local del dispositivo), se ha mejorado el análisis de VBT (Video BIOS Table), se ha añadido soporte para HDCP 2.2 para chips Coffee Lake.
    • Se ha continuado el trabajo de unificación del código del controlador amdkfd (para GPU discretas, como Fiji, Tonga, Polaris) con el controlador amdgpu.
    • Se ha rediseñado el controlador k10temp, el cual ahora soporta la salida de parámetros de voltaje y corriente para la CPU AMD Zen, así como información ampliada de los sensores de temperatura utilizados en CPU Zen y Zen 2.
    • En el controlador nouveau se ha añadido se ha añadido soporte para el modo de arranque verificado del firmware para GPUs NVIDIA basadas en la microarquitectura Turing (GeForce RTX 2000), lo que ha permitido habilitar el soporte para la aceleración 3D en dichas tarjetas (requiere la carga de firmware oficial con la firma digital de NVIDIA). Se ha añadido soporte para el motor gráfico TU10x. Se han solucionado problemas con HD Audio.
    • Se ha añadido soporte para la compresión de datos durante la transmisión a través de DisplayPort MST (Multi-Stream Transport).
    • Se ha añadido un nuevo controlador "ath11k" para chips inalámbricos de Qualcomm con soporte para 802.11ax.
      El controlador se basa en la pila mac80211 y soporta los modos de punto de acceso, estación de trabajo y nodo de red Mesh.
    • A través de sysfs se proporciona acceso a las lecturas legibles de los sensores de temperatura utilizados en discos duros y SSD modernos.
    • Se han introducido cambios significativos en el sistema de sonido ALSA, dirigidos a eliminar código de el problema del año 2038 (eliminando el uso del tipo de 32 bits time_t en las interfaces snd_pcm_mmap_status y snd_pcm_mmap_control). Se ha añadido soporte para nuevos códecs de sonido
      Qualcomm WCD9340/WCD9341, Realtek RT700, RT711, RT715, RT1308, Ingenic JZ4770.
    • Añadidos controladores para pantallas LCD Logic PD 28, Jimax8729d MIPI-DSI, igenic JZ4770, Sony acx424AKP, Leadtek LTK500HD1829, Xinpeng XPP055C272, AUO B116XAK01, GiantPlus GPM940B0,
      BOE NV140FHM-N49,
      Satoz SAT050AT40H12R2,
      Sharp LS020B1DD01D.
    • Se ha añadido soporte para placas ARM y plataformas Gen1 Amazon Echo (basadas en OMAP3630), Samsung Galaxy S III mini (GT-I8190), Allwinner Emlid Neutis, Libre Computer ALL-H3-IT, PineH64 Model B, Aibretech Amlogic GX PC,
      Armada SolidRun Clearfog GTR, NXPGateworks GW59xx,
      lector de libros electrónicos Tolino Shine 3,
      Embedded Artists COM (i.MX7ULP), SolidRun Clearfog CX/ITX y HoneyComb (LX2160A), Google Coral Edge TPU (i.MX8MQ),
      Rockchip Radxa Dalang Carrier, Radxa Rock Pi N10, VMARC RK3399Pro SOM
      ST Ericsson HREF520, Inforce 6640, SC7180 IDP, Atmel/Microchip AM9X60 (SoC ARM926, Kizboxmini), ST stm32mp15, AM3703/AM3715/DM3725, ST Ericsson ab8505, Unisoc SC9863A, Qualcomm SC7180. Se agregó soporte para el controlador PCIe utilizado en Raspberry Pi 4.

Al mismo tiempo, el Fondo Latinoamericano de Software Libre formó
una variante núcleo completamente libre 5.6 — Linux-libre 5.6-gnu, libre de elementos de firmware y controladores que contienen componentes o fragmentos de código no libres, cuya aplicación está limitada por el fabricante. En esta nueva versión, se desactivó la carga de blobs en los controladores para AMD TEE, ATH11K y Mediatek SCP. Se actualizó el código de limpieza de blobs en los controladores y subsistemas AMD PSP, amdgpu y nouveau.

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