Lançamento do núcleo Linux 6.12 com suporte a modo Realtime

Após dois meses de desenvolvimento, Linus Torvalds apresentou o lançamento do núcleo Linux 6.12. Entre as mudanças mais notáveis estão: a possibilidade de ativação do modo de tempo real, sched_ext para a criação de planejadores de CPU através do eBPF, a geração de QR Code em situações de emergência, o mecanismo Device Memory TCP, o mecanismo de reserva de recursos SCHED_DEADLINE server, melhorias no planejador de tarefas EEVDF e o módulo IPE para definição de políticas de integridade.

A nova versão contém 14.607 correções de 2.167 desenvolvedores, com um tamanho de patch de 37 MB (as mudanças afetaram 13.087 arquivos, adicionando 507.913 linhas de código e removendo 234.083 linhas). Na versão anterior, houve 15.130 correções de 2.078 desenvolvedores, com um tamanho de patch de 85 MB (no núcleo 6.10, o patch foi de 41 MB). Cerca de 45% de todas as mudanças apresentadas no 6.12 estão relacionadas a drivers de dispositivos, aproximadamente 12% referem-se à atualização de código específico para arquiteturas de hardware, 13% estão ligados à pilha de rede, 6% a sistemas de arquivos e 3% a subsistemas internos do núcleo.

