Despois de dous meses de desenvolvemento, Linus Torvalds lanzou o núcleo. Linux 6.12. Entre os cambios máis destacados: a capacidade de activar o modo en tempo real, sched_ext para crear programadores de CPU mediante eBPF, saída de código QR en condicións de emerxencia, mecanismo TCP de memoria do dispositivo, mecanismo de reserva de recursos do servidor SCHED_DEADLINE, mellora do programador de tarefas EEVDF, módulo IPE para establecer políticas de integridade.
A nova versión inclúe 14607 correccións de 2167 desenvolvedores, o tamaño do parche é de 37 MB (os cambios afectaron a 13087 ficheiros, engadíronse 507913 liñas de código, elimináronse 234083 liñas). A última versión tivo 15130 correccións de 2078 desenvolvedores, o tamaño do parche era de 85 MB (no núcleo 6.10 o parche tiña un tamaño de 41 MB). Aproximadamente o 45% de todos os cambios introducidos na versión 6.12 están relacionados con controladores de dispositivos, aproximadamente o 12% dos cambios están relacionados coa actualización de código específico de arquitecturas de hardware, o 13% están relacionados coa pila de rede, o 6% están relacionados con sistemas de ficheiros e o 3% están relacionados cos subsistemas do núcleo interno.
Principais novidades no núcleo 6.12:
- Servizos de memoria e sistema
- Xa está dispoñible a capacidade de compilar o kernel coa opción PREEMPT_RT sen parches adicionais para o funcionamento en tempo real. A última funcionalidade do kernel que faltaba e que impedía que se activase o modo PREEMPT_RT era a compatibilidade coa saída atómica non bloqueante a través da función printk, que tamén se inclúe no kernel. A compatibilidade con PREEMPT_RT está dispoñible para as arquitecturas x86, x86_64, ARM64 e RISC-V. Ata agora, a implementación do modo PREEMPT_RT proporcionábase en forma de parches externos, que algunhas distribucións, como RHEL, SUSE e Ubuntu, creou edicións separadas en tempo real dos seus produtos, moi demandadas en áreas como sistemas financeiros, dispositivos de procesamento de audio e vídeo, aviación, medicina, robótica, telecomunicacións e sistemas industriais, onde é necesario garantir un tempo de procesamento de eventos predicible.
- Engadiuse o mecanismo "sched_ext" (SCX), que permite o uso de eBPF para crear programadores de CPU que cobren practicamente todos os aspectos da programación de tarefas e a asignación de recursos da CPU. Estes programadores pódense cargar e executar dinamicamente dentro do kernel. Linux в máquina virtual eBPF. O mecanismo sched_ext simplifica a creación de programadores específicos de tarefas, permite a experimentación con diversas técnicas e estratexias de programación e permite a creación rápida de prototipos funcionais e a substitución sobre a marcha dos programadores en infraestruturas de produción. Por exemplo, usando sched_ext, podes crear un programador que teña en conta as características específicas dunha aplicación específica e cambie dinamicamente a súa estratexia de programación dependendo do estado do sistema e outros factores.
- A composición inclúe a parte restante dos parches necesarios para o funcionamento do mecanismo do servidor SCHED_DEADLINE, que resolve o problema da subutilización dos recursos da CPU por tarefas ordinarias cando a CPU está monopolizada por tarefas de alta prioridade (en tempo real). Para evitar a monopolización da CPU, o núcleo utilizaba anteriormente o mecanismo de limitación en tempo real, que tentaba reservar un 5% para tarefas de baixa prioridade, deixando o 95% do tempo para tarefas en tempo real. Este mecanismo deixaba moito que desexar, xa que as tarefas ordinarias en moitas situacións non recibían o tempo suficiente do procesador. O servidor SCHED_DEADLINE implementa un mecanismo de reserva de recursos máis eficiente.
- Completouse a integración do programador de tarefas EEVDF (Earliest Eligible Virtual Deadline First), que substituíu ao programador CFS (Completely Fair Scheduler), subministrado a partir do núcleo 2.6.23. Ao escoller o seguinte proceso para transferir a execución, o novo planificador ten en conta os procesos que non recibiron suficientes recursos de procesador ou recibiron unha cantidade inmerecidamente grande de tempo de procesador. No primeiro caso obrígase a transferencia do control ao proceso, e no segundo, pola contra, aprázase. O antigo programador CFS utilizaba heurísticas e axustes precisos para identificar os procesos que necesitaban unha atención especial, mentres que o novo programador fai un seguimento deles de forma máis explícita e non precisa de axustes finos. Espérase que o EEVDF reduza os atrasos nas tarefas coas que CFS tivo problemas de programación.
- No controlador de emerxencias do núcleo - DRM Panic, que usa o subsistema DRM (Direct Rendering Manager) para mostrar un informe visual ao estilo da "pantalla azul da morte", a posibilidade de mostrar un logotipo e un código QR cun informe kmsg en engadiuse a pantalla cando se produce unha situación de emerxencia. Dado que só caben 2953 bytes nun código QR, ofrécese a opción DRM_PANIC_SCREEN_QR_CODE_URL, na que o informe kmsg se comprime mediante zlib e se anexa como parámetro ao URL, o que permite transferir uns 40 bytes a través do código QR V7500. Ao construír paquetes co núcleo, as distribucións poden establecer un URL base para o URL, o que lles permitirá navegar ata unha páxina para informar dun problema. Para seleccionar o formato de código QR, ofrécese a configuración DRM_PANIC_SCREEN_QR_VERSION.
- Engadiuse soporte para ARM POE (Extensión de superposición de permisos), que che permite establecer dereitos de acceso ás áreas de memoria. Usando esta extensión, en sistemas con procesadores ARM64, pódese implementar o mecanismo de chaves de protección de memoria, que se utiliza para restrinxir o acceso ás páxinas de memoria sen cambiar a táboa de páxinas de memoria.
- Para as arquitecturas Loongarch, ARM64, PowerPC e s390, trasladouse a implementación da chamada ao sistema getrandom(), optimizada mediante o mecanismo vDSO (obxecto dinámico virtual compartido), que permite mover o controlador de chamadas do sistema do núcleo a espazo do usuario e evite os cambios de contexto. A optimización permítelle acelerar a xeración de números aleatorios ata 15 veces.
- A capacidade de usar tempos de espera absolutos, que se activan cando se alcanza unha determinada hora no reloxo do sistema, engadiuse ao subsistema de entrada/saída asíncrona io_uring (anteriormente só se podían establecer tempos de espera relativos, que indicaban a duración desde o inicio da operación). ).
- Engadíronse ficheiros para xerar ligazóns para a biblioteca libcpupower mediante o kit de ferramentas SWIG, que lle permite xerar ligazóns a partir de código C/C++ para varias linguaxes de programación. Os enlaces permítenche crear scripts en Python e noutros idiomas, e utilizalos para estender a funcionalidade da biblioteca libcpupower, que proporciona unha API para xestionar cpufreq e controladores desde o espazo do usuario.
- A utilidade cpuidle mostra o valor da "residencia" do estado inactivo, que se usa para sistemas en tempo real e tendo en conta o tempo mínimo que o procesador debe estar no estado inactivo para xustificar os custos enerxéticos da transición cara a este estado e a súa saída.
- Engadiuse a capacidade de usar o compilador Clang para compilar a biblioteca estándar de C nolibc, que está incluída no código fonte do kernel. Linux e proporciona un encapsulador arredor das chamadas básicas do sistema. Ao compilar nolibc en Clang, habilítase a optimización do tempo de enlace (LTO).
- Algunhas interfaces cgroup1 quedaron obsoletas, como a contabilidade TCP, a versión XNUMX do límite suave e a xestión do esgotamento da memoria. A compatibilidade con estas funcións segue sendo por agora total e faise a advertencia para estudar o número de usuarios que seguen utilizando estas funcións.
- Engadiuse a posibilidade de configurar un búfer de rastrexo de anel para gardar os datos acumulados despois dun reinicio, o que lle permitirá non perder a información de depuración acumulada en caso de fallo do núcleo. Os datos gárdanse na memoria. A activación realízase a través do parámetro da liña de comandos do kernel trace_instance, por exemplo, a configuración de "trace_instance=boot_map@0x285400000:12M" reservará 12 MB de memoria en 0x285400000 para o búfer "boot_map", que será accesible a través do ficheiro /sys/kernel. /tracing/instances/boot_map.
- Continuouse a migración de cambios desde a rama Rust-for-Linux, relacionado co uso de Rust como segunda linguaxe para desenvolver controladores e módulos do kernel (a compatibilidade con Rust non está activa por defecto e non inclúe Rust entre as dependencias de compilación requiridas do kernel). Engadíronse os módulos 'list' e 'rbtree' para traballar con listas dobremente enlazadas e árbores de busca vermello-negro. Ampliáronse as capacidades dos módulos 'init', 'sync', 'types' e 'error'. Engadiuse a capacidade de usar código Rust ao compilar un kernel con protección contra ataques Spectre (opcións MITIGATION_{RETHUNK,RETPOLINE,SLS}), usando o sistema de depuración KASAN, os mecanismos de protección kCFI (kernel Control Flow Integrity) e Shadow Call, e ao usar complementos GCC adicionais. Engadiuse un controlador para o controlador Ethernet Applied Micro QT2025 PHY, escrito en Rust. Preparouse un sitio web separado con documentación: rust.docs.kernel.org.
- Engadiuse a utilidade xdrgen ao código fonte do kernel para converter as especificacións XDR (eXternal Data Representation) en funcións de codificación e descodificación XDR escritas co estilo C adoptado polo kernel. Linux.
- O núcleo adoptou un cambio para implementar un mecanismo de enmascaramento de punteiros para reducir o número de chamadas lentas a barrier_nospec() na función copy_from_user() de 64 bits, usada para copiar datos no núcleo desde o espazo do usuario. O uso do enmascaramento acelera nun 2.6 % a proba "per_thread_ops", que avalía o número de operacións que se poden realizar nun fío.
- Engadiuse un novo controlador USB que lle permite utilizar o protocolo 9pfs como transporte para enviar e recibir datos desde un dispositivo USB ao montar o sistema de ficheiros 9p a través de USB (por exemplo, “mount -t 9p -o trans=usbg, aname=/ruta/a/fs /mnt/9"). Un exemplo do uso do novo controlador é o uso de NFS en lugar de organizar o arranque da partición raíz cando se desenvolven dispositivos incorporados.
- Subsistema de disco, E/S e sistemas de ficheiros
- Engadiuse ao subsistema VFS a capacidade de traballar con dispositivos de almacenamento cuxo tamaño de bloque sexa maior que o tamaño da páxina de memoria do sistema. Nos sistemas de ficheiros, esta función só se admite actualmente en XFS.
- O subsistema FUSE, que permite crear implementacións de sistemas de ficheiros que operan no espazo do usuario, engadiu soporte para mapear os identificadores de usuarios dos sistemas de ficheiros montados, que se usan para facer coincidir os ficheiros dun usuario específico nunha partición externa montada con outro usuario da actual. sistema.
- Implementouse unha nova operación fcntl, F_CREATED_QUERY, que dá a unha aplicación a posibilidade de determinar se se creou un ficheiro aberto mediante a marca O_CREAT ou se xa existía antes.
- Engadiuse a posibilidade de usar ID únicos de puntos de montaxe de 64 bits á chamada do sistema name_to_handle_at() para evitar condicións de carreira ao analizar /proc/mountinfo.
- O tamaño da estrutura de "ficheiros" no núcleo reduciuse de 232 a 184 bytes, o que reduce o consumo de memoria nos sistemas que traballan activamente con ficheiros.
- Prohibiuse montar sistemas de ficheiros para montar puntos dentro da xerarquía /proc, como /proc/PID/fd, o que creaba posibles problemas de seguridade.
- O pseudo-FS NSFS (NameSpace FS), usado para traballar con espazos de nomes, proporciona información adicional sobre os espazos de nomes dos puntos de montaxe.
- O sistema de ficheiros EROFS (Extendable Read-Only File System), deseñado para o seu uso en particións de só lectura, agora admite a montaxe de sistemas de ficheiros directamente desde imaxes de disco gardadas como ficheiros.
- Engadíronse novos comandos ioctl XFS_IOC_START_COMMIT e XFS_IOC_COMMIT_RANGE a XFS para intercambiar contido entre dous ficheiros.
- NFS engadiu compatibilidade co protocolo "LOCALIO", que permite determinar se o cliente e servidor NFS no mesmo host para activar as optimizacións correspondentes.
- No sistema de ficheiros Btrfs propuxéronse optimizacións de rendemento, refactorizouse o código, reduciuse a área de bloqueo de extensión durante as operacións de lectura, continuou o traballo na conversión de páxinas de memoria para usar folios de páxinas e realizouse a liberación automática de memoria. implementado para a estrutura btrfs_path.
- No sistema de ficheiros Ext4, corrixíronse os erros relacionados coa asignación de bloques, a xestión de extensións, a confirmación rápida e o rexistro.
- Virtualización e seguridade
- Engadiuse o módulo LSM IPE (Integrity Policy Enforcement), desenvolvido por Microsoft para ampliar o sistema de control de acceso obrigatorio existente. O módulo permite definir unha política xeral de integridade para todo o sistema, indicando que operacións están permitidas e como se debe verificar a autenticidade dos compoñentes. Por exemplo, mediante IPE, pode especificar que ficheiros executables se poden executar, tendo en conta a súa conformidade coa versión de referencia mediante hash criptográficos proporcionados polo sistema dm-verity.
- Na fase de compilación do núcleo, é posible activar por separado os métodos dispoñibles de protección contra diferentes vulnerabilidades da clase Spectre na CPU. Kconfig ofrece novos parámetros: MITIGATE_MDS (protección contra a vulnerabilidade de mostraxe de datos de microarquitectura), MITIGATE_TAA (protección contra a vulnerabilidade TSX Asynchronous Abort), MITIGATE_MMIO_STALE_DATA (protección contra a vulnerabilidade de datos obsoletos de MMIO), MITIGATE_L1TF (protección contra a vulnerabilidade de aborto asincrónico de TSX), MITIGATE_L1TF (protección contra vulnerabilidades de Retbleed), MITIGATE_SPECTRE_V1, MITIGATE_SPECTRE_V2 (protección contra vulnerabilidades de Spectre), MITIGATE_SRBDS (protección contra a vulnerabilidade de mostraxe de datos do búfer de rexistro especial), MITIGATE_SSB (protección contra a vulnerabilidade de Bypass de tenda especulativa).
- Engadiuse a opción de liña de comandos proc_mem.force_override e un conxunto de configuracións de compilación en Kconfig (PROC_MEM_FORCE_ALWAYS, PROC_MEM_FORCE_PTRACE e PROC_MEM_FORCE_NEVER) para evitar cambios na memoria a través de /proc/pid/mem.
- Subsistema LSM (Linux módulo de seguranza) cambiouse a usar chamadas estáticas, o que mellorou a seguranza e o rendemento.
- A capacidade de usar núcleos estándar para a arquitectura ARM64 en entornos invitados que se executan en Android-sistemas cun hipervisor KVM modificado (KVM protexido).
- O módulo Landlock LSM, que permite limitar a interacción dun grupo de procesos co ambiente externo, implementa o concepto de "scoping IPC" para limitar selectivamente a interacción con ambientes sandbox usando sockets e sinais Unix. Por exemplo, pode prohibir conexións usando sockets Unix desde un ambiente sandbox a procesos que non teñen illamento aplicado, pero permiten conexións a procesos no mesmo ámbito.
- No hipervisor KVM, engadiuse unha marca ao CPUID para os sistemas convidados que indica compatibilidade con extensións AVX10.1.
- Subsistema de rede
- Engadiuse o mecanismo TCP da memoria do dispositivo, que permite o uso de sockets de rede para enviar directamente o contido da memoria dos dispositivos periféricos a través da rede (modo de copia cero) e colocar directamente o contido dos paquetes de rede na área de memoria do dispositivo no lado receptor. Os datos transmitidos en paquetes transfírense desde a tarxeta de rede á memoria dun dispositivo periférico ou desde a memoria do dispositivo á tarxeta de rede directamente, evitando a CPU, e as cabeceiras dos paquetes acaban nos búfers do núcleo habituais.
- Ampliáronse as capacidades de moitos controladores Ethernet e sen fíos. Por exemplo, o controlador Intel iwlwifi engadiu soporte para mover as operacións RLC/SMPS ao lado do firmware, o controlador RealTek rtw89 aumentou o rendemento e engadiu soporte para chips RTL8852BT/8852BE-VT (WiFi 6), o controlador Ethernet de microchip engadiu compatibilidade con IEEE 802.3 Melloráronse as especificacións bw (100BASE) -T1) e IEEE 802.3bp, Microsoft vNIC e IBM veth virtual Ethernet. Engadíronse novos controladores para os chips Ethernet Realtek RTL9054, RTL9068, RTL9072, RTL9075, RTL9068, RTL9071 e Microchip LAN8650/1 10BASE-T1S MAC-PHY.
- En MPTCP (MultiPath TCP), unha extensión do protocolo TCP para organizar a entrega de paquetes TCP simultaneamente ao longo de varias rutas a través de diferentes interfaces de rede, o tamaño dos pesos utilizados no enrutamento aumenta de 8 a 16 bits. Implementouse a detección de tráfico perdido (buco negro) e a suspensión durante algún tempo dos intentos de establecer conexións con sistemas que provocan a perda de tráfico.
- Para IPv6, implícase o soporte para a marca "p" no PIO (opción de información de prefixo), que se usa nos anuncios de RA (anuncios de enrutadores IPv6) para seleccionar un modelo de implantación de cliente mediante DHCPv6-PD (delegación de prefixo DHCPv6, RFC9663) en lugar de asignar enderezos individuais baseados en prefixos mediante SLAAC (Stateless Address Autoconfiguration). IPv6 IOAM6 engade soporte para un novo modo de encapsulación tunsrc para mellorar o rendemento.
- Rendemento mellorado para procesar paquetes de control IPsec.
- Mellorouse o rendemento do lavado de grandes conxuntos de regras nftables. nfnetlink_queue mellorou o soporte SCTP.
- A API ethtool engadiu compatibilidade para vincular varias tarxetas de rede a unha interface de rede.
- Оборудование
- No controlador AMDGPU, continúase traballando para implementar compatibilidade coas GPU AMD RDNA4 ("GFX12"). Engadiuse a posibilidade de restablecer as filas de tarefas individuais sen restablecer toda a GPU.
- Continuouse o traballo no controlador Xe drm (Direct Rendering Manager) para GPU baseado na arquitectura Intel Xe, que se usa nas tarxetas de vídeo da familia Intel Arc e nos gráficos integrados, comezando polos procesadores Tiger Lake. A nova versión inclúe soporte para GPU baseadas nas microarquitecturas Battlemage e Lunar Lake. Introduciuse o soporte para CCS (Color Control Surface) modificadores Xe2 para controlar os parámetros das GPU integradas e discretas.
- O controlador i915 implementa a capacidade de emitir información sobre a velocidade do ventilador a través da interface HWMON ou sysfs (o atributo "fan1_input"). O parámetro "i915.modeset" quedou en desuso; o parámetro "i915.nomodeset" debería utilizarse en lugar de "i0.modeset=915".
- Engadido soporte para GPU A615, A306 e A621 ao controlador msm DRM (GPU Qualcomm Adreno).
- O condutor Nouveau foi reelaborado e limpo as súas estruturas internas.
- O controlador intel_pstate, que controla os parámetros de consumo de enerxía (estado P) en sistemas con procesadores Intel, engadiu soporte para sistemas híbridos con CPU asimétricas (diferentes características), así como soporte para a xestión de enerxía dos procesadores baseados en Granite Rapids e Sierra Forest. microarquitecturas. Engadiuse soporte para a CPU Xeon Granite Rapids ao controlador intel_idle. O controlador intel_rapl permite recoñecer os procesos da familia AMD 1Ah e os procesadores Intel ArrowLake-U.
- Inclusión continuada de cambios para admitir o SoC ARM Snapdragon X Elite, que usa a CPU Oryon de 12 núcleos de Qualcomm e a GPU Qualcomm Adreno. O chip está destinado ao uso en portátiles e PCs, e está por diante dos chips Apple M3 e Intel Core Ultra 155H en moitas probas de rendemento.
- Engadiuse soporte para placas ARM, SoC e dispositivos: Broadcom bcm2712 (Raspberry Pi 5), Renesas R9A09G057 (RZ/V2H), Qualcomm Snapdragon 414 (MSM8929), Lenovo ThinkPad T14s Gen 6, Lenovo A6000/A6010/A7, Surface AnX35pnic30, RG , Firefly Core-PX4-JD68, Lunzn Fastrhino R433S, Aspeed Riser, AGX Orin, Rockchip Qnap-TS2, Huashan Pi, Meta Catalina, BeagleY-AI, NanoPi R920S Plus, ExynosAuto v2002, SOPHGO SG5332, 4 Qualcom 815 (G5) ), Cool Pi CM35 GenBook, Anbernic RG11XXSP, GameForce Ace, IBM P93, Kontron i.MX6 OSM-S, NanoPC-TXNUMX
- Engadiuse soporte para os paneis de pantalla Anbernic RG28XX, On Tat Industrial Company KD50G21-40NT-A1, Innolux G070ACE-LH3, Melfas lmfbx101117480, Densitron DMT028VGHMCMI-1D, Microchip AC40T08A, AOU BO116 02.3XAT116, BOE TV06.1WUM -LL116, BOE NV04.1WUM-N101, BOE NV2WUM-N140, BOE NV41WHM-A133D, BOE NE63WUM-N116G, CMN N4BCA-EA140, CMN N6BCP-EA116, CSW MNB2LS116-2.
- O subsistema de audio engadiu soporte para chips e códecs RME Digiface USB, AMD ACP 7.1, Mediatek MT6367, MT8365, Realtek RTL1320, C-Media CM9825. Os controladores de son antigos para Intel ASoC declaráronse obsoletos e recoméndase utilizar controladores AVS no seu lugar. Realizáronse moitas melloras no controlador SoundWire.
Fonte: opennet.ru
