Após dois meses de desenvolvimento, Linus Torvalds apresentou o lançamento do kernel Linux 6.15. Entre as mudanças mais importantes estão: o mecanismo de auditoria no Landlock, o modo de fixação do mapeamento de memória, a subsistema fwctl, o driver Nova para GPUs NVIDIA, a implementação do sistema host para o hypervisor Hyper-V, suporte a dispositivos de armazenamento zonados no XFS, otimização da subsistema de rede, verificação scrub no Bcachefs e a capacidade de controle sobre as operações por meio do io_uring.
A nova versão inclui 15.945 correções de 2.154 desenvolvedores, com o tamanho do patch sendo de 59 MB (as mudanças afetaram 13.596 arquivos, adicionando 739.608 linhas de código e removendo 312.168 linhas). No lançamento anterior, houve 12.115 correções de 1.984 desenvolvedores, com um patch de 39 MB. Cerca de 41% das mudanças apresentadas no 6.15 estão relacionadas a drivers de dispositivos, aproximadamente 16% envolvem atualizações de código específico para arquiteturas de hardware, 13% estão relacionados à pilha de rede, 5% a sistemas de arquivos e 4% a subsistemas internos do kernel.
As principais inovações no kernel 6.15:
- Subsistema de disco, entrada/saída e sistemas de arquivos
- O mecanismo fanotify agora adiciona a capacidade de monitorar eventos de montagem e desmontagem.
- No XFS, foi adicionado suporte a dispositivos de armazenamento zonados (divisão em zonas de grupos de blocos ou setores, onde é permitido apenas a adição sequencial de dados com a atualização de todo o grupo de blocos). Um sinalizador rwf_dontcache foi adicionado para desativar o cache ao gravar. Implementada a possibilidade de gravação atômica de vários blocos de dados de uma vez.
- No Btrfs, foi implementada a possibilidade de especificar ao montar níveis negativos de compressão zstd (de -15 a -1, por exemplo, "compress=zstd:-5"), proporcionando maior velocidade em troca da eficiência de compressão reduzida. O cache de caminhos de arquivos foi aprimorado (no teste realizado, a execução da operação "send" acelerou em 30%). Suporte a blocos de 2KB foi adicionado.
- No EXT4, foi aumentada a performance na reprodução do log com um número muito grande de registros revogados (carga típica de partições sob o FS Lustre). Implementada a pesquisa linear de registros "dentry" (representação interna de elementos de diretórios) para resolver problemas de acesso a alguns arquivos em modo sem diferenciação de maiúsculas e minúsculas. A funcionalidade da opção de montagem "errors=remount-ro" foi ajustada. A resistência no tratamento de sistemas de arquivos corrompidos foi aprimorada.
- No F2FS foi implementado o ioctl para obter informações sobre a prioridade da operação de entrada/saída para um arquivo específico. Foi realizado um trabalho de transição para o uso de folhetos de página de memória (page folios).
- No Bcachefs, foi adicionado o modo "scrub", onde é verificada a correção de leitura de todos os dados e metadados do sistema de arquivos. Em caso de erros, é iniciada a rotina de recuperação. O Bcachefs também passou a oferecer suporte a sistemas de arquivos com tamanho de bloco maior que o tamanho da página de memória. O formato das estruturas em disco do Bcachefs foi estabilizado (futuras mudanças de formato serão implementadas na forma de complementos opcionais).
- No EROFS, foi adicionada suporte para endereçamento de blocos de 48 bits.
- No subsistema FUSE, foram implementados os sysctl default_request_timeout e max_request_timeout para definir timeouts na execução de solicitações, permitindo rastrear travamentos em componentes FUSE que operam no espaço do usuário. O tamanho máximo dos nomes de arquivos no FUSE foi aumentado para 1024 caracteres.
- Na chamada de sistema statmount(), foi adicionada a possibilidade de obter informações sobre o mapeamento de identificadores de usuários em sistemas de arquivos montados, utilizado para corresponder arquivos de um determinado usuário em uma partição montada de um usuário diferente no sistema atual.
- Foi liberada a possibilidade de criar um ponto de montagem com mapeamento de identificadores de usuários diferente do da partição montada original.
- Na API de gerenciamento de montagem, foram feitas alterações que simplificam a construção de hierarquias complexas de sistemas de arquivos sem expor partes individuais que precisam ser mantidas ocultas.
- No subsistema de dispositivos de bloco, foi adicionada suporte para dispositivos de hardware com proteção de chaves de criptografia.
- No sistema de arquivos SMB, foi implementada a opção is_network_name_deleted e o modo smb_server_kerberos5 foi ativado por padrão.
- Para o sistema de arquivos OverlayFS, foi adicionada a opção de montagem "override_creds", que, quando especificada, utiliza as credenciais do usuário que invocou o acesso aos níveis inferiores do armazenamento, ao invés do usuário que realizou a montagem. Essa mudança, por exemplo, permite que ao montar o OverlayFS exija um usuário com privilégios CAP_SYS_ADMIN, mas utilize o sistema de arquivos com credenciais que não possuem esse privilégio.
- No exFAT acelera as operações de exclusão de arquivos. Em vez de enviar solicitações "discard" individualmente para cada cluster liberado do arquivo a ser excluído, o driver agora agrupa as solicitações. Em um teste realizado, o tempo para excluir um arquivo de 80 GB foi reduzido de 286 segundos para 1,6 segundos.
- Todos os pseudo-sistemas de arquivos, assim como o sistema de arquivos EXT2, foram convertidos para utilizar a nova API de montagem de partições.
- O código para suporte a sistemas de arquivos SYSV (SystemV/386, Xenix e Coherent) foi removido, sendo marcado como não suportado (orphaned) desde 2023.
- Memória e serviços do sistema
- A versão mínima necessária do GCC para compilação do kernel foi elevada para 8.1, e a do Clang para 15.0.0.
- Foi adicionada uma subsistema fwctl (Firmware Control), que fornece uma API para gerenciamento seguro de firmware e execução de manipuladores de firmware a partir do espaço do usuário. Drivers para dispositivos CXL (Compute Express Link), adaptadores Ethernet Mellanox ConnectX (mlx5) e placas de serviço AMD/Pensando foram preparados com base no fwctl.
- As capacidades do mecanismo pidfd foram expandidas, permitindo o uso de identificadores vinculados a processos específicos que, ao contrário do pid, não podem ser reatribuídos. Foi disponibilizada a extração de dados sobre o estado de conclusão de um processo, identificado através do pidfd, após o processo pai receber a confirmação da conclusão do processo filho (reaped) e a liberação de seus recursos. Um flag PIDFD_SELF foi adicionado às chamadas de sistema, permitindo que o processo faça referência a si mesmo.
- Para a arquitetura RISC-V, foi implementado suporte para as extensões BFloat16, Zaamo (operações atômicas de memória), Zalrsc (Load-Reserved/Store-conditional) e ZBKB (operações bit a bit para criptografia).
- Durante a rastreação, foi possibilitado o salvamento dos argumentos das funções chamadas e sua exibição nos logs de rastreamento.
- No sistema de entrada/saída assíncrona io_uring, foi adicionada a capacidade de ler informações sobre eventos epoll. O uso do io_uring para processar eventos epoll permite reduzir o número de trocas de contexto e possibilita o tratamento de múltiplos eventos epoll ao mesmo tempo.
- No subsistema eBPF, foi melhorada a verificação de programas com loops. Novas instruções "timed_may_goto", "load-acquire" e "store-release" foram adicionadas. Foi possibilitada a alteração de atributos avançados de arquivos a partir de programas BPF. Foi implementada a função try_alloc_pages(), voltada para alocação de memória em situações com alta probabilidade de falha na execução da operação (ao executar programas BPF em contextos restritos).
Foi implementado um novo primitivo de bloqueio — rqspinlock (Bloqueio Giratório Resiliente em Filas), que identifica durante a execução situações que levam a deadlocks. Este novo primitivo permite a carga de programas BPF, para os quais o verificador não garantiu a validade do funcionamento com bloqueios.
- Foi significativamente aumentada a confiabilidade na alocação de grandes páginas de memória (huge-page).
- O cálculo de somas de verificação CRC64 em sistemas x86 foi acelerado significativamente. Entre outras coisas, novas instruções vetoriais do conjunto AVX-512 foram utilizadas para aumentar a velocidade. Em algumas situações, o desempenho aumentou em 100 vezes.
- 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 a Rust não está ativado por padrão e não torna Rust uma dependência obrigatória nas compilações do kernel). Foi possibilitado o uso do macro "#[kunit_tests()]" no código do kernel para executar testes unitários. Suporte à arquitetura ARMv7 foi adicionado. Módulos dma e hrtimer com bindings em Rust para DMA (adicionados por Linus, desviando do mantenedor, que depois deixou seu cargo) e contadores de alta precisão foram implementados. Os módulos ‘list’, ‘str’, ‘sync’, ‘error’ e ‘alloc’ foram expandidos. Foi adicionado suporte a nova sintaxe ‘&raw’ (raw_ref_op).
- No subsistema perf, foi implementada a possibilidade de perfilar latências, utilizando informações do escalonador de tarefas.
- Foi adicionado o parâmetro de linha de comando do kernel "traceoff_after_boot", que desliga a rastreabilidade após o kernel ser carregado e o processo init ser iniciado. Este parâmetro pode ser usado ao diagnosticar problemas relacionados ao carregamento, garantindo que os dados de rastreio acumulados durante o carregamento não sejam sobrescritos.
- O suporte a sistemas x86 de 32 bits com mais de 8 CPUs e 4 GB de RAM foi interrompido. Tal hardware não é mais fabricado há muito tempo, e sistemas que exigem tais recursos foram migrados para CPUs de 64 bits.
- Foram feitas alterações na implementação dos timers POSIX, permitindo que a ferramenta CRIU (Checkpoint/Restore in Userspace) salve e restaure identificadores de timer.
- Virtualização e segurança
- Adicionada a capacidade de usar o Linux como ambiente raiz (Dom0. partição root) para o hipervisor Hyper-V (Microsoft Hypervisor). O ambiente host é responsável pelo gerenciamento do hipervisor, organização do lançamento de sistemas convidados, alocação de recursos e garantia da interação máquinas virtuais com o hardware. O gerenciamento do hipervisor Hyper-V no Linux é realizado através do dispositivo /dev/mshv.
- Um mecanismo de auditoria foi adicionado ao módulo Landlock, que fornece a programas não privilegiados meios para restringir o uso de objetos do núcleo Linux (hierarquias de arquivos, soquetes de rede, ioctl, etc.). A auditoria permite avaliar detalhadamente os motivos para bloqueios de acesso realizados ao usar o Landlock, bem como entender quando e que operação foi bloqueada, por que o bloqueio ocorreu e qual regra foi ativada.
- Adicionada a capacidade de implementar manipuladores em módulos LSM (Linux Security Modules) que controlam acessos ao sistema de entrada/saída assíncrona io_uring e permitem bloquear o uso do io_uring para contornar restrições de acesso a chamadas de sistema. Tal manipulador foi implementado no módulo LSM SELinux.
- No SELinux, foi implementada a possibilidade de aplicar políticas a quaisquer tipos de dados carregados pelo núcleo, incluindo imagens de firmware, políticas de segurança e certificados.
- Adicionada a função de selagem (seal) de algumas operações de mapeamento de memória realizadas pelo núcleo no espaço de endereço do processo. A selagem transforma o mapeamento em modo somente leitura e impede alterações em caso de exploração de vulnerabilidade. A ação se aplica ao mapeamento vDSO, vsyscall, vvar, sigpage e uprobes. O modo está desativado por padrão, pois pode prejudicar o funcionamento de alguns aplicativos. Para habilitar, uma opção de configuração CONFIG_MSEAL_SYSTEM_MAPPINGS foi adicionada.
- Subsistema de Rede
- Continua o trabalho para eliminar o bloqueio global do stack de rede RTNL (rtnl_lock) e transformá-lo em bloqueios vinculados a espaços separados de nomes de rede.
- Foi adicionada a capacidade inicial de captura de pacotes de rede através do io_uring com cópia do conteúdo diretamente para a memória do programa no espaço do usuário, sem buffering intermediário (zero-copy). Nos testes realizados, essa alteração permitiu processar tráfego através de um canal de 200 gigabits utilizando um único núcleo de CPU.
- Implementados sysctl tcp_rto_max_ms e a opção de soquetes TCP TCP_RTO_MAX_MS, que permitem definir o tempo máximo entre tentativas de retransmissão de pacotes.
- Uma série de chamadas de retorno foi adicionada ao BPF para obter informações de tempo de vários pontos da pilha de rede, que podem ser usadas para diagnosticar problemas de latência de rede.
- Foram adicionadas otimizações de desempenho para operações de rede:
- A otimização GRO (Generic Receive Offload), que combina vários pacotes pequenos em um grande, agora é utilizada ao alternar o processamento de pacotes para outra CPU (para balanceamento de carga) ao usar a subsistema XDP (eXpress Data Path), permitindo o processamento de pacotes no nível do driver de rede antes de sua entrega à pilha de rede. O ganho de desempenho no processamento de streams TCP com a aplicação da otimização pode chegar a duas vezes.
- Em condições de carga intensa, o desempenho da função connect() foi elevado em até duas vezes devido à substituição do bloqueio em spin por um mecanismo de sincronização RCU (Read-Copy-Update) na busca de registros com informações sobre as extremidades da conexão (origens e destinos e portas). Além disso, foi realizada uma otimização na hash, que proporcionou um ganho de desempenho adicional de 229%. endereços IP A implementação do MPTCP (Multipath TCP), uma extensão do protocolo TCP para entrega de pacotes simultaneamente por múltiplos caminhos através de diferentes interfaces de rede vinculadas a diferentes endereços IP, foi acelerada. O MPTCP em modo de um único fluxo teve um aumento de 29%.
- No netfilter, a execução de operações de busca de rotas no FIB (Forwarding Information Base) foi interrompida na presença de um soquete. Graças a essa otimização, o desempenho aumentou em 20%.
- O desempenho do UDP sob condições de flood foi aumentado em 10% ao eliminar operações desnecessárias com a estrutura sk_tsflags ao receber pacotes.
- Foi adicionado um driver com implementação do protocolo MCTP-over-USB.
- A performance do UDP em situações de flood aumentou em 10% ao eliminar operações desnecessárias com a estrutura sk_tsflags ao receber pacotes.
- Hardware
- O núcleo inclui a implementação inicial do driver Nova para GPUs NVIDIA, equipadas com firmware GSP, que são utilizadas desde a série NVIDIA GeForce RTX 2000 baseada na microarquitetura Turing. O driver foi escrito na linguagem Rust. Na primeira fase, foi adicionado apenas o esqueleto nova-core, que contém cerca de 400 linhas de código e implementa um nível básico de abstração sobre as interfaces de programação do firmware GSP. Na próxima fase, planejam incluir no núcleo o driver DRM nova-drm (Direct Rendering Manager) para interação com a GPU a partir do espaço do usuário, bem como um driver VFIO com um gerenciador vGPU, permitindo o uso de GPUs NVIDIA virtuais em sistemas de virtualização.
- 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 na gráfica integrada desde os processadores Tiger Lake, foi continuado. O suporte para SVM (Shared Virtual Memory), um componente do framework DRM que gerencia a memória compartilhada entre CPU e GPU, foi adicionado.
- Identificadores de novas GPUs foram adicionados ao driver i915.
- No driver Nouveau, o RPC do GSP foi reformulado e a interface drm_slave_encoder foi integrada.
- No driver AMDGPU, foi implementado o suporte para a arquitetura DCN36 (Display Core Next). Foi adicionada a capacidade de definir suas próprias curvas de brilho, utilizadas para correção do brilho da tela.
- Suporte para a GPU Qualcomm Adreno 623 foi adicionado ao driver Adreno.
- O suporte para painéis sensíveis ao toque Apple Touch Bar foi adicionado.
- O suporte para a segunda versão da extensão eUSB2 (eUSB2V2 — Embedded USB2 Version 2.0), que permite reduzir a tensão de alimentação (até 1.2 volts) e aumentar o desempenho do USB 2.0, foi adicionado. A velocidade de transferência de dados em eUSB2V2 pode alcançar 4.8 Gbps, que é 10 vezes mais rápida que os 480 Mbps normais do USB 2.0. O eUSB2V2 permitirá que os fabricantes de notebooks equipem seus dispositivos com webcams de maior resolução, continuando a usar o barramento Embedded USB2 para sua conexão.
- Suporte para adaptadores Ethernet Intel Killer E5000 (RTL8126) foi adicionado.
- Suporte para painéis de exibição Visionox RM692E5, Rockchip w552793dba-v10, kingdisplay-kd110n11-51ie e starry-2082109qfh040022-50e foi adicionado.
- Um driver para notebooks Samsung Galaxy Book foi adicionado.
- Suporte para sistemas de som Presonus Studio 1824c, Jabra Evolve 65 foi adicionado. O suporte para módulos DSP AMD ACP 7.x, AWINC WM88166, Everest ES8388, Intel AVS PEAKVOL e GAIN foi adicionado. O suporte para áudio em notebooks ASUS, HP e Lenovo foi aprimorado.
- Suporte adicionado para plataformas ARM, SoC e dispositivos: Arm Morello, AMD (Xilinx) Versal NET, Google Pixel Pro 6, NetCube Kumquat, MYIR Remi Pi, Huawei Matebook E Go, Milk-V Jupiter ST STM32MP2, Mediatek MT8370, Apple T2, Skov (i.MX8MP), EVK (i.MX95), Rockchip RK35xx, Allwinner A523, 11 placas Toradex baseadas em i.MX6.
Simultaneamente, a Fundação de Software Livre da América Latina formou uma versão completamente livre do núcleo 6.15 — Linux-libre 6.15-gnu, limpa de firmware e drivers que contêm componentes não livres ou trechos de código cuja aplicação é limitada pelo fabricante. Na versão 6.15, foi neutralizado o carregamento de blobs nos drivers nova, Qualcomm iris v4l2, Airoha NPU, Tehuti Networks TN40xx ethernet de 10G, Realtek 8814A wifi, Apple Silicon SoC touchscreen, Renesas UFS e aw88166 audio. A limpeza do driver Spider 1Gb ethernet foi interrompida, pois foi removido do núcleo. Foram removidos links para arquivos binários tivoizados. Foi implementado o bloqueio do carregamento de blobs a partir de código em Rust.
Fonte: opennet.ru
