Lançamento do kernel Linux 6.7

Após dois meses de desenvolvimento, Linus Torvalds apresentou o lançamento do núcleo Linux 6.7. Entre as mudanças mais notáveis estão: integração do sistema de arquivos Bcachefs, suspensão do suporte para a arquitetura Itanium, capacidade de funcionamento do Nouveau com firmwares GSP-R, suporte à criptografia TLS em NVMe-TCP, possibilidade de uso de exceções no BPF, suporte a futex no io_uring, otimização de desempenho do escalonador fq (Fair Queuing), suporte à extensão TCP-AO (Opção de Autenticação TCP) e capacidade de limitar conexões de rede no mecanismo de proteção Landlock, além de gerenciar o acesso ao namespace de usuário e io_uring através do AppArmor.

A nova versão inclui 18.405 correções de 2.066 desenvolvedores, com tamanho do patch de 72 MB (as mudanças afetaram 13.467 arquivos, adicionando 906.147 linhas de código e removendo 341.048 linhas). Na versão anterior, houve 15.291 correções de 2.058 desenvolvedores, com tamanho do patch de 39 MB. Cerca de 45% de todas as alterações apresentadas no 6.7 estão relacionadas a drivers de dispositivos, aproximadamente 14% das mudanças dizem respeito à atualização de código específico para arquiteturas de hardware, 13% estão relacionadas ao stack de rede, 5% às sistemas de arquivos e 3% às subsistemas internos do núcleo.

