Após dois meses de desenvolvimento, Linus Torvalds lançou o kernel. Linux 6.12. Entre as mudanças mais notáveis: a capacidade de habilitar o modo em tempo real, sched_ext para criação de agendadores de CPU via eBPF, saída de código QR em situações de emergência, mecanismo TCP de memória do dispositivo, mecanismo de reserva de recursos do servidor SCHED_DEADLINE, melhoria do agendador de tarefas EEVDF, módulo IPE para configuração de políticas de integridade.
A nova versão inclui 14607 correções de 2167 desenvolvedores, o tamanho do patch é de 37 MB (as alterações afetaram 13087 arquivos, 507913 linhas de código foram adicionadas, 234083 linhas foram excluídas). A última versão teve 15130 correções de 2078 desenvolvedores, o tamanho do patch era de 85 MB (no kernel 6.10 o tamanho do patch era de 41 MB). Cerca de 45% de todas as alterações introduzidas na versão 6.12 estão relacionadas a drivers de dispositivos, aproximadamente 12% das alterações estão relacionadas à atualização de código específico para arquiteturas de hardware, 13% estão relacionadas à pilha de rede, 6% estão relacionadas a sistemas de arquivos e 3% estão relacionados aos subsistemas internos do kernel.
Principais inovações no kernel 6.12:
- Serviços de memória e sistema
- Agora é possível compilar o kernel com a opção PREEMPT_RT sem patches adicionais para operação em tempo real. O último recurso ausente no kernel que impedia a ativação do modo PREEMPT_RT era o suporte à saída atômica não bloqueante por meio da função printk, que também está incluída no kernel. O suporte a PREEMPT_RT está disponível para as arquiteturas x86, x86_64, ARM64 e RISC-V. Até então, a implementação do modo PREEMPT_RT era fornecida na forma de patches externos, que algumas distribuições, como RHEL, SUSE e outras, não utilizavam. Ubuntu, criaram edições Realtime separadas de seus produtos, muito procuradas em áreas como sistemas financeiros, dispositivos de processamento de áudio e vídeo, aviação, medicina, robótica, telecomunicações e sistemas industriais, onde é necessário garantir um tempo de processamento de eventos previsível.
- O mecanismo "sched_ext" (SCX) foi adicionado, permitindo o uso do eBPF para criar agendadores de CPU que abrangem praticamente todos os aspectos do agendamento de tarefas e da alocação de recursos da CPU. Esses agendadores podem ser carregados e executados dinamicamente dentro do kernel. Linux в máquina virtual eBPF. O mecanismo sched_ext simplifica a criação de agendadores específicos para tarefas, permite a experimentação com diversas técnicas e estratégias de agendamento e possibilita a criação rápida de protótipos funcionais e a substituição imediata de agendadores em infraestruturas de produção. Por exemplo, usando o sched_ext, é possível criar um agendador que leve em consideração as especificidades de uma aplicação específica e altere dinamicamente sua estratégia de agendamento dependendo do estado do sistema e de outros fatores.
- A composição inclui o restante dos patches necessários ao funcionamento do mecanismo do servidor SCHED_DEADLINE, que resolve o problema de subutilização de recursos da CPU por tarefas comuns quando a CPU é monopolizada por tarefas de alta prioridade (tempo real). Para evitar a monopolização da CPU, o kernel utilizava anteriormente o mecanismo de aceleração em tempo real, que tentava reservar 5% para tarefas de baixa prioridade, deixando 95% do tempo para tarefas em tempo real. Esse mecanismo deixou muito a desejar, já que tarefas comuns em muitas situações não recebiam tempo de processador suficiente. O servidor SCHED_DEADLINE implementa um mecanismo de reserva de recursos mais eficiente.
- Foi concluída a integração do agendador de tarefas EEVDF (Earliest Eligible Virtual Deadline First), que substituiu o agendador CFS (Completely Fair Scheduler), fornecido a partir do kernel 2.6.23. O novo escalonador, ao escolher o próximo processo para o qual transferir a execução, leva em consideração os processos que não receberam recursos de processador suficientes ou que receberam uma quantidade injustamente grande de tempo de processador. No primeiro caso, a transferência do controle para o processo é forçada e, no segundo, ao contrário, é adiada. O antigo escalonador CFS usava heurística e ajuste fino para identificar processos que precisavam de atenção especial, enquanto o novo escalonador os rastreia de forma mais explícita e não requer ajuste fino. Espera-se que o EEVDF reduza atrasos em tarefas para as quais o CFS teve problemas de agendamento.
- No manipulador de emergência do kernel - DRM Panic, que usa o subsistema DRM (Direct Rendering Manager) para exibir um relatório visual no estilo da “tela azul da morte”, a capacidade de exibir um logotipo e um código QR com um relatório kmsg em a tela quando ocorre uma condição de emergência foi adicionada. Como apenas 2953 bytes cabem em um código QR, é fornecida a opção DRM_PANIC_SCREEN_QR_CODE_URL, na qual o relatório kmsg é compactado usando zlib e anexado como parâmetro à URL, o que permite a transferência de cerca de 40 bytes através do código QR V7500. Ao construir pacotes com o kernel, as distribuições podem definir uma URL base para a URL, o que lhes permitirá navegar até uma página para relatar um problema. Para selecionar o formato do código QR, a configuração DRM_PANIC_SCREEN_QR_VERSION é fornecida.
- Adicionado suporte para ARM POE (Permission Overlay Extension), que permite definir direitos de acesso a áreas de memória. Usando esta extensão, em sistemas com processadores ARM64, pode ser implementado o mecanismo Memory Protection Keys, que é usado para limitar o acesso às páginas de memória sem alterar a tabela de páginas de memória.
- Para as arquiteturas Loongarch, ARM64, PowerPC e s390, foi movida a implementação da chamada de sistema getrandom(), otimizada usando o mecanismo vDSO (virtual dynamic shared object), que permite mover o manipulador de chamada de sistema do kernel para o usuário espaço e evite mudanças de contexto. A otimização permite acelerar a geração de números aleatórios em até 15 vezes.
- A capacidade de usar timeouts absolutos, acionados quando um determinado tempo é atingido no relógio do sistema, foi adicionada ao subsistema de entrada/saída assíncrona io_uring (anteriormente, apenas timeouts relativos podiam ser definidos, que indicavam a duração desde o início da operação ).
- Adicionados arquivos para gerar ligações para a biblioteca libcpupower usando o kit de ferramentas SWIG, que permite gerar ligações a partir de código C/C++ para diversas linguagens de programação. As ligações permitem criar scripts em Python e outras linguagens e usá-los para estender a funcionalidade da biblioteca libcpupower, que fornece uma API para gerenciar cpufreq e drivers do espaço do usuário.
- O utilitário cpuidle exibe o valor da "residência" do estado ocioso, usado para sistemas de tempo real e levando em consideração o tempo mínimo que o processador deve ficar no estado ocioso para justificar os custos de energia de transição para dentro e fora deste estado.
- Adicionada a capacidade de usar o compilador Clang para compilar a biblioteca padrão C nolibc, que está incluída no código-fonte do kernel. Linux e fornece uma camada de encapsulamento para chamadas de sistema básicas. Ao compilar o nolibc no Clang, a otimização em tempo de link (LTO) é ativada.
- Algumas interfaces cgroup1 foram descontinuadas, como contabilidade TCP, limite flexível versão XNUMX e gerenciamento de exaustão de memória. O suporte a estas funcionalidades mantém-se por enquanto integral, e o alerta é feito para estudar o número de utilizadores que continuam a utilizar estas funcionalidades.
- Adicionada a capacidade de configurar um buffer de rastreamento de anel para salvar dados acumulados após uma reinicialização, o que permitirá que você não perca informações de depuração acumuladas no caso de uma falha do kernel. Os dados são armazenados na memória. A habilitação é feita através do parâmetro de linha de comando do kernel trace_instance, por exemplo, a configuração “trace_instance=boot_map@0x285400000:12M” reservará 12 MB de memória em 0x285400000 para o buffer “boot_map”, que estará acessível através do arquivo /sys/kernel /tracing/instances/boot_map.
- Continuação da migração das alterações do branch Rust-for-Linux, relacionado ao uso de Rust como segunda linguagem para o desenvolvimento de drivers e módulos do kernel (o suporte a Rust não está ativo por padrão e não inclui Rust entre as dependências de compilação necessárias do kernel). Adicionados os módulos 'list' e 'rbtree' para trabalhar com listas duplamente encadeadas e árvores rubro-negras. Expandidas as capacidades dos módulos 'init', 'sync', 'types' e 'error'. Adicionada a capacidade de usar código Rust ao compilar um kernel com proteção contra ataques Spectre (opções MITIGATION_{RETHUNK,RETPOLINE,SLS}), usando o sistema de depuração KASAN, os mecanismos de proteção kCFI (Integridade do Fluxo de Controle do Kernel) e Shadow Call, e ao usar plugins adicionais do GCC. Adicionado um driver para o controlador Ethernet Applied Micro QT2025 PHY, escrito em Rust. Um site separado com documentação foi preparado: rust.docs.kernel.org.
- O utilitário xdrgen foi adicionado ao código-fonte do kernel para converter especificações XDR (eXternal Data Representation) em funções de codificação e decodificação XDR escritas usando o estilo C adotado pelo kernel. Linux.
- O kernel foi alterado para implementar um mecanismo de mascaramento de ponteiro para reduzir o número de chamadas lentas para barreira_nospec() na função copy_from_user() de 64 bits, usada para copiar dados do espaço do usuário para o kernel. O uso de mascaramento acelera o teste “per_thread_ops”, que avalia o número de operações que podem ser realizadas em um thread, em 2.6%.
- Foi adicionado um novo driver USB que permite usar o protocolo 9pfs como transporte para enviar e receber dados de um dispositivo USB ao montar o sistema de arquivos 9p via USB (por exemplo, “mount -t 9p -o trans=usbg, aname=/caminho/para/fs /mnt/9"). Um exemplo de uso do novo driver é usá-lo em vez do NFS para organizar a inicialização da partição raiz ao desenvolver dispositivos embarcados.
- Subsistema de disco, E/S e sistemas de arquivos
- A capacidade de trabalhar com dispositivos de armazenamento cujo tamanho de bloco é maior que o tamanho da página de memória no sistema foi adicionada ao subsistema VFS. Em sistemas de arquivos, esse recurso atualmente só é compatível com XFS.
- O subsistema FUSE, que permite criar implementações de sistemas de arquivos operando no espaço do usuário, adicionou suporte para mapear identificadores de usuário de sistemas de arquivos montados, usados para combinar os arquivos de um usuário específico em uma partição externa montada com outro usuário no atual sistema.
- Uma nova operação fcntl, F_CREATED_QUERY, foi implementada, dando a um aplicativo a capacidade de determinar se um arquivo aberto usando o sinalizador O_CREAT foi criado ou se já existia antes.
- Adicionada a capacidade de usar IDs de ponto de montagem exclusivos de 64 bits à chamada do sistema name_to_handle_at() para evitar condições de corrida ao analisar /proc/mountinfo.
- O tamanho da estrutura de “arquivos” no kernel foi reduzido de 232 para 184 bytes, o que reduz o consumo de memória em sistemas que trabalham ativamente com arquivos.
- A montagem de sistemas de arquivos em pontos de montagem dentro da hierarquia /proc, como /proc/PID/fd, era proibida, o que criava possíveis problemas de segurança.
- O pseudo-FS NSFS (NameSpace FS), usado para trabalhar com namespaces, fornece informações adicionais sobre os namespaces dos pontos de montagem.
- O sistema de arquivos EROFS (Extendable Read-Only File System), projetado para uso em partições somente leitura, agora suporta a montagem de sistemas de arquivos diretamente de imagens de disco salvas como arquivos.
- Novos comandos ioctl XFS_IOC_START_COMMIT e XFS_IOC_COMMIT_RANGE foram adicionados ao XFS para troca de conteúdo entre dois arquivos.
- O NFS adicionou suporte ao protocolo "LOCALIO", que permite determinar se o cliente e servidor NFS no mesmo host para permitir as otimizações correspondentes.
- No sistema de arquivos Btrfs, foram propostas otimizações de desempenho, o código foi refatorado, a área de bloqueio de extensão durante as operações de leitura foi reduzida, o trabalho continuou na conversão de páginas de memória para usar fólios de páginas e a liberação automática de memória foi implementado para a estrutura btrfs_path.
- No sistema de arquivos Ext4, foram corrigidos bugs relacionados à alocação de blocos, gerenciamento de extensão, confirmação rápida e registro no diário.
- Virtualização e Segurança
- Adicionado o módulo LSM IPE (Integrity Policy Enforcement), desenvolvido pela Microsoft para expandir o sistema de controle de acesso obrigatório existente. O módulo permite definir uma política geral de integridade para todo o sistema, indicando quais operações são permitidas e como deve ser verificada a autenticidade dos componentes. Por exemplo, usando o IPE, você pode especificar quais arquivos executáveis podem ser executados, levando em consideração sua conformidade com a versão de referência, usando hashes criptográficos fornecidos pelo sistema dm-verity.
- No estágio de compilação do kernel, é possível habilitar separadamente os métodos de proteção disponíveis contra diferentes vulnerabilidades da classe Spectre na CPU. Kconfig oferece novos parâmetros: MITIGATE_MDS (proteção contra a vulnerabilidade de amostragem de dados microarquitetônicos), MITIGATE_TAA (proteção contra a vulnerabilidade de aborto assíncrono TSX), MITIGATE_MMIO_STALE_DATA (proteção contra a vulnerabilidade de dados obsoletos MMIO), MITIGATE_L1TF (proteção contra a vulnerabilidade de falha terminal L1), MITIGATE_RETBLEED (proteção contra Vulnerabilidades Retbleed), MITIGATE_SPECTRE_V1, MITIGATE_SPECTRE_V2 (proteção contra vulnerabilidades Spectre), MITIGATE_SRBDS (proteção contra a vulnerabilidade Special Register Buffer Data Sampling), MITIGATE_SSB (proteção contra a vulnerabilidade Speculative Store Bypass).
- Adicionada opção de linha de comando proc_mem.force_override e um conjunto de configurações de montagem no Kconfig (PROC_MEM_FORCE_ALWAYS, PROC_MEM_FORCE_PTRACE e PROC_MEM_FORCE_NEVER) para evitar alterações de memória via /proc/pid/mem.
- Subsistema LSM (Linux O módulo de segurança passou a usar chamadas estáticas, o que melhorou a segurança e o desempenho.
- A capacidade de usar núcleos padrão para a arquitetura ARM64 em ambientes convidados executados em Android-Sistemas com um hipervisor KVM modificado (KVM protegido).
- O módulo Landlock LSM, que permite limitar a interação de um grupo de processos com o ambiente externo, implementa o conceito de “escopo IPC” para limitar seletivamente a interação com ambientes sandbox usando soquetes e sinais Unix. Por exemplo, você pode proibir conexões usando soquetes Unix de um ambiente sandbox para processos que não possuem isolamento aplicado, mas permitem conexões para processos no mesmo escopo.
- No hipervisor KVM, um sinalizador foi adicionado ao CPUID para sistemas convidados indicando suporte para extensões AVX10.1.
- subsistema de rede
- O mecanismo Device Memory TCP foi adicionado, permitindo o uso de soquetes de rede para enviar diretamente o conteúdo da memória de dispositivos periféricos pela rede (modo de cópia zero) e colocar diretamente o conteúdo dos pacotes de rede na área de memória do dispositivo no lado do destinatário. Os dados transmitidos em pacotes são transferidos da placa de rede para a memória de um dispositivo periférico ou da memória do dispositivo para a placa de rede diretamente, ignorando a CPU, e os cabeçalhos dos pacotes terminam em buffers regulares do kernel.
- Os recursos de muitos drivers Ethernet e sem fio foram expandidos. Por exemplo, o driver Intel iwlwifi adicionou suporte para mover operações RLC/SMPS para o lado do firmware, o driver RealTek rtw89 aumentou o desempenho e adicionou suporte para chips RTL8852BT/8852BE-VT (WiFi 6), o driver Ethernet de microchip adicionou suporte para IEEE 802.3 especificações bw (100BASE) -T1) e IEEE 802.3bp, implementações de Ethernet virtual aprimoradas Microsoft vNIC e IBM veth. Adicionados novos drivers para chips Ethernet Realtek RTL9054, RTL9068, RTL9072, RTL9075, RTL9068, RTL9071 e Microchip LAN8650/1 10BASE-T1S MAC-PHY.
- No MPTCP (MultiPath TCP), uma extensão do protocolo TCP para organizar a entrega de pacotes TCP simultaneamente ao longo de diversas rotas através de diferentes interfaces de rede, o tamanho dos pesos utilizados no roteamento é aumentado de 8 para 16 bits. Implementada detecção de tráfego perdido (blackhole) e suspensão por algum tempo de tentativas de estabelecer conexões com sistemas que levam à perda de tráfego.
- Para IPv6, o suporte é implementado para o sinalizador “p” no PIO (Prefix Information Option), usado em anúncios RA (IPv6 Router Advertisements) para selecionar um modelo de implantação de cliente via DHCPv6-PD (DHCPv6 Prefix Delegation, RFC9663) em vez de atribuir endereços individuais baseados em prefixos usando SLAAC (Stateless Address Autoconfiguration). IPv6 IOAM6 adiciona suporte para um novo modo de encapsulamento tunsrc que permite melhor desempenho.
- Desempenho aprimorado para processamento de pacotes de controle IPsec.
- Desempenho aprimorado de liberação de grandes conjuntos de regras nftables. nfnetlink_queue melhorou o suporte para o protocolo SCTP.
- A API ethtool adicionou suporte para vincular várias placas de rede a uma interface de rede.
- Оборудование
- No driver AMDGPU, o trabalho continua para implementar suporte para GPUs AMD RDNA4 (“GFX12”). Adicionada a capacidade de redefinir filas de tarefas individuais sem redefinir toda a GPU.
- O trabalho continuou no driver Xe drm (Direct Rendering Manager) para GPUs baseadas na arquitetura Intel Xe, que é usado nas placas de vídeo e gráficos integrados da família Intel Arc, começando com os processadores Tiger Lake. A nova versão inclui suporte para GPUs baseadas nas microarquiteturas Battlemage e Lunar Lake. O suporte para modificadores Xe2 CCS (Color Control Surface) foi introduzido para controlar os parâmetros de GPUs integradas e discretas.
- O driver i915 implementa a capacidade de gerar informações sobre a velocidade do ventilador por meio da interface HWMON ou sysfs (o atributo “fan1_input”). O parâmetro "i915.modeset" foi descontinuado; o parâmetro "i915.nomodeset" deve ser usado em vez de "i0.modeset=915".
- Adicionado suporte para GPUs A615, A306 e A621 ao driver DRM msm (GPU Qualcomm Adreno).
- O driver Nouveau teve suas estruturas internas reformuladas e limpas.
- O driver intel_pstate, que controla os parâmetros de consumo de energia (P-state) em sistemas com processadores Intel, adicionou suporte para sistemas híbridos com CPUs assimétricas (características diferentes), bem como suporte para gerenciamento de energia de processadores baseados em Granite Rapids e Sierra Forest microarquiteturas. Adicionado suporte para CPU Xeon Granite Rapids ao driver intel_idle. O driver intel_rapl fornece reconhecimento de processos da família AMD 1Ah e processadores Intel ArrowLake-U.
- Inclusão contínua de mudanças para oferecer suporte ao ARM SoC Snapdragon X Elite, que usa CPU Oryon de 12 núcleos da própria Qualcomm e GPU Qualcomm Adreno. O chip é voltado para uso em laptops e PCs e está à frente dos chips Apple M3 e Intel Core Ultra 155H em muitos testes de desempenho.
- Adicionado suporte para placas ARM, SoCs e 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) Pi legal CM5 GenBook, Anbernic RG35XXSP, GameForce Ace, IBM P11, Kontron i.MX93 OSM-S, NanoPC-T6
- Adicionado suporte para Anbernic RG28XX, On Tat Industrial Company KD50G21-40NT-A1, Innolux G070ACE-LH3, Melfas lmfbx101117480, Densitron DMT028VGHMCMI-1D, Microchip AC40T08A, AOU B116XTN02.3, painéis de tela AUO B116XAN06.1, AOU B116XAT04.1, BOE TV101WUM-LL2, BOE NV140WUM-N41, BOE NV133WUM-N63, BOE NV116WHM-A4D, BOE NE140WUM-N6G, CMN N116BCA-EA2, CMN N116BCP-EA2, CSW MNB601LS1-4, estrelado er88577.
- O subsistema de áudio adicionou suporte para chips e codecs RME Digiface USB, AMD ACP 7.1, Mediatek MT6367, MT8365, Realtek RTL1320, C-Media CM9825. Drivers de som antigos para Intel ASoC foram declarados obsoletos e é recomendado o uso de drivers AVS. Muitas melhorias foram feitas no driver SoundWire.
Fonte: opennet.ru