As principais inovações no núcleo 6.12:

  • Memória e serviços do sistema
    • Foi possibilitada a compilação do núcleo com a opção PREEMPT_RT sem patches adicionais para operar em modo de tempo real. A última funcionalidade faltante no núcleo que impedia a ativação do modo PREEMPT_RT era o suporte à saída atômica não bloqueante através da função printk, que também foi aceita como parte do núcleo. O suporte ao PREEMPT_RT está disponível para as arquiteturas x86, x86_64, ARM64 e RISC-V. Até agora, a implementação do modo PREEMPT_RT era oferecida na forma de patches externos, com base nos quais algumas distribuições, como RHEL, SUSE e Ubuntu, criavam edições separadas em tempo real de seus produtos, demandadas 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.
    • Adicionado o mecanismo "sched_ext" (SCX), permitindo o uso de eBPF para criar planejadores de CPU que abrangem praticamente todos os aspectos do planejamento da execução de tarefas e distribuição de recursos da CPU. Esses planejadores podem ser carregados dinamicamente e executados dentro do núcleo Linux. máquina virtual eBPF. O mecanismo sched_ext simplifica a criação de escalonadores específicos para determinadas tarefas, permitindo experimentar diversas técnicas e estratégias de escalonamento, além de possibilitar a rápida criação de protótipos funcionais e a substituição de escalonadores em tempo real em infraestruturas produtivas. Por exemplo, com o sched_ext, é possível criar um escalonador que leva em consideração as particularidades de um determinado aplicativo e que muda dinamicamente a estratégia de escalonamento com base no estado do sistema e em outros fatores adicionais.
    • O conjunto inclui a parte restante dos patches necessários para o funcionamento do mecanismo SCHED_DEADLINE server, que resolve o problema da subutilização dos recursos de CPU por tarefas comuns em condições de monopólio de CPU por tarefas de alta prioridade (em tempo real). Para evitar a monopolização da CPU, o núcleo anteriormente utilizava o mecanismo de Realtime throttling, que tentava reservar 5% para tarefas de baixa prioridade, deixando 95% do tempo para tarefas de tempo real. Este mecanismo deixava a desejar, pois as tarefas comuns, em muitas situações, não recebiam tempo de CPU suficiente. O SCHED_DEADLINE server implementa um mecanismo de alocação de recursos mais eficiente.
    • Concluída a integração do escalonador de tarefas EEVDF (Earliest Eligible Virtual Deadline First), que substitui o escalonador CFS (Completely Fair Scheduler), fornecido a partir do núcleo 2.6.23. O novo escalonador, ao escolher o próximo processo para execução, leva em consideração os processos que não receberam recursos de CPU suficientes ou que receberam mais tempo de CPU do que mereciam. No primeiro caso, a transição de controle para o processo é forçada, enquanto no segundo, ela é adiada. O antigo escalonador CFS usava heurística e ajustes finos para determinar os processos que necessitavam de atenção especial, enquanto o novo escalonador os monitoriza de forma mais explícita e não requer ajustes finos. Espera-se que o EEVDF reduza as latências na execução de tarefas que o CFS enfrentava problemas de escalonamento.
    • No manipulador de falhas do kernel — DRM Panic, que utiliza a subsistema DRM (Direct Rendering Manager) para exibir um relatório visual estilo 'tela azul da morte', foi adicionada a capacidade de mostrar no display o logotipo e um código QR com o relatório kmsg em caso de uma falha. Como o código QR comporta apenas 2953 bytes, está disponível a opção DRM_PANIC_SCREEN_QR_CODE_URL, através da qual o relatório kmsg é comprimido com zlib e anexado como um parâmetro à URL, permitindo transmitir cerca de 7500 bytes via código QR V40. Ao compilar pacotes com o kernel, as distribuições podem especificar um link base para a URL, o que permitirá a criação de um acesso à página para reportar um problema. Para escolher o formato do código QR, há a configuração DRM_PANIC_SCREEN_QR_VERSION.
    • Foi adicionada a suporte à extensão ARM POE (Permission Overlay Extension), que permite definir permissões de acesso a regiões de memória. Com essa extensão, sistemas com processadores ARM64 podem implementar um mecanismo de Chaves de Proteção de Memória, usado para restringir o acesso a páginas de memória sem modificar a tabela de páginas.
    • Para as arquiteturas Loongarch, ARM64, PowerPC e s390, foi transferida a implementação da chamada de sistema getrandom(), otimizada através do mecanismo vDSO (virtual dynamic shared object), que permite mover o manipulador da chamada de sistema do kernel para o espaço do usuário e evitar alternações de contexto. Essa otimização permite acelerar em até 15 vezes a obtenção de números aleatórios.
    • No subsistema de entrada/saída assíncrona io_uring, foi adicionada a capacidade de usar timeouts absolutos, que são acionados quando um determinado tempo é alcançado nos relógios do sistema (anteriormente, apenas timeouts relativos poderiam ser definidos, especificando a duração desde o início da operação).
    • Foram adicionados arquivos para a geração de bindings para a biblioteca libcpupower usando a ferramenta SWIG, que permite formar bindings a partir de código C/C++ para várias linguagens de programação. Os bindings permitem criar scripts em Python e outras linguagens e utilizá-los para expandir a funcionalidade da biblioteca libcpupower, que oferece uma API para gerenciar cpufreq e drivers do espaço do usuário.
    • No utilitário cpuidle, foi implementada a visualização do valor do estado de inatividade "residency", utilizada para sistemas em tempo real e que considera o tempo mínimo que o processador deve permanecer em estado de inatividade para justificar o consumo de energia ao entrar e sair desse estado.
    • Adicionada a possibilidade de utilizar o compilador Clang para compilar a biblioteca padrão C nolibc, que faz parte dos códigos-fonte do núcleo Linux e fornece uma camada sobre as chamadas de sistema básicas. Ao compilar nolibc no Clang, é permitida a otimização na fase de linkagem (LTO).
    • Foram descontinuadas algumas interfaces do cgroup1, como a contagem de TCP, a primeira versão de limites suaves (soft limit) e o gerenciamento de esgotamento de memória livre. O suporte para essas funcionalidades ainda é mantido na totalidade, e o aviso foi emitido para estudar o número de usuários que continuam a utilizar essas capacidades.
    • Adicionada a possibilidade de configuração do buffer circular de rastreamento para preservar os dados acumulados após a reinicialização, o que permitirá não perder as informações de depuração acumuladas em caso de falha do núcleo. Os dados são armazenados na memória. A ativação é feita através do parâmetro de linha de comando do núcleo trace_instance, por exemplo, definir "trace_instance=boot_map@0x285400000:12M" reserva 12 MB de memória no endereço 0x285400000 para o buffer "boot_map", que estará disponível no arquivo /sys/kernel/tracing/instances/boot_map.
    • A transferência de mudanças da branch Rust-for-Linux foi continuada, relativa ao uso da linguagem Rust como uma segunda linguagem para o desenvolvimento de drivers e módulos do núcleo (o suporte ao Rust não está ativado por padrão e não leva à inclusão do Rust como uma dependência de compilação obrigatória para o núcleo). Foram adicionados os módulos 'list' e 'rbtree' para trabalhar com listas duplamente ligadas e árvores de busca vermelhas e pretas (red-black tree). As capacidades dos módulos 'init', 'sync', 'types' e 'error' foram expandidas. Foi fornecida a possibilidade de usar código em Rust ao compilar o núcleo com proteção contra ataques Spectre (opções MITIGATION_{RETHUNK, RETPOLINE, SLS}), uso do sistema de depuração KASAN, mecanismos de proteção kCFI (kernel Control Flow Integrity) e Shadow Call, assim como ao usar plugins adicionais do GCC. Um driver para o controlador Ethernet Applied Micro QT2025 PHY, escrito em Rust, foi adicionado. Um site separado com documentação foi preparado — rust.docs.kernel.org.
    • A utilidade xdrgen foi adicionada aos códigos fonte do núcleo para converter especificações XDR (eXternal Data Representation) em funções de codificação e decodificação XDR, escritas no estilo C adotado pelo núcleo Linux.
    • Foi aceita uma modificação no núcleo com a implementação do mecanismo de mascaramento de ponteiros para reduzir o número de chamadas lentas barrier_nospec() na função de 64 bits copy_from_user(), usada para copiar dados do espaço do usuário para o núcleo. A aplicação de mascaramento acelera em 2,6% o teste "per_thread_ops", que avalia o número de operações que podem ser realizadas em um único thread.
    • Um novo driver USB foi adicionado, permitindo usar o protocolo 9pfs como transporte para transmissão e recepção de dados de um dispositivo USB, ao montar o sistema de arquivos 9p sobre USB (por exemplo, "mount -t 9p -o trans=usbg,aname=\/path\/to\/fs <device> \/mnt\/9"). Como exemplo de aplicação do novo driver, menciona-se o uso em vez do NFS para organizar o carregamento da partição raiz durante o desenvolvimento de dispositivos embarcados.
  • Subsistema de disco, entrada/saída e sistemas de arquivos
    • A subsistema VFS foi adicionado com a capacidade de trabalhar com dispositivos de armazenamento cuja tamanhos de bloco são maiores que o tamanho da página de memória no sistema. Nos sistemas de arquivos, essa capacidade atualmente é suportada apenas no XFS.
    • No subsistema FUSE, que permite criar implementações de sistemas de arquivos que operam no espaço do usuário, foi adicionada a suporte à mapeamento de identificadores de usuários de sistemas de arquivos montados, aplicável para associar arquivos de um determinado usuário em uma partição montada de outro usuário no sistema atual.
    • Foi implementada uma nova operação fcntl F_CREATED_QUERY, que permite ao aplicativo determinar se um arquivo aberto com a flag O_CREAT foi criado ou já existia antes.
    • Na chamada do sistema name_to_handle_at(), foi adicionada a possibilidade de usar identificadores únicos de 64 bits de pontos de montagem para evitar condições de corrida durante a análise de /proc/mountinfo.
    • O tamanho da estrutura 'file' no núcleo foi reduzido de 232 para 184 bytes, o que permite reduzir o consumo de memória em sistemas que trabalham ativamente com arquivos.
    • Foi proibida a montagem de sistemas de arquivos em pontos de montagem dentro da hierarquia /proc, por exemplo, em /proc/PID/fd, o que criava potenciais problemas de segurança.
    • No pseudo-FS NSFS (NameSpace FS), utilizado para trabalhar com espaços de nomes, foi implementada a disponibilização de informações adicionais sobre os espaços de nomes dos pontos de montagem.
    • No sistema de arquivos EROFS (Extendable Read-Only File System), destinado ao uso em partições acessíveis em modo somente leitura, foi adicionada a suporte à montagem de sistemas de arquivos diretamente de imagens de disco salvas como arquivos.
    • No XFS, foram adicionados novos comandos ioctl XFS_IOC_START_COMMIT e XFS_IOC_COMMIT_RANGE para compartilhar conteúdo entre dois arquivos.
    • No NFS, foi adicionada a suporte ao protocolo 'LOCALIO', que permite determinar se o cliente e servidor o NFS estão no mesmo host, para implementar as otimizações apropriadas.
    • No sistema de arquivos Btrfs, foram propostas otimizações de desempenho, realizado refatoração do código, reduzida a área de bloqueio de extensões durante operações de leitura, e continuado o trabalho de transição para o uso de volumes de páginas de memória (page folios), com implementação de liberação automática de memória para a estrutura btrfs_path.
    • No sistema de arquivos Ext4, foram corrigidos erros relacionados à alocação de blocos, gerenciamento de extensões, mecanismo de 'fast commit' e registro.
  • Virtualização e segurança
    • Adicionado o módulo LSM IPE (Integrity Policy Enforcement), desenvolvido pela Microsoft para expandir o sistema existente de controle de acesso mandatário. O módulo permite definir uma política geral de integridade para todo o sistema, indicando quais operações são permitidas e como validar a autenticidade dos componentes. Por exemplo, com o IPE é possível especificar quais arquivos executáveis podem ser executados, levando em conta a verificação de sua conformidade com a versão de referência, utilizando hashes criptográficos fornecidos pelo sistema dm-verity.
    • Na fase de compilação do kernel, foi disponibilizada a opção de habilitar separadamente os métodos de proteção contra diferentes vulnerabilidades da classe Spectre na CPU. No Kconfig foram propostos novos parâmetros: MITIGATE_MDS (proteção contra a vulnerabilidade Microarchitectural Data Sampling), MITIGATE_TAA (proteção contra a vulnerabilidade TSX Asynchronous Abort), MITIGATE_MMIO_STALE_DATA (proteção contra a vulnerabilidade MMIO Stale Data), MITIGATE_L1TF (proteção contra a vulnerabilidade L1 Terminal Fault), MITIGATE_RETBLEED (proteção contra a vulnerabilidade Retbleed), MITIGATE_SPECTRE_V1, MITIGATE_SPECTRE_V2 (proteção contra as vulnerabilidades Spectre), MITIGATE_SRBDS (proteção contra a vulnerabilidade Special Register Buffer Data Sampling), MITIGATE_SSB (proteção contra a vulnerabilidade Speculative Store Bypass).
    • Adicionado o parâmetro da linha de comando proc_mem.force_override e um conjunto de configurações de compilação no Kconfig (PROC_MEM_FORCE_ALWAYS, PROC_MEM_FORCE_PTRACE e PROC_MEM_FORCE_NEVER), que permitem proibir a alteração de memória através de /proc/pid/mem.
    • O subsistema LSM (Linux Security Module) foi atualizado para usar chamadas estáticas, o que aumentou a segurança e melhorou o desempenho.
    • Possibilitada a utilização de núcleos padrão para a arquitetura ARM64 em ambientes virtuais, executados em sistemas Android com hipervisor KVM modificado (protected KVM).
    • No módulo LSM Landlock, que permite restringir a interação de um grupo de processos com o ambiente externo, foi implementada a concepção de 'IPC scoping' para limitar seletivamente a interação com ambientes de sandbox, utilizando Unix sockets e sinais. Por exemplo, é possível proibir a criação de conexões usando Unix sockets de um ambiente de sandbox para processos que não possuem isolamento, mas permitir conexões com processos na mesma área de escopo.
    • No hipervisor KVM, foi adicionado um sinalizador no CPUID para sistemas convidados, indicando o suporte a extensões AVX10.1.
  • Subsistema de Rede
    • Foi adicionado o mecanismo Device Memory TCP, que permite o uso de soquetes de rede para o envio direto do conteúdo da memória de dispositivos periféricos pela rede (modo zero-copy) e a colocação direta do conteúdo dos pacotes de rede na área de memória do dispositivo do lado do receptor. Os dados transmitidos nos pacotes são enviados diretamente da placa de rede para a memória do dispositivo periférico ou da memória do dispositivo para a placa de rede, evitando o CPU, enquanto os cabeçalhos dos pacotes vão para os buffers normais do kernel.
    • As funcionalidades de muitos drivers Ethernet e wireless foram ampliadas. Por exemplo, no driver Intel iwlwifi, foi adicionada a suportação para deslocar operações RLC/SMPS para o lado do firmware; no driver RealTek rtw89, houve aumento de performance e suporte para os chips RTL8852BT/8852BE-VT (WiFi 6); no driver Ethernet da microchip, foi adicionada a suportação para as especificações IEEE 802.3bw (100BASE-T1) e IEEE 802.3bp, além de melhorias nas implementações dos virtuais Ethernet Microsoft vNIC e IBM veth. Novos drivers foram introduzidos para os 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 a entrega de pacotes TCP simultaneamente por múltiplos caminhos através de diferentes interfaces de rede, o tamanho dos coeficientes de peso utilizados na roteação foi aumentado de 8 para 16 bits. Foi implementada a identificação de tráfego perdido (blackhole) e a pausa temporária das tentativas de estabelecimento de conexões com sistemas que levam à perda de tráfego.
    • Para IPv6, foi implementado o suporte ao flag 'p' no PIO (Prefix Information Option), utilizado nos anúncios RA (IPv6 Router Advertisements) para selecionar o modelo de implantação dos clientes através do DHCPv6-PD (Delegação de Prefixo DHCPv6, RFC9663), ao invés de atribuir endereços individuais com base em prefixos, utilizando SLAAC (Configuração Automática de Endereço Sem Estado). No IPv6 IOAM6, foi adicionada a suportação para um novo modo de encapsulação tunsrc, permitindo uma performance mais alta.
    • A performance de processamento de pacotes de controle IPsec foi aumentada.
    • A performance de descarte (flush) de grandes conjuntos de regras nftables foi aumentada. No nfnetlink_queue, houve melhorias no suporte ao protocolo SCTP.
    • Na API ethtool, foi adicionada a suportação para vincular várias placas de rede a uma única interface de rede.
  • Hardware
    • No driver AMDGPU, continuou o trabalho de implementação do suporte para GPU AMD RDNA4 ('GFX12'). Foi adicionada a capacidade de descartar filas de tarefas individuais sem redefinir o estado de toda a GPU.
    • A continuação do trabalho no driver drm (Direct Rendering Manager) Xe para GPUs baseadas na arquitetura Intel Xe, que é utilizada em placas de vídeo Intel da família Arc e gráficos integrados, começou com os processadores Tiger Lake. A nova versão inclui suporte para GPUs baseadas nas microarquiteturas Battlemage e Lunar Lake. Foi apresentado o suporte para modificadores CCS (Color Control Surface) Xe2 para gerenciar os parâmetros de GPUs integradas e discretas.
    • No driver i915 foi implementada a capacidade de saída através da interface HWMON ou sysfs (atributo 'fan1_input') com informações sobre a velocidade de rotação do cooler. O parâmetro 'i915.modeset' foi declarado obsoleto; ao invés de 'i915.modeset=0', deve-se usar o parâmetro 'i915.nomodeset'.
    • No driver DRM msm (GPU Qualcomm Adreno) foi adicionada a suporte para GPUs A615, A306 e A621.
    • No driver Nouveau, houve uma reestruturação e limpeza das estruturas internas.
    • No driver intel_pstate, que gerencia os parâmetros de consumo de energia (P-state) em sistemas com processadores Intel, foi adicionado suporte para sistemas híbridos com CPUs assimétricos (diferentes em características), bem como suporte para controle de energia de processadores baseados nas microarquiteturas Granite Rapids e Sierra Forest. No driver intel_idle, foi adicionado suporte para CPUs Xeon Granite Rapids. No driver intel_rapl, foi garantida a identificação de processos da família AMD 1Ah e processadores Intel ArrowLake-U.
    • Foi continuado o trabalho para adicionar suporte ao ARM SoC Snapdragon X Elite, que utiliza um CPU Qualcomm Oryon de 12 núcleos e GPU Qualcomm Adreno. O chip é voltado para uso em laptops e PCs e supera em muitos testes de desempenho os chips Apple M3 e Intel Core Ultra 155H.
    • Foi 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), Cool Pi CM5 GenBook, Anbernic RG35XXSP, GameForce Ace, IBM P11, Kontron i.MX93 OSM-S, NanoPC-T6.
    • Adicionado suporte para painéis de display 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, 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, Starry er88577.
    • No sistema de áudio, foi adicionada a compatibilidade com chips e codecs RME Digiface USB, AMD ACP 7.1, Mediatek MT6367, MT8365, Realtek RTL1320, C-Media CM9825. Os antigos drivers de áudio para ASoC Intel foram considerados obsoletos, sendo recomendados os drivers AVS. Várias melhorias foram feitas no driver SoundWire.

Fonte: opennet.ru

Compre hospedagem confiável para sites com proteção contra DDoS, servidores VPS VDS 🔥 Compre hospedagem confiável para sites com proteção contra DDoS, servidores VPS VDS | ProHoster