As principais inovações no núcleo 6.7:

  • Subsistema de disco, entrada/saída e sistemas de arquivos
    • O núcleo agora inclui o código do sistema de arquivos Bcachefs, que tenta alcançar níveis de desempenho, confiabilidade e escalabilidade similares ao XFS, em combinação com elementos de funcionalidade avançada encontrados no Btrfs e ZFS. Por exemplo, Bcachefs suporta recursos como inclusão de múltiplos dispositivos em uma partição, layouts de armazenamento em múltiplas camadas (camada inferior com dados frequentemente usados em SSDs rápidos e camadas superiores com dados menos acessados em disco rígido), replicação (RAID 1/10), cache, compressão de dados transparente (modos LZ4, gzip e ZSTD), snapshots, verificação de integridade por checksums, possibilidade de armazenamento de códigos de correção de erros de Reed-Solomon (RAID 5/6), e armazenamento de informações de forma criptografada (usando ChaCha20 e Poly1305). Em termos de desempenho, Bcachefs supera o Btrfs e outros sistemas de arquivos baseados no mecanismo Copy-on-Write, demonstrando velocidades de operação próximas ao Ext4 e XFS.
    • No sistema de arquivos Btrfs, foi introduzido um modo simplificado de quotas, que permite alcançar um desempenho mais elevado ao rastrear extensões apenas na subpasta em que foram criadas, o que simplifica consideravelmente os cálculos e aumenta a performance, mas não permite considerar extensões compartilhadas entre várias subpastas.
    • No Btrfs, foi adicionada uma nova estrutura de dados chamada "stripe tree", adequada para mapeamento lógico de extensões em situações em que o mapeamento físico não coincide em diferentes dispositivos. Esta estrutura está atualmente implementada nas implementações RAID0 e RAID1 para dispositivos de bloco zonificados. No futuro, esta estrutura está planejada para ser usada em RAID de níveis superiores, o que permitirá resolver uma série de problemas existentes na implementação atual.
    • No sistema de arquivos Ceph, foi implementado suporte para mapeamento de IDs de usuários de sistemas de arquivos montados, utilizado para correlacionar arquivos de um determinado usuário em uma partição montada de outro com um usuário diferente no sistema atual.
    • No efivarfs, foi adicionada a capacidade de especificar uid e gid ao montar para permitir a alteração de variáveis UEFI por processos executados sem privilégios de root.
    • No exFAT, foram adicionadas chamadas ioctl para leitura e modificação de atributos do sistema de arquivos. A manipulação de diretórios de tamanho zero foi implementada.
    • No F2FS, foi implementada a possibilidade de uso de blocos de 16K.
    • O mecanismo de automontagem autofs foi convertido para usar a nova API de montagem de partições.
    • No OverlayFS, foram oferecidas opções de montagem "lowerdir+" e "datadir+". Foi adicionada suporte para montagem aninhada do OverlayFS com xattrs.
    • No XFS, houve otimização da carga no CPU no código de distribuição de blocos em tempo real. Foi garantida a capacidade de executar operações de leitura e FICLONE simultaneamente.
    • O código EXT2 foi modificado para utilizar folhetos de páginas de memória (page folios).
  • Memória e serviços do sistema
    • O suporte à arquitetura ia64, usada nos processadores Intel Itanium, foi descontinuado, com as vendas completamente encerradas em 2021. Os processadores Itanium foram lançados pela Intel em 2001, mas a arquitetura ia64 não conseguiu competir com a AMD64, principalmente devido ao desempenho superior da AMD64 e à transição mais suave dos processadores x86 de 32 bits. Como resultado, os interesses da Intel migraram para processadores x86-64, enquanto o Itanium foi relegado a servidores HP Integrity, cujos pedidos foram encerrados três anos atrás. O código para suporte ao ia64 foi removido do núcleo principalmente devido à longa ausência de manutenção desta plataforma, embora Linus Torvalds tenha expressado disposição para reinstaurar o suporte ao ia64 no núcleo, mas apenas se alguém se oferecer para demonstrar manutenção de qualidade dessa plataforma fora do núcleo principal por pelo menos um ano.
    • A opção de linha de comando do núcleo "ia32_emulation" foi adicionada, permitindo ativar e desativar o suporte à emulação de 32 bits nos núcleos compilados para a arquitetura x86-64 durante a fase de inicialização. Do ponto de vista prático, essa nova opção permite compilar o núcleo com suporte à compatibilidade com aplicativos de 32 bits, mas desativa este modo por padrão para reduzir o vetor de ataque ao núcleo, já que a API para garantir compatibilidade é menos testada que as interfaces principais do núcleo.
    • Continua a transferência de alterações do ramo Rust-for-Linux, relacionadas 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á ativo por padrão, e não resulta na inclusão do Rust entre as dependências obrigatórias de compilação do núcleo). Na nova versão, foi realizada a transição para o uso do lançamento do Rust 1.73 e foi proposto um conjunto de vinculações para trabalhar com filas de trabalho (workqueues).
    • Foi possibilitado o uso do mecanismo binfmt_misc para adicionar suporte a novos formatos de arquivos executáveis (por exemplo, para executar aplicativos compilados em Java ou Python) dentro de espaços de nomes (namespace) não privilegiados.
    • No controlador cpuset do cgroup, que gerencia o uso de núcleos da CPU durante a execução de uma tarefa, há uma distinção entre segmentação local e remota, que se diferencia pela validade da seção cgroup pai como uma seção raiz correta ou não. No cpuset, também foram adicionadas novas configurações "cpuset.cpus.exclusive" e "cpuset.cpus.exclusive.effective" para vinculação exclusiva à CPU.
    • Na subsistema BPF, foi implementado suporte a exceções, que são tratadas como uma saída imediata do programa BPF com a possibilidade de desenrolar a pilha de forma segura. Além disso, o uso de ponteiros kptr para vinculação à CPU é permitido em programas BPF.
    • O subsistema io_uring ganhou suporte para operações com futex, e novas operações foram implementadas: IORING_OP_WAITID (versão assíncrona de waitid), SOCKET_URING_OP_GETSOCKOPT (variável de getsockopt) e SOCKET_URING_OP_SETSOCKOPT (variável de setsockopt) e IORING_OP_READ_MULTISHOT (operações de leitura múltipla que não param enquanto houver dados ou o buffer não estiver cheio).
    • Foi adicionada a implementação de filas FIFO leves que requerem bloqueio por spin apenas para remoção da fila no contexto do processo e dispensam bloqueio para adição atômica à fila em qualquer contexto.
    • Foi adicionado um buffer circular "objpool" com implementação escalável de uma fila de alto desempenho para alocação e devolução de objetos.
    • Uma parte inicial das alterações para a implementação da nova API futex2 foi adicionada, a qual apresenta melhor desempenho em sistemas NUMA, suporta tamanhos diferentes de 32 bits e pode ser utilizada em vez da chamada de sistema multiplexada futex().
    • Para as arquiteturas ARM32 e S390x, foi adicionado suporte ao conjunto atual (cpuv4) de instruções BPF.
    • Para a arquitetura RISC-V, foi implementada a possibilidade de usar o modo de verificação Shadow-Call Stack disponível no Clang 17, que é projetado para proteger contra a sobrescrita do endereço de retorno da função em caso de estouro de buffer na pilha. A proteção consiste em salvar, após transferir o controle para a função, o endereço de retorno em uma pilha "sombra" separada e recuperá-lo antes de sair da função.
    • Um mecanismo de fusão de páginas de memória idênticas (KSM: Kernel Samepage Merging) foi adicionado um novo modo inteligente de digitalização de páginas de memória, que rastreia páginas que falharam na digitalização e reduz a intensidade de sua re-digitalização. Para ativar o novo modo, foi adicionada uma configuração em /sys/kernel/mm/ksm/smart_scan.
    • Foi adicionada uma nova comando ioctl PAGEMAP_SCAN, que, ao ser usada com userfaultfd(), permite determinar gravações em um determinado intervalo de memória. Essa nova funcionalidade, por exemplo, pode ser utilizada em sistemas para salvar e restaurar o estado de processos CRIU ou em sistemas anti-cheat de jogos.
    • No sistema de montagem, quando o compilador Clang está presente, a compilação de exemplos de uso do subsistema perf, escritos como programas BPF, é habilitada por padrão.
    • A antiga camada videobuf, usada para gerenciar quadros de buffer de vídeo no subsistema de mídia e substituída por uma nova implementação, videobuf2, há mais de 10 anos foi removida.
  • Virtualização e segurança
    • No subsistema fscrypt, foi adicionada a funcionalidade de criptografia de dados em blocos menores que o tamanho do bloco do sistema de arquivos. Isso pode ser necessário para habilitar mecanismos de criptografia de hardware que suportam apenas blocos pequenos (por exemplo, controladores UFS que suportam apenas o tamanho de bloco 4096, poderão ser usados com sistemas de arquivos com tamanho de bloco 16K).
    • No subsistema 'iommufd', que permite gerenciar tabelas de páginas de memória de entrada/saída IOMMU (I/O Memory-Management Unit) através de descritores de arquivos do espaço do usuário, foi adicionado o rastreamento de dados que ainda não foram limpos do cache (dirty) para operações DMA, o que é necessário para identificar a memória com dados não limpos durante a migração de processos.
    • No mecanismo Landlock, que permite limitar a interação de um grupo de processos com o ambiente externo, foi adicionada a suporte para definição de regras de controle de acesso a sockets TCP. Por exemplo, é possível criar uma regra que permite apenas o acesso pela porta de rede 443 para estabelecer conexões HTTPS.
    • No subsistema AppArmor, foi adicionada a capacidade de gerenciar o acesso ao mecanismo io_uring e criar namespaces de identificadores de usuário (user namespaces), permitindo que o acesso a essas funções seja concedido seletivamente a processos específicos.
    • Foi adicionado um API de atestação máquinas virtuais para verificar a integridade do processo de seus carregamentos.
    • Nos sistemas LoongArch foi implementado suporte para virtualização usando o hipervisor KVM.
    • Com o hipervisor KVM em sistemas RISC-V, foi adicionado suporte à extensão Smstateen, que bloqueia o acesso da máquina virtual aos registradores de CPU que não são explicitamente suportados pelo hipervisor. Também foi adicionado suporte para o uso da extensão Zicond em sistemas convidados, que permite realizar algumas operações condicionalmente inteiras.
    • Nos sistemas convidados baseados na arquitetura x86, geridos pelo KVM, é permitido o uso de até 4096 CPUs virtuais.
  • Subsistema de Rede
    • No driver NVMe-TCP (NVMe sobre TCP), que permite o acesso a discos NVMe pela rede (NVM Express over Fabrics), foi adicionado suporte para criptografia do canal de comunicação usando TLS (utilizando KTLS e um processo em espaço de usuário tlshd para negociação da conexão).
    • A performance do agendador de pacotes fq (Fair Queuing) foi otimizada, permitindo aumentar a largura de banda em 5% sob cargas altas no teste tcp_rr (TCP Request/Response) e em 13% sob fluxo irrestrito de pacotes UDP.
    • Foi adicionada ao protocolo TCP a capacidade opcional de usar timestamps (TCP TS) com precisão em microsegundos (RFC 7323), permitindo uma avaliação mais precisa das latências e a criação de módulos de controle de sobrecarga mais avançados. Para ativação, pode-se usar o comando 'ip route add 10/8 … features tcp_usec_ts'.
    • No stack TCP foi adicionado suporte para a extensão TCP-AO (TCP Authentication Option, RFC 5925), que permite verificar os cabeçalhos TCP usando códigos MAC (Message Authentication Code), utilizando algoritmos mais modernos HMAC-SHA1 e CMAC-AES-128 em vez da opção anterior TCP-MD5 baseada no obsoleto algoritmo MD5.
    • Foi adicionado um novo tipo de dispositivos de rede virtuais 'netkit', cuja lógica de transferência de dados é definida por um programa BPF.
    • No KSMBD, uma implementação do servidor SMB no nível do kernel, foi adicionado suporte para a conversão de nomes de arquivos que contêm pares de surrogados de símbolos compostos.
    • Na NFS, a implementação de fluxos com serviços RPC foi melhorada. Suporte para delegação de gravação (para NFSv4.1+). No NFSD, foi adicionado suporte para tratador netlink rpc_status. Melhorado o suporte para clientes NFSv4.x ao re-exportar em knfsd.
  • Hardware
    • O módulo do núcleo Nouveau adicionou suporte inicial para firmwares GSP-RM, usados na GPU NVIDIA RTX 20+ para a execução de operações de inicialização e gerenciamento da GPU em um microcontrolador GSP (GPU System Processor) separado. O suporte ao GSP-RM permite que o driver Nouveau opere por meio de chamadas ao firmware, em vez da programação direta das operações de interação com o hardware, o que simplifica muito a adição de suporte a novas GPUs NVIDIA, utilizando chamadas já existentes para inicialização e gerenciamento do consumo de energia.
    • O driver AMDGPU implementou suporte para GC 11.5, NBIO 7.11, SMU 14, SMU 13.0 OD, DCN 3.5, VPE 6.1 e DML2. Melhorou o suporte para carregamento contínuo (sem piscar ao alternar modos de vídeo).
    • O driver i915 implementou suporte para chips Intel Meteor Lake e adicionou uma implementação inicial do Intel LunarLake (Xe 2).
    • Adicionado suporte para canais de transmissão assimétricos, conforme especificações USB4 v2 (120/40G).
    • Adicionado suporte para SoCs ARM: Qualcomm Snapdragon 720G (usado em smartphones Xiaomi), AMD Pensando Elba, Renesas, R8A779F4 (R-Car S4-8), USRobotics USR8200 (usado em roteadores e NAS).
    • Adicionado suporte para o smartphone Fairphone 5 e placas ARM Orange Pi 5, QuartzPro64, Turing RK1, Variscite MX6, BigTreeTech CB1, Freescale LX2162, Google Spherion, Google Hayato, Genio 1200 EVK, RK3566 Powkiddy RGB30.
    • Adicionado suporte para placas RISC-V Milk-V Pioneer e Milk-V Duo.
    • Adicionado suporte para interfaces de áudio de laptops HUAWEI com CPU AMD. Adicionado suporte para alto-falantes adicionais instalados em laptops Dell Oasis 13/14/16. Adicionado suporte para alto-falantes embutidos ASUS K6500ZC. Adicionado suporte para o indicador de silenciamento em laptops HP 255 G8 e G10. Adicionado suporte para drivers de áudio acp6.3. Adicionado suporte para interfaces de gravação de áudio profissionais Focusrite Clarett+ 2Pre e 4Pre.

Simultaneamente, a Fundação de Software Livre da América Latina formou uma versão totalmente livre do núcleo 6.7 — Linux-libre 6.7-gnu, que foi depurado de elementos de firmware e drivers que contêm componentes ou trechos de código não livres, cuja aplicação é restrita pelo fabricante. Na versão 6.7, o código de limpeza de blobs foi atualizado em vários drivers e subsistemas, por exemplo, nos drivers amdgpu, nouveau, adreno, mwifiex, mt7988, ath11k, avs e btqca. O código de limpeza dos drivers localtalk e rtl8192u foi removido devido à sua exclusão do núcleo. Componentes desnecessários de limpeza dos drivers xhci-pci, rtl8xxxu e rtw8822b, que haviam sido adicionados por engano, foram eliminados. A limpeza dos nomes de blobs em arquivos dts para a arquitetura Aarch64 foi realizada. Blobs em novos drivers mt7925, tps6598x, aw87390 e aw88399 foram removidos.

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