Luego de dos meses de desarrollo, Linus Torvalds presentó el lanzamiento del kernel Linux 6.12. Entre los cambios más notables: la capacidad de habilitar el modo en tiempo real, sched_ext para crear programadores de CPU a través de eBPF, salida de código QR en condiciones de emergencia, mecanismo TCP de memoria del dispositivo, mecanismo de reserva de recursos del servidor SCHED_DEADLINE, mejora del programador de tareas EEVDF, módulo IPE para configuración políticas de integridad.
La nueva versión incluye 14607 correcciones de 2167 desarrolladores, el tamaño del parche es de 37 MB (los cambios afectaron a 13087 archivos, se agregaron 507913 líneas de código y se eliminaron 234083 líneas). La última versión tuvo 15130 correcciones de 2078 desarrolladores, el tamaño del parche fue de 85 MB (en el kernel 6.10 el tamaño del parche fue de 41 MB). Aproximadamente el 45% de todos los cambios introducidos en 6.12 están relacionados con controladores de dispositivos, aproximadamente el 12% de los cambios están relacionados con la actualización de código específico para arquitecturas de hardware, el 13% están relacionados con la pila de red, el 6% están relacionados con sistemas de archivos y el 3% están relacionados con los subsistemas internos del núcleo.
Innovaciones clave en el kernel 6.12:
- Servicios de memoria y sistema.
- Es posible construir el kernel con la opción PREEMPT_RT sin parches adicionales para operación en tiempo real. La última característica que faltaba en el kernel y que impedía que se habilitara PREEMPT_RT era la compatibilidad con la salida atómica sin bloqueo a través de la función printk, que también está incluida en el kernel. La compatibilidad con PREEMPT_RT está disponible para arquitecturas x86, x86_64, ARM64 y RISC-V. Hasta ahora, la implementación del modo PREEMPT_RT se realizaba en forma de parches externos, sobre la base de los cuales algunas distribuciones, como RHEL, SUSE y Ubuntu, crearon ediciones separadas en tiempo real de sus productos, muy demandados en áreas como los sistemas financieros. , dispositivos de procesamiento de audio y video, y sistemas de aviación, medicina, robótica, telecomunicaciones e industriales en los que es necesario garantizar tiempos de procesamiento de eventos predecibles.
- Se ha añadido el mecanismo "sched_ext" (SCX), que permite utilizar eBPF para crear planificadores de CPU que abarcan prácticamente todos los aspectos de la planificación de tareas y la asignación de recursos de la CPU. Estos planificadores pueden cargarse y ejecutarse dinámicamente dentro del núcleo de Linux. máquina virtual eBPF. El mecanismo sched_ext simplifica la creación de planificadores específicos para cada tarea, permite experimentar con diversas técnicas y estrategias de planificación, y facilita la creación rápida de prototipos funcionales y la sustitución inmediata de planificadores en entornos de producción. Por ejemplo, con sched_ext, se puede crear un planificador que tenga en cuenta las particularidades de una aplicación específica y modifique dinámicamente su estrategia de planificación en función del estado del sistema y otros factores.
- La composición incluye la parte restante de los parches necesarios para el funcionamiento del mecanismo del servidor SCHED_DEADLINE, que resuelve el problema de la subutilización de los recursos de la CPU por tareas ordinarias cuando la CPU está monopolizada por tareas de alta prioridad (en tiempo real). Para evitar la monopolización de la CPU, el kernel utilizaba anteriormente el mecanismo de limitación en tiempo real, que intentaba reservar el 5% para tareas de baja prioridad, dejando el 95% del tiempo para tareas en tiempo real. Este mecanismo dejaba mucho que desear, ya que las tareas habituales en muchas situaciones no recibían suficiente tiempo de procesador. El servidor SCHED_DEADLINE implementa un mecanismo de reserva de recursos más eficiente.
- Se ha completado la integración del programador de tareas EEVDF (Earliest Eligible Virtual Deadline First), que reemplazó al programador CFS (Completely Fair Scheduler), suministrado a partir del kernel 2.6.23. El nuevo programador, al elegir el siguiente proceso al que transferir la ejecución, tiene en cuenta los procesos que no han recibido suficientes recursos del procesador o han recibido una cantidad injustamente grande de tiempo de procesador. En el primer caso se fuerza la transferencia del control del proceso, y en el segundo, por el contrario, se pospone. El antiguo programador CFS utilizaba heurísticas y ajustes para identificar procesos que necesitaban atención especial, mientras que el nuevo programador los rastrea de manera más explícita y no requiere ajustes. Se espera que el EEVDF reduzca los retrasos en tareas para las cuales el CFS ha tenido problemas de programación.
- En el controlador de emergencia del kernel, DRM Panic, que utiliza el subsistema DRM (Direct Rendering Manager) para mostrar un informe visual al estilo de la "pantalla azul de la muerte", la capacidad de mostrar un logotipo y un código QR con un informe de kmsg en Se ha agregado la pantalla cuando ocurre una condición de emergencia. Dado que solo caben 2953 bytes en un código QR, se proporciona la opción DRM_PANIC_SCREEN_QR_CODE_URL, en la que el informe kmsg se comprime usando zlib y se adjunta como parámetro a la URL, lo que permite transferir alrededor de 40 bytes a través del código QR V7500. Al crear paquetes con el kernel, las distribuciones pueden establecer una URL base para la URL, lo que les permitirá navegar a una página para informar un problema. Para seleccionar el formato del código QR, se proporciona la configuración DRM_PANIC_SCREEN_QR_VERSION.
- Se agregó soporte para ARM POE (Extensión de superposición de permisos), que le permite establecer derechos de acceso a áreas de memoria. Con esta extensión, en sistemas con procesadores ARM64, se puede implementar el mecanismo de claves de protección de memoria, que se utiliza para limitar el acceso a las páginas de memoria sin cambiar la tabla de páginas de memoria.
- Para las arquitecturas Loongarch, ARM64, PowerPC y s390, la implementación de la llamada al sistema getrandom() se ha movido y se ha optimizado utilizando el mecanismo vDSO (objeto virtual dinámico compartido), que permite mover el controlador de llamadas del sistema desde el kernel al usuario. espacio y evitar cambios de contexto. La optimización le permite acelerar la generación de números aleatorios hasta 15 veces.
- La capacidad de utilizar tiempos de espera absolutos, que se activan cuando se alcanza una determinada hora en el reloj del sistema, se ha agregado al subsistema de entrada/salida asíncrona io_uring (anteriormente, solo se podían establecer tiempos de espera relativos, que indicaban la duración desde el inicio de la operación). ).
- Se agregaron archivos para generar enlaces para la biblioteca libcpupower usando el kit de herramientas SWIG, que le permite generar enlaces a partir de código C/C++ para varios lenguajes de programación. Los enlaces le permiten crear scripts en Python y otros lenguajes, y usarlos para ampliar la funcionalidad de la biblioteca libcpupower, que proporciona una API para administrar cpufreq y controladores desde el espacio del usuario.
- La utilidad cpuidle muestra el valor de la "residencia" del estado inactivo, utilizado para sistemas en tiempo real y teniendo en cuenta el tiempo mínimo que el procesador debe estar en estado inactivo para justificar los costos de energía de la transición hacia y fuera de este estado.
- Se agregó la capacidad de usar el compilador Clang para construir la biblioteca C estándar nolibc, que se incluye en el código fuente del kernel de Linux y proporciona un marco para llamadas básicas al sistema. Al compilar nolibc en Clang, se permite la optimización del tiempo de enlace (LTO).
- Algunas interfaces cgroup1 han quedado obsoletas, como la contabilidad TCP, el límite suave versión XNUMX y la gestión del agotamiento de la memoria. El soporte para estas funciones permanece completo por ahora, y se advierte que se estudiará la cantidad de usuarios que continúan usando estas funciones.
- Se agregó la capacidad de configurar un búfer de seguimiento en anillo para guardar los datos acumulados después de un reinicio, lo que le permitirá no perder la información de depuración acumulada en caso de una falla del kernel. Los datos se almacenan en la memoria. La habilitación se realiza a través del parámetro de línea de comando del kernel trace_instance; por ejemplo, configurar "trace_instance=boot_map@0x285400000:12M" reservará 12 MB de memoria en 0x285400000 para el búfer "boot_map", al que se podrá acceder a través del archivo /sys/kernel /tracing/instances/boot_map.
- Migración continua de cambios de la rama Rust-para-Linux relacionados con el uso del lenguaje Rust como segundo lenguaje para desarrollar controladores y módulos del kernel (el soporte de Rust no está activo por defecto y no conduce a la inclusión de Rust entre los dependencias de ensamblaje requeridas para el kernel). Se agregaron módulos 'list' y 'rbtree' para trabajar con listas enlazadas bidireccionales y árboles rojo-negro. Se han ampliado las capacidades de los módulos 'init', 'sync', 'types' y 'error'. Es posible utilizar código Rust al construir un kernel con protección contra ataques de Spectre (opciones MITIGATION_{RETHUNK,RETPOLINE,SLS}), utilizando el sistema de depuración KASAN, kCFI (kernel Control Flow Integrity) y los mecanismos de protección Shadow Call, así como cuando se utilizan complementos adicionales GCC. Se agregó un controlador para el controlador Ethernet PHY Applied Micro QT2025, escrito en Rust. Se ha preparado un sitio web independiente con documentación: Rust.docs.kernel.org.
- La utilidad xdrgen se ha agregado al código fuente del kernel para convertir especificaciones XDR (representación de datos externos) en funciones de codificación y decodificación XDR escritas utilizando el estilo C adoptado en el kernel de Linux.
- El kernel ha sido modificado para implementar un mecanismo de enmascaramiento de puntero para reducir la cantidad de llamadas lentas a barrier_nospec() en la función copy_from_user() de 64 bits, utilizada para copiar datos al kernel desde el espacio del usuario. El uso de enmascaramiento acelera la prueba "per_thread_ops", que evalúa la cantidad de operaciones que se pueden realizar en un hilo, en un 2.6%.
- Se ha agregado un nuevo controlador USB que le permite utilizar el protocolo 9pfs como transporte para enviar y recibir datos desde un dispositivo USB al montar el sistema de archivos 9p a través de USB (por ejemplo, “mount -t 9p -o trans=usbg, aname=/ruta/a/fs /mnt/9"). Un ejemplo de uso del nuevo controlador es usarlo en lugar de NFS para organizar el arranque de la partición raíz al desarrollar dispositivos integrados.
- Subsistema de disco, E/S y sistemas de archivos
- Se ha agregado al subsistema VFS la capacidad de trabajar con dispositivos de almacenamiento cuyo tamaño de bloque es mayor que el tamaño de la página de memoria en el sistema. En los sistemas de archivos, esta característica actualmente solo es compatible con XFS.
- El subsistema FUSE, que le permite crear implementaciones de sistemas de archivos que operan en el espacio del usuario, ha agregado soporte para mapear identificadores de usuario de sistemas de archivos montados, utilizados para hacer coincidir los archivos de un usuario específico en una partición externa montada con otro usuario en la partición actual. sistema.
- Se implementó una nueva operación fcntl, F_CREATED_QUERY, que brinda a una aplicación la capacidad de determinar si un archivo abierto usando el indicador O_CREAT se creó o si ya existía antes.
- Se agregó la capacidad de usar ID de punto de montaje únicos de 64 bits a la llamada al sistema name_to_handle_at() para evitar condiciones de carrera al analizar /proc/mountinfo.
- El tamaño de la estructura de "archivos" en el kernel se ha reducido de 232 a 184 bytes, lo que reduce el consumo de memoria en los sistemas que trabajan activamente con archivos.
- Se prohibió montar sistemas de archivos en puntos de montaje dentro de la jerarquía /proc, como /proc/PID/fd, lo que creó posibles problemas de seguridad.
- El pseudo-FS NSFS (NameSpace FS), utilizado para trabajar con espacios de nombres, proporciona información adicional sobre los espacios de nombres de los puntos de montaje.
- El sistema de archivos EROFS (Sistema de archivos extensible de solo lectura), diseñado para usarse en particiones de solo lectura, ahora admite el montaje de sistemas de archivos directamente desde imágenes de disco guardadas como archivos.
- Se agregaron nuevos comandos ioctl XFS_IOC_START_COMMIT y XFS_IOC_COMMIT_RANGE a XFS para intercambiar contenido entre dos archivos.
- NFS ha agregado soporte para el protocolo “LOCALIO”, que le permite determinar si el cliente y el servidor NFS están en el mismo host, para permitir las optimizaciones apropiadas.
- En el sistema de archivos Btrfs, se han propuesto optimizaciones de rendimiento, se ha refactorizado el código, se ha reducido el área de bloqueo de extensión durante las operaciones de lectura, se ha continuado trabajando en la conversión de páginas de memoria para utilizar folios de páginas y se ha liberado automáticamente la memoria. implementado para la estructura btrfs_path.
- En el sistema de archivos Ext4, se han solucionado errores relacionados con la asignación de bloques, la gestión de extensiones, la confirmación rápida y el registro en diario.
- Virtualización y seguridad
- Se agregó el módulo LSM IPE (Integrity Policy Enforcement), desarrollado por Microsoft para ampliar el sistema de control de acceso obligatorio existente. El módulo le permite definir una política de integridad general para todo el sistema, indicando qué operaciones están permitidas y cómo se debe verificar la autenticidad de los componentes. Por ejemplo, al utilizar IPE, puede especificar qué archivos ejecutables pueden ejecutarse, teniendo en cuenta su conformidad con la versión de referencia mediante hashes criptográficos proporcionados por el sistema dm-verity.
- En la etapa de compilación del kernel, es posible habilitar por separado los métodos de protección disponibles contra diferentes vulnerabilidades de clase Spectre en la CPU. Kconfig ofrece nuevos parámetros: MITIGATE_MDS (protección contra la vulnerabilidad de muestreo de datos de microarquitectura), MITIGATE_TAA (protección contra la vulnerabilidad de aborto asíncrono de TSX), MITIGATE_MMIO_STALE_DATA (protección contra la vulnerabilidad de datos obsoletos de MMIO), MITIGATE_L1TF (protección contra la vulnerabilidad de falla del terminal L1), MITIGATE_RETBLEED (protección contra vulnerabilidades de Retbleed), MITIGATE_SPECTRE_V1, MITIGATE_SPECTRE_V2 (protección contra vulnerabilidades de Spectre), MITIGATE_SRBDS (protección contra la vulnerabilidad de muestreo de datos del búfer de registro especial), MITIGATE_SSB (protección contra la vulnerabilidad de derivación de almacenamiento especulativo).
- Se agregó la opción de línea de comando proc_mem.force_override y un conjunto de configuraciones de ensamblaje en Kconfig (PROC_MEM_FORCE_ALWAYS, PROC_MEM_FORCE_PTRACE y PROC_MEM_FORCE_NEVER) para evitar cambios de memoria a través de /proc/pid/mem.
- El subsistema LSM (módulo de seguridad de Linux) pasó a utilizar llamadas estáticas, lo que ha mejorado la seguridad y el rendimiento.
- Es posible utilizar kernels estándar para la arquitectura ARM64 en entornos invitados que se ejecutan en sistemas Android con un hipervisor KVM (KVM protegido) modificado.
- El módulo Landlock LSM, que le permite limitar la interacción de un grupo de procesos con el entorno externo, implementa el concepto de "alcance IPC" para limitar selectivamente la interacción con entornos sandbox utilizando sockets y señales Unix. Por ejemplo, puede prohibir conexiones que utilicen sockets Unix desde un entorno sandbox a procesos a los que no se les ha aplicado aislamiento, pero permitir conexiones a procesos en el mismo ámbito.
- En el hipervisor KVM, se agregó una marca al CPUID para sistemas invitados que indica compatibilidad con extensiones AVX10.1.
- Subsistema de red
- Se ha agregado el mecanismo TCP de memoria del dispositivo, que permite el uso de sockets de red para enviar directamente el contenido de la memoria de los dispositivos periféricos a través de la red (modo de copia cero) y colocar directamente el contenido de los paquetes de red en el área de memoria del dispositivo en el lado del destinatario. Los datos transmitidos en paquetes se transfieren desde la tarjeta de red a la memoria de un dispositivo periférico o desde la memoria del dispositivo a la tarjeta de red directamente, sin pasar por la CPU, y los encabezados de los paquetes terminan en los buffers regulares del kernel.
- Se han ampliado las capacidades de muchos controladores inalámbricos y Ethernet. Por ejemplo, el controlador Intel iwlwifi agregó soporte para mover operaciones RLC/SMPS al lado del firmware, el controlador RealTek rtw89 aumentó el rendimiento y agregó soporte para chips RTL8852BT/8852BE-VT (WiFi 6), el controlador Ethernet de microchip agregó soporte para IEEE 802.3 Se han mejorado las especificaciones bw (100BASE) -T1) e IEEE 802.3bp, Microsoft vNIC e IBM veth virtual Ethernet. Se agregaron nuevos controladores para chips Ethernet Realtek RTL9054, RTL9068, RTL9072, RTL9075, RTL9068, RTL9071 y Microchip LAN8650/1 10BASE-T1S MAC-PHY.
- En MPTCP (MultiPath TCP), una extensión del protocolo TCP para organizar la entrega de paquetes TCP simultáneamente a lo largo de varias rutas a través de diferentes interfaces de red, el tamaño de los pesos utilizados en el enrutamiento aumenta de 8 a 16 bits. Se implementó la detección de tráfico perdido (agujero negro) y la suspensión durante algún tiempo de los intentos de establecer conexiones con los sistemas que conducen a la pérdida de tráfico.
- Para IPv6, se implementa soporte para el indicador "p" en PIO (Opción de información de prefijo), utilizado en anuncios RA (Anuncios de enrutador IPv6) para seleccionar un modelo de implementación de cliente a través de DHCPv6-PD (Delegación de prefijo DHCPv6, RFC9663) en lugar de asignar direcciones individuales basadas en prefijos utilizando SLAAC (configuración automática de direcciones sin estado). IPv6 IOAM6 agrega soporte para un nuevo modo de encapsulación tunsrc que permite un mejor rendimiento.
- Rendimiento mejorado para procesar paquetes de control IPsec.
- Rendimiento mejorado al vaciar conjuntos de reglas de nftables grandes. nfnetlink_queue ha mejorado el soporte para el protocolo SCTP.
- La API de ethtool ha agregado soporte para vincular múltiples tarjetas de red a una interfaz de red.
- Equipo
- En el controlador AMDGPU, se continúa trabajando para implementar soporte para GPU AMD RDNA4 (“GFX12”). Se agregó la capacidad de restablecer colas de tareas individuales sin restablecer toda la GPU.
- Continuó el trabajo en el controlador Xe drm (Direct Rendering Manager) para GPU basadas en la arquitectura Intel Xe, que se utiliza en las tarjetas de video de la familia Intel Arc y en los gráficos integrados, comenzando con los procesadores Tiger Lake. La nueva versión incluye soporte para GPU basadas en las microarquitecturas Battlemage y Lunar Lake. Se ha introducido compatibilidad con modificadores Xe2 CCS (Color Control Surface) para controlar los parámetros de GPU integradas y discretas.
- El controlador i915 implementa la capacidad de generar información sobre la velocidad del ventilador a través de la interfaz HWMON o sysfs (el atributo "fan1_input"). El parámetro "i915.modeset" ha quedado obsoleto; se debe utilizar el parámetro "i915.nomodeset" en lugar de "i0.modeset=915".
- Se agregó soporte para GPU A615, A306 y A621 al controlador msm DRM (Qualcomm Adreno GPU).
- Al conductor Nouveau se le han reelaborado y limpiado sus estructuras internas.
- El controlador intel_pstate, que controla los parámetros de consumo de energía (P-state) en sistemas con procesadores Intel, ha agregado soporte para sistemas híbridos con CPU asimétricas (diferentes características), así como soporte para la administración de energía de procesadores basados en Granite Rapids y Sierra Forest. microarquitecturas. Se agregó soporte para la CPU Xeon Granite Rapids al controlador intel_idle. El controlador intel_rapl proporciona reconocimiento de los procesos de la familia AMD 1Ah y de los procesadores Intel ArrowLake-U.
- Inclusión continua de cambios para admitir el ARM SoC Snapdragon X Elite, que utiliza la CPU Oryon de 12 núcleos y la GPU Qualcomm Adreno de Qualcomm. El chip está destinado a su uso en portátiles y PC, y está por delante de los chips Apple M3 e Intel Core Ultra 155H en muchas pruebas de rendimiento.
- Se agregó soporte para placas ARM, SoC y dispositivos: Broadcom bcm2712 (Raspberry Pi 5), Renesas R9A09G057 (RZ/V2H), Qualcomm Snapdragon 414 (MSM8929), Lenovo ThinkPad T14s Gen 6, Lenovo A6000/A6010, Surface Laptop 7, Anbernic RG35XXSP , Firefly Core-PX30-JD4, Lunzn Fastrhino R68S, Aspeed Riser, AGX Orin, Rockchip Qnap-TS433, Huashan Pi, Meta Catalina, BeagleY-AI, NanoPi R2S Plus, ExynosAuto v920, SOPHGO SG2002, Qualcomm IPQ5332, LG G4 (h815) ), Cool Pi CM5 GenBook, Anbernic RG35XXSP, GameForce Ace, IBM P11, Kontron i.MX93 OSM-S, NanoPC-T6
- Se agregó soporte para paneles de pantalla Anbernic RG28XX, On Tat Industrial Company KD50G21-40NT-A1, Innolux G070ACE-LH3, Melfas lmfbx101117480, Densitron DMT028VGHMCMI-1D, Microchip AC40T08A, AOU B116XTN02.3, AUO B116XAN06.1, AT116, BOE TV04.1WUM -LL101, BOE NV2WUM-N140, BOE NV41WUM-N133, BOE NV63WHM-A116D, BOE NE4WUM-N140G, CMN N6BCA-EA116, CMN N2BCP-EA116, CSW MNB2LS601-1, Estrellado er4.
- El subsistema de audio ha agregado soporte para chips y códecs RME Digiface USB, AMD ACP 7.1, Mediatek MT6367, MT8365, Realtek RTL1320, C-Media CM9825. Los controladores de sonido antiguos para Intel ASoC se han declarado obsoletos y se recomienda utilizar controladores AVS en su lugar. Se han realizado muchas mejoras en el controlador SoundWire.
Fuente: opennet.ru
