Después de dos meses de desarrollo, Linus Torvalds presentó el lanzamiento del núcleo de Linux 6.0. El cambio significativo en el número de versión se realizó por razones estéticas y es un paso formal que elimina la incomodidad debido a la acumulación de un gran número de lanzamientos en la serie (Linus bromeó diciendo que la razón del cambio de número es que se le están acabando los dedos de las manos y los pies para contar los números de versión). Entre los cambios más notables se encuentran: soporte para escritura asincrónica en búfer en XFS, controlador de bloques ublk, optimización del planificador de tareas, mecanismo de verificación de la integridad del núcleo, soporte para el cifrador de bloques ARIA.
Novedades principales en el núcleo 6.0:
- Subsistema de disco, entrada/salida y sistemas de archivos
- Se ha añadido soporte para escritura asincrónica en búfer en el sistema de archivos XFS utilizando el mecanismo io_uring. Las pruebas de rendimiento realizadas con la herramienta fio (1 hilo, tamaño de bloque de 4 KB, 600 segundos, escritura secuencial) muestran un aumento en el número de operaciones de entrada/salida por segundo (IOPS) de 77k a 209k, velocidad de transferencia de 314 MB/s a 854 MB/s, y una reducción en la latencia de 9600 ns a 120 ns (80 veces).
- En el sistema de archivos Btrfs se ha implementado la segunda versión del protocolo para el comando "send", añadiendo soporte para metadatos adicionales, envío de datos en bloques más grandes (más de 64K) y transmisión de extensiones en formato comprimido. Se ha incrementado notablemente (hasta 3 veces) el rendimiento de las operaciones de lectura directa (direct read) gracias a la lectura simultánea de hasta 256 sectores. Se han reducido los conflictos de bloqueos y acelerado la verificación de metadatos al reducir los metadatos reservados para elementos diferidos.
- Se han añadido nuevas operaciones ioctl EXT4_IOC_GETFSUUID y EXT4_IC_SETFSUUID al sistema de archivos ext4 para extraer o establecer el identificador UUID almacenado en el superbloque.
- En el sistema de archivos F2FS se ha propuesto un modo de bajo consumo de memoria, que optimiza el trabajo en dispositivos con poca memoria RAM y permite reducir el consumo de memoria a costa de un descenso en el rendimiento.
- Se ha añadido soporte para la autenticación de dispositivos NVMe.
- En servidor En NFSv4 se ha implementado un límite en el número de clientes activos, que se establece en 1024 clientes permitidos por cada gigabyte de memoria RAM en el sistema.
- En la implementación del cliente CIFS se ha mejorado el rendimiento en el modo de transmisión multipunto.
- Se ha añadido una nueva bandera FAN_MARK_IGNORE al subsistema de seguimiento de eventos en el sistema de archivos fanotify para ignorar eventos específicos.
- En el sistema de archivos Overlayfs, al montar sobre un sistema de archivos con mapeo de identificadores de usuario, se ha asegurado un soporte adecuado para listas de control de acceso compatibles con POSIX.
- Se ha añadido un controlador de bloques ublk que traslada la lógica específica a un proceso en segundo plano en el espacio de usuario y utiliza el subsistema io_uring.
- Memoria y servicios del sistema
- Se han agregado nuevas capacidades al subsistema DAMON (Data Access MONitor), lo que permite no solo rastrear el acceso de los procesos a la memoria RAM desde el espacio de usuario, sino también influir en la gestión de memoria. En particular, se ha propuesto un nuevo módulo 'LRU_SORT', que asegura la reorganización de listas LRU (Least Recently Used) para dar mayor prioridad a ciertas páginas de memoria.
- Se ha implementado la posibilidad de crear nuevas regiones de memoria utilizando las capacidades del bus CXL (Compute Express Link), que se utiliza para organizar la interacción de alta velocidad entre la CPU y los dispositivos de memoria. CXL permite conectar nuevas regiones 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 persistente (PMEM).
- Se han resuelto problemas de rendimiento en sistemas con procesadores AMD Zen, causados por un código añadido hace 20 años para sortear un problema de hardware en algunos chipsets (se añadía una instrucción adicional WAIT que ralentizaba el procesador para que el chipset pudiera entrar en estado de inactividad). Este cambio provocaba una reducción del rendimiento en cargas de trabajo que alternaban frecuentemente entre los estados de inactividad (idle) y actividad (busy). Por ejemplo, tras desactivar el bypass, las puntuaciones medias en la prueba tbench aumentaron de 32191 MB/s a 33805 MB/s.
- Se ha eliminado el código heurístico del planificador de tareas, que aseguraba la migración de procesos a las CPU menos cargadas, teniendo en cuenta la ganancia prevista en el consumo de energía. Los desarrolladores concluyeron que la heurística no aportaba el beneficio adecuado y que era más fácil trasladar los procesos sin evaluaciones adicionales cada vez que tal traslado pudiera potencialmente reducir el consumo de energía (por ejemplo, cuando la CPU objetivo se encuentra en un nivel de menor consumo de energía). La desactivación de la heurística ha llevado a una disminución del consumo de energía durante la ejecución de tareas intensivas; por ejemplo, en la prueba de decodificación de video, el consumo de energía disminuyó un 5,6%.
- Se ha optimizado la distribución de tareas en núcleos de CPU en sistemas grandes, lo que ha permitido aumentar el rendimiento en algunos tipos de carga.
- En la interfaz de entrada/salida asíncrona io_uring se ha propuesto un nuevo flag IORING_RECV_MULTISHOT, que permite usar el modo "multi-shot" con la llamada al sistema recv() para realizar varias operaciones de lectura a la vez desde un socket de red. En io_uring también se ha implementado soporte para la transmisión de red sin intermediar buffers (zero-copy).
- Se ha implementado la posibilidad de poner programas BPF, adjuntos a uprobe, en estado de sueño. Además, se ha añadido un nuevo iterador ksym en BPF para trabajar con tablas de símbolos del núcleo.
- Se ha eliminado la interfaz obsoleta "efivars" en sysfs, destinada al acceso a las variables de inicio de UEFI (ahora se utiliza ampliamente el sistema de archivos virtual efivarfs para acceder a los datos EFI).
- Se han implementado nuevos informes en la utilidad perf para analizar conflictos de bloqueo y el tiempo que pasa la CPU ejecutando componentes del núcleo.
- Se ha eliminado la configuración CONFIG_CC_OPTIMIZE_FOR_PERFORMANCE_O3, que permitía compilar el núcleo en modo de optimización "-O3". Se señala que los experimentos con modos de optimización pueden realizarse mediante la transmisión de flags durante la compilación ("make KCFLAGS=-O3"), y que para agregar la configuración en Kconfig es necesario garantizar un perfil de rendimiento repetible que demuestre que la implementación de ciclos en modo "-O3" ofrece beneficios en comparación con el nivel de optimización "-O2".
- Se añadió una interfaz debugfs para obtener información sobre el funcionamiento de los 'memory shrinkers' (controladores invocados en caso de escasez de memoria que empaquetan las estructuras de datos del núcleo para reducir su consumo de memoria).
- Se implementó soporte para el bus PCI en las arquitecturas OpenRISC y LoongArch.
- Se implementó la extensión 'Zicbom' para la arquitectura RISC-V, que gestiona dispositivos con DMA no coherente con la caché.
- Virtualización y seguridad
- Se añadió un mecanismo de verificación RV (Verificación en Tiempo de Ejecución) para comprobar la corrección del funcionamiento en sistemas de alta fiabilidad, garantizando la ausencia de fallos. La verificación se realiza en tiempo de ejecución al adjuntar controladores a puntos de seguimiento que comparan el curso real de la ejecución con un modelo de máquina determinista predefinido que define el comportamiento esperado del sistema. La verificación con el modelo en tiempo de ejecución se posiciona como un método más ligero y fácil de implementar en la práctica para confirmar la corrección de la ejecución en sistemas críticos, complementando los métodos clásicos de confirmación de fiabilidad. Las ventajas de RV incluyen la capacidad de proporcionar una verificación estricta sin implementar todo el sistema en un lenguaje de modelado, así como una respuesta flexible a eventos imprevistos.
- Se integraron componentes del núcleo para gestionar enclaves basados en la tecnología Intel SGX2 (Software Guard eXtensions), que permite a las aplicaciones ejecutar código en áreas de memoria cifradas e isoladas, cuyo acceso por parte del resto del sistema está restringido. La tecnología Intel SGX2 es compatible con los chips Intel Ice Lake y Gemini Lake y difiere de Intel SGX1 al incluir instrucciones adicionales para la gestión dinámica de la memoria de los enclaves.
- Para la arquitectura x86 se implementó la posibilidad de pasar semillas al generador de números pseudoaleatorios a través de la configuración del cargador.
- Se añadió una funcionalidad en el módulo LSM SafeSetID para gestionar cambios realizados mediante la llamada setgroups(). SafeSetID permite a los servicios del sistema gestionar usuarios de manera segura sin elevación de privilegios (CAP_SETUID) y sin obtener los derechos del usuario root.
- Se añadió soporte para el cifrador por bloques ARIA.
- En el módulo de gestión de seguridad basado en BPF, se añadió la posibilidad de adjuntar controladores a procesos individuales y grupos de procesos (cgroup).
- Se ha añadido un mecanismo con implementación de watchdog para determinar bloqueos en los sistemas invitados basándose en el monitoreo de la actividad de vCPU.
- Subsistema de red
- Se han añadido controladores en el subsistema BPF para la generación y verificación de SYN cookies. También se ha añadido un conjunto de funciones (kfunc) para acceder y modificar el estado de las conexiones.
- Se ha añadido soporte en la pila inalámbrica para el mecanismo MLO (Operación de Vínculo Múltiple), definido en la especificación WiFi 7, que permite que los dispositivos envíen y reciban datos simultáneamente utilizando diferentes bandas de frecuencia y canales, por ejemplo, para establecer múltiples canales de comunicación entre el punto de acceso y el dispositivo cliente al mismo tiempo.
- Se ha mejorado el rendimiento de la implementación integrada en el núcleo del protocolo TLS.
- Se ha añadido un parámetro de línea de comandos del núcleo «hostname=», que permite establecer el nombre del host en una etapa temprana de arranque, antes de que se inicien los componentes del espacio de usuario.
- Hardware
- En el controlador i915 (Intel) se ha añadido soporte para las tarjetas gráficas discretas Intel Arc (DG2/Alchemist) A750 y A770. Se ha propuesto una implementación inicial del soporte para GPU Intel Ponte Vecchio (Xe-HPC) y Meteor Lake. Se ha continuado trabajando en el soporte de la plataforma Intel Raptor Lake.
- En el controlador amdgpu se ha seguido trabajando para proporcionar soporte para las plataformas AMD RDNA3 (RX 7000) y CDNA (Instinct).
- En el controlador Nouveau, se ha reestructurado el código de soporte para los motores de visualización de la GPU NVIDIA nv50.
- Se ha añadido un nuevo controlador DRM logicvc para pantallas LogiCVC.
- En el controlador v3d (para GPU Broadcom Video Core), se ha implementado soporte para placas Raspberry Pi 4.
- En el controlador msm se ha añadido soporte para la GPU Qualcomm Adreno 619.
- En el controlador Panfrost se ha añadido soporte para la GPU ARM Mali Valhall.
- Se ha añadido soporte inicial para los procesadores Qualcomm Snapdragon 8cx Gen3, utilizados en laptops Lenovo ThinkPad X13s.
- Se han añadido controladores de sonido para las plataformas AMD Raphael (Ryzen 7000), AMD Jadeite, Intel Meteor Lake y Mediatek MT8186.
- Se ha añadido soporte para aceleradores de sistemas de aprendizaje automático Intel Habana Gaudi 2.
- Se ha añadido soporte para ARM SoC Allwinner H616, NXP i.MX93, Sunplus SP7021, Nuvoton NPCM8XX, Marvell Prestera 98DX2530, Google Chameleon v3.
Simultáneamente, la Fundación Latinoamericana de Software Libre ha formado una variante completamente libre del núcleo 6.0: Linux-libre 6.0-gnu, libre de elementos de firmware y controladores que contienen componentes no libres o trozos de código cuyo uso está limitado por el fabricante. En esta nueva versión, se ha deshabilitado el uso de blobs en el controlador CS35L41 HD-audio y en el controlador UCSI para microcontroladores STM32G0. Se ha realizado una limpieza de los archivos dts para los chips Qualcomm y MediaTek. Se ha redefinido la desactivación de blobs en el controlador MediaTek MT76. Se ha actualizado el código de limpieza de blobs en los controladores y subsistemas AMDGPU, Adreno, Tegra VIC, Netronome NFP y Habanalabs Gaudi2. Se ha detenido la limpieza del controlador VXGE, eliminado del núcleo.
Fuente: opennet.ru
