Versión del kernel Linux 6.17

Tras dos meses de desarrollo, Linus Torvalds lanzó el núcleo. Linux 6.17. Entre los cambios más notables: rendimiento mejorado de Btrfs, llamadas al sistema file_getattr() y file_setattr(), unificación de configuraciones de procesador único y multiprocesador en el planificador de tareas, módulo DAMON_STAT con estadísticas de acceso a memoria, soporte para parches Live en sistemas ARM64, envío de volcados de núcleo a través del socket AF_UNIX, limitación de SCHED_EXT a través de cgroup, configuración simplificada de protección contra vulnerabilidades de CPU, compilación en Clang con inicialización de variables en la pila, protección contra suplantación de /proc, extensión del subsistema RV (Verificación en tiempo de ejecución), limitación de sockets AF_UNIX a través de AppArmor, el algoritmo de control de congestión TCP DualPI2.

La nueva versión incorpora 14 334 correcciones realizadas por 2118 desarrolladores, con un tamaño de parche de 46 MB (los cambios afectaron a 12 841 archivos, añadiendo 646 654 líneas de código y eliminando 398 782). La versión anterior incluía 15 924 correcciones realizadas por 2145 desarrolladores, con un tamaño de parche de 50 MB. Aproximadamente el 43 % de los cambios en la versión 6.17 están relacionados con controladores de dispositivos, aproximadamente el 12 % con actualizaciones de código específicas de arquitecturas de hardware, el 14 % con la pila de red, el 4 % con los sistemas de archivos y el 3 % con los subsistemas internos del kernel.

