Después de dos meses de desarrollo, Linus Torvalds presentó el lanzamiento del núcleo Linux 6.12. Entre los cambios más destacados se encuentran: la posibilidad de habilitar el modo de tiempo real, sched_ext para crear planificadores de CPU a través de eBPF, la generación de un código QR en caso de fallos, el mecanismo Device Memory TCP, el mecanismo de reserva de recursos SCHED_DEADLINE en el servidor, mejoras en el planificador de tareas EEVDF, y el módulo IPE para establecer políticas de integridad.
La nueva versión incluye 14,607 correcciones de 2,167 desarrolladores, con un tamaño de parche de 37 MB (los cambios afectaron a 13,087 archivos, se añadieron 507,913 líneas de código y se eliminaron 234,083 líneas). En la versión anterior, hubo 15,130 correcciones de 2,078 desarrolladores, y el tamaño del parche fue de 85 MB (en el núcleo 6.10, el parche tenía un tamaño de 41 MB). Aproximadamente el 45% de todos los cambios presentados en 6.12 están relacionados con controladores de dispositivos, alrededor del 12% se refiere a actualizaciones de código específico de arquitecturas de hardware, el 13% está relacionado con la pila de red, el 6% con sistemas de archivos y el 3% con subsistemas internos del núcleo.
Novedades principales en el núcleo 6.12:
- Memoria y servicios del sistema
- Se ha proporcionado la posibilidad de compilar el núcleo con la opción PREEMPT_RT sin parches adicionales para funcionar en modo de tiempo real. La última característica que faltaba en el núcleo, que impedía activar el modo PREEMPT_RT, era el soporte para la salida atómica no bloqueante a través de la función printk, que también ha sido incorporada al núcleo. El soporte PREEMPT_RT está disponible para las arquitecturas x86, x86_64, ARM64 y RISC-V. Hasta ahora, la implementación del modo PREEMPT_RT se ofrecía en forma de parches externos, sobre los cuales algunas distribuciones, como RHEL, SUSE y Ubuntu, crearon ediciones separadas de tiempo real de sus productos, demandadas en áreas como sistemas financieros, dispositivos de procesamiento de audio y video, aviación, medicina, robótica, telecomunicaciones y sistemas industriales, donde es necesario garantizar un tiempo de respuesta predecible.
- Se ha añadido el mecanismo «sched_ext» (SCX), que permite utilizar eBPF para crear planificadores de CPU que abarcan prácticamente todos los aspectos de la planificación de la ejecución de tareas y la distribución de recursos de la CPU. Dichos planificadores pueden ser cargados dinámicamente y ejecutarse dentro del núcleo de Linux en. una máquina virtual eBPF. El mecanismo sched_ext facilita la creación de planificadores específicos para tareas determinadas, permite experimentar con diversas técnicas y estrategias de planificación, así como crear prototipos funcionales rápidamente y reemplazar planificadores sobre la marcha en infraestructuras operativas. Por ejemplo, utilizando sched_ext, se puede crear un planificador que considere las particularidades de una aplicación específica y que cambie dinámicamente la estrategia de planificación de su ejecución en función del estado del sistema y otros factores adicionales.
- Se incluye la parte restante de los parches necesarios para el funcionamiento del mecanismo SCHED_DEADLINE server, que resuelve el problema de la falta de recursos de CPU para tareas normales debido a la monopolización de la CPU por tareas de alta prioridad (realtime). Para prevenir la monopolización de la CPU, anteriormente se utilizaba en el núcleo el mecanismo de Realtime throttling, que intentaba reservar un 5% para tareas de baja prioridad, dejando el 95% para tareas realtime. Este mecanismo dejaba mucho que desear, ya que las tareas normales en muchas situaciones no recibían el tiempo de CPU correspondiente. SCHED_DEADLINE server implementa un mecanismo de reserva de recursos más eficiente.
- Se ha completado la integración del planificador de tareas EEVDF (Earliest Eligible Virtual Deadline First), que reemplaza al planificador CFS (Completely Fair Scheduler), que se ha suministrado desde el núcleo 2.6.23. El nuevo planificador, al elegir el siguiente proceso para ejecutar, considera los procesos que no han recibido suficientes recursos de CPU o que han recibido injustamente mucho tiempo de CPU. En el primer caso, se fuerza la entrega del control al proceso, mientras que en el segundo, se pospone. El antiguo planificador CFS utilizaba heurísticas y ajustes finos para determinar los procesos que necesitaban atención especial, mientras que el nuevo planificador los rastrea de forma más explícita y no requiere ajustes finos. Se espera que EEVDF reduzca la latencia en la ejecución de tareas que tenían problemas de planificación con CFS.
- En el controlador de fallos del núcleo — DRM Panic, que utiliza el subsistema DRM (Direct Rendering Manager) para mostrar un informe visual al estilo de la «pantalla azul de la muerte», se ha añadido la capacidad de mostrar en la pantalla el logotipo y un código QR con el informe kmsg en caso de un estado de fallo. Dado que en el código QR solo caben 2953 bytes, se ha previsto la opción DRM_PANIC_SCREEN_QR_CODE_URL, mediante la cual el informe kmsg se comprime con zlib y se adjunta como parámetro a la URL, lo que permite transmitir alrededor de 7500 bytes a través del código QR V40. Al compilar paquetes con el núcleo, las distribuciones pueden establecer un enlace base para la URL, lo que permitirá organizar un acceso a la página para enviar un informe sobre el problema. Para elegir el formato del código QR, se ha previsto la configuración DRM_PANIC_SCREEN_QR_VERSION.
- Se ha añadido el soporte para la extensión ARM POE (Permission Overlay Extension), que permite establecer permisos de acceso a áreas de memoria. Mediante esta extensión, en sistemas con procesadores ARM64 se puede implementar un mecanismo de Claves de Protección de Memoria, utilizado para restringir el acceso a páginas de memoria sin cambiar la tabla de páginas de memoria.
- Para las arquitecturas Loongarch, ARM64, PowerPC y s390 se ha trasladado la implementación de la llamada al sistema getrandom(), optimizada mediante el mecanismo vDSO (virtual dynamic shared object), que permite trasladar el controlador de la llamada al sistema del núcleo al espacio de usuario y evitar cambios de contexto. Esta optimización permite acelerar la obtención de números aleatorios hasta 15 veces.
- En el subsistema de entrada/salida asíncrona io_uring se ha añadido la posibilidad de utilizar tiempos de espera absolutos, que se activan al alcanzar un tiempo determinado en los relojes del sistema (anteriormente, solo se podían establecer tiempos de espera relativos, en los que se indicaba la duración desde el inicio de la operación).
- Se han añadido archivos para generar bindings para la biblioteca libcpupower mediante la herramienta SWIG, que permite formar bindings de código en C/C++ para varios lenguajes de programación. Los bindings permiten crear scripts en Python y otros lenguajes, utilizándolos para ampliar la funcionalidad de la biblioteca libcpupower, que proporciona una API para gestionar cpufreq y controladores desde el espacio de usuario.
- En la utilidad cpuidle se ha implementado la visualización del valor de estado de inactividad «residency», utilizado para sistemas en tiempo real y que considera el tiempo mínimo que el procesador debe permanecer en estado de inactividad para justificar el consumo de energía al cambiar a este estado y salir de él.
- Se ha añadido la posibilidad de utilizar el compilador Clang para construir la biblioteca estándar de C nolibc, que forma parte de los códigos fuente del núcleo de Linux y proporciona un envoltorio sobre las llamadas al sistema básicas. Al compilar nolibc en Clang, se permite la optimización en la etapa de enlace (LTO).
- Se han declarado obsoletas algunas interfaces de cgroup1, como la contabilidad de TCP, la primera versión de los límites suaves (soft limit) y la gestión del agotamiento de la memoria libre. El soporte para estas funciones sigue siendo completo, y la advertencia se ha hecho para estudiar el número de usuarios que continúan utilizando estas capacidades.
- Se ha añadido la posibilidad de configurar un búfer circular de trazado para preservar los datos acumulados después del reinicio, lo que evitará la pérdida de información de depuración acumulada en caso de un fallo del núcleo. Los datos se guardan en la memoria. La activación se realiza a través del parámetro de línea de comandos del núcleo trace_instance, por ejemplo, establecer «trace_instance=boot_map@0x285400000:12M» reservará 12 MB de memoria en la dirección 0x285400000 para el búfer «boot_map», que estará disponible a través del archivo /sys/kernel/tracing/instances/boot_map.
- Se ha continuado con la transferencia de cambios de la rama Rust-for-Linux, relacionada 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á activo por defecto y no implica que Rust sea una dependencia de compilación obligatoria para el núcleo). Se han añadido módulos ‘list’ y ‘rbtree’ para trabajar con listas enlazadas dobles y árboles de búsqueda rojo-negros (red-black tree). Se han ampliado las capacidades de los módulos ‘init’, ‘sync’, ‘types’ y ‘error’. Se ha proporcionado la posibilidad de utilizar código en Rust al compilar el núcleo con protección contra ataques Spectre (opciones MITIGATION_{RETHUNK, RETPOLINE, SLS}), el uso del sistema de depuración KASAN, mecanismos de protección kCFI (kernel Control Flow Integrity) y Shadow Call, así como al utilizar plugins adicionales de GCC. Se ha añadido un controlador para el controlador Ethernet Applied Micro QT2025 PHY, escrito en Rust. Se ha preparado un sitio web separado con documentación — rust.docs.kernel.org.
- Se ha añadido al código fuente del núcleo la utilidad xdrgen para convertir especificaciones XDR (eXternal Data Representation) en funciones de codificación y decodificación XDR, escritas utilizando el estilo C adoptado en el núcleo de Linux.
- Se ha aceptado un cambio en el núcleo con la implementación de un mecanismo de enmascaramiento de punteros para reducir el número de llamadas lentas barrier_nospec() en la función de 64 bits copy_from_user(), utilizada para copiar datos del espacio de usuario al núcleo. La aplicación del enmascaramiento acelera en un 2.6% el paso de la prueba ‘per_thread_ops’, que evalúa el número de operaciones que pueden realizarse en un solo hilo.
- Se ha añadido un nuevo controlador USB que permite utilizar el protocolo 9pfs como transporte para enviar y recibir datos de un dispositivo USB, al montar un sistema de archivos 9p sobre USB (por ejemplo, 'mount -t 9p -o trans=usbg,aname=\/path\/to\/fs \/mnt\/9'). Como ejemplo de aplicación del nuevo controlador se menciona su uso en lugar de NFS para organizar la carga de la partición raíz al desarrollar dispositivos integrados.
- Subsistema de disco, entrada/salida y sistemas de archivos
- Se ha añadido a la subsistema VFS la capacidad de trabajar con dispositivos de almacenamiento cuya tamaño de bloque es mayor que el tamaño de la página de memoria en el sistema. En los sistemas de archivos, esta capacidad actualmente solo es compatible con XFS.
- En el subsistema FUSE, que permite crear implementaciones de sistemas de archivos que funcionan en el espacio de usuario, se ha añadido soporte para el mapeo de identificadores de usuarios en sistemas de archivos montados, aplicado para relacionar archivos de un usuario específico en un volumen montado de otro usuario en el sistema actual.
- Se ha implementado una nueva operación fcntl F_CREATED_QUERY, que permite a la aplicación determinar si un archivo abierto con la bandera O_CREAT fue creado o ya existía antes.
- En la llamada al sistema name_to_handle_at() se ha añadido la posibilidad de usar identificadores únicos de 64 bits de puntos de montaje para evitar condiciones de carrera al analizar /proc/mountinfo.
- El tamaño de la estructura 'file' en el núcleo se ha reducido de 232 a 184 bytes, lo que permite disminuir el consumo de memoria en sistemas que trabajan activamente con archivos.
- Se prohíbe montar sistemas de archivos en puntos de montaje dentro de la jerarquía /proc, por ejemplo, en /proc/PID/fd, lo que creaba problemas potenciales de seguridad.
- En el pseudo-SF NSFS (NameSpace FS), utilizado para trabajar con espacios de nombres, se ha implementado un suministro adicional de información sobre los espacios de nombres de los puntos de montaje.
- En el sistema de archivos EROFS (Extendable Read-Only File System), destinado a ser utilizado en particiones accesibles en modo solo lectura, se ha añadido soporte para montar sistemas de archivos directamente desde imágenes de disco almacenadas como archivos.
- Se han añadido nuevos comandos ioctl XFS_IOC_START_COMMIT y XFS_IOC_COMMIT_RANGE en XFS para intercambiar contenido entre dos archivos.
- En NFS se ha añadido soporte para el protocolo 'LOCALIO', que permite determinar si el cliente y servidor NFS se encuentran en el mismo host, para aplicar las optimizaciones correspondientes.
- En el sistema de archivos Btrfs se han propuesto optimizaciones de rendimiento, se ha realizado una reestructuración del código, se ha reducido el área de bloqueo de extensiones durante las operaciones de lectura, se ha continuado con el trabajo para la transición al uso de folios de páginas de memoria, y se ha implementado liberación automática de memoria para la estructura btrfs_path.
- En el sistema de archivos Ext4 se han corregido errores relacionados con la asignación de bloques, la gestión de extensiones, el mecanismo de 'fast commit' y la journalización.
- Virtualización y seguridad
- Se ha añadido el módulo LSM IPE (Integrity Policy Enforcement), desarrollado por Microsoft para ampliar el sistema existente de control de acceso obligatorio. Este módulo permite definir una política general de integridad para todo el sistema, especificando qué operaciones son permitidas y cómo se debe verificar la autenticidad de los componentes. Por ejemplo, mediante el IPE se puede indicar qué archivos ejecutables están permitidos al ser ejecutados, teniendo en cuenta la verificación de su conformidad con la versión de referencia a través de hashes criptográficos proporcionados por el sistema dm-verity.
- En la fase de compilación del núcleo, se ha habilitado la posibilidad de activar por separado los métodos de protección disponibles contra diversas vulnerabilidades de la clase Spectre en la CPU. En Kconfig se proponen nuevos parámetros: MITIGATE_MDS (protección contra la vulnerabilidad Microarchitectural Data Sampling), MITIGATE_TAA (protección contra la vulnerabilidad TSX Asynchronous Abort), MITIGATE_MMIO_STALE_DATA (protección contra la vulnerabilidad MMIO Stale Data), MITIGATE_L1TF (protección contra la vulnerabilidad L1 Terminal Fault), MITIGATE_RETBLEED (protección contra la vulnerabilidad Retbleed), MITIGATE_SPECTRE_V1, MITIGATE_SPECTRE_V2 (protección contra vulnerabilidades Spectre), MITIGATE_SRBDS (protección contra la vulnerabilidad Special Register Buffer Data Sampling), MITIGATE_SSB (protección contra la vulnerabilidad Speculative Store Bypass).
- Se ha añadido el parámetro de línea de comandos proc_mem.force_override y un conjunto de configuraciones de compilación en Kconfig (PROC_MEM_FORCE_ALWAYS, PROC_MEM_FORCE_PTRACE y PROC_MEM_FORCE_NEVER), que permiten prohibir la modificación de la memoria a través de /proc/pid/mem.
- El subsistema LSM (módulo de seguridad de Linux) ha sido actualizado para utilizar llamadas estáticas, lo que ha mejorado la seguridad y aumentado el rendimiento.
- Se ha permitido el uso de núcleos estándar para la arquitectura ARM64 en entornos huésped que se ejecutan en sistemas Android con un hipervisor KVM modificado (KVM protegido).
- En el módulo LSM Landlock, que permite restringir la interacción de un grupo de procesos con el entorno externo, se ha implementado el concepto de 'IPC scoping' para limitar selectivamente la interacción con entornos sandbox, utilizando sockets Unix y señales. Por ejemplo, se puede prohibir el establecimiento de conexiones utilizando sockets Unix desde un entorno sandbox a procesos en los que no se aplica aislamiento, pero permitir conexiones con procesos en la misma área de scope.
- En el hipervisor KVM, se ha añadido un flag en CPUID para sistemas huéspedes que indica el soporte para las extensiones AVX10.1.
- Subsistema de red
- Se ha añadido el mecanismo Device Memory TCP, que permite utilizar sockets de red para el envío directo del contenido de la memoria de los dispositivos periféricos a través de la red (modo zero-copy) y la colocación directa del contenido de los paquetes de red en la memoria del dispositivo en el lado del receptor. Los datos transmitidos en los paquetes se envían directamente desde la tarjeta de red a la memoria del dispositivo periférico o desde la memoria del dispositivo a la tarjeta de red, evitando la CPU, mientras que las cabeceras de los paquetes se colocan en los búferes normales del núcleo.
- Se han ampliado las capacidades de muchos controladores Ethernet y inalámbricos. Por ejemplo, el controlador Intel iwlwifi ha añadido soporte para trasladar operaciones RLC/SMPS al firmware, en el controlador RealTek rtw89 se ha mejorado el rendimiento y se ha añadido soporte para los chips RTL8852BT/8852BE-VT (WiFi 6), en el controlador Ethernet de microchip se ha añadido soporte para las especificaciones IEEE 802.3bw (100BASE-T1) e IEEE 802.3bp, y se han mejorado las implementaciones de Ethernet virtual de Microsoft vNIC e IBM veth. Se han añadido nuevos controladores para los chips Ethernet Realtek RTL9054, RTL9068, RTL9072, RTL9075, RTL9068, RTL9071 y Microchip LAN8650/1 10BASE-T1S MAC-PHY.
- En MPTCP (MultiPath TCP), una extensión del protocolo TCP para la entrega de paquetes TCP de forma simultánea a través de múltiples rutas a través de diferentes interfaces de red, el tamaño de los coeficientes de peso utilizados en la ruta se ha incrementado de 8 a 16 bits. Se ha implementado la identificación del tráfico perdido (blackhole) y la suspensión temporal de los intentos de establecer conexiones con sistemas que provocan la pérdida de tráfico.
- Para IPv6, se ha implementado soporte para la bandera "p" en PIO (Prefix Information Option), utilizada en los anuncios RA (IPv6 Router Advertisements) para seleccionar el modelo de despliegue de clientes a través de DHCPv6-PD (Delegación de Prefijos DHCPv6, RFC9663) en lugar de asignar direcciones individuales basadas en prefijos, utilizando SLAAC (Configuración Automática de Direcciones Sin Estado). En IPv6 IOAM6 se ha añadido soporte para un nuevo modo de encapsulación tunsrc, lo que permite lograr un mayor rendimiento.
- Se ha mejorado el rendimiento del procesamiento de paquetes de control IPsec.
- Se ha mejorado el rendimiento del vaciado (flush) de grandes conjuntos de reglas nftables. En nfnetlink_queue se ha mejorado el soporte para el protocolo SCTP.
- En la API ethtool se ha añadido soporte para vincular múltiples tarjetas de red a una única interfaz de red.
- Hardware
- En el controlador AMDGPU, se ha continuado trabajando en la implementación del soporte para GPU AMD RDNA4 ("GFX12"). Se ha añadido la posibilidad de vaciar colas de tareas individuales sin restablecer el estado de toda la GPU.
- Se ha continuado el trabajo en el controlador drm (Direct Rendering Manager) Xe para GPUs basadas en la arquitectura Intel Xe, que se utiliza en las tarjetas gráficas Intel de la serie Arc y en gráficos integrados, comenzando con los procesadores Tiger Lake. La nueva versión incluye soporte para GPU basadas en las microarquitecturas Battlemage y Lunar Lake. Se presentó soporte para modificadores CCS (Color Control Surface) Xe2 para gestionar los parámetros de los GPU integrados y discretos.
- En el controlador i915 se ha implementado la posibilidad de salida de información de la velocidad de rotación del ventilador a través de la interfaz HWMON o sysfs (atributo 'fan1_input'). Se ha declarado obsoleto el parámetro 'i915.modeset'; en su lugar, se debe utilizar el parámetro 'i915.nomodeset'.
- En el controlador DRM msm (GPU Qualcomm Adreno) se ha agregado soporte para las GPU A615, A306 y A621.
- Se ha realizado una reestructuración y limpieza de las estructuras internas en el controlador Nouveau.
- En el controlador intel_pstate, que gestiona los parámetros de consumo de energía (P-state) en sistemas con procesadores Intel, se ha añadido soporte para sistemas híbridos con CPUs asimétricos (que difieren en características), así como soporte para la gestión de energía de procesadores basados en las microarquitecturas Granite Rapids y Sierra Forest. En el controlador intel_idle se ha agregado soporte para CPUs Xeon Granite Rapids. En el controlador intel_rapl se ha asegurado el reconocimiento de procesos de la familia 1Ah de AMD y de los procesadores Intel ArrowLake-U.
- Se ha continuado la incorporación de cambios para soportar el SoC ARM Snapdragon X Elite, que utiliza un propio CPU Qualcomm Oryon de 12 núcleos y GPU Qualcomm Adreno. Este chip está destinado para su uso en portátiles y PCs, superando en muchas pruebas de rendimiento a los chips Apple M3 y Intel Core Ultra 155H.
- Se ha añadido soporte para placas, SoCs y dispositivos ARM: Broadcom bcm2712 (Raspberry Pi 5), Renesas R9A09G057 (RZ/V2H), Qualcomm Snapdragon 414 (MSM8929), Lenovo ThinkPad T14s Gen 6, Lenovo A6000/A6010, Surface Laptop 7, Anbernic RG35XXSP, Firefly Core-PX30-JD4, Lunzn Fastrhino R68S, Aspeed Riser, AGX Orin, Rockchip Qnap-TS433, Huashan Pi, Meta Catalina, BeagleY-AI, NanoPi R2S Plus, ExynosAuto v920, SOPHGO SG2002, Qualcomm IPQ5332, LG G4 (h815), Cool Pi CM5 GenBook, Anbernic RG35XXSP, GameForce Ace, IBM P11, Kontron i.MX93 OSM-S, NanoPC-T6.
- Se ha añadido soporte para paneles de pantalla Anbernic RG28XX, On Tat Industrial Company KD50G21-40NT-A1, Innolux G070ACE-LH3, Melfas lmfbx101117480, Densitron DMT028VGHMCMI-1D, Microchip AC40T08A, AOU B116XTN02.3, AUO B116XAN06.1, AOU B116XAT04.1, BOE TV101WUM-LL2, BOE NV140WUM-N41, BOE NV133WUM-N63, BOE NV116WHM-A4D, BOE NE140WUM-N6G, CMN N116BCA-EA2, CMN N116BCP-EA2, CSW MNB601LS1-4, Starry er88577.
- En el sistema de sonido se ha añadido soporte para los chips y códecs RME Digiface USB, AMD ACP 7.1, Mediatek MT6367, MT8365, Realtek RTL1320, C-Media CM9825. Se han declarado obsoletos los antiguos controladores de sonido para ASoC Intel, y se recomienda utilizar los controladores AVS. Se han realizado muchas mejoras en el controlador SoundWire.
Fuente: opennet.ru
