Después de dos meses de desarrollo, Linus Torvalds presentó lanzamiento del núcleo Linux 6.14. Entre los cambios más destacados: controlador ntsync con primitivas de sincronización de Windows NT, configuración de balanceo de operaciones de lectura en Btrfs RAID1, soporte de reflink en XFS en modo tiempo real, posibilidad de entrada/salida en búfer no cacheable, dmem cgroup para limitar la memoria de GPU, utilización de io_uring en FUSE, delegación de atributos en NFS, soporte de escritura atómica en Device mapper, aceleración de enlaces simbólicos, gestión de la ejecución de scripts, soporte para chips Qualcomm Snapdragon 8 Elite, controlador para NPU AMD.
Se han aceptado 12115 correcciones en la nueva versión de 1984 desarrolladores, el tamaño del parche es de 39 MB (los cambios afectaron 10170 archivos, se añadieron 531586 líneas de código, se eliminaron 235999 líneas). En la versión anterior hubo 14172 correcciones de 2086 desarrolladores, el tamaño del parche fue de 46 MB. Aproximadamente el 41% de todos los cambios presentados en 6.14 están relacionados con controladores de dispositivos, aproximadamente el 13% se relaciona con la actualización de código específico para arquitecturas de hardware, el 14% está relacionado con la pila de red, el 7% con sistemas de archivos y el 4% con subsistemas internos del núcleo.
- Subsistema de disco, entrada/salida y sistemas de archivos
- opción de montaje «rescue», que unifica el acceso a todas las demás opciones de recuperación. Se eliminó el soporte para las opciones «alloc_start» y «subvolrootid», y se declaró obsoleta la opción «inode_cache». Se llevaron a cabo optimizaciones de rendimiento, acelerando notablemente la ejecución de operaciones fsync(). se ha añadido soporte para nuevos métodos de balanceo de operaciones de lectura entre los dispositivos que conforman el arreglo RAID1. Además de la distribución de carga basada en identificadores de procesos (pid) que ya estaba en funcionamiento, la nueva versión ofrece tres nuevos modos de balanceo: "rotation" (distribución equitativa de la carga entre todos los dispositivos, este modo está habilitado por defecto); "latency" (distribución teniendo en cuenta las latencias, puede ser útil en caso de fallos o funcionamiento inestable de los dispositivos); devid (control manual). Para cambiar el modo de balanceo se ha agregado interfaz /sys/fs/btrfs//read_policy. Entre otros cambios en Btrfs – de la especificación CSI a través de sidecars no cumple con estos requisitos: ioctl FS_IOC_READ_VERITY_METADATA.
- Se añadió modo de entrada/salida en búfer no cacheable, en el que los datos se eliminan de la caché de páginas inmediatamente después de que se completan las operaciones de lectura o escritura. Este cambio puede ser útil al utilizar dispositivos de almacenamiento muy rápidos, cuya operación de caché en memoria es redundante. Para tales dispositivos, el nuevo modo permite evitar un consumo excesivo de memoria en la caché de páginas sin recurrir a un API complicado de entrada/salida directa (Direct I/O).
- En fsnotify, el mecanismo para rastrear cambios en el sistema de archivos, añadido nuevo evento FS_PRE_ACCESS, que se genera en la etapa previa a la solicitud del contenido del archivo. El evento se procesa en modo sincrónico, es decir, el núcleo envía el evento y espera una respuesta. Si se recibe la respuesta, se lleva a cabo la operación; si ocurre un error, la llamada del sistema devuelve un código de error al espacio del usuario. Con el FS_PRE_ACCESS, el proceso en el espacio del usuario puede, por ejemplo, organizar el llenado del archivo a medida que los datos están disponibles en el almacenamiento lento.
- se ha añadido a la subsistema FUSE, que permite crear implementaciones de sistemas de archivos en el espacio del usuario, soporte el intercambio de datos entre el núcleo y el controlador en el espacio del usuario mediante el mecanismo de entrada/salida io_uring. Este cambio permite mejorar el rendimiento de FUSE al reducir los cambios de contexto entre el núcleo y el espacio del usuario.
- se ha añadido a la sistema de archivos XFS, la posibilidad el uso de mapeo inverso (rmap, reverse-mapping) en modo de operación con retrasos predecibles (‘dispositivo en tiempo real’). El mapeo inverso permite determinar qué archivo está usando un bloque dado en el dispositivo de almacenamiento. Con rmap, en XFS para el modo en tiempo real se ha implementado el soporte para la operación reflink, que permite crear copias de archivos clonando metadatos del archivo y creando un enlace a los datos existentes sin su copia real.
- en VFS, se ha implementado la caché del tamaño de los enlaces simbólicos, que ha permitido acelerar la ejecución de la operación readlink en un 1.5% (en la prueba con /initrd.img en ext4). La caché está habilitada en el FS ext4 y tmpfs.
- se ha añadido soporte en la implementación de NFSv4.2, para la delegación de atributos de archivos,lo que permite gestionar atributos de archivos, como el tiempo de modificación (mtime), del lado del cliente NFS, sin necesidad de enviar los cambios al servidor. Además, se ha mejorado el soporte del protocolo ‘LOCALIO’ que permite determinar si el cliente y el servidor NFS están en el mismo host, para implementar las optimizaciones correspondientes, como el uso de entrada/salida directa (Direct I/O) por parte del cliente.
- Aumentada el rendimiento de las operaciones de lectura en los sistemas de archivos NETFS, CIFS y AFS (Andrew File System).
- en Squashfs. activado modo de carga directa de bloques en la caché de página (SQUASHFS_FILE_DIRECT), permitiendo prescindir de una caché separada read_page. Este cambio ha permitido reducir el tamaño de la memoria consumida durante el funcionamiento de Squashfs.
- en la llamada de sistema statx() el modo «BACKUP LOCK», que se puede utilizar durante la copia de seguridad de archivos de la base de datos; el flag STATX_DIO_READ_ALIGN, para determinar el alineamiento necesario para las operaciones de lectura de archivos.
- En el sistema de archivos Bcachefs actualizado y estabilizado formato de estructuras de disco. Cualquier cambio adicional en el formato se considerará opcional y se implementará en forma de complementos optativos. Se ha incrementado significativamente la velocidad de verificación de la integridad del sistema de archivos. Además, en Bcachefs se ha mejorado el funcionamiento en modo solo lectura; se han solucionado problemas que causaban accesos a memoria después de su liberación (use after free); se han resuelto problemas con punteros reflink en fsck; corregida la gestión de reinicios de transacciones.
- Devuelto el módulo md-linear, diseñado para combinar dispositivos de bloques. Este módulo había sido declarado obsoleto y eliminado del núcleo 6.8, pero resultó ser necesario y por lo tanto ha sido restaurado.
- Los sistemas de archivos F2FS y SQUASHFS han sido trasladados para utilizar folios de páginas de memoria (folios de página).
- En el controlador null_blk se ha implementado el atributo 'rotational', establecido a través de configfs y que permite simular el funcionamiento con un dispositivo basado en discos rotativos para facilitar las pruebas de funciones del núcleo.
- En el sistema Device mapper y en los módulos dm-mirror, dm-io, dm-table, dm-linear, dm-stripe y dm-raid1 se ha implementado se añade soporte para escritura atómica.
- Memoria y servicios del sistema
- Se ha completado integración en el núcleo del controlador ntsync, que implementa el dispositivo de carácter /dev/ntsync y un conjunto de primitivas de sincronización utilizadas en el núcleo de Windows NT. La implementación de estas primitivas a nivel de núcleo permite aumentar significativamente el rendimiento de los juegos de Windows ejecutados mediante Wine. La ganancia de rendimiento se logra al eliminar la sobrecarga asociada con el uso de RPC en el espacio de usuario. La creación de un controlador separado para el núcleo de Linux se debe a la dificultad de implementar correctamente la API de sincronización NT sobre las primitivas existentes en el núcleo.
- Se ha añadido un nuevo controlador cgroup DMEM para la contabilidad separada de áreas de memoria de dispositivos como GPU. DMEM permite crear cgroups separados para diversas tareas que trabajan con GPU, de manera que puedan ejecutarse sin influir entre sí. Esta nueva función resuelve el problema de la terminación forzada de operaciones con GPU al agotar la memoria disponible, gracias a la contabilización de la memoria reflejada de la GPU y la memoria utilizada por los controladores de CPU en cgroups separados.
- Se han realizado optimizaciones en la escalabilidad de la operación de vaciado (flush) del caché TLB (Translation Lookaside Buffer), utilizado para acelerar la conversión de direcciones virtuales en físicas. Las optimizaciones añadidas consisten en la actualización diferida de algunas estructuras de datos durante el cambio de contexto, lo que permite mejorar el rendimiento en algunas pruebas.
- Aumentada el rendimiento del mecanismo MGLRU (Multi-Generational LRU), utilizado para determinar qué páginas de memoria están en uso y cuáles se pueden desalojar en el área de intercambio.
- Continuado transferencia de cambios de la rama Rust-for-Linux, relacionado con el uso del lenguaje Rust como segundo lenguaje para el desarrollo de controladores y módulos del núcleo (el soporte de Rust no está activo por defecto, y no lleva a que Rust se convierta en una de las dependencias de construcción obligatorias del núcleo). Se ha proporcionado la posibilidad de utilizar en el código del núcleo el macro “derive(CoercePointee)”, que permite utilizar punteros inteligentes con objetos trait. Dentro del núcleo se incluyen enlaces de Rust para PCI, plataformas, Open Firmware, dispositivos de caracteres y algunas funciones de entrada/salida. Greg Kroah-Hartman, responsable del soporte de la rama estable del núcleo de Linux, caracterizó el estado actual como “casi listo para escribir un controlador real en Rust”.
- En los escenarios de construcción se propone nuevo código para la generación de versiones de símbolos de depuración para módulos cargables, que ahora utiliza información de registros de depuración en formato DWARF, en lugar de analizar directamente el código fuente. Este cambio permite la aplicación de versionado de los símbolos de depuración para módulos escritos en Rust. La implementación anterior también se mantiene en el núcleo, y la elección del generador se realiza a nivel de opciones de construcción.
- Para la arquitectura PowerPC se ha implementado soporte para el modo de preempción perezosa de tareas (PREEMPT_LAZY, lazy preemption), que corresponde al modo de preempción total («full preemption») para tareas en tiempo real (RR/FIFO/DEADLINE), pero retrasa la preempción de tareas normales (SCHED_NORMAL) hasta el límite del tick.
- En el subsistema de perfilado de rendimiento perf se ha añadido soporte para contadores de consumo de energía de los procesadores AMD. Se ha añadido capacidad de operar en sistemas con hasta 2048 núcleos de CPU.
- Se ha proporcionado posibilidad de usar el parámetro sysctl pid_max con espacios de nombres de identificadores de procesos (ID namespace). El parámetro pid_max está destinado a limitar el valor máximo de los identificadores de procesos (PID) y ahora puede usarse para limitar el número máximo de procesos que se pueden ejecutar en el espacio de nombres especificado. El procesamiento del parámetro se realiza de manera jerárquica, es decir, las restricciones en espacios de nombres externos se aplican a los espacios de nombres anidados.
- Al usar la llamada al sistema para iniciar un proceso execveat en el sistema de archivos /proc ahora se mostrará el nombre del archivo en ejecución, y no el número del descriptor de archivo.
- Se ha añadido una utilidad mountinfo al código fuente del núcleo (en el directorio samples), que demuestra el uso de las llamadas al sistema statmount() y listmount().
- En la subsistema BPF se ofrecen nuevas funciones bpf_local_irq_save() y bpf_local_irq_restore() para deshabilitar temporalmente las interrupciones en la CPU local. Las funciones pueden aplicarse para implementar estructuras cuya manipulación no se interrumpe por interrupciones.
- En la llamada al sistema madvise() al usar las banderas MADV_DONTNEED y MADV_FREE se ha garantizado la liberación de las tablas de páginas de memoria asociadas con el rango de direcciones liberadas, ya que en algunas situaciones las páginas de memoria vacías pueden ocupar una cantidad considerable de memoria.
- Para la arquitectura OpenRISC se ha implementado soporte para el mecanismo de secuencias reiniciables (rseq, restartable sequences), destinado a la ejecución atómica rápida de operaciones que, en caso de ser interrumpidas por otro hilo, se limpian y se intenta realizar nuevamente.
- Se ha reorganizado el código con la implementación de los algoritmos CRC32 y CRC-T10DIF, que ya no se superponen con la subsistema de crypto y se llaman directamente desde la interfaz bibliotecaria. Este cambio ha permitido simplificar el código y aumentar su eficiencia.
- En el sistema de entrada/salida asincrónica io_uring se ha agregado interfaz para pasar metadatos adicionales sobre la integridad durante las operaciones de lectura y escritura.
- Virtualización y seguridad
- En la llamada al sistema execveat se ha agregado bandera AT_EXECVE_CHECK, que permite realizar una verificación la viabilidad de ejecutar un archivo sin lanzarlo realmente, teniendo en cuenta las políticas de seguridad, los derechos de acceso y los módulos LSM activos. Se proponen los flags securebit SECBIT_EXEC_RESTRICT_FILE y SECBIT_EXEC_DENY_INTERACTIVE para su uso junto con AT_EXECVE_CHECK, que pueden utilizarse para restringir la ejecución de archivos con scripts en lenguajes de programación interpretados. El flag SECBIT_EXEC_RESTRICT_FILE exige a los compiladores e intérpretes utilizar la opción AT_EXECVE_CHECK para verificar la viabilidad de la ejecución, mientras que el flag SECBIT_EXEC_DENY_INTERACTIVE prohíbe el procesamiento de comandos interactivos. La idea principal del cambio es la aplicación de políticas de seguridad no solo a los archivos ejecutables tradicionales, sino también a los archivos de texto con scripts que pueden ser cargados a través de la invocación de un intérprete (es decir, la prohibición de ejecución puede implementarse no solo al ejecutar «./script.sh», sino también al ejecutarse como «sh script.sh»).
- En sistemas x86 se ha implementado el soporte para contadores de tiempo protegidos para sistemas invitados, que no permiten modificar el reloj del sistema invitado desde el entorno host. Esta posibilidad se basa en el mecanismo AMD SEV (Virtualización Encriptada Segura), utilizado en sistemas de virtualización para proteger máquinas virtuales de interferencias por parte del hipervisor o del administrador del sistema host.
- En el sistema de control de acceso obligatorio SELinux se ha añadido soporte xperm-rules, que permiten vincular políticas de SELinux a ciertas llamadas ioctl() o mensajes netlink.
- Para la validación de módulos del núcleo con una firma digital, el algoritmo por defecto es es utilizado SHA512.
- En los controladores para sistemas invitados de VirtualBox incluida hay soporte para la arquitectura ARM64.
- En el hipervisor KVM se ha continuado el funcionamiento sobre el uso del mecanismo Intel TDX (Extensiones de Dominio Confiables) para el cifrado de la memoria de los sistemas invitados.
- En virtio_blk se ha añadido hay soporte para el modo de recuperación de errores.
- Subsistema de red
- En la implementación del protocolo RxRPC se ha añadido hay posibilidad de utilizar tramas grandes de UDP para aumentar la capacidad de transmisión.
- Para TCP, se ha añadido soporte para el algoritmo RACK-TLP para la detección de pérdida de paquetes.
- Se añadió nuevo parámetro sysctl tcp_tw_reuse_delay, que actúa en asociación con el espacio de nombres (network namespace) y permite definir la demora antes de que el sistema pueda reutilizar el número de puerto de red después de cerrar el socket TCP.
- Se ha añadido posibilidad de seleccionar un proveedor de tiempo preciso (PTP) para la creación de marcas de tiempo en los niveles PHY y MAC.
- Para IPsec se ha implementado soporte para el mecanismo de agregación y fragmentación de paquetes IP encapsulados – IP-TFS/AGGFRAG (Seguridad de Flujo de Tráfico IP/Modo de Agregación y Fragmentación para la Carga Única de Seguridad).
- En el sistema de sockets de red se ha añadido soporte transmisión de información sobre la prioridad (SO_PRIORITY) en forma de mensajes de control (cmsg). Para sockets de red se ha añadido opción SO_RCVPRIORITY, que incluye en la función recvmsg() la transmisión de información sobre la prioridad del socket.
- Hardware
- Se añadió un motor amdxdna para aceleradores NPU (Unidad de Procesamiento Neural) integrados en CPU AMD basados en la arquitectura XDNA, diseñados para acelerar operaciones relacionadas con el aprendizaje automático. La NPU basada en la arquitectura XDNA se ofrece en las series 7040 y 8040 de procesadores AMD Ryzen, aceleradores AMD Alveo V70 y SoC AMD Versal.
- En el controlador i915 agregados identificadores de nuevas GPU, se ha implementado un manejador de fallos de inicialización de HDMI, se ha mejorado la fiabilidad de reinicio de los motores GPU en sistemas Haswell y anteriores.
- Se ha continuado trabajo en el controlador drm (Gestor de Renderizado Directo) Xe para GPU basadas en la arquitectura Intel Xe, que se utiliza en las tarjetas gráficas Intel de la familia Arc y en gráficos integrados, comenzando con los procesadores Tiger Lake.
- En el controlador Nouveau se ha añadido la capacidad de transferir buffers con logs de GSP-RM a través de debugfs.
- En el controlador AMDGPU se ha implementado el soporte para el mecanismo DRM panic, que muestra un parecido a la 'pantalla azul de la muerte' en caso de fallos. Se ha continuado la preparación para el soporte de la futura serie de tarjetas gráficas Radeon RX 9000 basadas en la arquitectura RDNA4. Se ha actualizado el soporte para DCN 3.5, GG 9.5, IH 4.4, PSP 13.x, SMU 13.x, VCN 5.x, JPEG 5.x, GC 12.x, DC FAMS, RAS e ISP.
- En el controlador DRM msm (GPU Qualcomm Adreno) se ha añadido soporte para la plataforma Qualcomm SM6150 (QCS615).
- En el controlador DRM panfrost se ha añadido soporte para SoC MediaTek MT8188 con GPU Mali-G57.
- En el controlador DRM vc4 se ha añadido soporte para SoC Broadcom BCM2712 (Raspberry Pi 5).
- En el controlador vfio nvgrace-gpu se ha añadido soporte de los chips NVIDIA Grace Blackwell 200.
- En la composición activado controlador para controladores Intel THC (Controlador de Anfitrión Táctil), utilizado para la interacción con pantallas táctiles y touchpads en algunos portátiles. Se ha añadido soporte para dispositivos Wacom con interfaz PCI. Se ha añadido soporte para controladores de juegos de QH Electronics.
- Se ha añadido soporte Plataformas ARM, SoC y dispositivos: Qualcomm Snapdragon 8 Elite (SM8750), Qualcomm Snapdragon AR2 (SAR2130P), Qualcomm IQ6/IQ8, Snapdragon 425 (MSM8917), Samsung Exynos 9810, Blaize BLZP1600, Microchip SAMA7D65, Renesas R-Car V4H ES3.0, Renesas RZ/G3E. Se ha añadido soporte para SoC SpacemiT K1 basado en la arquitectura RISC-V.
- En el subsistema de sonido ALSA para MIDI 2.0 se han ampliado API rawmidi y secuenciador. En la API para externalizar operaciones de compresión a la tarjeta de sonido, se ha añadido soporte para ASRC (Conversión Asincrónica de Frecuencia de Muestreo).
- Se ha añadido soporte para sistemas de sonido de dispositivos Allwinner suinv F1C100s, Awinc AW88083, Realtek ALC5682I-VE, TAS2781, Focusrite Scarlett 4th Gen 16i16, 18i16 y 18i20. Se ha añadido soporte para auriculares inalámbricos SteelSeries Arctis 9.
Fuente: linux.org.ru
