Lanzamiento del núcleo de Linux 6.18

Después de dos meses de desarrollo, Linus Torvalds ha presentado la versión del núcleo Linux 6.18. Entre los cambios más destacados se encuentran: dm-pcache para almacenamiento en caché de disco en memoria no volátil (PMEM), eliminación de Bcachefs, modo online de verificación de XFS, controladores Binder (IPC de Android) y Tyr (GPU Mali) en Rust, posibilidad de crear controladores USB en Rust, optimización del almacenamiento en caché en el asignador de memoria SLUB, direccionamiento de espacios de nombres a través de descriptores de archivos, aceleración del intercambio (swap), verificación de programas BPF por firma digital, virtualización de Intel CET en KVM, protocolo de red PSP (híbrido de TLS e IPsec), soporte para la extensión IP AccECN, optimización de la pila UDP.

En la nueva versión se han incluido 15035 correcciones de 2217 desarrolladores, el tamaño del parche es de 45 MB (los cambios afectaron a 13142 archivos, se añadieron 601897 líneas de código y se eliminaron 355006 líneas). En la versión anterior hubo 14334 correcciones de 2118 desarrolladores, con un tamaño de parche de 46 MB. Aproximadamente el 40% de todos los cambios presentados en el 6.18 están relacionados con controladores de dispositivos, alrededor del 16% de los cambios están relacionados con la actualización de código específico para arquitecturas de hardware, el 12% está relacionado con la pila de red, el 5% con sistemas de archivos y el 3% con subsistemas internos del núcleo.

