Lançamento do kernel Linux 6.17

Após dois meses de desenvolvimento, Linus Torvalds apresentou o lançamento do núcleo Linux 6.17. As mudanças mais significativas incluem: melhoria no desempenho do Btrfs, chamadas de sistema file_getattr() e file_setattr(), unificação de configurações de um único processador e multi-processador no escalonador de tarefas, módulo DAMON_STAT com estatísticas de acesso à memória, suporte a patches ao vivo em sistemas ARM64, envio de core dumps através do socket AF_UNIX, limitação do SCHED_EXT via cgroup, simplificação da configuração de proteção contra vulnerabilidades na CPU, compilação no Clang com inicialização de variáveis na pilha, proteção contra substituição do /proc, expansão do subsistema RV (Runtime Verification), limitação de sockets AF_UNIX através do AppArmor e o algoritmo de controle de sobrecargas TCP DualPI2.

A nova versão aceita 14.334 correções de 2.118 desenvolvedores, o tamanho do patch é de 46 MB (as alterações afetaram 12.841 arquivos, 646.654 linhas de código foram adicionadas e 398.782 linhas foram removidas). No lançamento anterior, houve 15.924 correções de 2.145 desenvolvedores, com um tamanho de patch de 50 MB. Cerca de 43% de todas as alterações apresentadas no 6.17 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 relacionados ao stack de rede, 4% às sistemas de arquivos e 3% a subsistemas internos do núcleo.

