Lançamento do núcleo Linux 5.19

Após dois meses de desenvolvimento, Linus Torvalds apresentou o lançamento do núcleo Linux 5.19. Entre as mudanças mais notáveis estão: suporte à arquitetura de processador LoongArch, integração de patches "BIG TCP", modo "on-demand" no fscache, remoção do código para suporte ao formato a.out, possibilidade de aplicar ZSTD para a compressão de firmware, interface para gerenciar a exclusão de memória do espaço do usuário, aumento da confiabilidade e desempenho do gerador de números pseudoaleatórios, suporte para extensões Intel IFS (In-Field Scan), AMD SEV-SNP (Secure Nested Paging), Intel TDX (Trusted Domain Extensions) e ARM SME (Scalable Matrix Extension).

No anúncio, Linus informou que provavelmente o próximo lançamento do núcleo receberá o número 6.0, uma vez que na linha 5.x se acumularam lançamentos suficientes para mudar o primeiro número na versão. A mudança de numeração é feita por motivos estéticos e é um passo formal que remove o desconforto associado ao acúmulo de muitos lançamentos na série.

Linus também mencionou que utilizou um notebook Apple baseado na arquitetura ARM64 (Apple Silicon) com um ambiente Linux baseado na distribuição Asahi Linux para compor o lançamento. Este não é o principal workstation de Linus, mas ele utilizou essa plataforma para testar sua viabilidade para trabalhar no núcleo e ter certeza de que poderia compor lançamentos do núcleo durante suas viagens, tendo um notebook leve à mão. Anteriormente, há muitos anos, Linus teve experiência com equipamentos Apple para desenvolvimento — ele usou uma vez um computador com CPU ppc970 e um Macbook Air.

A nova versão inclui 16.401 correções de 2.190 desenvolvedores (na versão anterior, foram 16.206 correções de 2.127 desenvolvedores), o tamanho do patch é de 90 MB (as mudanças afetaram 13.847 arquivos, adicionando 1.149.456 linhas de código e removendo 349.177 linhas). Cerca de 39% de todas as mudanças apresentadas no 5.19 estão relacionadas a drivers de dispositivos, aproximadamente 21% estão relacionadas à atualização de código específico de arquiteturas de hardware, 11% com a pilha de rede, 4% com sistemas de arquivos e 3% com subsistemas internos do núcleo.