Novedades principales en el núcleo 6.18 (1, 2, 3):

  • Subsistema de disco, entrada/salida y sistemas de archivos
    • En Device Mapper se ha añadido un controlador dm-pcache para utilizar memoria persistente (memoria CXL, direccionada a través de un dispositivo DAX) como caché adicional de alto rendimiento antes de discos tradicionales o unidades flash más lentas. Dm-pcache garantiza la conservación del contenido de la caché en caso de fallos (crash-safe) mediante el uso de memoria no volátil, duplicación de metadatos y verificación de integridad de datos y metadatos a través de sumas de verificación CRC32. Actualmente solo se admite el almacenamiento en caché en modo de escritura diferida (write-back).
    • Se ha eliminado del núcleo el código del sistema de archivos Bcachefs, que ahora se distribuirá en forma de un módulo externo, ensamblado utilizando las herramientas DKMS (Dynamic Kernel Module Support). El código de Bcachefs puede ser reinstaurado en el núcleo una vez que Kent Overstreet demuestre efectivamente la posibilidad de una interacción correcta con otros desarrolladores del núcleo y su capacidad para seguir las normas establecidas de desarrollo.
    • Se ha añadido la bandera RWF_NOSIGNAL a la llamada al sistema pwritev2(), que desactiva el envío de la señal SIGPIPE al escribir en canales o sockets sin nombre que se han cerrado.
    • Se ha añadido la opción de montaje ‘pidns’ en Procfs para indicar los espacios de nombres de identificadores de procesos (PID namespace). Por ejemplo: ‘mount -t proc -o pidns=\/proc\/self\/ns\/pid proc \/tmp\/proc’.
    • En XFS, se ha declarado estable y habilitada por defecto la posibilidad de usar la utilidad fsck para verificar y corregir problemas detectados en modo online, sin desmontar el sistema de archivos. Se han añadido las llamadas al sistema file_getattr y file_setattr para modificar los atributos de archivos especiales (cualquier inode). En KConfig, se han desactivado por defecto las opciones XFS_SUPPORT_V4 (versión 4 de XFS) y XFS_SUPPORT_ASCII_CI (modo insensible a mayúsculas y minúsculas para caracteres ASCII), que se han declarado obsoletas. Se han eliminado las opciones obsoletas de montaje attr2, noattr2, ikeep y noikeep.
    • En MD RAID se ha implementado un nuevo tipo de mapas de bits: llbitmap (bitmap sin bloqueo), que funciona sin bloqueos y proporciona un rendimiento más alto.
    • Se ha extraído de la estructura general de ‘inode’ la información relacionada con el cifrado y la verificación (punteros i_crypt_info e i_verity_info). Esta modificación permite reducir el consumo de memoria en sistemas de archivos que no soportan cifrado y verificación.
    • Se ha añadido soporte para la llamada al sistema copy_file_range() en la subsistema FUSE y para la copia directa de rangos utilizando un tamaño de tipo de 64 bits (anteriormente solo se soportaba tamaño de 32 bits). También se ha añadido soporte para la inicialización en modo síncrono durante el montaje (FUSE_DEV_IOC_SYNC_INIT).
    • En el sistema de archivos ext4 se ha implementado la posibilidad de usar identificadores de usuario (uid) y grupos (gid) de 32 bits al acceder a bloques reservados. Se han añadido operaciones ioctl para establecer y leer los parámetros del superbloque de los sistemas de archivos montados (tune2fs podrá cambiar parámetros en el superbloque sin derechos de escritura en el dispositivo de bloques). Se han eliminado completamente las configuraciones obsoletas específicas de ext3.
    • Se ha añadido la opción de montaje «lookup_mode» en f2fs para seleccionar el modo de búsqueda: perf — búsqueda por hash, compat — búsqueda lineal, auto — selección automática. El cambio de modo es significativo para configuraciones con directorios que no distinguen entre mayúsculas y minúsculas. El modo actual de búsqueda se puede conocer a través del archivo «/sys/fs/f2fs//effective_lookup_mode». Se ha añadido la posibilidad de reservar inodes, accesibles solo para usuarios privilegiados.
    • Se ha añadido un modo de funcionamiento en Overlayfs sin distinción de mayúsculas y minúsculas, habilitado a nivel de capas del sistema de archivos (el ajuste para directorios individuales aún no está soportado).
    • En BTRFS, se ha mejorado la paralelización de operaciones bajo alta carga de lectura y baja carga de escritura, reduciendo el tiempo de confirmación de transacciones y acortando significativamente el tiempo de sincronización (de minutos a decenas de segundos). Se ha proporcionado la posibilidad de utilizar bloques (bs) de mayor tamaño que la página de memoria (ps).
    • En ksmbd (servidor SMB que opera a nivel del kernel) se ha añadido un parámetro para limitar el número máximo de conexiones desde un solo. IP. smbdirect, smbclient y smbserver han sido adaptados para utilizar estructuras de kernel estandarizadas.
    • En SQUASHFS se ha añadido la posibilidad de utilizar las opciones SEEK_DATA y SEEK_HOLE en la llamada del sistema lseek() para buscar datos y espacios vacíos en archivos esparcidos. En algunas pruebas se ha registrado un aumento en el rendimiento de copia de archivos esparcidos de hasta 150 veces.
    • En EXFAT se ha añadido soporte para ioctl FS_IOC_GETFSLABEL y FS_IOC_SETFSLABEL para leer y escribir etiquetas de particiones. Se ha proporcionado la posibilidad de cambiar las opciones de montaje durante el remonte. Se ha acelerado la carga de mapas de bits.
    • En NTFS3 se ha añadido soporte para ioctl FS_IOC_GETFSLABEL y FS_IOC_SETFSLABEL para leer y establecer etiquetas de particiones.
  • Memoria y servicios del sistema
    • Se ha incorporado la implementación del mecanismo de comunicación entre procesos Binder, escrito en el lenguaje Rust. Binder se utiliza en Android para organizar la interacción entre procesos y la invocación remota de métodos (un proceso de Android puede invocar un método o función en otro proceso de Android, utilizando Binder para identificación, invocación y transmisión de argumentos entre procesos). El código de Binder ha sido reescrito en Rust como parte de la iniciativa de Google para mejorar la seguridad de Android.
    • En SLUB, el asignador de memoria del núcleo, se ha implementado una capa de caché opcional llamada 'sheaves', que utiliza múltiples cachés, cada una de las cuales está vinculada a un núcleo de CPU específico, lo que permite que un núcleo localice operaciones al asignar o liberar memoria. Esta caché ha mejorado el rendimiento de la asignación y liberación de memoria en el núcleo al eliminar los primitivos de sincronización innecesarios requeridos al involucrar diferentes núcleos de CPU. En las pruebas realizadas, el incremento de rendimiento fue del 6.3% al 31%, dependiendo del tipo de carga.
    • Se ha agregado la posibilidad de crear descriptores de archivos asociados con un espacio de nombres específico. A diferencia del acceso a los espacios de nombres por identificadores (/proc//ns/), el descriptor de archivo se asocia con una instancia concreta del espacio de nombres y evita la situación en la que el identificador se vuelve a asignar y ahora apunta a otro objeto. De manera similar al uso de pidfds, la apertura de descriptores de archivos que hacen referencia a espacios de nombres se realiza a través de las funciones open_by_handle_at() y name_to_handle_at().
    • Se ha implementado el mecanismo 'Swap Table', que permite mejorar el rendimiento de la paginación. La aceleración se logra mediante la reducción de la competencia por el acceso a la caché de paginación, un proceso de búsqueda más eficiente en la caché y una disminución de la fragmentación. La backend basada en Swap Table se utiliza para la caché de paginación en lugar de la backend XArray y ha permitido aumentar el rendimiento en un promedio del 5-20%. En la prueba usemem, el rendimiento aumentó entre el 17% y el 28%, en la prueba de recompilación multihilo del núcleo, el tiempo de compilación disminuyó entre el 1.12% y el 3.19%, y la prueba redis-benchmark con BGSAVE mostró un incremento en el número de solicitudes procesadas del 6-7%.
    • El subsistema Zswap ha sido trasladado al uso directo del sistema de asignación de memoria zsmalloc en lugar de la capa zpool, que ya no se utiliza en ningún otro lugar y ha sido eliminada del núcleo.
    • Para gestionar el comportamiento del cargador de microcódigo en sistemas x86, se ha implementado una opción de línea de comandos 'microcode=lista de flags'. En su forma actual, esta nueva opción reemplaza a 'microcode.force_minrev' y también permite especificar la versión mínima de microcódigo permitida para el arranque.
    • Se ha comenzado a reorganizar la estructura «page» excesivamente inflada utilizada para gestionar las páginas de la memoria оперативiva. Se ha añadido el tipo ‘memdesc_flags_t’ para los campos con banderas universales, que podrán ser utilizados después de la esperada separación de la estructura «page» en estructuras individuales para slab y folios (folio).
    • Para la arquitectura nios2, utilizada en los procesadores Altera Nios II (procesador suave basado en FPGA), se ha implementado el soporte para la llamada al sistema clone3().
    • Se ha añadido el atributo «transitional» en la configuración del núcleo (KConfig), que se puede utilizar para marcar configuraciones que no aparecen en las interfaces de usuario, como «make menuconfig», y que no se incluyen en los archivos de configuración generados. La principal finalidad del atributo es simplificar el cambio de nombre de opciones manteniendo la compatibilidad retroactiva.
    • La versión mínima del compilador Clang necesaria para compilar el núcleo se ha elevado a la herramienta LLVM 15. En Debian 12 y Ubuntu 22.04 se incluye LLVM 14.
    • Se ha continuado con la transferencia de cambios de la rama Rust-for-Linux, relacionados con el uso del lenguaje Rust como segundo lenguaje para el desarrollo de controladores y módulos del núcleo (el soporte para Rust no está activado de forma predeterminada y no lleva a que Rust se convierta en una de las dependencias de compilación obligatorias del núcleo). En la nueva versión, se han implementado operaciones atómicas de memoria para el código en Rust, la estructura maple tree, la posibilidad de crear archivos DebugFS y funciones para manipular mapas de bits. Se ha ampliado el acceso a la API para el desarrollo de controladores. Se ha añadido un conjunto completo de abstracciones para el desarrollo de controladores de dispositivos USB (ejemplo de controlador USB). La utilidad perf ha añadido soporte para símbolos de depuración generados por el compilador rustc.
  • Virtualización y seguridad
    • Se ha añadido soporte para la verificación criptográfica de los programas BPF cargados mediante firma digital. En el futuro, esta capacidad se ampliará con herramientas para definir reglas para cargar programas BPF firmados y proporcionar a los usuarios no privilegiados la posibilidad de utilizar programas BPF verificados.
    • En el hipervisor KVM se ha implementado el soporte para la virtualización de la extensión Intel CET (Control-flow Enforcement Technology), utilizada para proteger contra exploits que emplean técnicas de programación orientada a retornos (ROP - Return-Oriented Programming). La esencia de la protección es que, después de transferir el control a una función, la dirección de retorno se guarda en el procesador no solo en la pila normal, sino también en una pila oculta separada, que no puede ser modificada directamente.
    • Se ha añadido la posibilidad de utilizar más de 255 CPU en sistemas invitados que operan bajo el hipervisor Bhyve en hosts con FreeBSD 15.
    • Se ha añadido una capa dibs (Direct Internal Buffer Sharing) para la gestión compartida de buffers dentro de entornos aislados, como un hipervisor o una instancia del núcleo de Linux.
    • Se ha añadido soporte para operar con múltiples módulos LSM (Linux Security Module) activados simultáneamente en el subsistema de auditoría.
    • Se ha añadido un controlador virtio spi-virtio para acceder a dispositivos SPI (Serial Peripheral Interface) desde máquinas virtuales.
    • En el hipervisor KVM se ha añadido el soporte para el modo SEV-SNP CipherText Hiding, que bloquea la lectura del texto cifrado de la memoria de sistemas invitados protegidos en un CPU no autorizado.
    • Se ha añadido el controlador qtee para entornos TEE (Trusted Execution Environment) de los chips Qualcomm.
  • Subsistema de red
    • Se añade soporte para el cifrado de conexiones TCP, utilizando el protocolo PSP (PSP Security Protocol), desarrollado por Google para cifrar el tráfico entre centros de datos. PSP ofrece cifrado, control criptográfico de integridad y autenticación de la fuente, implementando una combinación de las capacidades de los protocolos TLS e IPsec. En PSP, se aplica cifrado a nivel de conexiones de red individuales, no a todo el canal de comunicación. PSP utiliza claves de cifrado distintas para diferentes conexiones TCP en túneles para una estricta isolación del tráfico de distintas aplicaciones y manejadores. Para reducir la carga en el CPU, se soporta la descarga de operaciones de cifrado y descifrado a las tarjetas de red (offload). Se utiliza el protocolo UDP como transporte para la transmisión de datos, sobre el cual se pasa el contenido del paquete TCP original.

      Lanzamiento del núcleo de Linux 6.18
    • Se añadió soporte inicial para la extensión AccECN (Notificación de Congestión Explícita Precisa), que es una versión mejorada de la extensión ECN, permitiendo a los hosts marcar paquetes IP en caso de congestión en lugar de descartarlos, lo que posibilita identificar el inicio de un embotellamiento en los canales de comunicación sin pérdida de paquetes. La extensión ECN original tiene una limitación que solo permite enviar una señal de congestión por ciclo de recepción-transmisión TCP (RTT, Tiempo de Ida y Vuelta, envío de solicitud y recepción de respuesta). AccECN elimina esta limitación y permite al receptor enviar más de una etiqueta de congestión al emisor en la cabecera del paquete TCP. Los algoritmos de control de congestión pueden utilizar la información recibida para reaccionar de manera más precisa a las congestiones y evitar una reducción abrupta en la intensidad del envío de paquetes ante una congestión leve.
    • Se optimizó el manejo de paquetes entrantes en el stack UDP bajo condiciones de ataques DDoS, que causan la llegada de un gran número de paquetes a uno o varios sockets UDP. Las optimizaciones realizadas, como la reducción de bloqueos competidores, la optimización de la disposición de estructuras de datos en memoria y la implementación de bloqueos que consideran la arquitectura NUMA (Acceso a Memoria No Uniforme), permitieron aumentar el rendimiento en la recepción de paquetes UDP en un 47% o más en condiciones extremas.
    • Se implementó la posibilidad de desactivar el almacenamiento en caché de entradas/salidas en el servidor NFS, lo que permite utilizar el servidor NFS en sistemas con poca memoria (por ejemplo, en entornos de nube limitados). Desactivar la caché también puede ser útil en servidores NFS sobrecargados para evitar la expulsión de datos relacionados con discos locales de la caché, al liberar memoria para la caché de NFS.
    • El tamaño máximo de los búferes de paquetes entrantes y salientes para los sockets de red (net.core.rmem_max y net.core.wmem_max) se aumentó de 2 MB a 4 MB. El tamaño predeterminado no cambió (net.core.rmem_default y net.core.wmem_default = 2 MB).
    • Se añadió un controlador para el acelerador de operaciones de red Qualcomm PPE (Engine de Procesamiento de Paquetes), utilizado en el SoC Qualcomm IPQ9574.
  • Hardware
    • El núcleo incluye el controlador Tyr, escrito en Rust, que permite trabajar con GPU ARM Mali, en las cuales se aplica la tecnología CSF (Command Stream Frontend), como Mali G310, G510 y G710. El controlador aún no está preparado para su uso constante por parte de los usuarios comunes y se considera un prototipo experimental para probar abstracciones para el desarrollo de controladores en Rust.
    • Se añadió soporte para touchpads con retroalimentación táctil y sensores de presión en los controladores para dispositivos de entrada con interfaz HID (Dispositivo de interfaz humana).
    • Se continuó el trabajo en el controlador drm (Direct Rendering Manager) Xe para GPU basadas en la arquitectura Intel Xe, que se utilizan en las tarjetas gráficas Intel de la familia Arc y en gráficos integrados, comenzando con los procesadores Tiger Lake. En la nueva versión se añadió la interfaz madvise, se habilitó el soporte para SR-IOV PF (Single Root I/O Virtualization Physical Function), se incorporó el modo Intel PSMI para la validación de hardware, se aseguró el manejo de la información sobre errores transmitida por el firmware, se implementó el perfil de consumo de energía SLPC y se añadió soporte para cargar firmware auxiliar (por ejemplo, para el controlador del ventilador y el regulador de voltaje) durante la verificación del controlador.
    • En el controlador AMDGPU se añadió soporte para dispositivos con APU Cyan Skillfish, se mejoró el soporte para AMD GCN 1.0, se implementó compatibilidad con la herramienta criu, se añadieron métricas de temperatura en sysfs y se permitieron solicitudes de remapeo MMIO desde el espacio de usuario.
    • En el controlador i915 se incluyó el soporte para chips de la familia Wildcat Lake y se mejoró el rendimiento con GPU Jasper Lake, Elkhart Lake, Gen7 y Gen6.
    • En el controlador Nouveau, por defecto, se habilitaron los firmware GSP de NVIDIA y se mejoró el manejo de errores.
    • Se continuó la integración de componentes del controlador Nova para GPU NVIDIA equipadas con GSP-firmware, utilizadas desde la serie NVIDIA GeForce RTX 2000 basada en la microarquitectura Turing. El controlador está escrito en Rust. En la nueva versión se amplió el soporte para firmware GSP, se mejoró la implementación de la macro «register!», se añadió soporte para clases de dispositivos PCI e identificadores de fabricantes.
    • Se añadió el controlador rocket para aceleradores NPU, utilizados en SoC Rockchip RK3588.
    • Se agregó el parámetro del núcleo «boot_display» para seleccionar el dispositivo de salida para mostrar el proceso de arranque en sistemas con múltiples GPU.
    • En el controlador vesadrm se implementó el soporte para paletas de 8 bits.
    • Se ha añadido soporte para la GPU Adreno 663 en el controlador msm y se ha implementado el soporte para la tecnología de reducción de consumo de energía IFPC (Inter Frame Power Collapse).
    • Se ha añadido soporte para las GPUs Mali-G710, Mali-G510, Mali-G310, Mali-Gx15, Mali-Gx20 y Mali-Gx25 en el controlador panthor.
    • Se ha añadido soporte para los sistemas de audio ASoC Qualcomm Glymur y PM4125, Realtek RT1321, Shanghai FourSemi FS2104/5S, Texas Instruments PCM1754 y TAS2783A, qcs615, CS35L56 B2, tas2118, tas2x20, tas5825. También se ha añadido soporte para las tarjetas de sonido USB Tascam US-144mkII y Presonus S1824c.
    • Se ha añadido soporte para los procesadores ARM Cortex-A320/A520AE/A720AE y C1-Nano/Pro/Premium/Ultra.
    • Se ha añadido soporte para plataformas ARM, SoCs y dispositivos: Apple M2 Pro, M2 Max y M2 Ultr, Sony Xperia SP, Samsung Galaxy S22, Samsung Galaxy S20 FE, ASUS Eee Pad Slider SL101, Lenovo ThinkBook 16, HP Omnibook X14 X1P42100, Dell Inspiron 7441 / Latitude 7455, Sige1, NanoPi Zero2, Axis Artpec8, NXP i.MX91, ROCK 2A/2F, Qualcomm Lemans Auto, Renesas RZ/T2H, RZ/N2H, RZ/T2H y RZ/N2H, Aspeed AST27xx, Meta Clemente BMC, Netcube Nagami som, Tqma91xx, Ultratronik i.MX8MP Ultra-MACH, i.MX8ULP EVK9, Buffalo WXR-1750DHP.

Simultáneamente, la Fundación de Software Libre de América Latina ha formado una versión completamente libre del núcleo 6.18 — Linux-libre 6.18-gnu, depurado de elementos de firmware y controladores que contienen componentes no libres o secciones de código cuya aplicación está restringida por el fabricante. En la versión 6.18 se ha actualizado el código de limpieza de blobs en los controladores Nova-Core, Intel XE, TI PRUeth, Lantiq GSWIP, Marvell WiFi-Ex. Se ha realizado la limpieza de nombres de blobs en archivos dts (devicetree) para chips ARM de Qualcomm, Mediatek y TI ARM64. Se ha neutralizado la carga de blobs en los nuevos controladores FourSemi fs2104/5s, TI TAS2783 y Qualcomm GENI.

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