Lançamento do kernel Linux 7.0

Após dois meses de desenvolvimento, Linus Torvalds apresentou o lançamento do núcleo Linux 7.0. Entre as mudanças mais notáveis estão: regras para a aplicação de assistentes de IA, a inclusão do Rust como recurso principal do núcleo, melhorias no desempenho de swap, a ativação padrão do modo PREEMPT_LAZY, suporte a filtros para operações io_uring, um novo sistema de arquivos Nullfs, infraestrutura fserror, ferramentas de monitoramento XFS, suporte a remapeamento em Btrfs, a versão NFS 4.1 ativada por padrão, integração do algoritmo criptográfico pós-quântico ML-DSA e ativação do AccECN no subsistema de rede, além do suporte inicial para WiFi 8.

O número 7.0 foi atribuído pois na ramificação 6.x houve um número suficiente de lançamentos para alterar o primeiro dígito da versão (na época, a versão 6.0 foi criada logo após 5.19). A mudança de numeração é feita por razões estéticas e é um passo formal que alivia a preocupação causada pelo acúmulo de muitos lançamentos na série.

Na nova versão, foram aceitas 15624 correções de 2477 desenvolvedores, sendo o tamanho do patch de 56 MB (as alterações afetaram 18053 arquivos, com 704060 linhas de código adicionadas e 278132 linhas removidas). No lançamento anterior, houve 15657 correções de 2237 desenvolvedores, e o tamanho do patch foi de 52 MB. Cerca de 51% de todas as alterações apresentadas no 7.0 estão relacionadas a drivers de dispositivos, aproximadamente 11% referem-se à atualização de código específico de arquiteturas de hardware, 14% estão ligadas à pilha de rede, 5% às file systems e 3% aos subsistemas internos do núcleo.

