Después de dos meses de desarrollo, Linus Torvalds presentó la versión del núcleo Linux 6.8. Entre los cambios más destacados se encuentran: el controlador Xe para GPU Intel, el modo de protección de dispositivos de bloque con sistemas de archivos montados, el mecanismo del planificador de tareas Deadline server, la optimización automática de la fusión de páginas de memoria idénticas, el primer controlador en lenguaje Rust, las llamadas al sistema listmount y statmount, la eliminación de bpfilter y SLAB, el mecanismo guest_memfd en KVM, y el perfilado de acceso a los datos.
En esta nueva versión se han aceptado 15,641 correcciones de 2,018 desarrolladores, el tamaño del parche es de 44 MB (los cambios afectaron a 12,212 archivos, se añadieron 663,864 líneas de código y se eliminaron 339,094 líneas). En la versión anterior hubo 18,405 correcciones de 2,066 desarrolladores, con un tamaño de parche de 72 MB. Aproximadamente el 42% de todos los cambios presentados en 6.8 están relacionados con los controladores de dispositivos, alrededor del 15% de los cambios están vinculados a actualizaciones de código específico de arquitecturas de hardware, el 14% está relacionado con la pila de red, el 6% con sistemas de archivos y el 3% con subsistemas internos del núcleo.
En el repositorio Git del núcleo 6.8 hay 9.996 millones de objetos, lo que indica que el próximo núcleo 6.9 superará la marca simbólica de 10 millones de objetos git. Anteriormente, el cambio de números de ramas 3.x y 4.x correlacionaba bien con el número de objetos git en el repositorio: el núcleo 3.0 fue lanzado cuando había aproximadamente 2 millones de objetos en el repositorio, y el núcleo 4.0 cuando había 4 millones de objetos. Sin embargo, en 2019, la versión 5.0 rompió esta lógica, ya que al formarse el repositorio incluía aproximadamente 6.5 millones de objetos git.
Novedades principales en el núcleo 6.8:
- Subsistema de disco, entrada/salida y sistemas de archivos
- Se ha añadido un modo de bloqueo de escritura directa en dispositivos de bloque que tienen sistemas de archivos montados (una vez activado este modo, el usuario root no podrá hacer cambios en el sistema de archivos mediante manipulaciones a nivel de dispositivo de bloque). Por defecto, el modo está desactivado y requiere especificar el parámetro BLK_DEV_WRITE_MOUNTED durante la compilación. Para las particiones con Btrfs, el bloqueo aún no funciona, ya que en el código de Btrfs aún no se han aceptado los cambios necesarios.
- Se han añadido las llamadas al sistema listmount() y statmount(), que permiten obtener información detallada sobre los sistemas de archivos montados desde el espacio de usuario.
- En el sistema de archivos XFS, se continuó trabajando en la implementación de la herramienta fsck para verificar y corregir problemas en modo online, sin necesidad de desmontar el sistema de archivos.
- En Ext4, para bloques de tamaño inferior a la página de memoria, se ha utilizado la llamada dioread_nolock, que permite mejorar el rendimiento al eliminar bloqueos innecesarios. Algunas funciones han sido convertidas para utilizar folios de páginas de memoria.
- En Btrfs se añadió soporte para la opción de montaje "nospace_cache" para desactivar la caché de bloques libres. Algunas funciones han sido convertidas para utilizar folios de páginas de memoria.
- En el sistema de archivos EROFS (Extendable Read-Only File System), diseñado para su uso en particiones disponibles en modo solo lectura, se añadió soporte para la compresión de subpáginas y se mejoró el rendimiento en situaciones de escasez de memoria.
- En el sistema de archivos F2FS, se mejoró el soporte para dispositivos de almacenamiento zonificados (división en zonas de grupos de bloques o sectores donde solo se permite la adición secuencial de datos con la actualización de todo el grupo de bloques).
- Para el sistema de archivos SMB, se implementó la posibilidad de crear archivos de dispositivos de bloques y de caracteres.
- En Bcachefs, se añadió soporte parcial para la verificación y recuperación de la integridad de sistemas de archivos montados.
- En el subsistema device-mapper se ha dejado de dar soporte a los controladores MD_LINEAR, MD_MULTIPATH y MD_FAULTY, que fueron declarados obsoletos en 2021.
- Memoria y servicios del sistema
- En el subsistema Zswap se añadió una opción que se activa cuando hay falta de memoria, permitiendo la descarga forzada en el área de intercambio real de páginas de memoria "frías" que no han sido accedidas y que probablemente permanecerán sin uso. Zswap realiza la caché de las páginas que son expulsadas al área de intercambio, manteniéndolas en memoria RAM en forma comprimida, siempre que sea posible, sin volcar al área de intercambio sin comprimir en el disco. Los cambios realizados en situaciones de escasez de memoria permiten reducir el tamaño del conjunto Zswap en RAM y liberar memoria al sistema.
- En Zswap se propuso un nuevo modo que desactiva completamente la escritura diferida (writeback) en el área de intercambio real si el intento de escritura no tuvo éxito, y no vuelca las páginas ya existentes en el conjunto zswap al área de intercambio.
- Se ha añadido un mecanismo SCHED_DEADLINE server al planificador de tareas, que resuelve el problema de la falta de recursos de CPU para tareas ordinarias en condiciones de monopolización de la CPU por tareas de alta prioridad (en tiempo real). Para prevenir la monopolización de la CPU, anteriormente se utilizaba un mecanismo de Realtime throttling en el núcleo, que intentaba reservar el 5% para tareas de baja prioridad, dejando el 95% del tiempo a tareas en tiempo real. Este mecanismo dejaba mucho que desear ya que las tareas ordinarias, en muchas situaciones, no obtenían el tiempo de CPU adecuado. El SCHED_DEADLINE server implementa un mecanismo de reserva de recursos más efectivo.
- Se ha añadido un mecanismo de ajuste automático de la agresividad del consumo de memoria basado en cuotas establecidas al subsistema DAMON (Data Access MONitor), que permite rastrear el acceso de los procesos a los datos en la memoria RAM (por ejemplo, se puede saber a qué áreas de la memoria accedió un proceso y qué áreas de la memoria quedaron sin usar).
- Se ha añadido soporte para páginas de gran tamaño de múltiples tamaños de memoria (mTHP — multi-size Transparent Huge Pages), que permiten asignar memoria en bloques que son más grandes que la página base, pero más pequeños que la página THP tradicional.
- Se ha añadido soporte para grandes folios de páginas (page folios, páginas de memoria combinadas) para memoria anónima (no vinculada al sistema de archivos, por ejemplo, asignada a través de malloc). Este cambio está destinado a mejorar el rendimiento al asignar grandes bloques de memoria durante los accesos a páginas de memoria no asignadas (page faults). Por ejemplo, el uso de grandes folios permitió reducir el tiempo de recompilación del núcleo en un 5% (con una reducción del tiempo pasado en el nivel del núcleo en un 40%).
- Se ha añadido el parámetro TRANSPARENT_HUGEPAGE_NEVER al archivo de configuración del núcleo, que permite desactivar el uso de páginas de memoria grandes (Transparent Huge Pages).
- Se ha añadido la operación UFFDIO_MOVE al sistema de llamada userfaultfd(), que permite crear manejadores para accesos a páginas de memoria no asignadas (page faults) en el espacio de usuario, permitiendo mover páginas de memoria en el espacio de direcciones virtuales durante la compactación de montones (heap compaction) sin realizar la operación de asignación de páginas de memoria. En las pruebas realizadas, el uso de UFFDIO_MOVE permitió reducir en un 40% el tiempo de compactación en comparación con el uso de la operación UFFDIO_COPY.
- Se ha añadido el mecanismo «KSM advisor», que permite optimizar automáticamente los parámetros del subsistema de fusión de páginas de memoria idénticas (KSM — Kernel Samepage Merging).
- Continúa 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 de Rust no está habilitado por defecto y no lo convierte en una dependencia obligatoria para la compilación del núcleo). La nueva versión incluye cambios que añaden un enlace de Rust sobre el nivel de abstracción phylib y utiliza este enlace el controlador ax88796b_rust, que proporciona soporte para la interfaz PHY del controlador Ethernet Asix AX88772A (100MBit). En funcionalidad, el controlador en Rust es completamente equivalente al antiguo controlador ax88796b, escrito en C, y puede ser utilizado con tarjetas de red X-Surf 100 equipadas con el chip AX88796B. Para la arquitectura LoongArch se ha proporcionado la posibilidad de escribir módulos en Rust. Se ha realizado la transición al uso de la versión de Rust 1.74.1.
- Se ha añadido el mecanismo BPF token, que permite delegar selectivamente el procesamiento de características específicas de BPF, como la carga de un programa BPF o la creación de un mapa BPF, a procesos no privilegiados en el espacio de usuario, cuya validez se confirma con un token especial.
- Se ha ampliado la funcionalidad del verificador de programas BPF.
- Se ha añadido soporte para la profilación de datos a la utilidad perf, lo que permite rastrear lecturas y escrituras en estructuras de datos, por ejemplo, para identificar los campos que se modifican con mayor frecuencia en las estructuras. En sistemas con procesadores que admiten la recopilación de información sobre operaciones de memoria (Intel, AMD, ARM), se debe utilizar el comando «perf mem record» para acumular estadísticas, y para generar un informe sobre los accesos a estructuras de datos — «perf annotate —data-type».
- Se ha realizado una optimización del rendimiento en el procesamiento de llamadas al sistema en la arquitectura s390 (IBM Z), lo que ha llevado a una aceleración de aproximadamente el 11% en las pruebas de entrada a llamadas al sistema.
- Se ha proporcionado la posibilidad de cambiar el tamaño de los búferes de trazado, utilizados para almacenar información sobre eventos de trazado, que se transmiten al espacio de usuario.
- Se eliminó el mecanismo obsoleto de distribución de memoria SLAB anteriormente declarado, en su lugar, el núcleo ahora utiliza únicamente SLUB. Se mencionan problemas de mantenimiento, errores en el código y duplicación de funcionalidad con el allocador más avanzado SLUB como las razones.
- Al compilar el núcleo se activó la bandera «-Wmissing-prototypes», que genera advertencias para llamadas a funciones globales que no tienen una definición de prototipo.
- Para la arquitectura RISC-V, en sistemas que soportan la extensión SUSP, se ha implementado soporte para la transición a un modo de espera manteniendo el estado en la RAM. También se proporciona la posibilidad de usar la llamada al sistema riscv_hwprobe() para obtener información sobre las extensiones soportadas de la arquitectura del conjunto de instrucciones RISC-V.
- Virtualización y seguridad
- Se han agregado nuevas llamadas al sistema lsm_list_modules(), lsm_get_self_attr() y lsm_set_self_attr() para mostrar una lista de los módulos LSM cargados (Módulos de Seguridad de Linux) y para obtener/establecer atributos del módulo LSM. Se añadió una nueva estructura lsm_ctx para la comunicación en el contexto de LSM entre el espacio de usuario y el núcleo.
- El subsistema AppArmor ha sido actualizado para usar el algoritmo SHA-256 para la verificación de reglas, en lugar de los hashes SHA-1.
- Se ha eliminado del núcleo la implementación de la función strlcpy(), que fue incluída en la biblioteca C Glibc 3.38 durante el verano. Strlcpy es una alternativa a la función strncpy(), que incluye protección contra desbordamientos de búfer y siempre inserta un byte nulo al final de la cadena.
- En el hipervisor KVM Se añadió soporte para el subsistema guest_memfd (memoria para invitados), que proporciona funciones de gestión de memoria que permiten implementar capacidades y optimizaciones que no se pueden lograr con el uso del subsistema de gestión de memoria compartido. Por ejemplo, guest_memfd permite asignar y mapear en el sistema huésped áreas de memoria que son inaccesibles para el entorno host, lo cual puede ser utilizado para realizar cálculos confidenciales.
- Para los sistemas invitados que operan bajo el hipervisor KVM, se habilitó el soporte para el modo LAM (Enmascaramiento de Dirección Lineal) proporcionado por los procesadores Intel, que permite utilizar algunos bits de punteros de 64 bits (del 57 al 62) para almacenar metadatos no relacionados con la dirección.
- En el hipervisor KVM para sistemas basados en la arquitectura ARM64 se ha añadido soporte para direcciones físicas de 52 bits (LPA2). Para sistemas con arquitectura x86, se ofrece la opción de compilación sin emulación de hipervínculos de Hyper-V, lo que permite reducir el tamaño del núcleo.
- Se ha añadido el controlador iaa (Acelerador de Compresión IAA) para acelerar las operaciones de compresión y descompresión de datos mediante el método DEFLATE, utilizando las capacidades de los aceleradores criptográficos Intel Analytics Accelerator (IAA).
- En el entorno del host se ha implementado el soporte del mecanismo Intel TDX (Extensiones de Dominio Confiable), que permite, al utilizar el hipervisor KVM, crear entornos invitados seguros en los que se utiliza el cifrado de memoria. máquinas virtuales.
- En SELinux se ha añadido el identificador SID 'init', que permite destacar los procesos iniciados en la fase inicial de arranque, lanzados antes de la aplicación de las políticas de SELinux. Se ha mejorado la interfaz /sys/fs/selinux para la gestión de SELinux.
- Subsistema de red
- Se ha realizado una reorganización a bajo nivel de las estructuras de datos de red básicas, llevada a cabo para mejorar la eficiencia de la cache. Anteriormente, los campos en las estructuras del stack de red socks, netdev, netns y mibs se ubicaban a medida que se añadían, lo que limitaba el uso de la caché del procesador. La revisión de la colocación de variables en las estructuras ha llevado a un aumento notable de la velocidad de funcionamiento de TCP, gracias a la minimización del uso de líneas de caché en la etapa de transmisión de datos y a la optimización del acceso a las variables. En casos de procesamiento de múltiples conexiones TCP en paralelo, la aceleración puede alcanzar hasta el 40%.
- Se ha eliminado el subsistema bpfilter, que utilizaba BPF para la filtración de paquetes. Bpfilter se introdujo a partir de la versión 4.18, pero nunca llegó a ser suficientemente maduro para su uso generalizado. En los últimos años, el código de bpfilter en el núcleo no ha evolucionado, mientras que el desarrollo continuó por parte de Facebook en un repositorio separado.
- Hardware
- Se incluye un nuevo controlador drm (Direct Rendering Manager) Xe para GPU basado en la arquitectura Intel Xe, que se utiliza en las tarjetas gráficas Intel de la familia Arc y en la gráfica integrada, comenzando con los procesadores Tiger Lake. El controlador Xe se posiciona como la base para garantizar el funcionamiento de nuevos chips, desvinculado del código para soportar plataformas antiguas. El controlador se construyó utilizando una nueva arquitectura, en la que se utilizan de manera más activa los componentes existentes del subsistema DRM, así como componentes estándar del controlador i915, no vinculados a GPUs específicas, como el código para interactuar con pantallas, modelo de memoria e implementación de execbuf. En Mesa, el funcionamiento de OpenGL y Vulkan sobre el controlador Xe se implementó a nivel de cambios en los controladores existentes de Mesa Iris y ANV.
- En el controlador i915 se continúa trabajando en la implementación del soporte para los chips Intel LunarLake (Xe 2). Se ha mejorado el soporte para los chips Intel Meteor Lake.
- En el controlador Nouveau se ha implementado una configuración para usar por defecto las funciones de firmware GSP para trabajar con GPUs NVIDIA basadas en las microarquitecturas Turing y Ampere, donde las operaciones de inicialización y control de la GPU son realizadas por un microcontrolador GSP (GPU System Processor) separado. Al habilitar esta configuración, el controlador funcionará a través de llamadas al firmware, en lugar de programar directamente las operaciones de interacción con el hardware.
- En el controlador AMDGPU se ha implementado soporte para ACPI WBRF y VPE DPM, se ha modificado el manejo de la velocidad del canal PCIe, se han utilizado números de secuencia de 64 bits en las colas de sincronización, se ha añadido soporte para mecanismos de control de color específicos de AMD, y se ha solucionado un problema con la entrada en modo de suspensión.
- Se ha añadido una implementación inicial del controlador para el GPU Broadcom VideoCore 7.1, utilizado en las placas Raspberry Pi 5.
- Se ha añadido un controlador para el GPU de la serie PowerVR 6, basado en la microarquitectura Rogue de Imagination Technologies.
- Se ha añadido soporte para controladores Thunderbolt/USB4, integrados en chips basados en la microarquitectura Intel Lunar Lake.
- Se han añadido controladores para cámaras utilizadas en SoC Starfive, GalaxyCore GC2145/GC0308, Chips&Media Wave y THine THP7312.
- Se ha añadido soporte para controladores de juegos NSO (Nintendo Switch Online) — versiones de controladores antiguos de SNES (Super Nintendo), Genesis y N64 (Nintendo 64), adaptados para Nintendo Switch. Se ha añadido un controlador para los gamepads Adafruit Seesaw. En el controlador xpad se ha añadido soporte para controladores Lenovo Legion Go.
- Se ha añadido soporte para los dispositivos de juego Powkiddy RK2023, Powkiddy X55 y Anbernic RG351V en el controlador dts.
- Se ha añadido soporte para sistemas de sonido utilizados en los chips NXP i.MX8m MICFIL, Qualcomm SM8250, AMD ACP5x, Intel Arrow Lake, SM8550, SM8650 y X1E80100.
- AMD ha realizado cambios relacionados con el soporte de la futura serie de procesadores basada en la nueva microarquitectura Zen 5.
- Se ha añadido soporte para SoC ARM64: Qualcomm SM8650 (Snapdragon 8 Gen 3), Qualcomm X1E80100 (Snapdragon X Elite), Samsung Exynos Auto v920, Google GS101 (Tensor G1), MediaTek MT8188 y Unisoc UMS9620 (Tanggula 7).
- Se ha añadido soporte para plataformas y dispositivos ARM: Huashan Pi, Microsoft Lumia, HTC One Mini 2, Motorola MotoG 4G, Huawei Honor 5X/GR5, Anbernic RG351V, Powkiddy RK2023, Powkiddy X55, ComXpress basado en Marvell CN913x, Chromebook Lenovo, Asus y Acer basados en Mediatek MT8183, Toradex Verdin AM62, placas basadas en Allwinner H616/H618.
- Se ha dejado de dar soporte a los procesadores ARM11 ARMv6K SMP.
Al mismo tiempo, la Fundación Latinoamericana de Software Libre ha formado una variante completamente libre del núcleo 6.8 — Linux-libre 6.8-gnu, depurado de elementos de firmware y controladores que contenían componentes o fragmentos de código no libres, cuya utilización está limitada por el fabricante. En la versión 6.8 se ha actualizado el código de limpieza de blobs en varios controladores y subsistemas. Se ha realizado la limpieza de los controladores Intel qat_420xx, Imagination PowerVR, Intel Xe, Chips&Media Wave5, Intel VSC, Aquantia PHY y Realtek rtw8922a. Debido a la eliminación del núcleo, se ha dejado de limpiar los controladores atmel, hermes, orinoco_usb, libertas_cs y zd1201. Se ha realizado la limpieza de los nombres de blobs en los archivos dts (devicetree) para las arquitecturas ARM y Aarch64. Se han solucionado problemas con la limpieza del controlador i915.
Fuente: opennet.ru
