Linux 7.0

Linux 7.0

Após dois meses de desenvolvimento, Linus Torvalds apresentou lançamento do núcleo Linux 7.0. Entre as mudanças mais notáveis estão: as regras de aplicação de assistentes AI, a inclusão do Rust nas funcionalidades principais do núcleo, o aumento da eficiência de troca de memória, a ativação por 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 para XFS, suporte a remapeamento no Btrfs, ativação por padrão da versão NFS 4.1, integração do algoritmo criptográfico pós-quântico ML-DSA e a ativação da AccECN na subsistema de rede, além do suporte inicial ao 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, com um patch de tamanho 56 MB (as alterações envolveram 18053 arquivos, adicionando 704060 linhas de código e removendo 278132 linhas). Na versão anterior, houve 15657 correções de 2237 desenvolvedores, com um patch de 52 MB. Aproximadamente 51% de todas as mudanças na versão 7.0 estão relacionadas a drivers de dispositivos, cerca de 11% a atualizações de código específicas da arquitetura de hardware, 14% está ligado ao stack de rede, 5% a sistemas de arquivos e 3% a subsistemas internos do núcleo.

As principais inovações no núcleo 7.0 (kernelnewbies.org, lwn.net, OpenNET):

  • Subsistema de disco, entrada/saída e sistemas de arquivos
    • Foi implementada a infraestrutura fserror e o sinalizador -k para integração com API para a obtenção de informações sobre erros de entrada/saída e corrupção de metadados ao trabalhar com arquivos. A infraestrutura proposta unifica a transmissão de informações sobre erros nas sistemas de arquivos para o espaço do usuário por meio do mecanismo fsnotify.
    • No XFS foram adicionados 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 à corrupção de metadados ou erros de entrada/saída, além de monitorar mudanças no estado do sistema de arquivos, como desmontagem e desligamento. Adicionalmente, foi sugerido um processo em segundo plano gerenciado pelo systemd chamado xfs_healer, que processa eventos de estado do sistema de arquivos a partir do espaço do usuário e, quando necessário, inicia automaticamente procedimentos de recuperação.
    • No sistema de arquivos Btrfs, foi adicionada a suporte experimental para a estrutura de "árvore de remapeamento" (remap tree), que no futuro pode ser utilizado como uma camada intermediária durante operações de entrada e saída. A essência da nova funcionalidade é que, após a movimentação dos dados no armazenamento, em vez de atualizar todas as estruturas relacionadas a esses dados em uma estrutura adicional chamada "remap tree", os endereços antigos e novos dos dados são mantidos, e ao acessar os dados, os endereços são trocados. A nova abordagem é apresentada como mais confiável e flexível, além de facilitar a expansão futura da funcionalidade do Btrfs.
    • No Btrfs são implementadas 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.
    • Inclui incluída o novo sistema de arquivos Nullfs, que pode ser usado como um placeholder para o sistema de arquivos raiz. O sistema de arquivos Nullfs é sempre vazio, não contém dados e não suporta alterações. A finalidade do Nullfs é ser usado como um sistema de arquivos inicial para simplificar o processo de inicialização do sistema – por cima do Nullfs, outros sistemas de arquivos são montados e a chamada de sistema pivot_root() é utilizada para alternar o sistema de arquivos raiz, em vez de limpar o conteúdo do initramfs e usar o sistema de arquivos raiz vinculado a ele.
    • Implementado a atualização da informação sobre o tempo de modificação dos arquivos em modo não bloqueante. Anteriormente, a chamada file_update_time_flags() com a flag IOCB_NOWAIT retornava o erro -EAGAIN, o que impedia a realização de operações de escrita direta em modo não bloqueante.
    • Nos sistemas de arquivos, como opções separadas ativáveis. traduzido apoio a bloqueios de notificação (lease). Por padrão, esse mecanismo não é ativado devido a problemas com sistemas de arquivos que não foram originalmente desenhados para sua aplicação. Por exemplo, não é suportado pelos sistemas de arquivos 9p e cephfs.
    • No sistema de arquivos EROFS (Extendable Read-Only File System), projetado para uso em partições disponíveis em modo somente leitura, o algoritmo LZMA é utilizado por padrão para compressão. Os algoritmos DEFLATE e Zstandard estão disponíveis opcionalmente e não são mais marcados como experimentais. A partilha de entradas no cache de páginas (page-cache) para arquivos idênticos em diferentes sistemas de arquivos EROFS foi implementada.
    • Removido O modo laptop_mode economiza energia ao adiar e combinar operações de gravação no disco rígido, com o objetivo de prolongar o tempo que o disco permanece em modo de suspensão e reduzir o número de ativações. Este modo perdeu relevância, já que, em dispositivos móveis modernos, os discos rígidos foram substituídos por unidades de estado sólido.
    • O sistema de arquivos F2FS foi adaptado para usar grandes de folhetos de páginas de memória (grandes folhas).
    • O trabalho no driver ntfs3 foi renascido, desenvolvido pela Paragon Software. Foi adicionada suporte para operações de arquivos com base em iomap, implementadas opções llseek SEEK_DATA/SEEK_HOLE e adicionado o modo delalloc para alocação diferida de blocos. Enquanto isso, na lista de discussão dos desenvolvedores do núcleo, foi aprovado em fevereiro a inclusão de uma nova implementação do NTFS — ntfsplus , desenvolvida para substituir o ntfs3.Por padrão, ao compilar,
    • a versão do protocolo NFS 4.1 (CONFIG_NFS_V4_1). incluída Bloqueio de exportação via NFS para sistemas de arquivos pseudo-especializados, como pidfs e nsfs. No NFSD, Garantido existe uma possibilidade experimental de usar ACL POSIX e são implementadas suporte para mudança dinâmica do pool de threads, dependendo da carga. foi adicionada As regras oficiais foram aprovadas
  • Memória e serviços do sistema
    • para a aplicação de assistentes de IA e inclusão no núcleo de conteúdo gerado automaticamente. Ao transmitir código gerado, é obrigatório marcar o código indicando o assistente de IA usado através da tag Assisted-by. Assistentes de IA não podem adicionar a tag Signed-off-by – a pessoa que enviou o patch é considerada sua autora, responsável pela alteração transmitida e garante sua qualidade. Os desenvolvedores devem revisar manualmente o código gerado por IA e verificar sua conformidade com os requisitos de licenciamento.Suporte para Rust

    • foi movido de experimental para traduzido as funcionalidades principais do núcleo. A integração do mecanismo.

    • foi concluída no núcleo, permitindo aumentar o desempenho da troca. O aumento é alcançado reduzindo a competição pelo acesso ao cache de troca, buscando de forma mais eficiente no cache e diminuindo a fragmentação. O backend baseado em Swap Table foi utilizado para o cache de troca em vez do backend XArray e permitiu, no teste redis-benchmark com BGSAVE, aumentar o número de requisições processadas em 22%.Tabela de TrocaAdicionada suporte para a nova extensão que surgiu no Clang 22,

    • Análise de Segurança de Threads. Análise de Segurança de Threads, permitindo identificar durante a compilação estados de corrida potenciais e erros causados pela configuração incorreta de bloqueios. A extensão oferece uma série de atributos, como GUARDED_BY(…), REQUIRES(…), RELEASE(…) e ACQUIRE(…), que permitem marcar as funções cobertas pelos bloqueios e separar os domínios dos bloqueios (definir o contexto). Durante a compilação, é realizada uma verificação da aplicação correta dos primitivos de sincronização, como mutexes, com base na avaliação da atividade ou inatividade do contexto associado.

    • Chamada de sistema open_tree o sinalizador -k para integração com o flag 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. Assim como o OPEN_TREE_CLONE, o novo flag copia apenas a árvore de montagem especificada (mount tree), mas em vez de retornar um descritor de arquivo local, retorna um descritor de arquivo em um novo espaço de nomes de pontos de montagem, onde a árvore copiada é montada sobre uma cópia da raiz real do sistema de arquivos. O flag OPEN_TREE_NAMESPACE é necessário para evitar a execução separada das operações unshare(CLONE_NEWNS) e pivot_root(), utilizadas na criação de contêineres.

    • Chamada de sistema rseq o sinalizador -k para integração com mecanismo de extensão de fatias de tempo (time slice), permitindo obter tempo de CPU adicional para a execução ininterrupta da seção crítica. A ideia é evitar que o escalonador de tarefas interrompa a seção crítica com bloqueio aplicado, resultando na transferência de controle para outras threads que utilizam o recurso, nas quais o bloqueio permanece aplicado. A extensão da fatia de tempo é feita sem custos adicionais, mas também sem garantias rigorosas fornecidas pela regulação total das prioridades.

    • Para arquiteturas arm64, loongarch, powerpc, riscv, s390 e x86, o modo de pré-empção (preemption) no escalonador por padrão mudou de PREEMPT_NONE para PREEMPT_LAZY. O número de modos possíveis foi reduzido de quatro a duas – PREEMPT_FULL e PREEMPT_LAZY (os modos PREEMPT_NONE e PREEMPT_VOLUNTARY são mantidos apenas para arquiteturas que não suportam PREEMPT_FULL e PREEMPT_LAZY). O modo PREEMPT_LAZY aplica o modelo de preempção completa (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 bloqueio, permitindo uma melhor performance em relação às configurações que utilizam o modelo de preempção voluntária (voluntary preemption), ou seja, PREEMPT_LAZY permite preservar as capacidades de preempção completa para tarefas em tempo real, mas minimiza a queda de desempenho para tarefas normais.

      Ativação do PREEMPT_LAZY levou para uma regressão significativa, reduzindo a performance do PostgreSQL em sistemas ARM64 pela metade. Para eliminar a queda de desempenho, os desenvolvedores do PostgreSQL proposto devem ativar a opção PR_RSEQ_SLICE_EXTENSION para diminuir a probabilidade de preempção do detentor de bloqueio.

    • Continuou-se transferência de alterações da ramificação Rust-for-Linux, relacionado ao uso da linguagem Rust como segunda linguagem para o desenvolvimento de drivers e módulos do núcleo (o suporte a Rust não está ativado por padrão e não inclui o Rust entre as dependências obrigatórias para a compilação do núcleo). Graças à biblioteca anteriormente integrada "syn (crates.io)", que simplifica a escrita de macros complexos, foi possível reduzir o tamanho do código Rust no núcleo por meio da simplificação das definições das macros procedurais existentes. As funcionalidades das bibliotecas kernel, macros e pin-init foram expandidas.

    • Para o sistema de entrada/saída assíncrono io_uring foi adicionada a opção para usar filas de submissão não circulares (non-circular submission queue), que são mais eficientemente armazenáveis em cache na situação em que a execução da solicitação é concluída antes do retorno da chamada do sistema.

    • Na subsistema eBPF dentro do mecanismo BTF (BPF Type Format), que fornece informações para a verificação de tipos em pseudocódigo BPF, para a busca de informações de depuração é utilizado busca binária, o que aumentou a eficiência do carregamento de programas BPF. No eBPF foi adicionada suporte a argumentos implícitos ao chamar kfunc (funções do núcleo disponíveis para uso em programas BPF), definidas com a flag KF_IMPLICIT_ARGS.

    • Removido código para suporte a disco RAM inicial (initrd) baseado em linuxrc, já declarado obsoleto. As implementações restantes do initrd estão planejadas para serem removidas em 2027. Em vez do initrd, o initramfs deve ser utilizado (a diferença é que o initrd coloca o ambiente de inicialização inicial em uma imagem de disco, enquanto o initramfs – em um sistema de arquivos).

    • Em um dispositivo de bloco zram, usado para armazenamento comprimido da partição de troca na memória, alterada a lógica de operação com páginas de memória comprimidas ao mover dados para armazenamento permanente em caso de esgotamento da memória RAM disponível. Anteriormente, as páginas de memória eram descompactadas antes de serem gravadas em um dispositivo físico, mas agora são salvas como estão em forma comprimida, o que reduz a carga na CPU e economiza energia durante a operação autônoma.

    • jot timerlat, destinado a medir latências durante o funcionamento do planejador de tarefas, foi adicionada a opção —bpf-action para executar programas BPF em caso de superação do limite definido.

    • No sistema de rastreamento ftrace, foi adicionada uma configuração bitmask-list para exibir máscaras de bits em um formato legível (como uma lista de bits, e não um número hexadecimal). Foram adicionadas capacidades de auditoria ao tracefs. filtros e gatilhos. Adicionada o comando perf sched stats para coletar e exibir estatísticas sobre o funcionamento do planejador de tarefas.

    • Adicionados opções de compilação LOGO_LINUX_MONO_FILE, LOGO_LINUX_VGA16_FILE e LOGO_LINUX_CLUT224_FILE para definir o arquivo de imagem do logotipo que será mostrado durante a inicialização do núcleo 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 são implementadas a possibilidade de anexar programas BPF com filtros, controlando o que operações SQE específicas (Entrada de Fila de Submissão) podem fazer (semelhança às chamadas de sistema em io_uring). A funcionalidade adicionada é análoga aos filtros das chamadas de sistema. Filtros podem ser vinculados a tarefas específicas e são herdados ao criar outros processos após a chamada fork(). Com filtros ativos, os filtros adicionais podem apenas anexar limitações extras, mas não desativar os existentes. A funcionalidade implementada permitirá bloquear métodos as evasões da filtragem das chamadas de sistema em ambientes sandbox, baseadas na execução em vez de chamadas de sistema de operações semelhantes fornecidas em io_uring.
    • No SELinux foi adicionada a capacidade de gerenciar o acesso aos tokens BPF, permitindo permitir que processos não privilegiados executem algumas operações privilegiadas com BPF, como carregar programas BPF no kernel e criar estruturas de mapeamento.
    • Adicionada suporte ao algoritmo de criação de assinaturas digitais ML-DSA (CRYSTALS-Dilithium), baseado na teoria de redes e resistente a ataques em computadores quânticos. Foi fornecida capacidade de usar ML-DSA para autenticação de módulos do kernel.
    • Removido capacidade de usar esquemas de criação de assinaturas digitais com o algoritmo SHA-1 para atestar módulos do kernel (o suporte para carregamento 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 são implementadas suporte às extensões Zicfiss e Zicfilp, que fornecem recursos de hardware para aplicar a proteção CFI (Control Flow Integrity), bloqueando violações da ordem normal de execução das instruções (fluxo de controle) devido a exploits que alteram os ponteiros de função armazenados na memória.
    • No hipervisor KVM são implementadas capacidade de passar para sistemas convidados informações sobre o suporte do processador à extensão ERAPS (Enhanced Return Address Predictor Security), permitindo evitar algumas operações de redefinição do estado da CPU ao retornar o controle ao host a partir do sistema convidado. Além disso, foi adicionada suporte à atribuição de dispositivos a sistemas convidados para rastreamento de desempenho (PMU, Performance Monitoring Unit), o que aumenta a precisão da profilação em comparação com o uso de PMUs emulados.
    • No driver para o hipervisor Hyper-V foi adicionada suporte à interface debugfs para visualizar estatísticas sobre o funcionamento do hipervisor.
  • Subsistema de Rede
    • O recurso AccECN (Notificação Explícita de Congestionamento Acurada) foi ativado por padrão, implementando uma versão aprimorada da extensão ECN (wikipedia.org), permitindo que os hosters, em caso de sobrecarga, marquem pacotes IP em vez de descartá-los, o que possibilita identificar o início de um congestionamento nas linhas de comunicação sem perda de pacotes. A extensão ECN original tem uma limitação que permite sinalizar apenas um aviso de sobrecarga em um único ciclo de transmissão TCP (RTT, Round-Trip Time, envio de solicitação e recebimento de resposta). O AccECN remove essa limitação e permite ao receptor enviar ao remetente mais de uma etiqueta de sobrecarga no cabeçalho do pacote TCP. Algoritmos de controle de sobrecarga podem usar a informação recebida para reagir de forma mais precisa às sobrecargas, evitando uma redução brusca na intensidade de envio de pacotes ao surgir uma leve sobrecarga.
    • Na implementação do algoritmo de controle de filas de rede Cake foi adicionada a capacidade de processar várias filas para distribuir a carga em vários núcleos de CPU. O algoritmo CAKE é aplicado para reduzir o impacto negativo do buffer intermediário de pacotes em equipamentos de rede de borda, visando alcançar a máxima banda possível e o menor nível de latência, mesmo em canais de comunicação lentos.
    • Em sockets VSOCK, usados para interação com máquinas virtuais, foi adicionada suporte a namespaces de rede (network namespace).
    • Adicionada a implementação inicial do futuro padrão WiFi 8 (802.11bn, WiFi de Ultra Alta Confiabilidade).
    • Adicionados otimizações que aumentaram em 12% o desempenho no processamento de pacotes UDP recebidos durante testes de estresse em uma rede de 100 gigabits.
  • Hardware
    • No driver AMDGPU são implementadas suporte Blocos IP, utilizados 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+.
    • No driver i915 foi adicionada suporte inicial ao bloco IP de display Xe3p_LPD, utilizado em processadores Intel Nova Lake-P.
    • Continua trabalho no driver drm (Direct Rendering Manager) Xe para GPUs baseadas na arquitetura Intel Xe, que é utilizada em placas gráficas Intel da família Arc e na mídia gráfica integrada, começando com os processadores Tiger Lake. Adicionado modo Multi Queue. Adicionados componentes necessários para diagnosticar travamentos de GPU no Mesa. Adicionada suporte ao mecanismo MERT para o gerenciamento de acesso à memória da GPU.
    • Continua integração de componentes do driver Nova para GPUs NVIDIA equipadas com firmwares GSP, utilizados desde a série NVIDIA GeForce RTX 2000 baseada na microarquitetura Turing. O driver é escrito em Rust. A nova versão prepara a implementação do suporte para GPUs baseadas na microarquitetura Turing e inclui várias alterações internas.
    • Adicionada suporte a controladores e dispositivos periféricos com interface SPI (Serial Peripheral Interface) multicanal, permitindo a transmissão de dados em vários fluxos paralelos.
    • Adicionado driver para conectores combinados Type-C, utilizados em dispositivos com chips Apple Silicon, combinando interfaces USB3, DP-AltMode e Thunderbolt/USB4.
    • Suporte adicionado para subsistemas de áudio dos chips Tegra238, Minisforum V3 SE, iBasso DC04U, Intel Nova Lake, Nova Lake S e Focusrite Forte.
    • Suporte adicionado a placas 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.

Ao mesmo tempo, a Fundação Latino-Americana de Software Livre formou uma variante kernel totalmente livre 7.0 – Linux-libre 7.0-gnu, livre de elementos de firmwares e drivers que contêm componentes ou trechos de código não livres, cuja aplicação é limitada pelo fabricante. Na versão 7.0, ocorreu a limpeza dos blobs do driver iwlwifi. O código de limpeza nos drivers amdgpu, adreno, TI PRUeth, air_en8811h, ath12k, TI VPE, rtw8852b, rt1320, rt5575 SPI, tas2783, Intel catpt foi atualizado. Realizada a limpeza dos nomes dos blobs nos arquivos dts (devicetree) para chips ARM.

Fonte: linux.org.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