Após dois meses de desenvolvimento, Linus Torvalds apresentou o lançamento do núcleo Linux 5.12. Entre as mudanças mais notáveis estão: suporte a dispositivos de bloco zônicos no Btrfs, possibilidade de mapeamento de identificadores de usuários para sistemas de arquivos, limpeza de arquiteturas ARM obsoletas, modo de gravação "impaciente" no NFS, mecanismo LOOKUP_CACHED para determinação de caminhos de arquivos a partir do cache, suporte a instruções atômicas no BPF, sistema de depuração KFENCE para identificação de erros relacionados à memória, modo de polling NAPI em uma thread separada no stack de rede, hipervisor ACRN, capacidade de alterar dinamicamente o modelo de preempção no escalonador de tarefas e suporte a otimizações LTO na compilação com Clang.
A nova versão aceitou 14170 (anteriormente 15480) correções de 1946 (1991) desenvolvedores, o tamanho do patch é de 38 MB (as mudanças afetaram 12102 (12090) arquivos, adicionadas 538599 (868025) linhas de código, removidas 333377 (261456) linhas). Cerca de 43% de todas as alterações apresentadas no 5.12 estão relacionadas a drivers de dispositivos, aproximadamente 17% das mudanças referem-se à atualização de código específico para arquiteturas de hardware, 12% estão ligadas ao stack de rede, 5% às sistemas de arquivos e 4% a subsistemas internos do núcleo.
Principais novidades:
- Subsistema de disco, entrada/saída e sistemas de arquivos
- Foi implementada a possibilidade de mapeamento de identificadores de usuários para sistemas de arquivos montados (é possível mapear arquivos de um usuário em uma partição de terceiros para outro usuário no sistema atual). O mapeamento é suportado para os sistemas de arquivos FAT, ext4 e XFS. A funcionalidade proposta permite simplificar o compartilhamento de arquivos entre diferentes usuários e em diferentes computadores, incluindo que o mapeamento será aplicado no mecanismo de diretórios home portáveis systemd-homed, permitindo que os usuários movam seus diretórios home para mídias externas e os utilizem em diferentes computadores, cuja disposição de identificadores de usuários não coincide. Outra aplicação útil é a organização do compartilhamento de arquivos a partir de um host externo, sem alterar efetivamente as informações sobre os proprietários dos arquivos no sistema de arquivos.
- No núcleo, foram aceitos os patches LOOKUP_CACHED, que permitem executar operações de determinação de caminho de arquivo a partir do espaço do usuário sem bloqueio, baseando-se apenas nos dados disponíveis em cache. O modo LOOKUP_CACHED é ativado na chamada openat2() através da passagem do flag RESOLVE_CACHED, no qual os dados são fornecidos apenas do cache, e se a determinação de caminho exigir acesso ao armazenamento, retorna o erro EAGAIN.
- No sistema de arquivos Btrfs, foi adicionada o suporte inicial a dispositivos de bloco zonados (dispositivos em discos rígidos ou SSDs NVMe, cujo espaço de armazenamento é dividido em zonas, constituindo grupos de blocos ou setores, onde apenas a adição sequencial de dados é permitida, atualizando todo o grupo de blocos). No modo somente leitura, foi implementado o suporte a blocos com metadados e dados menores que a página (subpage).
- No sistema de arquivos F2FS, foi adicionada a possibilidade de escolher o algoritmo e o nível de compressão. O suporte a um alto nível de compressão para o algoritmo LZ4 foi adicionado. A opção de montagem checkpoint_merge foi implementada.
- Foi implementado um novo comando ioctl FS_IOC_READ_VERITY_METADATA para leitura de metadados de arquivos protegidos por fs-verity.
- No cliente NFS, foi implementado o modo de gravação 'ansioso' (writes=eager), onde as operações de gravação em arquivos são enviadas imediatamente ao servidor, ignorando o cache de página. O modo especificado reduz o consumo de memória, proporciona feedback imediato sobre a conclusão do espaço livre no FS e, em algumas situações, permite aumentar o desempenho.
- No CIFS (SMB), foram adicionadas novas opções de montagem: acregmax para gerenciar o cache de arquivos e acdirmax para gerenciar o cache de metadados de diretórios.
- No XFS, foi ativado o modo de verificação de quotas em múltiplas threads, acelerando a execução do fsync, e a preparação do código growfs para implementação da função de redução do tamanho do FS foi realizada.
- Memória e serviços do sistema
- Foi adicionada a subsistema DTMP (Dynamic Thermal Power Management), permitindo regular dinamicamente o consumo de energia de diferentes dispositivos com base nas restrições de temperatura comuns estabelecidas.
- Foi implementada a capacidade de compilar o núcleo com o compilador Clang, incluindo otimizações durante a ligação (LTO, Otimização de Tempo de Ligação). As otimizações LTO consideram o estado de todos os arquivos envolvidos no processo de compilação, enquanto os modos de otimização tradicionais otimizam cada arquivo individualmente e não levam em conta as condições de chamada de funções definidas em outros arquivos. Por exemplo, com LTO, funções de outros arquivos podem ser expandidas inline, código não utilizado não é incluído no arquivo executável, são realizadas verificações de tipos e otimizações gerais ao nível do projeto como um todo. O suporte para LTO ainda é limitado às arquiteturas x86 e ARM64.
- Foi oferecida a possibilidade de escolher modos de preempção (PREEMPT) no agendador de tarefas durante a inicialização (preempt=none/voluntary/full) ou durante a execução através do debugfs (/debug/sched_debug), caso a opção PREEMPT_DYNAMIC tenha sido especificada durante a compilação do núcleo. Anteriormente, o modo de preempção só podia ser definido no nível das opções de compilação. Essa mudança permite que as distribuições forneçam núcleos com o modo PREEMPT ativado, garantindo latências mínimas para ambientes de desktop à custa de uma leve redução na capacidade de throughput, e, se necessário, reverter para os modos PREEMPT_VOLUNTARY (um modo intermediário para desktops) ou PREEMPT_NONE (que proporciona a máxima capacidade de throughput para servidores).
- Foi adicionada à subsistema BPF o suporte para operações atômicas BPF_ADD, BPF_AND, BPF_OR, BPF_XOR, BPF_XCHG e BPF_CMPXCHG.
- Os programas BPF foram autorizados a acessar dados na pilha usando ponteiros com deslocamento variável. Por exemplo, enquanto anteriormente o acesso a um array na pilha só podia ser feito usando um índice constante, agora é possível usar um que varia. O controle de acesso é mantido dentro dos limites predefinidos pelo verificador BPF. Essa capacidade está disponível apenas para programas privilegiados devido a preocupações sobre a exploração de vulnerabilidades relacionadas à execução especulativa de código.
- Foi adicionada a possibilidade de anexar programas BPF a pontos de rastreamento 'bare', não associados a eventos visíveis no espaço do usuário (para esses pontos de rastreamento, a preservação do ABI não é garantida).
- Foi implementado suporte para a bus CXL 2.0 (Compute Express Link), utilizada para organizar uma interação de alta velocidade entre a CPU e dispositivos de memória (permitindo que dispositivos de memória externos sejam utilizados como parte da RAM ou da memória permanente, como se essa memória estivesse conectada através de um controlador de memória padrão na CPU).
- Foi adicionado o driver nvmem para obter dados de áreas de memória reservadas por firmware, que não estão diretamente acessíveis ao Linux (por exemplo, memória EEPROM, acessível fisicamente apenas pelo firmware, ou dados disponíveis apenas no início do processo de boot).
- O suporte ao sistema de profilagem 'oprofile' foi removido, pois não obteve ampla adoção e foi substituído por um mecanismo mais moderno, o perf.
- Na interface de entrada/saída assíncrona io_uring, foi garantida a integração com cgroups que controlam o uso da memória.
- Para a arquitetura RISC-V, foi implementado o suporte para sistemas NUMA, bem como para os mecanismos kprobes e uprobes.
- Foi adicionada a possibilidade de usar a chamada de sistema kcmp() independentemente da funcionalidade de checkpoints (checkpoint/restore) dos processos.
- Os macros EXPORT_UNUSED_SYMBOL() e EXPORT_SYMBOL_GPL_FUTURE() foram removidos, pois não são utilizados na prática há muitos anos.
- Virtualização e segurança
- Foi adicionado o mecanismo de proteção KFence (Kernel Electric Fence), que captura erros ao trabalhar com memória, como buffer overflows e acessos após liberação de memória. Ao contrário do mecanismo de depuração KASAN, o subsistema KFence é caracterizado por alta velocidade e baixa sobrecarga, permitindo capturar erros de memória que se manifestam apenas em sistemas de produção ou após longos períodos de operação.
- Foi adicionado o suporte para o hipervisor ACRN, desenvolvido com foco na prontidão para execução de tarefas em tempo real e adequação para uso em sistemas críticos. O ACRN garante baixa sobrecarga, garante baixa latência e resposta adequada na interação com o hardware. O suporte à virtualização abrange recursos de CPU, entrada/saída, subsistemas de rede, operações gráficas e de áudio. O ACRN pode ser utilizado para rodar várias instâncias isoladas. máquinas virtuais em blocos de controle eletrônico, painéis de instrumentos, sistemas de informação automotiva, dispositivos IoT consumidores e outros equipamentos embarcados. O ACRN suporta dois tipos de sistemas convidados — VMs de Serviço privilegiadas, que são utilizadas para gerenciar os recursos do sistema (CPU, memória, entrada/saída, etc.), e VMs de Usuário, nas quais podem ser executadas distribuições Linux, Android e Windows.
- No subsistema IMA (Integrity Measurement Architecture), que garante a manutenção de uma base de hashes para verificar a integridade de arquivos e seus metadados relacionados, surgiu a possibilidade de verificar a integridade dos dados do próprio núcleo, por exemplo, para rastrear alterações nas regras do SELinux.
- Foi adicionada a capacidade de interceptar chamadas de hipervisor Xen no hipervisor KVM e redirecioná-las para um emulador que opera no espaço do usuário.
- Adicionada a possibilidade de usar o Linux como ambiente raiz para o hipervisor Hyper-V. O ambiente raiz tem acesso direto ao hardware e é utilizado para executar sistemas convidados (similar ao Dom0 no Xen). Até agora, o Hyper-V (Microsoft Hypervisor) suportava Linux apenas em ambientes convidados, mas o próprio hipervisor era gerenciado a partir de um ambiente baseado no Windows.
- Adicionada suporte a criptografia inline para cartões eMMC, permitindo a utilização de mecanismos de criptografia embutidos no controlador de armazenamento, que realizam criptografia e descriptografia transparentes de entrada/saída.
- Foram removidos da subsistema de criptografia os hashes RIPE-MD 128/256/320 e Tiger 128/160/192, que não eram utilizados no núcleo, assim como o cifrador de fluxo Salsa20, que foi substituído pelo algoritmo ChaCha20. O algoritmo blake2 foi atualizado para a implementação blake2s.
- Subsistema de Rede
- Adicionada a possibilidade de mover o manipulador de polling NAPI de dispositivos de rede para uma thread separada do núcleo, o que permite um aumento de desempenho para certos tipos de carga. Anteriormente, o polling era realizado no contexto de softirq e não era abrangido pelo planejador de tarefas, dificultando a realização de uma otimização fina para alcançar um desempenho máximo. A execução em uma thread separada do núcleo permite monitorar o manipulador de polling do espaço do usuário, anexá-lo a núcleos de CPU separados e considerar ao planejar a troca de tarefas. Para ativar o novo modo, um parâmetro foi proposto em sysfs: /sys/class/net//threaded.
- A integração no núcleo do MPTCP (MultiPath TCP) foi continuada, uma extensão do protocolo TCP que organiza o funcionamento da conexão TCP com a entrega de pacotes simultaneamente por vários caminhos através de diferentes interfaces de rede, associadas a diferentes endereços IP. A nova versão adicionou a capacidade de atribuir prioridade a determinados fluxos, permitindo, por exemplo, organizar o funcionamento de fluxos de reserva que se ativam apenas em caso de problemas com o fluxo primário.
- No IGMPv3, foi adicionada a suporte ao mecanismo EHT (Explicit Host Tracking).
- No mecanismo de filtragem de pacotes netfilter, foi implementada a capacidade de controle exclusivo de determinadas tabelas, permitindo que um processo em segundo plano do firewall aprenda a bloquear certas tabelas, proibindo qualquer outra intervenção nelas.
- Hardware
- Foi realizada a limpeza das plataformas ARM obsoletas e sem suporte. O código das plataformas efm32, picoxcell, prima2, tango, u300, zx e c6x, bem como os drivers associados a essas plataformas, foi removido.
- No driver amdgpu, foi implementada a possibilidade de overclock (OverDrive) das placas baseadas no GPU Sienna Cichlid (Navi 22, Radeon RX 6xxx). Suporte ao formato de pixel FP16 foi adicionado para o DCE (display controller engine) da 8ª à 11ª geração. Para o GPU Navy Flounder (Navi 21) e APU Van Gogh, foi implementada a possibilidade de reinicializar o GPU.
- No driver i915 para placas gráficas Intel, foi implementado o parâmetro i915.mitigations para desativar os mecanismos de isolamento e proteção a favor do aumento de desempenho. Para chips a partir do Tiger Lake, foi ativado o suporte ao mecanismo VRR (Variable Rate Refresh), que permite a alteração adaptativa da frequência de atualização do monitor para garantir suavidade e eliminar engasgos durante os jogos. O suporte à tecnologia Intel Clear Color foi adicionado para melhorar a precisão na reprodução de cores. O suporte ao DP-HDMI 2.1 foi implementado. A possibilidade de controle da retroiluminação dos displays eDP foi realizada. Para o GPU Gen9 com suporte ao LSPCON (Level Shifter and Protocol Converter), foi ativado o suporte ao HDR.
- No driver nouveau, foi adicionada suporte inicial para GPUs NVIDIA baseadas na arquitetura GA100 (Ampere).
- No driver msm, foi adicionada suporte para GPUs Adreno 508, 509 e 512, utilizadas nos chips SDM (Snapdragon) 630, 636 e 660.
- Foi adicionado suporte para placas de som Sound BlasterX AE-5 Plus, Lexicon I-ONIX FW810s e Pioneer DJM-750. O suporte ao subsistema de som Intel Alder Lake PCH-P foi implementado. Realizou-se suporte para simulação de software da conexão e desconexão do conector de áudio para depuração de manipuladores no espaço do usuário.
- Adicionada suporte para consoles de jogos Nintendo 64, fabricados de 1996 a 2003 (as tentativas anteriores de portar o Linux para o Nintendo 64 não foram concluídas e tinham status de Vaporware). A motivação para criar uma nova versão para uma plataforma desatualizada, que não é mais fabricada há quase duas décadas, é o desejo de estimular o desenvolvimento de emuladores e facilitar a portabilidade de jogos.
- Adicionado driver para o controlador de jogos Sony PlayStation 5 DualSense.
- Adicionada suporte para plataformas ARM, dispositivos e sistemas: PineTab, Snapdragon 888 / SM8350, Snapdragon MTP, Two Beacon EmbeddedWorks, Intel eASIC N5X, Netgear R8000P, Plymovent M2M, Beacon i.MX8M Nano, NanoPi M4B.
- Adicionada suporte para smartphones Purism Librem5 Evergreen, Xperia Z3+/Z4/Z5, ASUS Zenfone 2 Laser, BQ Aquaris X5, OnePlus6, OnePlus6T, Samsung GT-I9070.
- Adicionado driver bcm-vk para placas aceleradoras Broadcom VK (por exemplo, placas PCIe Valkyrie e Viper), que podem ser usadas para delegar a um dispositivo separado as operações de processamento de som, vídeo e imagens, bem como tarefas relacionadas à criptografia.
- Adicionada suporte para a plataforma Lenovo IdeaPad com controle de carregamento constante e retroiluminação do teclado. Também foi adicionada suporte para o perfil ACPI da plataforma ThinkPad com controle de modos de consumo de energia. Adicionado driver para a sub-sistema HID do Lenovo ThinkPad X1 Tablet Gen 2.
- Adicionado driver ov5647 com suporte ao módulo de câmera para Raspberry Pi.
- Adicionada suporte para RISC-V SoC FU740 e placas HiFive Unleashed. Também foi adicionado um novo driver para o chip Kendryte K210.
Fonte: opennet.ru
