Kernel Linux versão 6.7

Após dois meses de desenvolvimento, Linus Torvalds apresentou o lançamento do kernel Linux 6.7. Entre as mudanças mais notáveis: integração do sistema de arquivos Bcachefs, descontinuação do suporte à arquitetura Itanium, capacidade do Nouvea de trabalhar com firmware GSP-R, suporte para criptografia TLS em NVMe-TCP, capacidade de usar exceções em BPF, suporte para futex em io_uring, otimização do desempenho do agendador fq (Fair Queuing), suporte para a extensão TCP-AO (opção de autenticação TCP) e a capacidade de restringir conexões de rede no mecanismo de segurança Landlock, controle de acesso adicionado ao namespace do usuário e io_uring através do AppArmor.

A nova versão inclui 18405 correções de 2066 desenvolvedores, o tamanho do patch é de 72 MB (as alterações afetaram 13467 arquivos, 906147 linhas de código foram adicionadas, 341048 linhas foram excluídas). A última versão teve 15291 correções de 2058 desenvolvedores, o tamanho do patch era de 39 MB. Cerca de 45% de todas as alterações introduzidas no 6.7 estão relacionadas a drivers de dispositivos, aproximadamente 14% das alterações estão relacionadas à atualização de código específico para arquiteturas de hardware, 13% estão relacionadas à pilha de rede, 5% estão relacionadas a sistemas de arquivos e 3% estão relacionados aos subsistemas internos do kernel.