Principais novidades no núcleo 6.17 (1, 2, 3):

  • Subsistema de disco, entrada/saída e sistemas de arquivos
    • No Btrfs, foi adicionada suporte experimental para grandes folhetos de páginas de memória (large folios), que permite reduzir a sobrecarga e aumentar o desempenho de várias operações. Foi implementado o cache para consultas sobre bitmaps de alocação de espaço livre, que resultou em um aumento de 20% no desempenho da criação de arquivos vazios. Melhorou a leitura antecipada em sistemas que utilizam compressão de dados. Garantiu um armazenamento mais compacto das chaves na estrutura XArray, aumentando a compactação do armazenamento dos nós da árvore de extensões e reduzindo o número de nós finais em 50-70%. Foram fornecidas configurações adicionais para o uso de compressão em extensões desfragmentadas.
    • No sistema de arquivos ext4, foi adicionada suporte a E/S em buffer com a flag RWF_DONTCACHE, onde os dados são removidos do cache de páginas imediatamente após a conclusão da operação.
    • No sistema de arquivos EROFS, foi implementada suporte para compressão de metadados.
    • O servidor NFS agora pode delegar operações de escrita para clientes que abrem arquivos em modo somente leitura.
    • Foi adicionado ao sistema de chamada fallocate() a flag FALLOC_FL_WRITE_ZEROES, que permite preencher um intervalo em um arquivo com zeros, utilizando um comando WRITE_ZERO suportado por alguns SSDs, que realiza a resetagem sem operações de entrada/saída. Esta opção está disponível apenas no sistema de arquivos ext4.
    • Foram adicionadas as chamadas de sistema file_getattr() e file_setattr() para manipular os atributos do inode de um arquivo específico.
    • O driver "pktcdvd" para operar com mídias ópticas no modo de pacotes, que foi marcado como obsoleto em 2016, foi removido.
    • O sistema de arquivos Bcachefs no kernel do Linux foi movido para um estado de suporte externo, implicando a interrupção da aceitação de modificações para o Bcachefs na composição principal do kernel, mantendo esse sistema de arquivos na base de código do kernel. O desenvolvimento do Bcachefs será realizado fora da base de código do kernel até que Kent Overstreet prove, na prática, a possibilidade de interação correta com outros desenvolvedores do kernel e a capacidade de seguir as regras estabelecidas de desenvolvimento.
  • Memória e serviços do sistema
    • O suporte a configurações de um único processador foi removido do escalonador. Em sistemas com um processador, agora devem ser utilizados núcleos construídos para sistemas multiprocessadores (SMP). O código para sistemas de um e múltiplos processadores foi unificado e despojado de ligações desnecessárias ao parâmetro do kernel CONFIG_SMP.
    • Foi adicionado o módulo do kernel DAMON_STAT (Resultados de Monitoramento de Acesso a Dados), que permite rastrear o acesso à memória, utilizando o subsistema DAMON (MONitoramento de Acesso a Dados). O módulo fornece estatísticas sobre inatividade (memory_idle_ms_percentiles) e largura de banda de memória prevista (estimated_memory_bandwidth).
    • Em sistemas com arquitetura ARM64, foi implementado suporte a Live Patching, permitindo aplicar correções ao kernel do Linux em tempo real, sem reinicialização ou interrupções do sistema.
    • Na biblioteca C minimalista nolibc, fornecida com o código fonte do kernel do Linux e que oferece uma camada sobre as chamadas de sistema básicas, foi adicionado suporte para as arquiteturas SuperH, x32, MIPS n32 e MIPS n34.
    • Foi ampliada a capacidade de envio de conteúdo de core dumps através do socket AF_UNIX, permitindo criar manipuladores de core dumps mais seguros no espaço do usuário, que não dependem da chamada de processos privilegiados pelo kernel. A nova versão inclui um protocolo para criação servidores, capazes de gerenciar o processamento de core dumps em nível de tarefas individuais. Por exemplo, para alguns processos, os core dumps podem ser ignorados, enquanto para outros, eles podem ser transmitidos via socket. Um protótipo de servidor para gerenciar core dumps foi preparado separadamente.
    • Foi adicionada a opção de linha de comando do núcleo "crashkernel=size,cma" para reservar memória através do CMA (Contiguous Memory Allocator) para a preservação do crash dump do núcleo.
    • 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 adicionada a possibilidade de vincular atributos extendidos de espaço do usuário ao pidfd. Agora é permitido abrir descritores de arquivo para pidfd através da função open_by_handle_at() sem vinculação ao sistema de arquivos. Informações internas, criadas pelo núcleo junto com o pidfd, agora estão vinculadas ao processo, e não ao pidfd, e são mantidas entre reinicializações do mesmo processo.
    • A subsistema BPF incorporou a função bpf_cgroup_read_xattr() para ler atributos estendidos de arquivos. Foi proporcionada a possibilidade de usar operações de string típicas em programas BPF, como bpf_strcmp, bpf_strnchr, bpf_strchrnul, bpf_strlen e bpf_strspn, operando em modo somente leitura. A inclusão de fluxos padrão stdout e stderr foi adicionada para interação com componentes no espaço do usuário. Para sistemas baseados na arquitetura LoongArch, foi implementada a capacidade de modificação de código dinâmica no BPF, o mecanismo "BPF trampoline" (que reduz a sobrecarga ao transmitir chamadas entre o núcleo e programas BPF) e a execução de programas que usam struct_ops para criar manipuladores de funções do núcleo através do BPF.
    • No sistema de contagem de tempo, foi implementado suporte a relógios auxiliares (auxiliary), que não estão vinculados aos relógios do sistema padrão e operam em seu próprio ritmo (antes, todos os relógios operavam com o mesmo ritmo, diferenciando-se apenas pelo deslocamento).
    • Foi adicionada a suporte inicial à execução por proxy (Proxy Execution) para mitigar problemas de inversão de prioridade. A execução por proxy permite que uma tarefa, aguardando a liberação de um bloqueio, passe seu contexto de execução para a tarefa que mantém o bloqueio, acelerando assim a liberação desse bloqueio.
    • A transferência de mudanças da ramificação 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 leva à inclusão do Rust como uma das dependências obrigatórias de compilação do kernel) foi continuada. Adicionadas abstrações para gerenciar reguladores de tensão e corrente, propriedades de firmware, recursos de entrada/saída e memória de entrada/saída. Implementado o macro "warn_on!()". Adicionado o tipo UserPtr para ponteiros no espaço do usuário. Expandida a funcionalidade dos módulos workqueue, uaccess, dma, time e list. Adicionado o módulo 'bits' com as funções 'bit' e 'genmask'.
    • O código para calcular somas de verificação CRC foi reestruturado e novas chamadas para gerar hashes SHA-1 e SHA-2 foram adicionadas. Adicionadas otimizações específicas para arquiteturas de hardware. A performance da função crc32c() foi aumentada em novos CPUs x86_64 que suportam a extensão VPCLMULQDQ (Multiplicação de Quadwords Sem Transporte em Vetor).
    • Para sistemas S390, foi implementado suporte para o swap de páginas e migração de grandes páginas de memória (transparent huge page).
    • Adicionada a capacidade de configurar a agressividade da liberação de páginas de memória (proactive-reclaim) em caso de escassez, vinculada a nós NUMA específicos, permitindo a seleção de nós NUMA que sofrerão uma liberação de memória mais ativa. Por exemplo, "echo '512M swappiness=10' > /sys/devices/system/node/node1/reclaim".
    • No mecanismo SCHED_EXT, que permite usar BPF para criar escalonadores de CPU, foi adicionada a capacidade de gerenciar a largura de banda através de cgroup. Por exemplo, o parâmetro cpu.max pode ser usado para limitar a carga na CPU.
    • O auto-montagem da virtual FS tracefs no diretório /sys/kernel/debug/tracing foi declarado obsoleto, devendo-se usar /sys/kernel/tracing em seu lugar.
  • Virtualização e segurança
    • Adicionada a capacidade de ativar proteções contra vulnerabilidades na CPU através da seleção de vetores de ataque bloqueáveis. em vez de especificar nas configurações as vulnerabilidades concretas. Os métodos de bloqueio são escolhidos dependendo do tipo de violação de isolamento: entre o usuário e o núcleo (user-kernel), entre usuários (user-user), entre o sistema convidado e o ambiente host (guest-host), entre diferentes sistemas convidados (guest-guest) e entre diferentes threads (cross-thread). A abordagem proposta permite ativar apenas a proteção contra as classes de vulnerabilidades que realmente preocupam o usuário. Por exemplo, os proprietários de ambientes de nuvem podem ativar os modos guest-host e guest-guest, após o que serão ativados os métodos de proteção contra vulnerabilidades BHI, GD, L1TF, MDS, MMIO, Retbleed, RFDS, Spectre_v2, SRBDS, SRSO e TAA.
    • Adicionada a compatibilidade com a compilação pelo compilador Clang, incluindo um modo de rastreamento da profundidade da pilha, onde a inicialização de todas as variáveis armazenadas na pilha é realizada. A inicialização é feita para evitar vazamentos de informações do núcleo através de variáveis não inicializadas, que podem conter restos de dados previamente salvos na pilha. Antes disso, uma possibilidade semelhante era suportada com o uso do plugin GCC STACKLEAK.
    • Adicionada proteção contra a substituição pelo atacante do sistema de arquivos /proc através de montagem em modo 'bind'. O número de inode da raiz /proc agora é fixo (PROCFS_ROOT_INO) e pode ser verificado por processos no espaço do usuário.
    • Foi adicionado à subsistema RV (Verificação em Tempo de Execução), destinado a verificar a correção do funcionamento de sistemas altamente confiáveis, um componente de monitoramento rtapp (Monitor de Aplicação em Tempo Real) para rastrear problemas típicos em aplicativos que operam em tempo real, bem como componentes rp, sssw e opid para testar o agendador de tarefas. Implementada a possibilidade de criar componentes de monitoramento que utilizam lógica temporal linear para determinar o modelo de comportamento em vez de um autômato determinístico. A verificação é realizada em tempo de execução através da anexação de manipuladores a pontos de rastreamento, que comparam o andamento efetivo da execução com um modelo de referência predefinido que define o comportamento esperado do sistema.
    • No sistema AppArmor, foi adicionada a compatibilidade com o controle de acesso a sockets AF_UNIX.
    • No hipervisor KVM em sistemas ARM, foi implementado o suporte ao controlador de interrupções GICv5.
    • Adicionada a configuração CONFIG_KVM_IOAPIC, que permite desativar o suporte à emulação de APIC, PIC e PIT no KVM.
    • Adicionada proteção contra a vulnerabilidade VMSCAPE.
    • Adicionada a comando ioctl FS_IOC_GETLBMD_CAP para obter do espaço do usuário informações sobre a aplicação de mecanismos de proteção de integridade ao arquivo.
    • O interface /sys/fs/selinux/user foi declarado obsoleto, sendo que o acesso a ele agora gera um atraso de cinco segundos e um aviso é registrado no log.
  • Subsistema de Rede
    • Na implementação da tecnologia PSE (Power Sourcing Equipment), usada para fornecer energia através do Ethernet a dispositivos como câmeras IP e pontos de acesso sem fio, foi adicionada a suporte para estratégias configuráveis de avaliação de orçamento de energia (potência total disponível). Essas estratégias permitem determinar quais portas devem ser desconectadas primeiro para evitar sobrecarga.
    • Na implementação do protocolo MCTP (Management Component Transport Protocol), foi adicionada a suporte para roteamento de pacotes para nós externos através de nós intermediários (gateway-routing). Por exemplo, as regras abaixo permitem encaminhar pacotes para um nó com o ID 10 (Endpoint ID 10) através do dispositivo mctpi2c0, usando o endereço 0x1d, diretamente conectado ao nó com o ID 9. mctp route add 9 via mctpi2c0 mctp neigh add 9 dev mctpi2c0 lladdr 0x1d mctp route add 10 gw 9
    • Para sockets UNIX (AF_UNIX), a opção SO_INC foi implementada, e para a família de endereços VSOCK, a opção SIOCINQ. As opções implementadas são semelhantes à opção TCP_INQ para TCP e permitem obter informações sobre a quantidade de bytes disponíveis no socket para leitura através de uma mensagem de controle.
    • Para TCP, foi ativada a conformidade rigorosa com o tamanho de janela de recepção anunciado, o qual determina o tamanho de dados permitidos para envio até a recepção da confirmação ACK do outro lado. Anteriormente, o núcleo continuava a processar dados que chegavam além da janela de recepção anunciada, mas agora deixará de fazê-lo.
    • No MPTCP (Multipath TCP), foi adicionada a capacidade de usar a opção de socket TCP_MAXSEG para limitar o tamanho máximo dos segmentos enviados. O MPTCP é uma extensão do protocolo TCP para organizar a entrega de pacotes simultaneamente por vários caminhos através de diferentes interfaces de rede, associadas a diferentes endereços IP.
    • Adicionada a compatibilidade com o algoritmo de controle de congestionamento TCP DualPI2 (RFC 9332), que permite o uso de controladores de congestionamento escaláveis para tráfego com altos requisitos de qualidade de serviço (por exemplo, TCP-Prague e DCTCP), sem causar degradação no desempenho do tráfego clássico, para o qual são aplicados controladores de congestionamento como Reno e Cubic.
    • Adicionado o sysctl "force_forwarding", que permite ativar o redirecionamento de tráfego em interfaces de rede selecionadas com IPv6.
    • Removido o suporte ao algoritmo de determinação de perda de pacotes SACK (Selective Acknowledgment), descrito na RFC 6675. Esse algoritmo foi declarado obsoleto em 2018. Para determinação de perda de pacotes TCP, recomenda-se o uso do algoritmo RACK-TLP.
  • Hardware
    • Continuado o trabalho no driver drm (Direct Rendering Manager) Xe para GPU com base na arquitetura Intel Xe, que é utilizada nas placas gráficas Intel da família Arc e na gráfica integrada, a partir dos processadores Tiger Lake. A nova versão inclui suporte por padrão para chips com base na microarquitetura Panthor Lake e adiciona suporte para a microarquitetura WildCat Lake.
    • No driver AMDGPU para GPU GFX9.x, foi implementado o suporte ao mecanismo Cleaner Shader, que garante a limpeza da memória da GPU antes de seu reuso, a fim de evitar vazamentos de dados provenientes de outros processos. Melhorado o suporte ao modo de espera. Adicionada a possibilidade de entrar em modo de suspensão em ambientes com AMD SR-IOV. Melhorado o gerenciamento de iluminação.
    • No driver i915, foi adicionado suporte ao mecanismo drm_panic, que exibe, em caso de falhas, uma versão semelhante à "tela azul da morte". Adicionado suporte ao controlador de display usado nos chips da família Wildcat Lake.
    • Continuada a integração dos componentes do driver Nova para GPUs NVIDIA equipadas com firmwares GSP, utilizados a partir da série NVIDIA GeForce RTX 2000 com base na microarquitetura Turing. O driver é escrito em Rust. Na nova versão, foi adicionada uma camada de abstração para trabalhar com DMA, realizado um parser VBIOS, adicionado código para configuração do framebuffer e garantido suporte para inicialização acelerada no modo Falcon.
    • No driver adreno, adicionado suporte paraGPU Qualcomm Adreno x1-45 e x1-85.
    • No driver msm, adicionado suporte para GPU Adreno SM8750 e mapeamento de memória de vídeo (VM_BIND).
    • No driver panfrost, adicionado suporte para GPU Mali, aplicado em SoC Mediatek mt8370.
    • O driver lima ganhou suporte a GPUs usadas no SoC Rockchip RK3528.
    • Adicionado o driver mtd (Memory Technology Devices) para acesso à memória NVM integrada na GPU Intel.
    • Suporte adicionado para sistemas de áudio ASoC IMX WM8524, AMD ACP7.2, SoundWire ACP 7.1, Fairphone 4 & 5, Qualcomm QCS8275, Framework Laptop 13 (AMD Ryzen AI 300), CS35L41 HDA (usado em laptops ASUS), Richtek RTQ9124, TI TAS5753, HP EliteBook x360 830 G6, EliteBook 830 G6, LG 16Z90R-A, HP 15-fc000. O código do HD-audio foi reorganizado.
    • Suporte adicionado para placas ARM, SoCs e dispositivos: NVIDIA Tegra264, Marvell PXA1908 (primeiro chip de 64 bits da Marvell para smartphones), CIX P1, Axiado AX3000, Sophgo SG2000 (que combina núcleos ARM e RISC-V), Mediatek mt6572, exynos2200 (usado no Samsung Galaxy S22), Renesas R-Car V4M-7, TI am62d2 e Sophgo sg2042, laptops baseados em Mediatek mt8186 e Qualcomm Snapdragon X1, smartphones e tablets baseados em SoC mt6572, tegra30 e msm8976.

Simultaneamente, a Fundação do Software Livre da América Latina formou uma versão totalmente livre do kernel 6.17 — Linux-libre 6.17-gnu, removendo elementos de firmwares e drivers que continham componentes não livres ou partes de código cujas aplicações são limitadas pelo fabricante. A versão 6.17 atualizou o código de limpeza de blobs nos drivers amdgpu, prueth, iwlwifi, btusb, pci mhi host, adreno a6xx, nova-core e Intel AVS. A limpeza dos nomes dos blobs nos arquivos dts (devicetree) para chips ARM e Intel IPU7 foi realizada. A carga de blobs nos novos drivers pci hda foi neutralizada. A limpeza de blobs no driver QLogic infiniband foi interrompida, estando ele removido do kernel.

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