Tras dos meses de desarrollo, Linus Torvalds presentó el lanzamiento del kernel de Linux 6.16. Entre los cambios más destacados se encuentran: un controlador para acelerar OpenVPN, un mecanismo de transferencia Kexec, la habilitación de tablas de páginas de memoria de cinco niveles para x86 por defecto, la eliminación del protocolo DCCP, un controlador de bloque zloop, la capacidad de enviar volcados de memoria a través de un socket UNIX, compatibilidad con escritura atómica en XFS, la descarga del procesamiento de sonido para dispositivos USB, optimizaciones en Ext4, un controlador virtual TPM (Módulo de Plataforma Segura), una implementación completa de Device Memory TCP, compatibilidad con tuberías sin nombre en io_uring, preparación para la integración del controlador Asahi DRM, un mecanismo de "cola de modo usuario" en el controlador AMDGPU, compatibilidad con Intel TDE (Extensiones de Dominio Seguras) e Intel APE (Extensiones de Rendimiento Avanzado).
La nueva versión incluye 15924 2145 correcciones realizadas por 50 desarrolladores y un tamaño de parche de 13793 MB (los cambios afectaron a 655451 316441 archivos, se añadieron 15945 2154 líneas de código y se eliminaron 59 45). La versión anterior contaba con 6.16 16 correcciones realizadas por 13 desarrolladores y un tamaño de parche de 4 MB. Aproximadamente el 3 % de los cambios presentados en la versión XNUMX se relacionan con los controladores de dispositivos, el XNUMX % con la actualización de código específico para arquitecturas de hardware, el XNUMX % con la pila de red, el XNUMX % con los sistemas de archivos y el XNUMX % con los subsistemas internos del kernel.
Innovaciones clave en el kernel 6.16:
- Subsistema de disco, E/S y sistemas de archivos
- Se añadió el controlador zloop para crear dispositivos de bucle invertido de bloques zonificados montados en modo bucle. El controlador emula el funcionamiento de dispositivos de bloques convencionales utilizando varios archivos de un sistema de archivos existente (un archivo para almacenar cada zona). Esta función puede ser útil para probar sistemas de archivos, mapeadores de dispositivos y aplicaciones que admiten dispositivos zonificados que utilizan la división de grupos de bloques o sectores en zonas, a los que solo se permite la adición secuencial de datos actualizando todo el grupo de bloques.
- El sistema de archivos XFS implementa soporte para escritura atómica de grandes porciones de datos: ahora se pueden escribir varios bloques en modo atómico (todos los bloques se escribirán exitosamente o ninguno de los bloques se escribirá).
- El sistema de archivos Ext4 ha mejorado el rendimiento del mecanismo de "commit rápido". Se ha añadido compatibilidad con grandes volúmenes de páginas de memoria para archivos regulares, lo que, en pruebas, aumentó el rendimiento en un 37 % para operaciones de E/S secuenciales intensivas. También se ha añadido compatibilidad con operaciones de escritura atómica que abarcan varios bloques.
- El controlador del sistema de archivos ext2 se ha declarado obsoleto debido a su compatibilidad con el mecanismo DAX, que proporciona acceso directo al sistema de archivos sin pasar por la caché de páginas. Está previsto que DAX se elimine del controlador ext2 a finales de año. La razón estriba en que el controlador ext2 se considera una implementación de referencia estable, lo que impide el uso de funciones específicas que no se han distribuido correctamente.
- Los sistemas de archivos OrangeFS, UFS, BFS y OMFS se han migrado para utilizar la nueva API de montaje de particiones.
- Se ha añadido la opción vfs_cache_pressure_denom a sysctl para controlar el número de entradas en la caché dentry (una representación interna de las entradas de directorio) cuando el sistema tiene poca memoria. Cuanto mayor sea el valor, más entradas se podrán eliminar de la caché (menos entradas permanecerán en ella) cuando el sistema tenga poca memoria.
- El sistema de archivos Bcachefs cuenta con la opción "rebalance_on_ac_only" que prohíbe el rebalanceo y la compresión en segundo plano cuando el sistema funciona con batería. Se han acelerado las operaciones de captura de instantáneas y eliminación de dispositivos. Se ha reducido el consumo de memoria al montar en modo de solo lectura. Se ha añadido la capacidad de ejecutar algunas operaciones de recuperación de fallos en segundo plano sin interrumpir el trabajo con el sistema de archivos.
- El subsistema de administración de energía puede congelar de forma independiente los sistemas de archivos y las variables EFI para los modos de espera e hibernación (si los sistemas de archivos ya están congelados por el controlador en el espacio del usuario, no se vuelven a congelar).
- Se agregó la capacidad de acelerar EROFS usando el acelerador QAT (QuickAssist Technology) integrado en los procesadores Intel, que ofrece herramientas para acelerar los cálculos relacionados con la compresión y el cifrado.
- En NFS, el tamaño máximo de fragmento de datos para operaciones de lectura y escritura se ha incrementado de 1 a 4 MB (el valor predeterminado es 1 MB, ya que no todos los clientes admiten un tamaño mayor).
- Los usuarios sin privilegios que tienen derechos CAP_SYS_ADMIN en un espacio de nombres de usuario separado pero no tienen derechos extendidos en el espacio de nombres raíz ahora pueden usar el mecanismo fanotify para monitorear los sistemas de archivos en busca de cambios.
- Para los sistemas de archivos que utilizan el subsistema FUSE, se proporciona la función de borrar todas las entradas de directorio en caché (dentries) a la vez. Se ha añadido compatibilidad con grandes folios de páginas de memoria al subsistema FUSE.
- OverlayFS admite la creación de capas de datos en espacios de nombres sin privilegios que utilizan control de integridad basado en el módulo dm-verity. Esta función permite combinar capas de metadatos confiables con capas de datos no confiables procesadas en espacios de nombres sin privilegios.
- Servicios de memoria y sistema.
- Se ha añadido el mecanismo KHO (Kexec HandOver) para ejecutar un nuevo kernel desde el anterior sin perder el estado del sistema. Antes de transferir el control a la nueva versión del kernel, el estado de los subsistemas clave del kernel se puede serializar en un área de memoria mediante KHO, que no se verá afectado por operaciones posteriores. El nuevo kernel, una vez recibido el control, restaura el estado serializado. El subsistema Live Update Orchestrator (LUO) se está desarrollando sobre la base de KHO, lo que permite reiniciar el kernel sin detener el funcionamiento de los dispositivos.
- Se agregó el parámetro de compilación del kernel CONFIG_X86_NATIVE, que permite usar la opción "-march=native" durante la compilación para optimizar las capacidades del procesador en el sistema actual.
- Se agregó soporte para la extensión de arquitectura del conjunto de instrucciones Intel Advanced Performance Extension (APX), que proporciona 16 registros de propósito general adicionales (además de los 16 disponibles actualmente), lo que permite que el código utilice menos lecturas y escrituras de memoria para mejorar el rendimiento y reducir el consumo de energía.
- Se agregó el modo de ajuste automático de la política de asignación de memoria en los sistemas NUMA, en el que todos los pesos de los nodos se recalculan cuando aparece nueva información de ancho de banda durante el arranque o al conectar memoria en caliente.
- La implementación de futex ahora admite una tabla hash de proceso local (futex_hash_bucket local). Esta, a diferencia de la tabla hash compartida previamente compatible con todos los procesos, es local para un único proceso y es compartida por todos los subprocesos de dicho proceso. Las tablas hash locales se utilizan únicamente para la operación futex PROCESS_PRIVATE. Además, la nueva versión incluye compatibilidad con las opciones FUTEX2_NUMA y FUTEX2_MPOL, que permiten influir en la ubicación de los futex en memoria para ubicarlos más cerca de los procesos que los utilizan.
- Para los sistemas x86_64, se habilita el soporte permanente para tablas de páginas de memoria de cinco niveles (se ha eliminado el parámetro CONFIG_X86_5LEVEL, que controlaba la inclusión de tablas de cinco niveles).
- El controlador intel_pstate, que controla los parámetros de consumo de energía (P-state) en sistemas con procesadores Intel, se ha actualizado para admitir el funcionamiento del programador de tareas Energy Aware Scheduling (EAS) en procesadores híbridos que combinan núcleos de CPU de alto rendimiento y eficiencia energética, como Intel Lunar Lake.
- Se agregaron interfaces a sysfs: "/sys/devices/system/cpu/cpuN/cpu_capacity" para obtener información sobre las capacidades de diferentes CPU en procesadores híbridos y "/sys/devices/system/cpu/cpuidle/intel_c1_demotion" para controlar la capacidad de dejar la CPU en un estado más potente incluso si el kernel intenta poner la CPU en un estado de menor energía (por ejemplo, el kernel puede solicitar una transición al estado de energía C6, pero el firmware puede dejar la CPU en el estado C1 si la CPU se activa bruscamente).
- Para la arquitectura ARM64, está habilitado el soporte para el modo de preempción diferida (PREEMPT_LAZY), que corresponde al modo de preempción completa para tareas en tiempo real (RR/FIFO/DEADLINE), pero retrasa la preempción de tareas normales (SCHED_NORMAL) hasta el límite de tick.
- Para la arquitectura ARM64, se ha agregado soporte para el uso de extensiones SME (Scalable Matrix Extension), habilitadas a través del parámetro CONFIG_ARM64_SME.
- Se continuaron los cambios de portabilidad de la rama Rust para Linux relacionados con el uso de Rust como segundo lenguaje para el desarrollo de controladores y módulos del kernel (la compatibilidad con Rust no está activa por defecto y no implica que Rust se incluya en la lista de dependencias de compilación obligatorias para el kernel). Ahora es posible usar configfs para los módulos escritos en Rust. Se añadieron las abstracciones necesarias para el desarrollo de controladores gráficos. Se ampliaron las capacidades de los módulos alloc, time, str, list, workqueue y page. Se añadió compatibilidad con la macro "assert!" en las pruebas basadas en KUnit. Se añadió un conjunto de abstracciones para gestionar la frecuencia de la CPU y usar API relacionadas con la gestión de energía. Se añadió compatibilidad con la estructura de datos "xarray".
- La implementación de la llamada al sistema getrandom() se ha adaptado a la arquitectura RISC-V, optimizándose mediante el mecanismo vDSO (objeto virtual dinámico compartido). Este mecanismo permite trasladar el controlador de llamadas del sistema del núcleo al espacio de usuario y evitar cambios de contexto. En las pruebas realizadas, la optimización aceleró la generación de números aleatorios 17 veces. También se ha implementado para RISC-V la compatibilidad con las extensiones vectoriales Zicbop, Zabha y Svinval utilizadas en los procesadores SiFive.
- Para la arquitectura LoongArch, el límite en la cantidad de CPU en el sistema se ha aumentado de 256 a 2048. Se ha agregado soporte para el programador de tareas SCHED_MC (multinúcleo).
- Se añadió la capacidad de usar sockets Unix para pasar descriptores de archivos. Para desactivar esta función, las aplicaciones pueden usar el indicador SO_PASSRIGHTS en setsockopt().
- Se proporcionó la capacidad de mapear el buffer de anillo utilizado para rastrear la actividad del kernel a la memoria del espacio del usuario.
- Los controladores de volcado de memoria utilizados para generar un informe de problemas después de una falla del kernel ahora pueden usar las claves LUKS utilizadas por el kernel fallado para guardar volcados de memoria en un sistema de archivos cifrado.
- El sistema de E/S asíncrono io_uring ha agregado una operación IORING_OP_PIPE para crear tuberías sin nombre, que es similar a la llamada del sistema pipe2 excepto que admite descriptores de archivos fijos.
- Se añadió la opción de línea de comandos del kernel "rt_group_sched" para controlar si el programador de grupos de tareas en tiempo real (SCHED_RR) está habilitado. Esta opción es similar a la configuración RT_GROUP_SCHED en Kconfig.
- Para los dispositivos basados en el bus CXL (Compute Express Link), utilizado para organizar la interacción de alta velocidad entre la CPU y los dispositivos de memoria, se ha implementado la compatibilidad con extensiones RAS (Fiabilidad, Disponibilidad y Capacidad de Servicio), lo que permite implementar diversos esquemas de detección y corrección de errores. CXL permite conectar nuevas áreas de memoria proporcionadas por dispositivos de memoria externos y utilizarlas como recursos adicionales del espacio de direcciones físicas para ampliar la RAM del sistema (DDR) o la memoria permanente (PMEM).
- La versión mínima de GCC necesaria para compilar el kernel para todas las arquitecturas se ha elevado a la rama GCC 8. La compilación ahora también requiere al menos binutils 2.30.
- La llamada al sistema uselib(), que hace tiempo que estaba obsoleta, se ha eliminado y en su lugar se utiliza mmap() para el acceso compartido a bibliotecas compartidas entre programas.
- Virtualización y seguridad
- Se ha añadido compatibilidad inicial con el mecanismo Intel TDX (Trusted Domain Extensions) para proteger los sistemas invitados que se ejecutan bajo el hipervisor KVM de la manipulación y el análisis por parte del administrador del sistema host, así como de ataques físicos al hardware. Esta protección se logra mediante el cifrado de memoria. máquinas virtuales.
- Se agregó un controlador TPM (módulo de plataforma confiable) virtual que permite que las máquinas virtuales interactúen con dispositivos TPM (módulo de plataforma confiable) emulados por el SVSM (módulo de servicio de VM segura).
- Se ha restaurado la capacidad de utilizar el complemento randstruct GCC, que aleatoriza el diseño de las estructuras de datos en tiempo de compilación para dificultar su explotación.
- Se agregó la capacidad de usar la tecnología IMA (Arquitectura de medición de integridad) para verificar la integridad al lanzar nuevos núcleos usando la llamada del sistema kexec.
- Se ha trabajado para reducir el impacto de SELinux en el rendimiento. Para agilizar el trabajo, se ha añadido una caché con los resultados de las comprobaciones de acceso a directorios. Se ha añadido la posibilidad de usar máscaras a las reglas de genfscon.
- El código para la interacción con EFI proporciona la capacidad de integrar una sección SBAT (UEFI Secure Boot Advanced Targeting) con metadatos sobre versiones revocadas de componentes de arranque.
- En los módulos cargables, la sección ".static_call_sites" se ha cambiado al modo de solo lectura una vez completada la inicialización.
- Para los sistemas ARM de 64 bits, el hipervisor KVM ahora admite la virtualización anidada (deshabilitada de forma predeterminada).
- El hipervisor KVM ha anunciado soporte estable para la arquitectura RISC-V.
- Subsistema de red
- Se ha adoptado el controlador ovpn, que permite acelerar significativamente el rendimiento de OpenVPN al trasladar las operaciones de cifrado, el procesamiento de paquetes y la gestión de canales de comunicación al kernel de Linux. Este controlador elimina los costes adicionales asociados con la conmutación de contexto, optimiza el trabajo mediante el acceso directo a las API internas del kernel y elimina la lentitud en la transferencia de datos entre el kernel y el espacio de usuario (el módulo realiza el cifrado, el descifrado y el enrutamiento sin enviar tráfico al controlador en el espacio de usuario).
- El mecanismo TCP de memoria de dispositivo ahora admite el envío de datos desde la memoria del dispositivo (ruta TX). Anteriormente, para simplificar la integración de TCP de memoria de dispositivo en el kernel, su funcionalidad se limitaba únicamente a la recepción de datos (ruta RX). TCP de memoria de dispositivo permite usar sockets de red para enviar directamente el contenido de la memoria de un dispositivo periférico a través de la red (modo de copia cero), así como colocar directamente el contenido de los paquetes de red en el área de memoria del dispositivo del receptor. Los datos transmitidos en los paquetes se transfieren desde la tarjeta de red a la memoria del dispositivo periférico (DMABUF), por ejemplo, a la memoria de vídeo de la GPU, o directamente desde la memoria del dispositivo a la tarjeta de red, sin pasar por la CPU, y las cabeceras de los paquetes terminan en los búferes del kernel.
- Se ha introducido la capacidad de enviar contenidos de volcado de núcleo a través de un socket AF_UNIX, lo que permite crear manejadores de volcado de núcleo más seguros en el espacio de usuario que no dependen de que el núcleo invoque procesos privilegiados.
- Se eliminó la compatibilidad con el protocolo de red DCCP (Protocolo de Control de Congestión de Datagramas), que no ha ganado popularidad y ha permanecido en el kernel durante cinco años sin mantenimiento. La eliminación de DCCP del kernel eliminará las barreras que impiden la modificación de la estructura de datos inet_connection_sock para mejorar la eficiencia de la pila TCP. Se mantiene la compatibilidad con los módulos netfilter para el filtrado de paquetes DCCP.
- Para simplificar el manejo de errores al usar sockets SO_PEERPIDFD, el kernel ahora puede pasar pidfd para procesos ya terminados (pidfd está asociado con procesos específicos y, a diferencia de pid, no se reasigna).
- Con BPF, ahora puede crear controladores de control de cola de paquetes de pila de red (qdiscs) para influir en el orden en que se procesan los paquetes de red.
- El sistema de archivos de red AFS utiliza la API de servicios de seguridad genéricos (GSSAPI) para administrar el cifrado de las conexiones a servidores YFS y OpenAFS.
- Se han implementado numerosas optimizaciones. Se ha rediseñado la organización de los bloqueos para las tablas de enrutamiento IPv6 (algunas operaciones con rutas ahora se realizan hasta tres veces más rápido). Se ha acelerado el cálculo de las sumas de comprobación crc3c por software. El motor GRO para tráfico UDP tunelizado se ha acelerado un 32 %. Se ha mejorado el ajuste automático del búfer de recepción para TCP y se han aumentado los límites predeterminados (en pruebas, el rendimiento de flujos individuales a través de un canal de 10 Gbps aumentó un 200 %).
- Netfilter ahora admite máscaras en los nombres de dispositivos de red utilizados en netdev y flowtable. Se ha integrado la información de seguimiento de conexiones (conntrack) en la infraestructura de rastreo de NFT. Se ha agilizado la recuperación de tablas de seguimiento de conexiones (conntrack) mediante procfs.
- Equipo
- Se añadió compatibilidad para transferir el procesamiento de la transmisión de audio a dispositivos de audio con interfaz USB (descarga de audio USB). Este cambio permite reducir significativamente el consumo de energía de los dispositivos portátiles al continuar procesando la transmisión de audio mientras el resto del sistema está en modo de suspensión. Anteriormente, los kernels para la plataforma Android ofrecían una implementación específica de procesamiento de audio de descarga para dispositivos USB, y ahora el kernel principal cuenta con una implementación universal que puede utilizarse en cualquier proyecto.
- Integración continua de los componentes del controlador Nova para las GPU NVIDIA equipadas con firmware GSP, utilizadas a partir de la serie NVIDIA GeForce RTX 2000 basada en la microarquitectura Turing. El controlador está escrito en Rust. Además del componente nova-core añadido en la versión anterior, que implementa una capa de abstracción básica sobre las API del firmware GSP, la versión 6.16 incluye una implementación inicial del controlador DRM nova-drm (Direct Rendering Manager) para interactuar con la GPU desde el espacio de usuario.
- Ha comenzado el proceso de promoción del controlador Asahi DRM para las GPU Apple AGX utilizadas en chips Apple Silicon al kernel. El controlador está escrito en Rust. En esta etapa, solo se incluyen en el kernel los archivos de encabezado con UAPI del controlador Asahi, necesarios para Mesa, y el código principal del controlador Asahi se integrará posteriormente.
- El controlador Nouveau agrega soporte para las GPU NVIDIA Hopper y Blackwell.
- Se ha continuado el trabajo en el controlador Xe drm (Direct Rendering Manager) para GPU basadas en la arquitectura Intel Xe, utilizado en las tarjetas gráficas de la familia Intel Arc y en los gráficos integrados a partir de los procesadores Tiger Lake. Se ha añadido la posibilidad de usar diferentes archivos de firmware para las distintas familias de GPU Intel.
- El controlador AMDGPU implementa compatibilidad con un mecanismo de "cola de usuario" que permite crear colas de trabajo propias en el espacio de usuario y enviarlas directamente a la GPU sin pasar por el programador del kernel. Esta compatibilidad está habilitada para las GPU Navi 4X y GFX 12.
- Se agregó soporte para los sistemas de sonido Intel WCL (Whiskey Lake), AMD ACP 7.x (coprocesador de audio), Cirrus Logic CS35L63 y CS48L32, Everest Semiconductor ES8375 y ES8389, Pioneer DJM-V10, Longsoon-1 AC'97, NVIDIA Tegra264, Richtek ALC203, RT9123 y Rockchip SAI, así como también para las nuevas plataformas Intel AVS.
- Se agregó soporte para placas ARM, SoC y dispositivos: Samsung Exynos7870, Qualcomm Snapdragon X1P42100, Qualcomm MSM8926, RK3562, NXP i.MX94, Renesas RZ/V2N, Amlogic S6/S7/S7D, WonderMedia wm8950, Amlogic s805y, Allwinner A523, Toradex Verdin AM62P, ROCK 5B+, Nitrogen8M Plus, Retronix R-Car V4H Sparrow Hawk, MT8186 Ponyta Chromebook, VIA APC Rock/Paper, Renesas rz/t2h, ASUS Transformer Pad LTE TF300TL, LG Nexus 4, Google Pixel 4a, Raspberry Pi 2.
- Se eliminó el controlador de las tarjetas de captura de video en los chips STA2X11.
Al mismo tiempo, la Fundación Latinoamericana para el Software Libre creó una versión completamente libre del kernel 6.16 —Linux-libre 6.16-gnu—, libre de elementos de firmware y controladores que contienen componentes no libres o secciones de código cuyo alcance de aplicación está limitado por el fabricante. En la versión 6.16, se neutralizó la carga de blobs en los nuevos controladores Intel qat 6xxx crypto, sensor ST vd55g1, ath12k AHB wifi, Aeonsemi AS21xxx y MediaTek 25Gb Ethernet. Se limpiaron los nombres de blobs en los archivos dts (devicetree) de los chips ARM de Qualcomm y MediaTek. Se actualizó el código de limpieza de blobs en los controladores Nova Core, Nouveau, Realtek r8169 Ethernet, Qualcomm Iris, Venus, Mediatek mt7996 wifi, Qualcomm ath11k y ath12k wifi, Texas Instruments tas2781 y Renesas R-Car gen4 PCIe.
Fuente: opennet.ru
