Após dois meses de desenvolvimento, Linus Torvalds apresentou o lançamento do núcleo Linux 7.1. Entre as mudanças mais notáveis estão: um novo driver ntfsplus, a primeira fase do fim do suporte para CPU i486, remoção de antigos adaptadores Ethernet, remoção dos protocolos ISDN e AX.25, ativação por padrão do mecanismo Intel FRED, suporte a manipuladores BPF no io_uring, otimização do subsistema de troca, suporte a subescalonadores no sched_ext, entrada e saída em modo zero-copy no driver ublk, operação ioctl ‘shutdown’ no Btrfs, e comutação dinâmica do modo de desempenho no driver amd-pstate, além de suporte a xattr para sockets Unix.
Na nova versão foram aceitas 17275 correções de 2589 desenvolvedores,
o tamanho do patch é de 57 MB (as alterações afetaram 13528 arquivos, adicionando 751785 linhas de código e removendo 405916 linhas). Na versão anterior, houve 15624 correções de 2477 desenvolvedores, e o tamanho do patch foi de 56 MB. Cerca de 41% de todas as alterações apresentadas no 7.1 estão relacionadas a drivers de dispositivos, aproximadamente 12% dizem respeito à atualização de código específico de arquiteturas de hardware, 14% estão ligadas à pilha de rede, 5% às sistemas de arquivos e 3% às subsistemas internos do núcleo.
As principais inovações no núcleo 7.1 (1, 2, 3):
- Subsistema de disco, entrada/saída e sistemas de arquivos
- Foi aceita uma nova implementação do sistema de arquivos NTFS — ntfsplus, baseada no código removido do núcleo do driver clássico ntfs. O antigo driver foi reestruturado, ampliado com a capacidade de gravar dados e adaptado para suportar recursos modernos, como o uso de folhetos de páginas de memória (folios) em vez da estrutura buffer_head. No novo driver, foi implementada a alocação de blocos atrasada, o que resultou em alto desempenho nas operações de gravação e redução da fragmentação. Para operações de gravação/leitura em buffer, E/S direta, mapeamento de extensões e operações de gravação/leitura por página, foi utilizada a biblioteca iomap. Em testes do iozone, o driver ntfsplus se mostrou de 3 a 5% mais rápido que o ntfs3 em gravação em modo de thread única e de 35 a 110% ao utilizar 4 threads. A velocidade de leitura entre ntfsplus e ntfs3 está aproximadamente no mesmo nível. O driver ntfs3 permanece no núcleo e recebeu correções e pequenas melhorias.
- Foi adicionada a suporte para gerar e verificar dados de integridade T10 a nível do sistema de arquivos, em vez de dispositivo de bloco, permitindo um aumento no desempenho das operações de leitura.
- No driver de dispositivos de bloco ublk, que permite mover a lógica específica para o lado do processo no espaço do usuário, foi adicionado suporte para entrada/saída via memória compartilhada sem copiar dados entre buffers (modo zero-copy).
- Para dispositivos de bloco autocriptografáveis SED-OPAL, foram adicionados ioctl para gerenciar o modo Single User e implementado o comando STACK_RESET.
- No Btrfs, foi declarada estável a operação ioctl 'shutdown', que permite colocar o sistema de arquivos em um estado onde é tentado concluir as operações já iniciadas, enquanto todas as novas operações são bloqueadas.
- No exfat, foi implementada a possibilidade de reservar áreas vazias através da chamada fallocate().
- No sistema de arquivos CIFS, foi adicionada a capacidade de criar arquivos temporários com a flag O_TMPFILE.
- Na chamada de sistema fsmount(), foi adicionada a opção FSMOUNT_NAMESPACE, que cria um novo espaço de nomes de pontos de montagem para o sistema de arquivos montado. Nas chamadas de sistema clone3() e unshare(), foram adicionadas flags para retornar um novo espaço de nomes de pontos de montagem, contendo apenas um sistema de arquivos de placeholder vazio montado com base em nullfs, driver fs-dax com interface de sistema de arquivos para dispositivos DAX (Acesso Direto).
- No servidor NFS, foi adicionada proteção contra ataques de utilização de descritores de arquivos, implementada através da assinatura criptográfica dos descritores. A proteção é ativada através da opção de montagem sign_fh.
- Foi adicionado o driver de caractere fs-dax, fornecendo uma interface para interação com dispositivos DAX (Acesso Direto), suportando operação sem cache de página. Esta interface é necessária para integração no núcleo do sistema de arquivos famfs, alocado na memória.
- No sistema de arquivos Ceph, foi implementada a coleta de métricas de entrada/saída relacionada às seções.
- Memória e serviços do sistema
- Foi aceita a primeira série de alterações para encerrar o suporte aos processadores i486. As opções para compilar o kernel com suporte aos processadores 486DX, 486SX e AMD ELAN (CONFIG_M486, CONFIG_M486SX e CONFIG_MELAN) foram removidas do Kconfig, e as opções de compilação para sistemas i486 (-march=i486) foram excluídas do Makefile. O código para suporte real em processadores i486 ainda permanece no kernel, mas a compilação para esses sistemas agora exigirá a aplicação de patches nos arquivos de compilação. Os motivos para remover o suporte aos processadores i486 estão relacionados ao desejo de livrar o kernel de um código complexo, que emula algumas operações de hardware, como CX8 (comparar e trocar 8 bytes) e TSC (contador de ciclos da CPU, utilizado no agendador de tarefas).
- No driver amd-pstate, usado para gerenciar o consumo de energia em sistemas com processadores AMD, foi implementada a mudança dinâmica nas configurações de desempenho e na forma de gerenciamento de energia, dependendo do uso de energia da rede ou da bateria. Quando conectado à rede, agora é ativado o modo "performance", enquanto que ao usar bateria, o modo "balance_performance" é ativado.
- O mecanismo Intel FRED (Flexible Return and Event Delivery) foi habilitado por padrão, permitindo melhorar a eficiência e a confiabilidade na entrega de informações sobre eventos de baixo nível. O aumento de desempenho e a redução de latências são garantidos pelo retorno de eventos usando a instrução do processador IRET, ao invés de passar eventos através da tabela IDT (Interrupt Descriptor Table). A melhoria na confiabilidade é alcançada através do processamento separado da chegada do evento no contexto do kernel e no contexto do usuário, proteção contra execução aninhada de NMI e armazenamento em um quadro de pilha expandido de todos os registradores da CPU relacionados à exceção.
- O subsistema perf ganhou suporte para unidades de monitoramento de desempenho de memória (PMU - Performance Monitoring Unit), utilizadas em SoCs NVIDIA Tegra410.
- As operações futex em sistemas ARM foram aceleradas com o uso das instruções Arm 9.6 LSUI, permitindo ao kernel acessar a memória do espaço do usuário sem precisar desativar previamente o modo de proteção PAN (Privileged Access Never).
- Em sistemas com processadores ARM, foi aprimorado o suporte à extensão da arquitetura do conjunto de instruções MPAM (Memory System Resource Partitioning and Monitoring) e adicionada a possibilidade de sua utilização no espaço do usuário para gerenciamento de recursos através do mecanismo resctrl. MPAM proporciona a marcação de cada acesso à memória com um identificador de seção (PARTID, Partition ID) e um identificador de grupo de monitoramento (PMG, Monitoring Group ID). Em relação ao PARTID, é possível limitar o consumo de recursos, como largura de banda da memória ou tamanho do cache, para que um determinado grupo de tarefas não ocupe todos os recursos. No contexto de monitoramento, a combinação de PMG e PARTID pode ser usada para rastrear o consumo de recursos de memória sob certos tipos de carga.
- Foi adicionada a possibilidade de usar o modo de tempo real (PREEMPT_RT) em processadores ARM de 32 bits. Anteriormente, o suporte ao PREEMPT_RT estava disponível para as arquiteturas x86 e x86-64, ARM64, RISC-V e LoongArch.
- Novas flags foram adicionadas à chamada do sistema clone3(): CLONE_NNP — proibição de obter novas permissões no processo criado; CLONE_AUTOREAP — término automático do processo em vez de sua transformação em um processo zumbi até que a função wait() seja executada pelo processo pai;
CLONE_PIDFD_AUTOKILL — término do processo filho no fechamento do descritor pidfd associado (por exemplo, ao encerrar o processo pai). - Para cada módulo do núcleo, na pasta /sys/module, foi adicionado o arquivo import_ns, que contém a lista de espaços de nomes de símbolos importados (symbol namespace).
- No sistema de entrada/saída assíncrona io_uring, foi adicionado suporte para utilização do subsistema BPF para criar manipuladores. Por exemplo, o ciclo principal de despacho pode ser substituído por um programa BPF.
- Na subsistema BPF, a análise do uso da pilha foi modernizada, o que acelerou consideravelmente a verificação de muitos programas BPF pelo verificador.
- Para otimizar o desempenho, o subsistema hrtimer (high resolution timer) foi reescrito. Agora, o planejador de tarefas pode usar temporizadores de alta resolução sem perda de desempenho em vez de temporizadores menos precisos.
- Continua a transferência de mudanças da branch Rust-for-Linux relacionadas ao uso da linguagem Rust como segunda linguagem para o desenvolvimento de drivers e módulos do kernel (o suporte ao Rust não está ativado por padrão e não torna o Rust uma dependência obrigatória para a construção do kernel). Até a versão 1.85 (disponível no Debian 13), aumentaram as exigências para a versão do Rust necessária para compilar componentes do kernel. Adicionada uma opção Kconfig experimental CONFIG_RUST_INLINE_HELPERS para incorporar trechos de código em C no código Rust durante a compilação (a otimização acelerou o desempenho do driver nullo em 2%). Adicionado o macro 'const_assert!'. Ampliadas as funcionalidades dos módulos 'sizes', 'clk', 'ptr', 'sync', 'error'.
- No mecanismo SCHED_EXT, que permite o uso de BPF para a criação de escalonadores de CPU, adicionada a capacidade inicial de criar escalonadores aninhados (sub-schedulers), através dos quais cada cgroup pode ter seu próprio escalonador de tarefas.
- Continuou a otimização do subsistema de troca (swap). A antiga estrutura swap_map foi removida e substituída pelo mecanismo "Tabela de Troca". A mudança aumentou o desempenho e reduziu o consumo de memória no subsistema de troca.
- No subsistema DAMON (Data Access MONitor), que permite monitorar o acesso de processos aos dados na memória RAM (por exemplo, é possível saber quais áreas de memória foram acessadas pelo processo e quais áreas permaneceram não utilizadas), adicionada a suporte a diferentes algoritmos de ajuste automático de quotas.
- No subsistema de rastreamento, implementada a concepção de buffers circulares externos, permitindo o recebimento de dados de rastreamento de máquinas virtuais. A funcionalidade é utilizada em hipervisores KVM e nVHE para transmitir dados de rastreamento do sistema convidado para o lado do host.
- No subsistema RV (Runtime Verification), destinado à verificação da correção do funcionamento de sistemas de alta confiabilidade, adicionados componentes de monitoramento "stall" para rastrear tarefas cuja execução foi temporariamente suspensa ou bloqueada, e "deadline" para analisar o comportamento do escalonador de tarefas.
- Virtualização e segurança
- Por padrão, definido o flag PROC_MEM_FORCE_PTRACE, permitindo contornar as permissões de acesso à memória do processo através do arquivo /proc/PID/mem apenas para processos que utilizam a chamada de sistema ptrace() para depuração.
- Foi adicionado um novo conjunto de hooks para módulos LSM (Linux Security Module), facilitando a implementação de políticas para sistemas de arquivos empilhados, como overlayfs. Um hook também foi adicionado ao LSM para gerenciamento de acesso a sockets Unix, utilizado no módulo LSM Landlock para designar políticas de acesso a sockets Unix.
- A biblioteca criptográfica embutida lib/crypto, que fornece funções mais simples e rápidas do que a API de criptografia tradicional, adicionou suporte para os algoritmos AES-CMAC, AES-XCBC-MAC, AES-CBC-MAC, GHASH e SM3. A documentação sobre lib/crypto foi incluída.
- O modo pKVM (Protected KVM) foi implementado para isolamento rigoroso de memória anônima usando extensões de virtualização na arquitetura AArch64. Nesse modo, páginas de memória do convidado são excluídas da tabela de endereços virtuais do sistema host.
- O hipervisor KVM agora suporta a quinta versão do controlador de interrupções virtual ARM (VGICv5 — ARM Virtual Generic Interrupt Controller v5).
- Subsistema de Rede
- Para sockets Unix criados pela função socket(), foi implementado o suporte a atributos de arquivo estendidos (xattr) "user.*". Entre as aplicações, destaca-se a atribuição de etiquetas por meio de atributos estendidos a sockets Unix utilizados para IPC Varlink, com o objetivo de destacá-los para inspeção e depuração do funcionamento do IPC usando programas BPF. No systemd-journald, atributos estendidos têm a intenção de serem utilizados para determinar o formato do log em relação ao socket /dev/log.
- O suporte ao protocolo UDP-Lite (RFC 3828), que permitia a entrega de pacotes com somatórios de controle incorretos na expectativa de que, por exemplo, dados de áudio e vídeo parcialmente danificados poderiam ser recuperados no nível do codec, foi removido. O protocolo foi eliminado pois ninguém o utiliza.
- Removida a possibilidade de compor a pilha IPv6 na forma de um módulo do kernel, que não era utilizado na prática (IPv6 é integrado ao núcleo ou totalmente desativado), mas complicava a manutenção, já que, ao compor IPv6 como um módulo do kernel (CONFIG_IPV6=m), muitas subsistemas eram forçados a adicionar manipuladores inúteis para o caso de descarregamento do módulo IPv6.
- Hardware
- O driver AMDGPU incluiu um novo mecanismo de display (DC) para APU AMD da série HD 7000 (Sea Islands, GCN 1.1).
- O driver Nouveau adicionou suporte inicial para a GPU NVIDIA GA100 baseada na microarquitetura Ampere.
- O trabalho no driver drm (Direct Rendering Manager) Xe para GPUs baseadas na arquitetura Intel Xe, que é utilizada em placas de vídeo da família Intel Arc e gráficos integrados, começando pelos processadores Tiger Lake, foi continuado. Foi adicionada a suporte ao subsistema gráfico dos processadores Intel Nova Lake-P. Objetos de buffer purgáveis (Purgeable Buffer Objects) foram implementados.
- A integração dos componentes do driver Nova para GPUs NVIDIA equipadas com firmwares GSP, que são utilizados a partir da série NVIDIA GeForce RTX 2000 com arquitetura Turing, foi continuada. O driver foi escrito na linguagem Rust. A suporte inicial para GPUs baseadas na arquitetura Turing foi adicionada.
- Adicionado o driver DRM corebootdrm para saída gráfica via framebuffer de firmwares baseados em CoreBoot.
- Suporte para sound ASoC AMD RPL DMIC, Cirrus Logic CS42L43, CS47L47, NVIDIA CPCAP e WM8962 foi adicionado. O suporte para dispositivos de áudio com interface USB foi melhorado: Huawei Headset, Focusrite Novation, MV-Silicon, Studio 1824, Arturia AF16Rig, Hotone Audio, Feaulle Rainbow,
PreSonus AudioBox, Moondrop Ju Jiu, Scarlett 18i20. - Adicionado o driver yogafan para monitorar a velocidade de rotação do cooler em laptops Lenovo Yoga, Legion e IdeaPad.
- Suporte para plataformas ARM, SoCs e dispositivos foi adicionado: Qualcomm Glymur, Qualcomm Mahua, Qualcomm Eliza, Qualcomm IPQ5210, Qualcomm apq8084 e ipq806x, Axis ARTPEC-9, ARM Zena, ARM corstone-1000-a320, Microchip LAN9691, Microchip PIC64GX, Rockchip RV1103B, Renesas RZ/G3L, NXP S32N79.
- O suporte para controladores AHCI SATA e PCIe utilizados em SoCs Baikal-T1, bem como drivers de timer, memória, physmap, bus, hwmon, dwc e bt1-rom, foi removido. A razão da remoção é a falta de suporte e a integração incompleta dos componentes da plataforma Baikal no núcleo, cuja produção na Rússia foi encerrada em novembro de 2025.
- Foram removidos 12 drivers para dispositivos Ethernet com interfaces ISA e PCMCIA, produzidos até 2002, para os quais não foram encontrados usuários utilizando-os em sistemas operacionais. Também foi excluído do núcleo
o subsistema ISDN, implementações dos protocolos AX.25, CAIF e Bluetooth CMTP (Common ISDN Application Programming Interface Message Transport Protocol), drivers yellowfin (Yellowfin Gigabit-NIC), hamachi (Hamachi GNIC-II), hamradio (Amateur Radio), inport e logibm (busmouse). A razão da remoção foi a falta de desenvolvedores ativos, enquanto o número de erros descobertos por meio de syzbot e ferramentas de IA aumentou, e ninguém está disposto a corrigi-los, fazendo com que toda a carga de resolução de problemas sérios recaia sobre os mantenedores dos principais subsistemas de rede do núcleo. No total, mais de 140 mil linhas de código foram removidas.
Fonte: opennet.ru