Principais inovações no núcleo 7.0 (1, 2, 3):

  • Subsistema de disco, entrada/saída e sistemas de arquivos
    • Foi implementada a infraestrutura fserror e adicionado um API para obter informações sobre erros de entrada/saída e corrupção de metadados ao trabalhar com arquivos. A infraestrutura proposta unifica a transferência de informações sobre erros nas file systems, comunicando-se com o espaço do usuário através do mecanismo fsnotify.
    • O XFS recebeu novas funcionalidades para monitoramento do estado do sistema de arquivos a partir do espaço do usuário. Foi proposta a operação ioctl XFS_IOC_HEALTH_MONITOR, que retorna um descritor de arquivo através do qual é possível obter informações sobre falhas relacionadas a danos nos metadados ou erros de entrada/saída, além de monitorar mudanças de estado do sistema de arquivos, como desmontagem e encerramento. Adicionalmente, foi proposta uma tarefa em segundo plano gerenciada pelo systemd chamada xfs_healer, que processa eventos de estado do sistema de arquivos a partir do espaço do usuário e, se necessário, inicia automaticamente procedimentos de recuperação.
    • O sistema de arquivos Btrfs recebeu suporte experimental para a estrutura "árvore de remapeamento" (remap tree), que no futuro pode ser utilizada como uma camada intermediária durante operações de entrada e saída. A essência da funcionalidade adicionada é que, após mover dados no dispositivo, em vez de atualizar todas as estruturas relacionadas a esses dados, são mantidos endereços antigos e novos em uma estrutura adicional chamada "remap tree", permitindo que os endereços sejam trocados ao acessar os dados. Este novo approach é apresentado como mais confiável e flexível, além de simplificar a futura expansão das funcionalidades do Btrfs.
    • O Btrfs implementou o suporte para entrada/saída direta em situações em que o tamanho do bloco excede o tamanho da página de memória do sistema.
    • Foi incluído um novo sistema de arquivos chamado "Nullfs", que pode ser utilizado como um placeholder para o sistema de arquivos raiz. O sistema de arquivos Nullfs está sempre vazio, não contém dados e não suporta modificações. O propósito do Nullfs é ser usado como um sistema inicial para simplificar o processo de inicialização do sistema — outros sistemas de arquivos são montados sobre o Nullfs e a chamada de sistema pivot_root() é utilizada para trocar o sistema de arquivos raiz, em vez de limpar o conteúdo do initramfs e usar o sistema de arquivos raiz associado.
    • Foi implementada a atualização das informações sobre o tempo de modificação dos arquivos em modo não bloqueante. Anteriormente, a chamada file_update_time_flags() com o flag IOCB_NOWAIT retornava o erro "-EAGAIN", o que impedia a utilização de operações de gravação direta em modo não bloqueante.
    • Nos sistemas de arquivos, a opção de bloqueios de notificação (lease) foi traduzida para uma categoria de opções separáveis. Por padrão, esse mecanismo não é ativado devido a problemas com os sistemas de arquivos, que não foram originalmente projetados para sua aplicação. Por exemplo, os sistemas de arquivos 9p e cephfs não oferecem suporte a isso.
    • No sistema de arquivos EROFS (Extendable Read-Only File System), destinado a partições acessíveis apenas em modo somente leitura, o algoritmo LZMA é usado por padrão para compressão. Os algoritmos DEFLATE e Zstandard estão disponíveis opcionalmente e não estão mais marcados como experimentais. Foi implementado o compartilhamento de registros no cache de páginas (page-cache) para arquivos idênticos em sistemas de arquivos EROFS diferentes.
    • O modo laptop_mode, que economizava energia ao adiar e combinar operações de gravação no disco rígido para prolongar o tempo em que o disco permanecia em modo de suspensão e reduzir o número de ativações, foi removido. Esse modo perdeu relevância, uma vez que os discos rígidos foram substituídos por unidades de estado sólido em dispositivos móveis modernos.
    • O sistema de arquivos F2FS foi atualizado para usar grandes folhetos de páginas de memória (large folios).
    • O trabalho no driver ntfs3, desenvolvido pela Paragon Software, foi revitalizado. Adicionada a suporte a operações de arquivos baseadas em iomap, implementadas opções llseek SEEK_DATA/SEEK_HOLE, e adicionado o modo delalloc para a alocação atrasada de blocos. Enquanto isso, na lista de e-mails dos desenvolvedores do núcleo, em fevereiro, foi aprovada a inclusão de uma nova implementação do NTFS — ntfsplus, desenvolvida para substituir o ntfs3, em uma das futuras versões do núcleo.
    • Por padrão, ao compilar, a versão 4.1 do protocolo NFS (CONFIG_NFS_V4_1) está ativada. O bloqueio de exportação via NFS de sistemas de arquivos pseudo-especializados, como pidfs e nsfs, é garantido. No NFSD, foi implementada uma capacidade experimental para o uso de ACL POSIX e adicionada a suporte para alteração dinâmica do pool de threads (thread-pool) com base na carga.
  • Memória e serviços do sistema
    • Foram aprovadas regras oficiais para o uso de assistentes de IA e a inclusão de conteúdo gerado automaticamente no núcleo. Ao transmitir o código gerado, é necessário marcá-lo indicando o assistente de IA utilizado através da tag "Assisted-by". Os assistentes de IA estão proibidos de adicionar a tag "Signed-off-by" — a pessoa que enviou o patch é considerada sua autora, responsável pela alteração enviada e garante sua qualidade. Os desenvolvedores devem realizar a revisão manual do código obtido através da IA e verificar a conformidade do resultado com os requisitos de licenciamento.
    • O suporte a Rust foi transferido de recursos experimentais para recursos principais do núcleo. O suporte a Rust não está ativado por padrão e não torna Rust uma dependência obrigatória de construção do núcleo.
    • A integração do mecanismo "Swap Table" foi concluída no núcleo, permitindo aumentar o desempenho da troca. O aumento na eficiência é alcançado pela redução da concorrência pelo acesso ao cache de troca, pela busca mais eficiente no cache e pela diminuição da fragmentação. O backend baseado no Swap Table foi ativado para o cache de troca em vez do backend XArray, permitindo que no teste redis-benchmark com BGSAVE aumentasse o número de solicitações processadas em 22%.
    • Foi adicionado suporte à nova extensão de Análise de Segurança de Threads que surgiu no Clang 22, permitindo identificar, durante a compilação, estados de corrida potenciais e erros causados pela configuração inadequada de bloqueios. A extensão oferece uma série de atributos, como GUARDED_BY(…), REQUIRES(…), RELEASE(…) e ACQUIRE(…), que permitem marcar funções cobertas por bloqueios e separar os contextos de escopo de bloqueios. Durante a fase de compilação, é realizada uma verificação da aplicação correta de primitivos de sincronização, como mutexes, com base na avaliação da atividade ou inatividade do contexto associado.
    • Na chamada de sistema open_tree, foi adicionado o sinal OPEN_TREE_NAMESPACE para simplificar a configuração de contêineres isolados e acelerar a inicialização de contêineres em sistemas com um grande número de pontos de montagem. De forma semelhante ao OPEN_TREE_CLONE, o novo sinal copia apenas a árvore de pontos de montagem especificada (mount tree), mas, em vez de retornar um descritor de arquivo local, retorna um descritor de arquivo no novo espaço de nomes de pontos de montagem, onde a árvore copiada é montada sobre a cópia do sistema de arquivos raiz real. O sinal OPEN_TREE_NAMESPACE é necessário para evitar a execução separada das operações unshare(CLONE_NEWNS) e pivot_root(), usadas na criação de contêineres.
    • Na chamada de sistema rseq, foi adicionado um mecanismo de extensão de quanta de tempo (time slice), permitindo obter tempo de processador adicional para a execução contínua de seções críticas. A ideia é evitar que o escalonador de tarefas interrompa uma seção crítica com uma bloqueio ativa, levando a transferência de controle para outras threads que utilizam o recurso, nas quais a bloqueio permanece ativa. A extensão do quanta de tempo é feita sem custos adicionais, mas também sem garantias rigorosas, fornecidas por uma regulação de prioridades plena.
    • Para as arquiteturas arm64, loongarch, powerpc, riscv, s390 e x86, o modo de preempção (preemption) no escalonador foi alterado por padrão de PREEMPT_NONE para PREEMPT_LAZY. O número de modos possíveis foi reduzido de quatro para dois — PREEMPT_FULL e PREEMPT_LAZY (os modos PREEMPT_NONE e PREEMPT_VOLUNTARY foram mantidos apenas para arquiteturas que não suportam PREEMPT_FULL e PREEMPT_LAZY). O modo PREEMPT_LAZY aplica o modelo de preempção total (PREEMPT_FULL) para tarefas em tempo real (RR/FIFO/DEADLINE), mas retarda a preempção de tarefas normais (SCHED_NORMAL) até o limite do tick. O atraso introduzido resulta na redução de casos de preempção de detentores de bloqueios, permitindo que a performance se aproxime das configurações que utilizam o modelo de preempção voluntária, ou seja, PREEMPT_LAZY mantém as capacidades de preempção total em relação a tarefas em tempo real, mas minimiza a queda de desempenho para tarefas normais.

      A ativação do PREEMPT_LAZY resultou em uma sério retrocesso, diminuindo em duas vezes o desempenho do PostgreSQL em sistemas ARM64. Para corrigir a queda de desempenho, os desenvolvedores do PostgreSQL foram sugeridos a utilizar a opção PR_RSEQ_SLICE_EXTENSION para reduzir a probabilidade de preempção do possuidor do bloqueio.

    • Continua a transferência de alterações da branch Rust-for-Linux, relacionadas ao uso da linguagem Rust como segunda linguagem para o desenvolvimento de drivers e módulos do kernel. Graças à biblioteca "syn", que simplifica a escrita de macros complexas, foi possível reduzir o tamanho do código Rust no kernel ao simplificar as definições dos macros procedurais existentes. Foram ampliadas as capacidades das bibliotecas kernel, macros e pin-init.
    • Foi adicionada uma opção ao sistema de entrada/saída assíncrona io_uring para uso de filas de submissão não circulares, que são mais eficazmente armazenadas em cache quando a execução de uma solicitação é concluída antes do retorno da chamada do sistema.
    • No subsistema eBPF, no mecanismo BTF (BPF Type Format), que fornece informações para verificação de tipos no pseudocódigo BPF, foi utilizado a pesquisa binária para encontrar informações de depuração, o que aumentou a eficiência de carregamento dos programas BPF. O suporte para argumentos implícitos na chamada de kfunc (funções do kernel disponíveis para uso em programas BPF), definidos com a flag KF_IMPLICIT_ARGS, foi adicionado ao eBPF.
    • O código de suporte para o ramdisk inicial (initrd) baseado em linuxrc, há muito declarado obsoleto, foi removido. As implementações restantes de initrd estão previstas para serem removidas em 2027. No lugar do initrd, deve-se usar o initramfs (a diferença é que o initrd armazena o ambiente de inicialização inicial em uma imagem de disco, enquanto o initramfs o faz em um sistema de arquivos).
    • Na unidade de bloco zram, utilizada para o armazenamento comprimido da partição de swap na memória, a lógica de trabalho com páginas de memória comprimidas foi alterada ao mover dados opcionalmente para o armazenamento permanente em caso de esgotamento da memória RAM disponível. Anteriormente, as páginas de memória eram descompactadas antes da gravação no meio físico, mas agora são salvas como estão em formato comprimido, o que reduz a carga na CPU e economiza energia em operação autônoma.
    • Na ferramenta timerlat, destinada a medir latências ao trabalhar com o agendador de tarefas, foi adicionada a opção "—bpf-action" para executar programas BPF caso um limite definido seja ultrapassado.
    • No sistema de rastreamento ftrace, foi adicionada uma configuração "bitmask-list" para exibir as máscaras de bits de forma legível (em forma de lista de bits, em vez de um número hexadecimal). Foram adicionadas funcionalidades em tracefs para auditoria de filtros e gatilhos. Comando "perf sched stats" foi implementado para coletar e exibir estatísticas sobre o funcionamento do agendador de tarefas.
    • Adicionadas opções de compilação LOGO_LINUX_MONO_FILE, LOGO_LINUX_VGA16_FILE e LOGO_LINUX_CLUT224_FILE para especificar o arquivo da imagem do logotipo que será exibido durante a inicialização do kernel em vez do logotipo padrão com o pinguim Tux.
  • Virtualização e segurança
    • No sistema de entrada/saída assíncrona io_uring, foi implementada a capacidade de anexar programas BPF com filtros, controlando o que operações SQE (Submission Queue Entry) específicas podem fazer (semelhante às chamadas de sistema em io_uring). A funcionalidade adicionada é equivalente a filtros de chamadas de sistema. Os filtros podem ser vinculados a tarefas específicas e serão herdados ao criar outros processos após a chamada fork(). Com filtros ativos, filtros adicionais só podem anexar restrições complementares, mas não desativar os existentes. Essa funcionalidade permitirá bloquear métodos de contornar a filtragem de chamadas de sistema em ambientes sandbox, baseados na execução de operações semelhantes às chamadas de sistema disponibilizadas em io_uring.
    • No SELinux, foi adicionada a capacidade de gerenciar o acesso a tokens BPF, permitindo que processos não privilegiados realizem algumas operações privilegiadas com BPF, como carregar programas BPF no kernel e criar estruturas de mapa.
    • Adicionado suporte ao algoritmo de formação de assinaturas digitais ML-DSA (CRYSTALS-Dilithium), que se baseia em teoria de redes e é resistente a ataques de computadores quânticos. Foi disponibilizada a possibilidade de usar ML-DSA para autenticação de módulos do kernel.
    • Removida a possibilidade de usar esquemas de formação de assinaturas digitais com o algoritmo SHA-1 para validar módulos do kernel (o suporte à carga de módulos assinados foi mantido).
    • Na gravação de auditoria NETFILTER_PKT, foram adicionados os campos 'sport' e 'dport' para inspecionar números de portas de rede, e não apenas. endereços IP.
    • Para sistemas com arquitetura RISC-V, foi implementado suporte para as extensões Zicfiss e Zicfilp, que fornecem recursos de hardware para aplicar a proteção CFI (Integridade do Fluxo de Controle), bloqueando violações da ordem normal de execução das instruções (fluxo de controle) devido à exploração de exploits que alteram os ponteiros de função armazenados na memória.
    • No hipervisor KVM foi implementada a capacidade de transmitir para os sistemas convidados informações sobre o suporte do processador para a extensão ERAPS (Enhanced Return Address Predictor Security), permitindo evitar algumas operações de redefinição de estado do CPU ao retornar o controle do sistema convidado ao host. Além disso, foi adicionado suporte para vinculação de hardware aos sistemas convidados para monitoramento de desempenho (PMU, Unidade de Monitoramento de Desempenho), o que aumenta a precisão da profilagem em comparação ao uso de PMUs emulados.
    • Foi adicionada ao driver do hipervisor Hyper-V suporte à interface debugfs para visualização de estatísticas de operação do hipervisor.
  • Subsistema de Rede
    • A extensão AccECN (Notificação Explícita de Congestionamento Precisa) está habilitada por padrão, implementando uma versão aprimorada da extensão ECN, que permite que os hosts, em caso de sobrecarga, marquem pacotes IP em vez de descartá-los, possibilitando identificar o surgimento das primeiras fases de congestionamento nas rotas de comunicação sem perda de pacotes. A extensão original ECN tem uma limitação que permite apenas um sinal de sobrecarga durante um ciclo de envio-recepção TCP (RTT, Tempo de Ida e Volta, envio de solicitação e recebimento de resposta). O AccECN remove essa limitação e permite que o destinatário envie ao remetente mais de uma marca de sobrecarga no cabeçalho do pacote TCP. Os algoritmos de controle de sobrecarga podem usar as informações obtidas para responder de maneira mais precisa às sobrecargas e evitar reduções abruptas na intensidade do envio de pacotes diante de uma leve sobrecarga.
    • Foi adicionada ao algoritmo de controle de filas de rede CAKE a capacidade de processar várias filas para distribuir a carga entre múltiplos núcleos de CPU. O algoritmo CAKE é utilizado para reduzir o impacto negativo da buffers intermitentes de pacotes em equipamentos de rede de borda, visando alcançar a máxima largura de banda possível e o mínimo nível de latência, mesmo em canais de comunicação lentos.
    • Adicionou-se suporte a espaços de nomes de rede (network namespace) em sockets VSOCK, utilizados para interagir com máquinas virtuais.
    • Foi adicionada uma implementação inicial da futura norma WiFi 8 (802.11bn, WiFi de Ultra Alta Confiabilidade).
    • Foram adicionadas otimizações que permitiram aumentar em 12% a performance no processamento de pacotes UDP recebidos durante testes de estresse em uma rede de 100 gigabits.
  • Hardware
    • O driver AMDGPU agora suporta blocos IP usados em novas GPUs AMD, como SMUIO 15.x, PSP 15.x, IH 6.1.1/7.1, MMHUB 3.4/4.2, GC 11.5.4/12.1, SDMA 6.1.4/7.1/7.11.4 e JPEG 5.3.
    • O driver Nouveau melhorou a gestão de frequência em sistemas Tegra 186+.
    • O driver i915 agora possui suporte inicial para o bloco IP de exibição Xe3p_LPD, utilizado em processadores Intel Nova Lake-P.
    • O trabalho no driver drm (Direct Rendering Manager) Xe para GPUs baseadas na arquitetura Intel Xe, que é usada em placas gráficas Intel da linha Arc e em gráficos integrados desde os processadores Tiger Lake, foi continuado. Um modo Multi Queue foi adicionado, assim como componentes necessários para diagnosticar travamentos de GPU no Mesa. Também foi adicionado suporte para o mecanismo MERT para gerenciar o acesso à memória GPU.
    • A integração de componentes do driver Nova para GPUs NVIDIA equipadas com firmwares GSP, usados desde a série NVIDIA GeForce RTX 2000 baseada na microarquitetura Turing, foi continuada. O driver é escrito em Rust. Nesta nova versão, foram feitas preparações para implementar o suporte para GPUs baseadas na microarquitetura Turing e várias alterações internas foram realizadas.
    • Foi adicionada a suporte para controladores e periféricos com interface SPI (Serial Peripheral Interface) de múltiplos canais, permitindo a transmissão de dados em vários fluxos paralelos.
    • Um driver para conectores combinados Type-C, usados em dispositivos com chips Apple Silicon, que integram as interfaces USB3, DP-AltMode e Thunderbolt/USB4, foi adicionado.
    • Adicionada a suporte de subsistemas de som para os chips Tegra238, Minisforum V3 SE, iBasso DC04U, Intel Nova Lake, Nova Lake S e Focusrite Forte.
    • Adicionada a suporte para plataformas ARM, SoCs e dispositivos: Arduino UnoQ, OrangePi 6 Plus, OrangePi CM5, Anbernic RG-DS, Realtek Kent, Qualcomm Kaanapali, Mediatek Ezurio, Facebook Anacapa, Microchip LAN9668, Khadas VIM1S, QNAP TS133, i.MX952, i.MX93, i.MX94, VHIP4 EvalBoard, TQ-Systems MBLS1028A, Agilex5, Radxa CM3J, Glymur.
    • Adicionada a suporte para smartphones e tablets: Fairphone Gen 6 (SoC Qualcomm Milos/Snapdragon 7s Gen 3), Pixel 3/3 XL, Microsoft Surface Pro 11.

Simultaneamente, a Fundação de Software Livre da América Latina formou uma versão totalmente livre do kernel 7.0 — Linux-libre 7.0-gnu, limpa de elementos de firmware e drivers que contêm componentes não livres ou trechos de código cuja aplicação é limitada pelo fabricante. No lançamento 7.0, foi removido o blob do driver iwlwifi. O código de limpeza em drivers amdgpu, adreno, TI PRUeth, air_en8811h, ath12k, TI VPE, rtw8852b, rt1320, rt5575 SPI, tas2783 e Intel catpt foi atualizado. Nomes de blobs foram limpos em arquivos dts (device tree) para chips ARM.

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