Depois de dois meses de desenvolvimento, Linus Torvalds apresentou o lançamento do núcleo Linux 6.16. Entre as mudanças mais notáveis estão: driver para aceleração do OpenVPN, mecanismo Kexec HandOver, inclusão por padrão de tabelas de páginas de memória de cinco níveis para x86, remoção do protocolo DCCP, driver de bloco zloop, possibilidade de envio de core-dumps via socket UNIX, suporte à gravação atômica no XFS, processamento de áudio offload para dispositivos USB, otimizações no Ext4, driver virtual TPM (Trusted Platform Module), implementação completa do Device Memory TCP, suporte a canais nomeados em io_uring, preparação para a integração do driver DRM Asahi, mecanismo “usermode queue” no driver AMDGPU, suporte ao Intel TDE (Trusted Domain Extensions) e Intel APE (Advanced Performance Extensions).
A nova versão inclui 15.924 correções de 2.145 desenvolvedores, o tamanho do patch é de 50 MB (as mudanças afetaram 13.793 arquivos, 655.451 linhas de código foram adicionadas e 316.441 linhas foram removidas). No lançamento anterior, houve 15.945 correções de 2.154 desenvolvedores, com tamanho de patch de 59 MB. Aproximadamente 45% de todas as alterações apresentadas no 6.16 estão relacionadas a drivers de dispositivos, cerca de 16% das mudanças estão relacionadas à atualização de código específico para arquiteturas de hardware, 13% estão ligadas à pilha de rede, 4% a sistemas de arquivos e 3% a subsistemas internos do núcleo.
As principais novidades do núcleo 6.16:
- Subsistema de disco, entrada/saída e sistemas de arquivos
- Foi adicionado o driver zloop para a criação de dispositivos de loopback em zonas zonificadas, montados em modo loop. O driver simula o funcionamento de dispositivos de bloco normais, usando vários arquivos de um sistema de arquivos existente (um arquivo para armazenar cada zona). Essa funcionalidade pode ser útil para testar sistemas de arquivos, manipuladores de device mapper e aplicativos em relação ao suporte para dispositivos zonificados, que utilizam a separação em zonas de grupos de blocos ou setores, onde apenas a adição sequencial de dados é permitida com a atualização de todo o grupo de blocos.
- No sistema de arquivos XFS, foi implementado o suporte à gravação atômica de grandes volumes de dados – agora, vários blocos podem ser gravados em modo atômico (ou todos os blocos serão gravados com sucesso ou nenhum bloco será gravado).
- No sistema de arquivos Ext4, o desempenho do mecanismo "fast commit" foi aprimorado. Suporte adicionado para grandes folhedos de páginas de memória (large folios) para arquivos normais, o que aumentou em 37% o desempenho em testes realizados com E/S sequencial intensa. Suporte para operações de gravação atômicas que abrangem vários blocos foi adicionado.
- No driver do sistema de arquivos ext2, o suporte ao mecanismo DAX, que proporciona acesso direto ao FS ignorando o cache de página, foi declarado obsoleto. A remoção do DAX do driver ext2 está programada para o final do ano. A razão mencionada é a consideração do driver ext2 como uma implementação de referência estável, na qual não é aceitável o uso de recursos específicos que não se disseminaram adequadamente.
- Os sistemas de arquivos OrangeFS, UFS, BFS e OMFS foram convertidos para usar a nova API de montagem de partições.
- No sysctl, foi adicionada a configuração vfs_cache_pressure_denom, para gerenciar o número de entradas no cache "dentry" (representação interna de elementos de diretórios) em condições de falta de memória no sistema. Quanto maior o valor definido, mais entradas podem ser descartadas do cache (menos entradas permanecerão no cache) durante a falta de memória.
- No FS Bcachefs, foi adicionada a opção "rebalance_on_ac_only", que proíbe a execução de operações de rebalanceamento e compressão em segundo plano quando o sistema é alimentado pela bateria. As operações de remoção de instantâneos e dispositivos foram aceleradas. O consumo de memória foi reduzido ao montar em modo somente leitura. Foi adicionada a capacidade de iniciar algumas operações de recuperação após falha em segundo plano, sem interromper o trabalho com o FS.
- O subsistema de gerenciamento de energia agora pode suspender autonomamente sistemas de arquivos e variáveis EFI para modos de espera e sono (se os FS já estiverem congelados pelo manipulador no espaço do usuário, uma nova congelamento não será realizado).
- Foi adicionada a capacidade de acelerar o funcionamento do EROFS com o acelerador QAT (QuickAssist Technology) embutido nos processadores Intel, que oferece ferramentas para acelerar cálculos relacionados a compressão e criptografia.
- No NFS, o tamanho máximo do bloco de dados para operações de leitura e gravação foi aumentado de 1 para 4 MB (o valor padrão foi definido em 1 MB, pois nem todos os clientes suportam tamanhos maiores).
- Usuários não privilegiados com direitos CAP_SYS_ADMIN em um espaço de nome de identificadores de usuário (user namespace), mas sem direitos expandido no espaço de nome raiz, agora têm a capacidade de usar o mecanismo fanotify para monitorar alterações nos sistemas de arquivos.
- Para sistemas de arquivos que utilizam a subsistema FUSE, foi adicionada a funcionalidade de limpar de uma só vez todas as entradas em cache de diretórios (dentries). A subsistema FUSE agora suporta grandes páginas de memória.
- No sistema de arquivos OverlayFS, foi implementado suporte para a criação de camadas de dados em espaços de nome não privilegiados, utilizando controle de integridade baseado no módulo dm-verity. Essa capacidade permite combinar camadas de metadados confiáveis com camadas de dados não confiáveis processadas em espaços de nome não privilegiados.
- Memória e serviços do sistema
- Adicionado o mecanismo KHO (Kexec HandOver) para iniciar um novo núcleo a partir de um antigo sem perder o estado do sistema. Antes de transferir o controle para a nova versão do núcleo, o estado das principais subsistemas do núcleo pode ser serializado em uma área de memória que não será afetada por operações subsequentes. O novo núcleo, ao assumir o controle, restaura o estado serializado de volta. Com base no KHO, está em desenvolvimento a subsistema Live Update Orchestrator (LUO), que permite reiniciar o núcleo sem parar o funcionamento dos dispositivos.
- Adicionado o parâmetro de compilação do núcleo CONFIG_X86_NATIVE, que permite usar a opção "-march=native" durante a compilação para otimização de acordo com as capacidades do processador no sistema atual.
- Adicionada a suporte para a extensão da arquitetura do conjunto de instruções Intel APX (Advanced Performance Extension), que fornece 16 registros adicionais de uso geral (além dos 16 existentes), permitindo usar menos operações de leitura e gravação na memória no código, aumentando o desempenho e reduzindo o consumo de energia.
- Adicionado um modo de ajuste automático da política de distribuição de memória em sistemas NUMA, onde todos os pesos dos nós são recalculados quando novas informações sobre largura de banda surgem durante a inicialização ou durante a conexão à quente de memória.
- Na implementação dos futex, foi adicionada a suporte para uma tabela hash de processos local (local futex_hash_bucket), que, ao contrário da tabela hash compartilhada anteriormente suportada para todos os processos, é local para um único processo e compartilhada por todas as threads desse processo. As tabelas hash locais são aplicadas apenas para a operação de futex PROCESS_PRIVATE. Além disso, nesta nova versão, foram adicionadas opções de suporte FUTEX2_NUMA e FUTEX2_MPOL, que permitem influenciar a colocação dos futex na memória, aproximando-os dos processos que os utilizam.
- Para sistemas x86_64, foi habilitado o suporte permanente para tabelas de páginas de memória de cinco níveis (o parâmetro CONFIG_X86_5LEVEL, que controlava a ativação das tabelas de cinco níveis, foi removido).
- No driver intel_pstate, que gerencia os parâmetros de consumo de energia (P-state) em sistemas com processadores Intel, foi adicionada a suporte para agendador de tarefas que considera o consumo de energia (EAS — Energy Aware Scheduling) em processadores híbridos, combinando núcleos de CPU de alto desempenho e de eficiência energética, como o Intel Lunar Lake.
- No sysfs, foram adicionadas interfaces: "\/sys\/devices\/system\/cpu\/cpuN\/cpu_capacity" para obter informações sobre as capacidades de diferentes CPUs em processadores híbridos e "\/sys\/devices\/system\/cpu\/cpuidle\/intel_c1_demotion" para controlar a capacidade de manter a CPU em um estado de desempenho mais alto, mesmo que o núcleo tente colocar a CPU em um estado de menor consumo de energia (por exemplo, o núcleo pode solicitar a transição para o estado de consumo C6, mas o firmware, em alta intensidade de despertar da CPU, pode mantê-lo no estado C1).
- Para a arquitetura ARM64, foi habilitado o suporte para o modo de preempção preguiçosa (PREEMPT_LAZY, lazy preemption), que corresponde ao modo de preempção completa ("full preemption") para tarefas em tempo real (RR/FIFO/DEADLINE), mas retarda a preempção de tarefas normais (SCHED_NORMAL) até o limite do tic.
- Para a arquitetura ARM64, foi adicionada a suporte para o uso de extensões SME (Scalable Matrix Extension), ativada através do parâmetro CONFIG_ARM64_SME.
- Continua a transferência de mudanças do ramo Rust-for-Linux relacionadas ao uso da linguagem Rust como uma segunda linguagem para o desenvolvimento de drivers e módulos do kernel (o suporte ao Rust não está ativo por padrão e não leva à inclusão do Rust como uma dependência obrigatória de compilação do kernel). Para módulos escritos em Rust, foi disponibilizada a opção de usar configfs. Foram adicionadas abstrações necessárias para o desenvolvimento de drivers gráficos. Expandidas as capacidades dos módulos alloc, time, str, list, workqueue e page. Adicionada a suporte ao macro "assert!" em testes baseados no KUnit. Um conjunto de abstrações para gerenciar a frequência da CPU e o uso de APIs relacionadas à gestão do consumo de energia foi incluído. Foi adicionado suporte à estrutura de dados 'xarray'.
- Para a arquitetura RISC-V, foi transferida a implementação da chamada de sistema getrandom(), otimizada através do mecanismo vDSO (virtual dynamic shared object), que permite mover o manipulador de chamada de sistema do kernel para o espaço do usuário, evitando troca de contexto. Nos testes realizados, a otimização acelerou a obtenção de números aleatórios em 17 vezes. O suporte para extensões vetoriais Zicbop, Zabha e Svinval, utilizadas em processadores SiFive, também foi implementado para RISC-V.
- Para a arquitetura LoongArch, o limite de CPUs no sistema foi elevado de 256 para 2048. Suporte ao escalonador de tarefas SCHED_MC (Multi-core) foi adicionado.
- Adicionada a possibilidade de usar sockets Unix para a transmissão de descritores de arquivos. Para desabilitar essa funcionalidade, os aplicativos podem usar o flag SO_PASSRIGHTS em setsockopt().
- Foi oferecida a possibilidade de mapear o buffer circular utilizado para rastrear a operação do kernel na memória do espaço do usuário.
- Os manipuladores de crash-dump, utilizados para gerar relatórios de problemas após uma falha do kernel, agora podem usar as chaves LUKS utilizadas pelo kernel com falha para salvar os crash-dumps em sistemas de arquivos criptografados.
- A operação IORING_OP_PIPE foi adicionada ao sistema de entrada/saída assíncrona io_uring para criar canais sem nome, que é semelhante à chamada de sistema pipe2, exceto pelo suporte a descritores de arquivo fixos.
- Adicionada a opção de linha de comando do kernel "rt_group_sched" para controlar a ativação do escalonador de execução de grupos de tarefas em tempo real (SCHED_RR). A opção é semelhante à configuração RT_GROUP_SCHED no Kconfig.
- Para dispositivos baseados no barramento CXL (Compute Express Link), utilizado para proporcionar interação de alta velocidade entre CPU e dispositivos de memória, implementou-se o suporte a extensões RAS (Reliability, Availability, Serviceability), permitindo a implementação de vários esquemas de detecção e correção de erros. O CXL permite a conexão de novas áreas de memória fornecidas por dispositivos de memória externos, utilizando-as como recursos adicionais do espaço de endereço físico para expandir a memória RAM do sistema (DDR) ou memória persistente (PMEM).
- A versão mínima necessária do GCC para compilar o núcleo foi elevada para a versão 8 da ramificação GCC para todas as arquiteturas. Para a compilação, agora é necessária pelo menos a versão 2.30 do pacote binutils.
- A chamada de sistema uselib() foi removida, pois já foi declarada obsoleta há muito tempo, e no seu lugar, mmap() é utilizado para o acesso compartilhado a bibliotecas compartilhadas.
- Virtualização e segurança
- Foi adicionada uma suporte inicial ao mecanismo Intel TDX (Trusted Domain Extensions) para proteger sistemas convidados operando sob o hipervisor KVM, contra interferência e análise por parte do administrador do sistema host e ataques físicos à hardware. A proteção é garantida por meio da criptografia da memória. máquinas virtuais.
- Foi adicionado um driver virtual TPM (Trusted Platform Module), permitindo que máquinas virtuais interajam com dispositivos TPM (Trusted Platform Module) emulados pelo módulo SVSM (Secure VM Service Module).
- A possibilidade de uso do plugin GCC randstruct, que randomiza o layout de estruturas de dados durante a compilação para dificultar a exploração de vulnerabilidades, foi retomada.
- Foi adicionada a capacidade de usar a tecnologia IMA (Integrity Measurement Architecture) para verificar a integridade ao inicializar novos núcleos através da chamada de sistema kexec.
- O trabalho para reduzir o impacto do uso do SELinux na performance foi realizado. Para acelerar o funcionamento, foi adicionado um cache com os resultados das verificações de acesso a diretórios. Foi adicionada a possibilidade de usar máscaras nas regras genfscon.
- No código para interação com EFI, foi adicionada a possibilidade de embutir uma seção SBAT (UEFI Secure Boot Advanced Targeting) com metadados sobre versões revogadas de componentes de boot.
- Nos módulos carregáveis, a seção '.static_call_sites' foi convertida para o modo somente leitura após a conclusão da inicialização.
- Para sistemas ARM de 64 bits, o hipervisor KVM implementou suporte à virtualização aninhada (desativado por padrão).
- No hipervisor KVM, o suporte à arquitetura RISC-V foi declarado estável.
- Subsistema de Rede
- Foi aceito o driver ovpn, que permite acelerar significativamente o desempenho do OpenVPN transferindo as operações de criptografia, processamento de pacotes e gerenciamento de canais para o núcleo do Linux. O driver elimina a sobrecarga associada à troca de contexto, permite otimizar o desempenho através do acesso direto às APIs internas do núcleo e evita a lenta transferência de dados entre o núcleo e o espaço do usuário (a criptografia, descriptografia e roteamento são realizados pelo módulo sem enviar tráfego para o manipulador no espaço do usuário).
- Foi adicionada ao mecanismo Device Memory TCP a capacidade de enviar dados diretamente da memória do dispositivo (caminho TX). Anteriormente, para simplificar a integração do Device Memory TCP no núcleo, a funcionalidade estava limitada apenas à recepção de dados (caminho RX). O Device Memory TCP permite o uso de sockets de rede para enviar diretamente o conteúdo da memória do dispositivo periférico pela rede (modo zero-copy), bem como a alocação direta do conteúdo dos pacotes de rede na memória do dispositivo do lado do receptor. Os dados transmitidos nos pacotes são transferidos da placa de rede para a memória do dispositivo periférico (DMABUF), por exemplo, para a memória da GPU, ou da memória do dispositivo diretamente para a placa de rede, evitando o CPU, enquanto os cabeçalhos dos pacotes vão para os buffers normais do núcleo.
- Foi possibilitado o envio de conteúdos de core dumps através do socket AF_UNIX, permitindo a criação de manipuladores de core dumps mais seguros no espaço do usuário, não vinculados à chamada de processos privilegiados pelo núcleo.
- O suporte ao protocolo de rede DCCP (Datagram Congestion Control Protocol) foi removido, pois não se popularizou e permanece no núcleo sem manutenção há cinco anos. A remoção do DCCP do núcleo eliminará as barreiras que impedem a reestruturação da estrutura de dados inet_connection_sock para aumentar a eficiência do stack TCP. O suporte a módulos netfilter para filtrar pacotes DCCP foi mantido.
- Para facilitar o processamento de erros ao usar sockets, o núcleo agora pode passar um pidfd para processos já concluídos (o pidfd está vinculado a processos específicos e, ao contrário do pid, não é reatribuído).
- Com o BPF, agora é possível criar manipuladores para gerenciar filas de pacotes na pilha de rede (qdiscs) para influenciar a ordem de processamento dos pacotes de rede.
- No sistema de arquivos de rede AFS, foi implementado o GSSAPI (Generic Security Services API) para gerenciar a criptografia de conexões com servidores YFS e OpenAFS.
- Um grande número de otimizações foi realizado. A organização dos bloqueios para tabelas de roteamento IPv6 foi reformulada (algumas operações com rotas agora são realizadas até 3 vezes mais rápido). O cálculo de checksums crc32c foi acelerado. O mecanismo GRO para tráfego UDP encapsulado foi acelerado em 10%. A autot configuração do buffer de recepção para TCP foi melhorada e os limites padrão foram aumentados (em testes realizados, a largura de banda para fluxos únicos através de um canal de 200 Gbps aumentou em 60%).
- No Netfilter, foi adicionada a capacidade de usar máscaras em nomes de dispositivos de rede, utilizados em netdev e flowtable. Informações sobre rastreamento de conexões (conntrack) foram integradas na infraestrutura nft trace. A extração de tabelas de rastreamento de conexões (conntrack) através do procfs foi acelerada.
- Hardware
- Adicionada a compatibilidade para descarregar o processamento de fluxos de áudio para dispositivos de áudio com interface USB (USB audio offload). Essa mudança permite reduzir significativamente o consumo de energia de dispositivos portáteis ao continuar o processamento do fluxo de áudio enquanto o restante do sistema está em modo de suspensão. Anteriormente, núcleos para a plataforma Android ofereciam uma implementação específica de processamento offload de áudio para dispositivos USB, e agora uma implementação universal surgiu no núcleo principal, que pode ser utilizada por quaisquer projetos.
- A integração dos componentes do driver Nova para GPUs NVIDIA, equipadas com firmwares GSP, que são utilizados desde a série NVIDIA GeForce RTX 2000 baseada na microarquitetura Turing, foi continuada. O driver é escrito em Rust. Além do componente nova-core, adicionado na versão anterior, que implementa o nível básico de abstrações sobre as interfaces de programação dos firmwares GSP, a versão 6.16 inclui a implementação inicial do driver DRM nova-drm (Direct Rendering Manager) para interação com a GPU a partir do espaço do usuário.
- O processo de promoção do driver DRM Asahi para GPUs Apple AGX, utilizados em chips Apple Silicon, começou. O driver é escrito em Rust. Neste estágio, apenas os arquivos de cabeçalho do UAPI do driver Asahi, necessários para o Mesa, foram incluídos no núcleo, enquanto o código principal do driver Asahi será integrado posteriormente.
- O driver Nouveau adicionou suporte para GPUs NVIDIA das famílias Hopper e Blackwell.
- O trabalho no driver drm (Direct Rendering Manager) Xe para GPUs baseadas na arquitetura Intel Xe, que é utilizada nas placas gráficas Intel da família Arc e em gráficos integrados, foi continuado a partir dos processadores Tiger Lake. A possibilidade de usar diferentes arquivos de firmware para diferentes famílias de GPUs Intel foi adicionada.
- No driver AMDGPU, foi implementado o suporte para o mecanismo "usermode queue", que permite criar filas de trabalho personalizadas no espaço do usuário e enviá-las diretamente para a GPU sem recorrer ao planejador no núcleo. O suporte ao "usermode queue" foi habilitado para GPUs Navi 4X e GFX 12.
- Foi adicionado suporte para sistemas de som Intel WCL (Whiskey Lake), AMD ACP 7.x (Audio Co-Processor), Cirrus Logic CS35L63 e CS48L32, Everest Semiconductor ES8375 e ES8389, Pioneer DJM-V10, Longsoon-1 AC’97, NVIDIA Tegra264, Richtek ALC203, RT9123 e Rockchip SAI, bem como novas plataformas Intel AVS.
- Suporte adicionado para plataformas ARM, SoCs e dispositivos: Samsung Exynos7870, Qualcomm Snapdragon X1P42100, Qualcomm MSM8926, RK3562, NXP i.MX94, Renesas RZ/V2N, Amlogic S6/S7/S7D, WonderMedia wm8950, Amlogic s805y, Allwinner A523, Toradex Verdin AM62P, ROCK 5B+, Nitrogen8M Plus, Retronix R-Car V4H Sparrow Hawk, MT8186 Ponyta Chromebook, VIA APC Rock/Paper, Renesas rz/t2h, ASUS Transformer Pad LTE TF300TL, LG Nexus 4, Google Pixel 4a, Raspberry Pi 2.
- O driver para placas de captura de vídeo com chips STA2X11 foi removido.
Simultaneamente, a Fundação de Software Livre da América Latina formou uma versão totalmente livre do núcleo 6.16 — Linux-libre 6.16-gnu, limpa de elementos de firmware e drivers que contêm componentes não livres ou trechos de código cujos usos são restritos pelo fabricante. Na versão 6.16, o carregamento de blobs em novos drivers Intel qat 6xxx crypto, ST vd55g1 sensor, ath12k AHB wifi, Aeonsemi AS21xxx e MediaTek 25Gb Ethernet foi neutralizado. Nomes de blobs foram limpos em arquivos dts (devicetree) para chips ARM da Qualcomm e MediaTek. O código de limpeza de blobs em drivers Nova Core, Nouveau, Ethernet Realtek r8169, Qualcomm Iris, Venus, wifi Mediatek mt7996, Qualcomm ath11k e ath12k wifi, Texas Instruments tas2781 e Renesas R-Car gen4 PCIe foi atualizado.
Fonte: opennet.ru