As principais novidades no núcleo 5.19:

  • Subsistema de disco, entrada/saída e sistemas de arquivos
    • O sistema de arquivos EROFS (Enhanced Read-Only File System), projetado para ser utilizado em partições acessíveis somente em modo de leitura, foi alterado para utilizar a subsistema fscache, que oferece cache de dados. Essa modificação resultou em um aumento significativo na performance de sistemas que executam um grande número de contêineres a partir de uma imagem baseada em EROFS.
    • A subsistema fscache ganhou um modo de leitura sob demanda ('on-demand'), que é utilizado para otimizar o EROFS. O novo modo permite organizar o cache de leitura de imagens do sistema de arquivos que estão no sistema local. Diferente do modo inicialmente disponível, que era orientado ao cache na filesystem local de dados transferidos através de sistemas de arquivos em rede, o modo 'on-demand' delega as funções de extração de dados e gravação no cache a um processo em segundo plano que opera no espaço do usuário.
    • No XFS, foi implementada a possibilidade de armazenar bilhões de atributos estendidos em i-nodes. O número máximo de extensões para um único arquivo foi aumentado de 4 bilhões para 247. Também foi implementado um modo para a atualização atômica de vários atributos estendidos de um arquivo ao mesmo tempo.
    • No sistema de arquivos Btrfs, o trabalho com bloqueios foi otimizado, resultando em um aumento de performance de cerca de 7% na gravação direta no modo nowait. A performance das operações no modo NOCOW (sem copy-on-write) aumentou em aproximadamente 3%. A carga no cache de páginas foi reduzida ao usar o comando 'send'. O tamanho mínimo das subpáginas foi reduzido de 64K para 4K (pode-se usar subpáginas menores que as páginas do kernel). A transição foi feita de uma árvore base (radix tree) para o algoritmo XArrays.
    • No servidor NFS, foi acrescentado um modo de extensão para o estado de bloqueio, estabelecido pelo cliente, que deixou de responder a solicitações. O novo modo permite atrasar a limpeza do bloqueio por até um dia, caso outro cliente não solicite um bloqueio concorrente. No modo padrão, o bloqueio é limpo após 90 segundos após o cliente deixar de responder.
    • Na subsistema de rastreamento de eventos do FS fanotify, foi implementada a flag FAN_MARK_EVICTABLE, através da qual se pode desativar a fixação dos i-nodes alvo na cache, por exemplo, para ignorar subárvores sem fixar suas partes na cache.
    • O driver para o sistema de arquivos FAT32 agora suporta a obtenção de informações sobre a data de criação de arquivos através da chamada de sistema statx, implementando uma versão mais eficiente e funcional do stat(), que retorna informações detalhadas sobre o arquivo.
    • Foram realizadas otimizações significativas no driver exFAT, relacionadas à limpeza simultânea de grupos de setores no modo ativo 'dirsync', em vez da limpeza sequencial setor a setor. Com a redução no número de solicitações de blocos, após as otimizações, a performance na criação de um grande número de diretórios no cartão SD aumentou mais de 73-85%, dependendo do tamanho do cluster.
    • A primeira atualização corretiva para o driver ntfs3 foi incorporada ao núcleo. Desde a inclusão do ntfs3 no núcleo 5.15 em outubro do ano passado, o driver não foi atualizado, e o contato com os desenvolvedores foi perdido, mas agora eles retomaram a publicação de modificações. Os patches propostos corrigem erros que causam vazamentos de memória e falhas, resolvem problemas com a execução do xfstests, removem código não utilizado e corrigem erros de digitação.
    • Para o OverlayFS, foi implementada a possibilidade de mapeamento de identificadores de usuários de sistemas de arquivos montados, usada para associar arquivos de um determinado usuário em uma partição montada de outro usuário no sistema atual.
  • Memória e serviços do sistema
    • Adicionada a suporte inicial para a arquitetura de conjunto de instruções LoongArch, utilizada nos processadores Loongson 3 5000 e que implementa uma nova ISA RISC, similar ao MIPS e RISC-V. A arquitetura LoongArch está disponível em três variantes: 32 bits reduzido (LA32R), 32 bits normal (LA32S) e 64 bits (LA64).
    • O código para suporte ao formato de arquivos executáveis a.out foi removido, que foi descontinuado na versão 5.1. O formato a.out não é mais utilizado em sistemas Linux, e a geração de arquivos a.out não é suportada por ferramentas modernas nas configurações padrão para Linux. O carregador para arquivos a.out pode ser totalmente implementado no espaço do usuário.
    • O suporte para opções de inicialização específicas da arquitetura x86 foi descontinuado: nosep, nosmap, nosmep, noexec e noclflush.
    • O suporte para a arquitetura de CPU obsoleta h8300 (Renesas H8/300) foi descontinuado, após muito tempo sem suporte.
    • Foram ampliadas as capacidades relacionadas à resposta à detecção de bloqueios divididos («split lock»), que ocorrem ao acessar dados desmembrados na memória devido ao fato de que, ao executar uma instrução atômica, os dados cruzam duas linhas de cache da CPU. Esses bloqueios podem resultar em uma queda significativa de desempenho. Se anteriormente o núcleo emitia um aviso informando sobre o processo que causou o bloqueio, agora o processo problemático será adicionalmente desacelerado para preservar o desempenho do restante do sistema.
    • Foi adicionada a suporte para o mecanismo IFS (In-Field Scan) implementado nos processadores Intel, permitindo a execução de testes diagnósticos de baixo nível no CPU, capazes de detectar problemas que não são identificados por ferramentas padrão baseadas em códigos de correção de erros (ECC) ou bits de paridade. Os testes executados são fornecidos na forma de um firmware carregável, semelhante às atualizações de microcódigo. Os resultados dos testes estão disponíveis através do sysfs.
    • Foi adicionada a possibilidade de embutir no núcleo um arquivo bootconfig, permitindo que, além das opções de linha de comando, sejam definidas as configurações de funcionamento do núcleo através de um arquivo de configurações. A incorporação é realizada com a opção de compilação 'CONFIG_BOOT_CONFIG_EMBED_FILE="/PATH/TO/BOOTCONFIG/FILE"'. Anteriormente, o bootconfig era definido através da anexação à imagem initrd. A incorporação no núcleo permite utilizar bootconfig em configurações sem initrd.
    • Foi implementada a possibilidade de carregar firmwares compactados usando o algoritmo Zstandard. Foi adicionado um conjunto de arquivos de controle em /sys/class/firmware/* no sysfs, permitindo iniciar o carregamento de firmwares a partir do espaço do usuário.
    • Na interface de entrada/saída assíncrona io_uring, foi proposto um novo flag IORING_RECVSEND_POLL_FIRST, que, quando ativado, fará com que a operação de rede seja inicialmente transmitida para processamento usando polling, o que pode economizar recursos em situações nas quais um atraso na operação é aceitável. A io_uring também adicionou suporte para a chamada de sistema socket(), propôs novos flags para simplificar a gestão de descritores de arquivos, adicionou um modo 'multi-shot' para aceitar várias conexões simultaneamente na chamada accept(), e acresceu operações para encaminhar comandos NVMe diretamente para o dispositivo.
    • Para a arquitetura Xtensa, foi fornecido suporte para a ferramenta de depuração KCSAN (Kernel Concurrency Sanitizer), destinada à identificação dinâmica de estados de corrida dentro do núcleo. Também foi adicionado suporte para o modo de suspensão e coprocessadores.
    • Para a arquitetura m68k (Motorola 68000) foi implementado máquina virtual (simulador da plataforma), baseado no emulador Android Goldfish.
    • Para a arquitetura AArch64, foi implementado suporte para as extensões Armv9-A SME (Scalable Matrix Extension).
    • Na subsistema eBPF, foi permitido o armazenamento de ponteiros tipados em estruturas map, além de ser adicionado suporte para ponteiros dinâmicos.
    • Foi proposto um novo mecanismo preemptivo de desalocação de memória que suporta gerenciamento a partir do espaço do usuário através do arquivo memory.reclaim. Escrever um número no arquivo especificado resultará em uma tentativa de desalocação do número correspondente de bytes do conjunto associado ao cgroup.
    • A precisão da contagem do uso de memória durante a compressão de dados na área de troca foi aumentada com o mecanismo zswap.
    • Para a arquitetura RISC-V, foi fornecido suporte para execução de arquivos binários de 32 bits em sistemas de 64 bits, além de ter sido adicionado um modo para vincular atributos restritivos a páginas de memória (por exemplo, para proibir a cacheagem) e implementada a função kexec_file_load().
    • A implementação do suporte a sistemas de 32 bits Armv4T e Armv5 foi adaptada para uso em compilações de núcleo multinível universais, adequadas para diferentes sistemas ARM.
  • Virtualização e segurança
    • No subsistema EFI, foi implementada a capacidade de transmitir informações secretas de forma confidencial para sistemas convidados sem revelá-las ao sistema host. Os dados são fornecidos através do diretório security/coco em securityfs.
    • No modo de proteção Lockdown, que limita o acesso do usuário root ao núcleo e bloqueia caminhos de contorno ao UEFI Secure Boot, foi eliminada uma falha que permitia contornar a proteção através de manipulações com o depurador do núcleo.
    • Foram incluídos patches voltados para aumentar a confiabilidade e o desempenho do gerador de números pseudoaleatórios.
    • Ao compilar com o Clang 15, foi implementado suporte para o mecanismo de randomização de estruturas do núcleo.
    • No mecanismo Landlock, que permite limitar a interação de um grupo de processos com o ambiente externo, foi fornecido suporte para regras que controlam a execução de operações de renomeação de arquivos.
    • O subsistema IMA (Integrity Measurement Architecture), destinado a verificar a integridade dos componentes do sistema operacional por meio de assinaturas digitais e hashes, foi adaptado para usar o módulo fs-verity para verificação de arquivos.
    • A lógica de ações foi alterada ao desativar o acesso não privilegiado ao subsistema eBPF — anteriormente, todos os comandos relacionados à chamada de sistema bpf() eram desativados, mas a partir da versão 5.19, o acesso aos comandos que não criam objetos foi mantido. Com esse comportamento, um processo privilegiado é necessário para carregar um programa BPF, mas, após isso, processos não privilegiados podem interagir com esse programa.
    • Foi adicionada a suporte à extensão AMD SEV-SNP (Secure Nested Paging), que garante a operação segura com tabelas de páginas de memória aninhadas e protege contra os ataques "undeSErVed" e "SEVerity" em processadores AMD EPYC, permitindo contornar o mecanismo de proteção AMD SEV (Secure Encrypted Virtualization).
    • Foi adicionada a suporte ao mecanismo Intel TDX (Trusted Domain Extensions), que permite bloquear tentativas de acesso não autorizado à memória criptografada. máquinas virtuais.
    • No driver virtio-blk, utilizado para emular dispositivos de bloco, foi adicionada a suporte a entrada/saída usando polling, o que, segundo testes realizados, reduziu a latência em cerca de 10%.
  • Subsistema de Rede
    • Inclui uma série de patches BIG TCP que permitem aumentar o tamanho máximo do pacote TCP para 4GB, otimizando o desempenho de redes internas de data centers de alta velocidade. Esse aumento no tamanho do pacote, dado o campo de 16 bits no cabeçalho, é alcançado através da implementação de pacotes "jumbo", cujo tamanho no cabeçalho IP é definido como 0, e o tamanho real é transmitido em um campo separado de 32 bits em um cabeçalho anexo. Durante os testes de desempenho, a definição do tamanho do pacote para 185 KB aumentou a largura de banda em 50% e reduziu significativamente a latência na transmissão de dados.
    • O trabalho de integração de ferramentas para rastreamento das causas de queda de pacotes (códigos reason) no stack de rede foi continuado. O código da causa é transmitido durante a liberação da memória associada ao pacote, permitindo considerar situações como a perda de pacotes devido a erros no preenchimento dos campos do cabeçalho, detecção de spoofing pelo filtro rp_filter, checksum incorreto, falta de memória, violação das regras IPSec XFRM, número de sequência TCP incorreto, entre outros.
    • Foi adicionada a suporte para reverter conexões MPTCP (MultiPath TCP) para o uso do TCP comum, em situações em que determinadas capacidades do MPTCP não podem ser utilizadas. O MPTCP é uma extensão do protocolo TCP que organiza o funcionamento da conexão TCP com a entrega de pacotes simultaneamente por várias rotas através de diferentes interfaces de rede, vinculadas a diferentes endereços IP. Foi adicionado um API para gerenciar fluxos MPTCP do espaço do usuário.
  • Hardware
    • Adicionadas mais de 420 mil linhas de código relacionadas ao driver amdgpu, das quais cerca de 400 mil linhas correspondem a cabeçalhos gerados automaticamente com dados para os registros ASIC no driver para GPUs AMD, e outras 22,5 mil linhas implementam suporte inicial para AMD SoC21. O tamanho total do driver para GPU AMD ultrapassou 4 milhões de linhas de código. Além do SoC21, o driver AMD inclui suporte para SMU 13.x (System Management Unit), atualizou o suporte para USB-C e GPUVM, e foi feita a preparação para suporte às próximas gerações de plataformas RDNA3 (RX 7000) e CDNA (AMD Instinct).
    • No driver i915 (Intel), ampliaram-se as capacidades relacionadas ao gerenciamento de consumo de energia. Foram adicionados identificadores para GPUs Intel DG2 (Arc Alchemist), utilizadas em notebooks, e garantido suporte inicial para a plataforma Intel Raptor Lake-P (RPL-P), além de informações sobre placas gráficas Arctic Sound-M. Também foi implementado um ABI para mecanismos computacionais, com suporte ao formato Tile4 para placas DG2, e a compatibilidade com DisplayPort HDR foi estabelecida para sistemas baseados na microarquitetura Haswell.
    • No driver Nouveau, foi feita a transição para o uso do manipulador drm_gem_plane_helper_prepare_fb, aplicando a alocação estática de memória a algumas estruturas e variáveis. No que diz respeito à utilização de códigos fonte abertos da NVIDIA para módulos do núcleo em Nouveau, o trabalho atualmente se concentra na identificação e correção de erros. No futuro, a firmware publicada deverá ser usada para aumentar o desempenho do driver.
    • Foi adicionado um driver para o controlador NVMe, utilizado em computadores Apple baseados no chip M1.

Simultaneamente, a Fundação de Software Livre da América Latina lançou uma versão completamente livre do kernel 5.19 — Linux-libre 5.19-gnu, livre de elementos de firmwares e drivers que contêm componentes não livres ou trechos de código cuja aplicação é limitada pelo fabricante. Na nova versão, foram limpos os drivers para pureLiFi X/XL/XC e TI AMx3 Wkup-M3 IPC. O código de limpeza de blobs foi atualizado para drivers e subsistemas como Silicon Labs WFX, AMD amdgpu, Qualcomm WCNSS Peripheral Image Loader, Realtek Bluetooth, Mellanox Spectrum, Marvell WiFi-Ex, Intel AVS, IFS, pu3-imgu. Foi implementado o tratamento de arquivos devicetree Qualcomm AArch64. Adicionada a suporte a um novo esquema de nomenclatura para componentes do Sound Open Firmware. A limpeza do driver ATM Ambassador foi descontinuada, já que foi removido do kernel. O gerenciamento da limpeza de blobs em HDCP e Mellanox Core foi traslado para tags kconfig separadas.

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