Principales novedades del kernel 6.17 (1, 2, 3):

  • Subsistema de disco, E/S y sistemas de archivos
    • Btrfs ahora ofrece compatibilidad experimental con folios grandes, lo que reduce la sobrecarga y mejora el rendimiento de ciertas operaciones. Se ha implementado el almacenamiento en caché de solicitudes a mapas de bits de asignación de espacio libre, lo que aumenta el rendimiento de la creación de archivos vacíos en un 20 %. Se ha mejorado el rendimiento de lectura anticipada en sistemas que utilizan compresión de datos. Las claves en la estructura XArray ahora están empaquetadas con mayor densidad, lo que aumenta la compacidad de almacenamiento de los nodos del árbol de extensiones y reduce el número de nodos hoja entre un 50 y un 70 %. Se han añadido ajustes de compresión adicionales para las extensiones desfragmentadas.
    • El sistema de archivos ext4 ahora admite E/S en búfer con el indicador RWF_DONTCACHE, que hace que los datos se eliminen de la memoria caché de página inmediatamente después de que se completa la operación.
    • El sistema de archivos EROFS ahora admite la compresión de metadatos.
    • El servidor NFS ahora puede delegar operaciones de escritura a clientes que abren archivos en modo de solo escritura.
    • Se ha añadido la bandera FALLOC_FL_WRITE_ZEROES a la llamada del sistema fallocate(). Esta bandera permite rellenar con ceros un rango específico de un archivo mediante el comando WRITE_ZERO, compatible con algunos SSD y que realiza el rellenado con ceros sin operaciones de E/S. Actualmente, esta opción solo está disponible en sistemas de archivos ext4.
    • Se agregaron llamadas al sistema file_getattr() y file_setattr() para manipular los atributos de inodo de un archivo determinado.
    • Se ha eliminado el controlador "pktcdvd" para trabajar con medios ópticos en modo por lotes, que se marcó como obsoleto en 2016.
    • Sistema de archivos Bcachefs en el kernel Linux Bcachefs se ha trasladado al modo de mantenimiento externo, lo que significa que los cambios en Bcachefs ya no se aceptarán en el núcleo principal, mientras que el sistema de archivos permanecerá en el código fuente del núcleo. El desarrollo de Bcachefs se llevará a cabo fuera del código fuente del núcleo hasta que Kent Overstreet demuestre su capacidad para interactuar correctamente con otros desarrolladores del núcleo y cumplir con las directrices de desarrollo establecidas.
  • Servicios de memoria y sistema.
    • Se ha eliminado la compatibilidad con configuraciones de un solo procesador del programador de tareas. En sistemas con un solo procesador, ahora se deben usar kernels diseñados para sistemas multiprocesador (SMP). El código para sistemas de un solo procesador y multiprocesador se ha unificado y se han eliminado las dependencias innecesarias del parámetro de kernel CONFIG_SMP.
    • Se ha añadido el módulo de kernel DAMON_STAT (Data Access Monitoring Results Stat). Permite supervisar el acceso a la RAM mediante el subsistema DAMON (Data Access MONitor). El módulo proporciona estadísticas sobre la inactividad (percentiles de ms de inactividad de memoria) y el ancho de banda de memoria estimado (ancho de banda de memoria estimado).
    • En los sistemas con arquitectura ARM64, se ha implementado la compatibilidad con parches en vivo, lo que permite aplicar correcciones al kernel. Linux sobre la marcha, sin reiniciar ni detener el sistema.
    • En la biblioteca C minimalista nolibc, suministrada con el código fuente del kernel. Linux y proporciona una capa de abstracción sobre las llamadas básicas al sistema, compatible con las arquitecturas SuperH, x32, MIPS n32 y MIPS n34.
    • Se ha ampliado la capacidad de enviar contenido de volcado de memoria a través del socket AF_UNIX, lo que permite la creación de controladores de volcado de memoria más seguros en el espacio de usuario que no dependen de que el núcleo invoque procesos privilegiados. La nueva versión añade un protocolo para crear... servidores, capaz de gestionar el procesamiento de volcados de memoria a nivel de tarea. Por ejemplo, los volcados de memoria pueden ignorarse para algunos procesos, mientras que para otros se pasan a través de un socket. Se ha desarrollado un prototipo de servidor independiente para la gestión de volcados de memoria.
    • Se agregó la opción de línea de comando del kernel "crashkernel=size,cma" para reservar espacio de memoria a través de CMA (Asignador de memoria contigua) para almacenar volcados de memoria del kernel.
    • El mecanismo pidfd se ha ampliado para permitir el uso de identificadores específicos de proceso que, a diferencia de pid, no son reasignables. Se ha añadido la posibilidad de vincular atributos extendidos a pidfd desde el espacio de usuario. Ahora es posible abrir descriptores de archivo para pidfd mediante la función open_by_handle_at() sin vincularlos al sistema de archivos. La información interna creada por el núcleo con pidfd ahora se vincula al proceso, no a pidfd, y se conserva entre las reaperturas del mismo proceso.
    • Se ha añadido al subsistema BPF la función bpf_cgroup_read_xattr() para leer atributos extendidos de archivos. Los programas BPF ahora admiten operaciones de cadena estándar como bpf_strcmp, bpf_strnchr, bpf_strchrnul, bpf_strlen y bpf_strspn, que operan en modo de solo lectura. Los flujos estándar de salida estándar (stdout) y salida estándar (stderr) ahora permiten interactuar con componentes del espacio de usuario. En sistemas basados ​​en la arquitectura LoongArch, BPF ahora admite la modificación dinámica de código, el mecanismo de trampolín BPF (que reduce la sobrecarga de llamadas entre el núcleo y los programas BPF) y el lanzamiento de programas que utilizan struct_ops para crear controladores de funciones del núcleo mediante BPF.
    • El sistema de cronometraje ahora admite relojes auxiliares, que no están conectados al reloj del sistema regular y funcionan a su propio ritmo (anteriormente, todos los relojes funcionaban al mismo ritmo y solo se diferenciaban en su desfase).
    • Se agregó compatibilidad inicial con la Ejecución de Proxy para mitigar problemas de inversión de prioridad. La ejecución de proxy permite que una tarea que espera la liberación de un bloqueo transfiera su contexto de ejecución a la tarea que lo mantiene, acelerando así su liberación.
    • Continuación de la migración de cambios desde la rama Rust-for-Linux, relacionado con el uso de Rust como segundo lenguaje para el desarrollo de controladores y módulos del kernel (el soporte para Rust no está activo por defecto y no hace que Rust se incluya entre las dependencias de compilación del kernel requeridas). Se han añadido abstracciones para gestionar reguladores de voltaje y corriente, propiedades del firmware, recursos de E/S y memoria de E/S. Se ha implementado la macro "warn_on!()". Se ha añadido el tipo UserPtr para punteros en el espacio de usuario. Se ha ampliado la funcionalidad de los módulos workqueue, uaccess, dma, time y list. Se ha añadido el módulo 'bits' con las funciones 'bit' y 'genmask'.
    • Se ha rediseñado el código para calcular las sumas de comprobación CRC y se han añadido nuevas llamadas para generar hashes SHA-1 y SHA-2. Se han añadido optimizaciones específicas para hardware. Se ha mejorado el rendimiento de la función crc32c() en las nuevas CPU x86_64 compatibles con la extensión VPCLMULQDQ (Multiplicación de Palabras Cuadruples sin Acarreo Vectorial).
    • Para los sistemas S390, se ha implementado soporte para intercambiar y migrar páginas de memoria grandes (página enorme transparente).
    • Se añadió la posibilidad de configurar la intensidad de la recuperación de páginas de memoria (recuperación proactiva) para nodos NUMA específicos cuando la memoria es insuficiente. Esto permite seleccionar nodos NUMA para los que se aplicará una recuperación de memoria más agresiva. Por ejemplo, "echo "512M swappiness=10" > /sys/devices/system/node/node1/reclaim."
    • El mecanismo SCHED_EXT, que permite usar BPF para crear programadores de CPU, ahora permite gestionar el rendimiento mediante cgroups. Por ejemplo, el parámetro cpu.max permite limitar la carga de la CPU.
    • El montaje automático del sistema de archivos virtual tracefs en el directorio /sys/kernel/debug/tracing ha quedado obsoleto; en su lugar se debe utilizar /sys/kernel/tracing.
  • Virtualización y seguridad
    • Se agregó la capacidad de habilitar Protección contra vulnerabilidades de la CPU mediante la selección de vectores de ataque bloqueables En lugar de especificar vulnerabilidades específicas en la configuración, los métodos de bloqueo se seleccionan según el tipo de violación del aislamiento: entre el usuario y el kernel (usuario-kernel), entre el usuario y otro usuario (usuario-usuario), entre el sistema invitado y el entorno host (invitado-host), entre diferentes sistemas invitados (invitado-invitado) y entre diferentes subprocesos (entre subprocesos). El enfoque propuesto permite activar la protección únicamente contra las clases de vulnerabilidad que realmente preocupan al usuario. Por ejemplo, los propietarios de entornos de nube pueden habilitar los modos invitado-host e invitado-invitado, lo que activará los métodos de protección contra las siguientes vulnerabilidades: BHI, GD, L1TF, MDS, MMIO, Retbleed, RFDS, Spectre_v2, SRBDS, SRSO y TAA.
    • Se añadió compatibilidad para compilar con el compilador Clang mediante el modo de seguimiento de profundidad de pila, que inicializa todas las variables almacenadas en la pila. Esta inicialización evita fugas de información del kernel a través de variables no inicializadas que podrían contener restos de datos previamente almacenados en la pila. Anteriormente, se ofrecía una función similar mediante el complemento STACKLEAK GCC.
    • Se añadió protección contra atacantes que suplantan el sistema de archivos /proc mediante el montaje en modo "bind". El número de inodo raíz de /proc ahora es fijo (PROCFS_ROOT_INO) y puede verificarse mediante un proceso de espacio de usuario.
    • El subsistema RV (Verificación en Tiempo de Ejecución), diseñado para verificar el correcto funcionamiento de sistemas altamente confiables, se ha actualizado con el componente de monitoreo rtapp (Monitor de Aplicaciones en Tiempo Real) para el seguimiento de problemas comunes en aplicaciones en tiempo real, así como con los componentes rp, sssw y opid para probar el programador de tareas. Se ha implementado la capacidad de crear componentes de monitoreo que utilizan lógica temporal lineal para determinar el modelo de comportamiento en lugar de un autómata determinista. La verificación se realiza en tiempo de ejecución mediante la asociación de controladores a los puntos de seguimiento, que comparan el progreso de la ejecución real con un modelo de referencia predefinido que define el comportamiento esperado del sistema.
    • El sistema AppArmor se ha actualizado para admitir el control de acceso para sockets AF_UNIX.
    • El hipervisor KVM en los sistemas ARM implementa soporte para el controlador de interrupciones GICv5.
    • Se agregó la configuración CONFIG_KVM_IOAPIC para deshabilitar el soporte para la emulación APIC, PIC y PIT en KVM.
    • Se agregó protección contra la vulnerabilidad VMSCAPE.
    • Se agregó el comando ioctl FS_IOC_GETLBMD_CAP para obtener información del espacio del usuario sobre la aplicación de herramientas de protección de integridad a un archivo.
    • La interfaz /sys/fs/selinux/user ha quedado obsoleta; acceder a ella ahora introduce un retraso de cinco segundos e imprime una advertencia en el registro.
  • Subsistema de red
    • La implementación de la tecnología PSE (Equipo de Suministro de Energía), utilizada para suministrar energía a través de Ethernet a dispositivos como cámaras IP y puntos de acceso inalámbricos, se ha mejorado con la compatibilidad con estrategias configurables de presupuesto de energía (potencia total disponible). Estas estrategias permiten priorizar los puertos que deben desactivarse para evitar sobrecargas.
    • La implementación de MCTP (Protocolo de Transporte de Componentes de Administración) ahora admite el enrutamiento de puerta de enlace. Por ejemplo, las siguientes reglas enrutan paquetes al ID de punto final 10 a través del dispositivo mctpi2c0 utilizando la dirección 0x1d, que está asignada directamente al ID de punto final 9. mctp route add 9 via mctpi2c0 mctp neigh add 9 dev mctpi2c0 lladdr 0x1d mctp route add 10 gw 9
    • Para los sockets UNIX (AF_UNIX), se implementa la opción SO_INC, y para la familia de direcciones VSOCK, la opción SIOCINQ. Estas opciones son similares a la opción TCP_INQ para TCP y permiten obtener información sobre el número de bytes disponibles para lectura en el socket mediante un mensaje de control.
    • TCP ahora aplica estrictamente el tamaño de la ventana de recepción anunciada, lo que determina la cantidad de datos que se pueden enviar antes de recibir un acuse de recibo del otro extremo. Anteriormente, el kernel continuaba procesando los datos que llegaban más allá de la ventana de recepción anunciada, pero ahora dejará de hacerlo.
    • MPTCP (Multipath TCP) ahora admite la opción de socket TCP_MAXSEG para limitar el tamaño máximo de los segmentos enviados. MPTCP es una extensión del protocolo TCP para la entrega simultánea de paquetes por múltiples rutas a través de diferentes interfaces de red vinculadas a diferentes direcciones IP.
    • Se agregó soporte para el algoritmo de control de congestión TCP DualPI2 (RFC 9332), que permite el uso de controladores de congestión escalables para tráfico con requisitos de alta calidad de servicio (como TCP-Prague y DCTCP) sin causar degradación del rendimiento del tráfico clásico manejado por controladores de congestión como Reno y Cubic.
    • Se agregó sysctl "force_forwarding" que se puede utilizar para habilitar el reenvío de tráfico en interfaces de red IPv6 seleccionadas.
    • Se ha eliminado la compatibilidad con el algoritmo de detección de pérdida de paquetes SACK (Reconocimiento Selectivo) descrito en la RFC 6675. Este algoritmo quedó obsoleto en 2018. Se recomienda utilizar el algoritmo RACK-TLP para detectar la pérdida de paquetes TCP.
  • Equipo
    • Se ha continuado el trabajo en el controlador Xe DRM (Direct Rendering Manager) para GPU basadas en la arquitectura Intel Xe, utilizada en tarjetas gráficas y gráficos integrados de la serie Intel Arc, comenzando con los procesadores Tiger Lake. La nueva versión habilita la compatibilidad con chips basados ​​en la microarquitectura Panthor Lake de forma predeterminada y añade compatibilidad con la microarquitectura WildCat Lake.
    • El controlador AMDGPU para GPU GFX9.x ahora es compatible con el mecanismo Cleaner Shader, que limpia la memoria de la GPU antes de reutilizarla para evitar fugas de datos de otro proceso. Se ha mejorado la compatibilidad con el modo de espera. Se ha añadido la posibilidad de entrar en modo de espera en entornos AMD SR-IOV. Se ha mejorado el control de la retroiluminación.
    • El controlador i915 ahora es compatible con el mecanismo drm_panic, que muestra un mensaje de error similar a una "pantalla azul de la muerte" cuando se produce un fallo. Se ha añadido compatibilidad con el controlador de pantalla utilizado en la familia de chips Wildcat Lake.
    • Se ha continuado la integración 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. La nueva versión añade una capa de abstracción para DMA, implementa un analizador VBIOS, añade código para configurar el framebuffer y ofrece compatibilidad con la carga acelerada en modo Falcon.
    • El controlador adreno se ha actualizado para admitir las GPU Qualcomm Adreno x1-45 y x1-85.
    • El controlador msm ahora admite la GPU Adreno SM8750 y el mapeo de memoria de video (VM_BIND).
    • El controlador panfrost se ha actualizado para admitir las GPU Mali utilizadas en el SoC Mediatek mt8370.
    • El controlador Lima se ha actualizado para admitir las GPU utilizadas en el SoC Rockchip RK3528.
    • Se agregó el controlador mtd (dispositivos de tecnología de memoria) para acceder a la memoria NVM integrada en las GPU Intel.
    • Se agregó soporte para los siguientes sistemas de sonido: ASoC IMX WM8524, AMD ACP7.2, SoundWire ACP 7.1, Fairphone 4 y 5, Qualcomm QCS8275, Framework Laptop 13 (AMD Ryzen AI 300), CS35L41 HDA (usado en portátiles ASUS), Richtek RTQ9124, TI TAS5753, HP EliteBook x360 830 G6, EliteBook 830 G6, LG 16Z90R-A, HP 15-fc000. Se ha reorganizado el código de audio HD.
    • Se agregó soporte para placas ARM, SoC y dispositivos: NVIDIA Tegra264, Marvell PXA1908 (el primer chip de 64 bits de Marvell para teléfonos inteligentes), CIX P1, Axiado AX3000, Sophgo SG2000 (combina núcleos ARM y RISC-V), Mediatek mt6572, exynos2200 (usado en Samsung Galaxy S22), Renesas R-Car V4M-7, TI am62d2 y Sophgo sg2042, computadoras portátiles basadas en Mediatek mt8186 y Qualcomm Snapdragon X1, teléfonos inteligentes y tabletas basados ​​en SoC mt6572, tegra30 y msm8976.

Al mismo tiempo, la Fundación Latinoamericana de Software Libre creó una versión del kernel 6.17 completamente libre. Linux-libre 6.17-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.17 incluye código de limpieza de blobs actualizado en los controladores amdgpu, prueth, iwlwifi, btusb, pci mhi host, adreno a6xx, nova-core e Intel AVS. Se han limpiado los nombres de blobs en los archivos devicetree (.dts) para chips ARM y el Intel IPU7. Se ha deshabilitado la carga de blobs en los nuevos controladores pci hda. Se ha descontinuado la limpieza de blobs en el controlador QLogic infiniband, que se ha eliminado del kernel.

Fuente: opennet.ru

Compre alojamiento confiable para sitios con protección DDoS, servidores VPS VDS 🔥 Compra alojamiento web fiable con protección DDoS, servidores VPS VDS | ProHoster