Tras dos meses de desarrollo, Linus Torvalds lanzó el núcleo. Linux 6.16 Entre los cambios más notables: un impulsor de la aceleración OpenVPNMecanismo Kexec HandOver, habilitación de tablas de páginas de memoria de cinco niveles por defecto para x86, eliminación del protocolo DCCP, controlador de bloque zloop, capacidad para enviar volcados de núcleo a través de un socket UNIX, soporte para escritura atómica en XFS, descarga del procesamiento de sonido para dispositivos USB, optimizaciones en Ext4, un controlador TPM (Trusted Platform Module) virtual, una implementación completa de Device Memory TCP, soporte para tuberías sin nombre en io_uring, preparación para la integración del controlador Asahi DRM, el mecanismo de "cola en modo usuario" en el controlador AMDGPU, soporte para Intel TDE (Trusted Domain Extensions) e Intel APE (Advanced Performance Extensions).
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.
- Continuación de la migración de cambios desde la rama Rust-for-Linux, relacionado con el uso de Rust como segundo lenguaje para desarrollar controladores y módulos del kernel (el soporte de Rust no está activo por defecto y no hace que Rust se incluya entre las dependencias de compilación del kernel requeridas). Se ha introducido la capacidad de usar configfs para módulos escritos en Rust. Se han añadido abstracciones necesarias para desarrollar controladores gráficos. Se han ampliado las capacidades de los módulos alloc, time, str, list, workqueue y page. Se ha añadido soporte para la macro "assert!" en las pruebas basadas en KUnit. Se ha añadido un conjunto de abstracciones para gestionar la frecuencia de la CPU y usar API relacionadas con la gestión de energía. Se ha añadido soporte para 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 han realizado trabajos para reducir el impacto en el rendimiento del uso de SELinuxPara mejorar el rendimiento, se ha añadido una caché de resultados de comprobación de acceso a directorios. Se ha incorporado 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 añadido el controlador ovpn al paquete, lo que permite una aceleración significativa del rendimiento. OpenVPN trasladando las operaciones de cifrado, el procesamiento de paquetes y la gestión del canal de comunicación al lado del kernel. LinuxEl controlador elimina la sobrecarga asociada a los cambios de contexto, permite la optimización mediante el acceso directo a las API internas del kernel y elimina las transferencias de datos lentas entre el kernel y el espacio de usuario (el módulo realiza el cifrado, el descifrado y el enrutamiento sin enviar tráfico a un controlador del espacio de usuario). Esto se realiza en el lado del kernel para evitar cambios de contexto innecesarios.
- 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 ha añadido compatibilidad con la descarga del procesamiento de la transmisión de audio a dispositivos de audio USB (descarga de audio USB). Este cambio reduce significativamente el consumo de energía en dispositivos portátiles al continuar procesando la transmisión de audio mientras el resto del sistema está en modo de suspensión. Anteriormente, esta función estaba presente en los núcleos de la plataforma. Android Anteriormente, se proporcionaba una implementación específica del procesamiento de audio descargado para dispositivos USB, y ahora el núcleo principal cuenta con una implementación universal que puede ser utilizada por 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 de Software Libre creó una versión del kernel 6.16 completamente libre. Linux-libre 6.16-gnu, limpiado de elementos de firmware y controladores que contienen componentes no libres o secciones de código con alcance restringido. La versión 6.16 neutraliza la carga de blobs en los nuevos controladores Intel qat 6xxx crypto, ST vd55g1 sensor, ath12k AHB wifi, Aeonsemi AS21xxx y MediaTek 25Gb Ethernet. Se han limpiado los nombres de blobs en los archivos devicetree (dts) para los chips ARM de Qualcomm y MediaTek. Se ha actualizado 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