Principais inovações no kernel 6.7:

  • Subsistema de disco, E/S e sistemas de arquivos
    • O kernel adota o código do sistema de arquivos Bcachefs, que tenta alcançar o desempenho, confiabilidade e escalabilidade do XFS, combinado com elementos de funcionalidade avançada encontrados em Btrfs e ZFS. Por exemplo, Bcachefs oferece suporte a recursos como inclusão de vários dispositivos em uma partição, layouts de unidade multicamadas (a camada inferior com dados usados ​​com frequência baseados em SSDs rápidos e a camada superior com dados menos usados ​​de discos rígidos), replicação (RAID 1/10), cache, compactação transparente de dados (modos LZ4, gzip e ZSTD), fatias de estado (instantâneos), verificação de integridade usando somas de verificação, capacidade de armazenar códigos de correção de erros Reed-Solomon (RAID 5/6), armazenamento de informações em forma criptografada (são usados ​​ChaCha20 e Poly1305). Em termos de desempenho, o Bcachefs está à frente do Btrfs e de outros sistemas de arquivos baseados no mecanismo Copy-on-Write e demonstra velocidade operacional próxima ao Ext4 e XFS.
    • O sistema de arquivos Btrfs introduz um modo de cota simplificado que permite obter maior desempenho rastreando extensões apenas na subpartição em que são criadas, o que simplifica significativamente os cálculos e melhora o desempenho, mas não permite levar em consideração extensões compartilhadas em vários subpartições.
    • O Btrfs adicionou uma nova estrutura de dados de “árvore de faixas”, adequada para mapeamento de extensão lógica em situações onde os mapeamentos físicos não correspondem entre dispositivos. A estrutura é usada atualmente em implementações de RAID0 e RAID1 para dispositivos de bloco zoneados. No futuro, pretendem utilizar esta estrutura em RAIDs de nível superior, o que resolverá uma série de problemas existentes na implementação atual.
    • O sistema de arquivos Ceph implementa suporte para mapeamento de IDs de usuários de sistemas de arquivos montados, usados ​​para combinar os arquivos de um usuário específico em uma partição externa montada com outro usuário no sistema atual.
    • Adicionada a capacidade de especificar uid e gid na montagem para efivarfs para permitir que processos não-root alterem variáveis ​​UEFI.
    • Adicionadas chamadas ioctl ao exFAT para leitura e alteração de atributos FS. Adicionado tratamento de diretórios de tamanho zero.
    • F2FS implementa a capacidade de usar blocos de 16K.
    • O mecanismo autofs automount foi alterado para usar a nova API de montagem de partição.
    • OverlayFS oferece opções de montagem "lowerdir+" e "datadir+". Adicionado suporte para montagem aninhada de OverlayFS com xattrs.
    • O XFS otimizou a carga da CPU no código de alocação de blocos em tempo real. É fornecida a capacidade de executar simultaneamente operações de leitura e FICLONE.
    • O código EXT2 foi convertido para usar fólios de páginas.
  • Serviços de memória e sistema
    • O suporte para a arquitetura ia64 usada nos processadores Intel Itanium, que foram totalmente descontinuados em 2021, foi descontinuado. Os processadores Itanium foram introduzidos pela Intel em 2001, mas a arquitetura ia64 não conseguiu competir com o AMD64, principalmente devido ao maior desempenho do AMD64 e à transição mais suave dos processadores x32 de 86 bits. Como resultado, os interesses da Intel mudaram em favor dos processadores x86-64, e o lote do Itanium continuou sendo os servidores HP Integrity, cujos pedidos foram interrompidos há três anos. O código para suporte ia64 foi removido do kernel principalmente devido à falta de suporte de longo prazo para esta plataforma, enquanto Linus Torvalds expressou sua disposição de retornar o suporte ia64 ao kernel, mas apenas se houver um mantenedor que possa demonstrar alta qualidade suporte para esta plataforma fora do kernel principal por pelo menos um ano.
    • Adicionado o parâmetro de comando de linha do kernel “ia32_emulation”, que permite ativar ou desativar o suporte para emulação de modo de 32 bits em kernels construídos para a arquitetura x86-64 no estágio de inicialização. Do lado prático, a nova opção permite construir o kernel com suporte para compatibilidade com aplicativos de 32 bits, mas desabilitar este modo por padrão para reduzir o vetor de ataque ao kernel, já que a API de compatibilidade é menos testada que o kernel principal interfaces.
    • Migração contínua de mudanças do ramo Rust-for-Linux relacionadas ao uso da linguagem Rust como segunda linguagem para 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 entre os dependências de montagem necessárias para o kernel). A nova versão faz a transição para a versão Rust 1.73 e oferece um conjunto de ligações para trabalhar com filas de trabalho.
    • É possível usar o mecanismo binfmt_misc para adicionar suporte para novos formatos de arquivo executável (por exemplo, para executar aplicativos Java ou Python compilados) em namespaces separados e sem privilégios.
    • O controlador cgroup cpuset, que permite controlar o uso dos núcleos da CPU ao executar uma tarefa, fornece uma divisão em particionamento local e remoto, que diferem se o cgroup pai é a seção raiz correta ou não. Novas configurações “cpuset.cpus.exclusive” e “cpuset.cpus.excluisve.efficient” também foram adicionadas ao cpuset para ligação exclusiva da CPU.
    • O subsistema BPF implementa suporte para exceções, que são processadas como uma saída de emergência de um programa BPF com a capacidade de desenrolar quadros de pilha com segurança. Além disso, os programas BPF permitem o uso de ponteiros kptr em conexão com a CPU.
    • O suporte para operações com futex foi adicionado ao subsistema io_uring e novas operações foram implementadas: IORING_OP_WAITID (versão assíncrona de waitid), SOCKET_URING_OP_GETSOCKOPT (opção getsockoptand), SOCKET_URING_OP_SETSOCKOPT (opção setsockopt) e IORING_OP_READ_MULTISHOT (múltiplas operações de leitura que não param enquanto há dados ou não há buffer cheio).
    • Adicionada implementação de filas FIFO leves e de conexão única que exigem um spinlock apenas para desenfileiramento em um contexto de processo e dispensam um spinlock para adições atômicas à fila em qualquer contexto.
    • Adicionado um buffer de anel "objpool" com uma implementação escalonável de uma fila de alto desempenho para alocação e retorno de objetos.
    • A parte inicial das mudanças foi adicionada para implementar a nova API futex2, que tem melhor desempenho em sistemas NUMA, suporta tamanhos diferentes de 32 bits e pode ser usada no lugar da chamada de sistema futex() multiplexada.
    • Para arquiteturas ARM32 e S390x, foi adicionado suporte para o conjunto atual (cpuv4) de instruções BPF.
    • Para a arquitetura RISC-V, é possível usar o modo de verificação Shadow-Call Stack disponível no Clang 17, projetado para proteger contra a substituição do endereço de retorno de uma função em caso de estouro de buffer na pilha. A essência da proteção é salvar o endereço de retorno em uma pilha “sombra” separada após transferir o controle para uma função e recuperar esse endereço antes de sair da função.
    • Um novo modo de digitalização de página de memória inteligente foi adicionado ao mecanismo para mesclar páginas de memória idênticas (KSM: Kernel Samepage Merging), que rastreia páginas digitalizadas sem sucesso e reduz a intensidade de sua nova digitalização. Para ativar o novo modo, a configuração /sys/kernel/mm/ksm/smart_scan foi adicionada.
    • Adicionado um novo comando ioctl PAGEMAP_SCAN, que, quando usado com userfaultfd(), permite determinar os fatos de gravação em um intervalo de memória específico. O novo recurso, por exemplo, pode ser utilizado no sistema para salvar e restaurar o estado de processos CRIU ou em sistemas anti-cheat de jogos.
    • No sistema assembly, se o compilador Clang estiver disponível, a montagem de exemplos de uso do subsistema perf, escritos como programas BPF, é habilitada por padrão.
    • A antiga camada videobuf, que era usada para gerenciar framebuffers no subsistema de mídia e foi substituída por uma nova implementação do videobuf10 há mais de 2 anos, foi removida.
  • Virtualização e Segurança
    • A capacidade de criptografar dados em blocos menores que o tamanho do bloco no sistema de arquivos foi adicionada ao subsistema fscrypt. Isso pode ser necessário para ativar mecanismos de criptografia de hardware que suportam apenas blocos pequenos (por exemplo, controladores UFS que suportam apenas um tamanho de bloco 4096 podem ser usados ​​com um sistema de arquivos com tamanho de bloco de 16K).
    • O subsistema “iommufd”, que permite gerenciar tabelas de páginas de memória IOMMU (I/O Memory-Management Unit) por meio de descritores de arquivos do espaço do usuário, adicionou rastreamento de dados que ainda não foram liberados do cache (sujo) para DMA operações, que são necessárias para determinar a memória com dados não liberados durante a migração do processo.
    • Foi adicionado ao mecanismo Landlock suporte para definição de regras de controle de acesso para soquetes TCP, que permite limitar a interação de um grupo de processos com o ambiente externo. Por exemplo, você pode criar uma regra que permita apenas o acesso à porta de rede 443 para estabelecer conexões HTTPS.
    • O subsistema AppArmor adicionou a capacidade de controlar o acesso ao mecanismo io_uring e criar namespaces de usuário, o que permite permitir seletivamente o acesso a esses recursos apenas para determinados processos.
    • Adicionada API de atestado de máquina virtual para verificar a integridade do processo de inicialização da máquina virtual.
    • Os sistemas LoongArch suportam virtualização usando o hipervisor KVM.
    • Ao usar o hipervisor KVM em sistemas RISC-V, apareceu o suporte para a extensão Smstateen, que bloqueia o acesso da máquina virtual aos registros da 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 o uso de algumas operações de números inteiros condicionais.
    • Em sistemas convidados baseados em x86 executados em KVM, são permitidas até 4096 CPUs virtuais.
  • subsistema de rede
    • O driver NVMe-TCP (NVMe over TCP), que permite acessar drives NVMe pela rede (NVM Express over Fabrics) usando o protocolo TCP, adicionou suporte para criptografar o canal de transmissão de dados usando TLS (usando KTLS e um processo em segundo plano no espaço do usuário tlshd para negociação de conexão).
    • O desempenho do agendador de pacotes fq (Fair Queuing) foi otimizado, o que possibilitou aumentar o throughput em 5% sob cargas pesadas no teste tcp_rr (Solicitação/Resposta TCP) e em 13% com fluxo ilimitado de pacotes UDP.
    • O TCP adiciona um recurso opcional de carimbo de data/hora com precisão de microssegundos (TCP TS) (RFC 7323), que permite uma estimativa de latência mais precisa e módulos de controle de congestionamento mais avançados. Para habilitá-lo, você pode usar o comando “ip route add 10/8 ... features tcp_usec_ts”.
    • A pilha TCP adicionou suporte à extensão TCP-AO (TCP Authentication Option, RFC 5925), que permite verificar cabeçalhos TCP usando códigos MAC (Message Authentication Code), usando algoritmos mais modernos HMAC-SHA1 e CMAC-AES- 128, em vez da opção TCP-MD5 anteriormente disponível, baseada no algoritmo MD5 legado.
    • Foi adicionado um novo tipo de dispositivos de rede virtual “netkit”, cuja lógica de transferência de dados é definida por meio de um programa BPF.
    • KSMBD, uma implementação em nível de kernel de um servidor SMB, adicionou suporte para resolver nomes de arquivos contendo pares substitutos de caracteres compostos.
    • O NFS melhorou a implementação de threads com serviços RPC. Adicionado suporte para delegação de gravação (para NFSv4.1+). NFSD adicionou suporte para o manipulador de netlink rpc_status. Suporte aprimorado para clientes NFSv4.x ao reexportar para knfsd.
  • Оборудование
    • O suporte inicial para firmware GSP-RM foi adicionado ao módulo de kernel Nouveau, que é usado na GPU NVIDIA RTX 20+ para mover as operações de inicialização e controle de GPU para o lado de um microcontrolador GSP separado (processador de sistema GPU). O suporte GSP-RM permite que o driver Nouveau funcione por meio de chamadas de firmware, em vez de programar diretamente interações de hardware, tornando muito mais fácil adicionar suporte para novas GPUs NVIDIA usando chamadas pré-construídas para inicialização e gerenciamento de energia.
    • O driver AMDGPU suporta GC 11.5, NBIO 7.11, SMU 14, SMU 13.0 OD, DCN 3.5, VPE 6.1 e DML2. Suporte aprimorado para carregamento contínuo (sem oscilações ao alternar o modo de vídeo).
    • O driver i915 adiciona suporte para chips Intel Meteor Lake e adiciona uma implementação inicial do Intel LunarLake (Xe 2).
    • Adicionado suporte para canais de transmissão assimétricos adicionados à especificação USB4 v2 (120/40G).
    • Adicionado suporte para ARM SoC: 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 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 som de laptops HUAWEI fornecidos com CPUs AMD. Adicionado suporte para alto-falantes adicionais instalados em laptops Dell Oasis 13/14/16. Adicionado suporte para alto-falantes integrados ASUS K6500ZC. Adicionado suporte para o indicador de mudo nos laptops HP 255 G8 e G10. Adicionado suporte para drivers de áudio acp6.3. Adicionado suporte para interfaces de gravação profissional Focusrite Clarett+ 2Pre e 4Pre.

Ao mesmo tempo, a Fundação Latino-Americana de Software Livre formou uma versão do kernel 6.7 totalmente gratuito - Linux-libre 6.7-gnu, livre de elementos de firmware e drivers contendo componentes ou seções de código não livres, cujo escopo é limitado pelo fabricante. Na versão 6.7, o código de limpeza de blob foi atualizado em vários drivers e subsistemas, por exemplo, nos drivers amdgpu, nouveau, adreno, mwifiex, mt7988, ath11k, avs e btqca. O código para limpeza dos drivers localtalk e rtl8192u foi removido devido à sua exclusão do kernel. Removidos componentes desnecessários para limpeza dos drivers xhci-pci, rtl8xxxu e rtw8822b, adicionados anteriormente por engano. Limpeza de nomes de blob em arquivos dts para a arquitetura Aarch64. Blobs removidos nos novos drivers mt7925, tps6598x, aw87390 e aw88399.

Fonte: opennet.ru

Adicionar um comentário