Kernel Linux versão 6.3

Após dois meses de desenvolvimento, Linus Torvalds lançou o kernel Linux 6.3. Entre as mudanças mais notáveis: limpeza de plataformas ARM e drivers gráficos obsoletos, integração contínua do suporte à linguagem Rust, utilitário hwnoise, suporte para estruturas de árvore vermelho-preto em BPF, modo BIG TCP para IPv4, benchmark Dhrystone integrado, capacidade de desativar execução em memfd, suporte para criação de drivers HID usando BPF, alterações foram feitas no Btrfs para reduzir a fragmentação do grupo de blocos.

A nova versão aceitou 15637 correções de 2055 desenvolvedores; tamanho do patch - 76 MB (as alterações afetaram 14296 arquivos, 1023183 linhas de código adicionadas, 883103 linhas excluídas). Para comparação, na versão anterior, 16843 correções foram propostas por 2178 desenvolvedores; tamanho do patch - 62 MB. Cerca de 39% de todas as alterações introduzidas no kernel 6.3 estão relacionadas a drivers de dispositivo, cerca de 15% das alterações estão relacionadas à atualização de código específico para arquiteturas de hardware, 10% estão relacionadas à pilha de rede, 5% a sistemas de arquivos e 3 % para subsistemas internos do kernel.

Principais inovações no kernel 6.3:

  • Serviços de memória e sistema
    • Foi realizada uma limpeza significativa do código relacionado a placas ARM antigas e não utilizadas, o que reduziu o tamanho das fontes do kernel em 150 mil linhas. Removidas mais de 40 plataformas ARM antigas.
    • Implementada a capacidade de criar drivers para dispositivos de entrada com a interface HID (Human Interface Device) implementada na forma de programas BPF.
    • Portabilidade contínua do ramo Rust-for-Linux de funcionalidade adicional relacionada ao uso de Rust como uma segunda linguagem para desenvolver drivers e módulos do kernel. O suporte a Rust não é ativado por padrão e não resulta na inclusão de Rust como uma dependência obrigatória de compilação do kernel. A funcionalidade oferecida nas versões anteriores foi estendida com suporte para os tipos Arc (uma implementação de ponteiros com uma contagem de referência), ScopeGuard (a limpeza é realizada quando sai do escopo) e ForeignOwnable (fornece movimento de ponteiro entre C e código Rust) . Módulo 'emprestar' removido do pacote 'alloc' (tipo 'Cow' e característica 'ToOwned'). Nota-se que o estado de suporte ao Rust no kernel já está próximo de começar a aceitar os primeiros módulos escritos em Rust no kernel.
    • Linux em modo de usuário (executando o kernel como um processo de usuário) em sistemas x86-64 suporta código escrito em Rust. Adicionado suporte para construir Linux em modo de usuário usando clang com otimizações de tempo de link habilitadas (LTO).
    • Adicionado utilitário hwnoise para rastrear atrasos causados ​​pelo comportamento do hardware. Desvios no tempo de execução das operações (jitter) são determinados quando o processamento da interrupção é desabilitado, ultrapassando um microssegundo em 10 minutos de cálculos.
    • Um módulo de kernel foi adicionado com uma implementação de benchmark Dhrystone que pode ser usada para avaliar o desempenho da CPU em configurações sem componentes de espaço do usuário (por exemplo, no estágio de portabilidade para novos SoCs que implementam apenas o carregamento do kernel).
    • Adicionada a opção de linha de comando do kernel "cgroup.memory=nobpf" para desabilitar a contabilidade de consumo de memória para programas BPF, o que pode ser útil para sistemas com contêineres isolados.
    • Para programas BPF, é proposta uma implementação da estrutura de dados red-black tree, que usa kfunc + kptr (bpf_rbtree_add, bpf_rbtree_remove, bpf_rbtree_first) ao invés de adicionar um novo tipo de mapeamento.
    • No mecanismo de sequências reinicializáveis ​​(rseq, sequências reinicializáveis), foi adicionada aos processos a possibilidade de passar identificadores de execução paralela (ID de simultaneidade do mapa de memória) identificados com o número da CPU. Rseq fornece um meio para executar rapidamente operações atomicamente que, se interrompidas por outro thread, são limpas e repetidas.
    • Os processadores ARM suportam instruções SME 2 (Scalable Matrix Extension).
    • Para as arquiteturas s390x e RISC-V RV64, o suporte para o mecanismo "BPF trampoline" é implementado, o que permite minimizar a sobrecarga ao transferir chamadas entre o kernel e os programas BPF.
    • Em sistemas com processadores baseados na arquitetura RISC-V, foi implementado o uso de instruções "ZBB" para agilizar as operações de string.
    • Para sistemas baseados na arquitetura do conjunto de instruções LoongArch (usado nos processadores Loongson 3 5000 e implementando um novo RISC ISA semelhante ao MIPS e RISC-V), suporte para randomização do espaço de endereço do kernel (KASLR), realocação do kernel na memória (relocação ), os pontos de hardware param e o mecanismo kprobe.
    • O mecanismo DAMOS (Esquemas de operação baseados em monitoramento de acesso a dados), que permite liberar memória com base na frequência de acesso à memória, oferece suporte a filtros para excluir determinadas áreas da memória do processamento em DAMOS.
    • A biblioteca C padrão mínima Nolibc implementa suporte para a arquitetura s390 e o conjunto de instruções Arm Thumb1 (além do suporte para ARM, AArch64, i386, x86_64, RISC-V e MIPS).
    • O Objtool foi otimizado para acelerar as compilações do kernel e reduzir o pico de consumo de memória durante as compilações (ao compilar o kernel no modo "allyesconfig", não há problemas com o encerramento forçado de processos em sistemas com 32 GB de RAM).
    • O suporte para a montagem do kernel pelo compilador Intel ICC foi descontinuado, que está parado há muito tempo e ninguém expressou o desejo de consertá-lo.
  • Subsistema de disco, E/S e sistemas de arquivos
    • O tmpfs oferece suporte ao mapeamento de ID do usuário do sistema de arquivos montado, que é usado para mapear os arquivos de um usuário específico em uma partição externa montada para outro usuário no sistema atual.
    • No Btrfs, para reduzir a fragmentação dos grupos de blocos, as extensões são divididas por tamanho na hora de alocar os blocos, ou seja, qualquer grupo de blocos agora está limitado a pequenas (até 128 KB), médias (até 8 MB) e grandes extensões. A implementação raid56 foi refatorada. Código redesenhado para verificação de somas de verificação. Otimizações de desempenho foram feitas para acelerar a operação de envio em até 10 vezes, armazenando em cache utime para diretórios e executando comandos somente quando necessário. Operações de fiemap 10x mais rápidas, ignorando as verificações de backlink para dados compartilhados (instantâneos). As operações com metadados são aceleradas em XNUMX% ao otimizar a busca de chaves em estruturas b-tree.
    • Desempenho aprimorado do ext4 FS, permitindo que vários processos executem simultaneamente operações diretas de E/S para blocos pré-alocados usando bloqueios de inode compartilhados em vez de bloqueios exclusivos.
    • Em f2fs, foi feito um trabalho para melhorar a legibilidade do código. Correção de problemas importantes relacionados à gravação atômica e ao novo cache de extensão.
    • O EROFS (Enhanced Read-Only File System), projetado para uso em partições somente leitura, implementa a capacidade de vincular operações de descompactação de arquivos compactados à CPU para reduzir atrasos de acesso a dados.
    • O agendador de E/S BFQ adicionou suporte para unidades de disco rotativas avançadas, como aquelas que usam várias unidades controladas separadamente (Multi Actuator).
    • O suporte para criptografia de dados usando o algoritmo AES-SHA2 foi adicionado à implementação do cliente e servidor NFS.
    • O subsistema FUSE (Filesystems In User Space) adicionou suporte para o mecanismo de extensão de consulta, que permite colocar informações adicionais na consulta. Com base nesse recurso, é implementada a adição de identificadores de grupo à solicitação do FS, necessários para levar em consideração os direitos de acesso ao criar objetos no FS (create, mkdir, symlink, mknod).
  • Virtualização e Segurança
    • O hipervisor KVM para sistemas x86 adiciona suporte para hiperchamadas Hyper-V estendidas e fornece encaminhamento para um manipulador em execução em um ambiente de host de espaço de usuário. A alteração possibilitou a implementação do suporte para inicialização aninhada do hipervisor Hyper-V.
    • O KVM torna mais fácil restringir o acesso do sistema convidado a eventos de PMU (Performance Monitor Unit) relacionados à medição de desempenho.
    • Ao mecanismo memfd, que permite identificar uma área de memória através de um descritor de arquivo passado entre os processos, foi adicionada a capacidade de criar áreas nas quais a execução do código é proibida (memfd não executável) e é impossível definir direitos de execução no futuro.
    • Uma nova operação PR_SET_MDWE prctl foi adicionada para bloquear tentativas de incluir direitos de acesso à memória que permitem gravar e executar ao mesmo tempo.
    • A proteção contra ataques da classe Spectre foi adicionada e habilitada por padrão, com base no modo automático IBRS (Enhanced Indirect Branch Restricted Speculation) proposto nos processadores AMD Zen 4, que permite habilitar e desabilitar de forma adaptativa a execução especulativa de instruções durante o processamento de interrupção , chamadas de sistema e trocas de contexto. A proteção proposta resulta em menor sobrecarga em comparação com a proteção Retpoline.
    • Resolve uma vulnerabilidade que pode ignorar a proteção contra ataques do Spectre v2 ao usar a tecnologia multithreading simultânea (SMT ou Hyper-Threading) e causada pela desativação do mecanismo STIBP (Single Thread Indirect Branch Preditors) ao selecionar o modo de proteção IBRS.
    • Para sistemas baseados em ARM64, um novo destino de compilação "virtconfig" foi adicionado, o qual, quando selecionado, ativa apenas o conjunto mínimo de componentes do kernel necessários para inicializar em sistemas de virtualização.
    • Adicionado suporte para filtragem de chamadas do sistema usando o mecanismo seccomp para a arquitetura m68k.
    • Adicionado suporte para dispositivos CRB TPM2 (Command Response Buffer) integrados dos processadores AMD Ryzen baseados na tecnologia Microsoft Pluton.
  • subsistema de rede
    • Uma interface netlink foi adicionada para configurar a subcamada PLCA (Physical Layer Collision Avoidance), definida na especificação IEEE 802.3cg-2019 e usada em redes Ethernet 802.3cg (10Base-T1S) otimizadas para conectar dispositivos IoT e sistemas industriais. O uso de PLCA melhora o desempenho em redes Ethernet de mídia compartilhada.
    • O suporte para a API "extensões sem fio" para gerenciar interfaces sem fio WiFi 7 (802.11be) foi descontinuado, pois essa API não cobre todas as configurações necessárias. Ao tentar usar a API "extensões sem fio", que continua a ser suportada como uma camada emulada, um aviso será exibido para a maioria dos dispositivos atuais.
    • Documentação detalhada sobre a API netlink foi preparada (para desenvolvedores de kernel e para desenvolvedores de aplicativos de espaço de usuário). O utilitário ynl-gen-c foi implementado para gerar código C com base nas especificações YAML do protocolo Netlink.
    • O suporte para a opção IP_LOCAL_PORT_RANGE foi adicionado aos soquetes de rede para simplificar a configuração de conexões de saída por meio de conversores de endereço sem usar SNAT. Ao usar o mesmo endereço IP em vários hosts, IP_LOCAL_PORT_RANGE permite que cada host use seu próprio intervalo de portas de rede de saída e no gateway para encaminhar pacotes com base nos números das portas.
    • Para MPTCP (MultiPath TCP), a capacidade de lidar com fluxos mistos que usam os protocolos IPv4 e IPv6 é implementada. O MPTCP é uma extensão do protocolo TCP para organizar a operação de uma conexão TCP com a entrega de pacotes simultaneamente ao longo de várias rotas por meio de diferentes interfaces de rede vinculadas a diferentes endereços IP.
    • Para IPv4, é implementada a possibilidade de usar a extensão BIG TCP, que permite aumentar o tamanho máximo do pacote TCP até 4 GB para otimizar a operação de redes internas de data centers de alta velocidade. Esse aumento no tamanho do pacote com um campo de cabeçalho de 16 bits é obtido pela implementação de pacotes "jumbo" que têm o tamanho do cabeçalho IP definido como 0 e o tamanho real transmitido em um campo separado de 32 bits em um cabeçalho anexado separado.
    • Um novo parâmetro sysctl default_rps_mask foi adicionado, por meio do qual você pode definir a configuração padrão de RPS (Receive Packet Steering), que é responsável por distribuir o processamento do tráfego de entrada entre os núcleos da CPU no nível do manipulador de interrupção.
    • Suporte descontinuado para disciplinas de filas para restringir o tráfego CBQ (filas baseadas em classe), ATM (circuitos virtuais ATM), dsmark (marcador de serviço diferenciado), tcindex (índice de controle de tráfego) e RSVP (protocolo de reserva de recursos). Essas disciplinas foram abandonadas por muito tempo e ninguém estava disposto a continuar a apoiá-las.
  • Оборудование
    • Removidos todos os drivers gráficos baseados em DRI1: i810 (placas gráficas integradas Intel 8xx antigas), mga (GPU Matrox), r128 (GPU ATI Rage 128 incluindo placas Rage Fury, XPERT 99 e XPERT 128), savage (GPU S3 Savage), sis ( Crusty SiS GPU), tdfx (3dfx Voodoo) e via (VIA IGP), que foram obsoletos em 2016 e não são suportados no Mesa desde 2012.
    • Removidos os drivers obsoletos do framebuffer (fbdev) omap1, s3c2410, tmiofb e w100fb.
    • Um driver DRM foi adicionado para a VPU (Versatile Processing Unit) integrada às CPUs Intel Meteor Lake (14ª geração), projetadas para acelerar as operações de visão computacional e aprendizado de máquina. O driver é implementado usando o subsistema "accel", destinado a fornecer suporte para aceleradores de computação, que podem ser fornecidos na forma de ASICs separados e como blocos IP dentro do SoC e GPU.
    • O driver i915 (Intel) expande o suporte para placas gráficas discretas Intel Arc (DG2/Alchemist), apresenta suporte preliminar para GPUs Meteor Lake e inclui suporte para GPUs Intel Xe HP 4tile.
    • O driver amdgpu adiciona suporte para a tecnologia AdaptiveSync e a capacidade de usar o Secure Display com vários monitores. Suporte atualizado para DCN 3.2 (Display Core Next), SR-IOV RAS, VCN RAS, SMU 13.xe DP 2.1.
    • Adicionado suporte para plataformas SM8350, SM8450 SM8550, SDM845 e SC8280XP ao driver msm (GPU Qualcomm Adreno).
    • O driver Nouveau retirou o suporte para chamadas ioctl antigas.
    • O suporte experimental para NPU VerSilicon (VeriSilicon Neural Network Processor) foi adicionado ao driver etnaviv.
    • Foi implementado o driver pata_parport para unidades IDE conectadas através de uma porta paralela. O driver adicionado tornou possível remover o driver PARIDE antigo do kernel e atualizar o subsistema ATA. Uma limitação do novo driver é a incapacidade de conectar simultaneamente uma impressora e um disco por meio de uma porta paralela.
    • Adicionado driver ath12k para placas sem fio baseadas em chips Qualcomm com suporte a Wi-Fi 7. Adicionado suporte para placas sem fio baseadas em chips RealTek RTL8188EU.
    • Adicionado suporte para 46 placas baseadas na arquitetura ARM64, incluindo Samsung Galaxy tab A (2015), Samsung Galaxy S5, BananaPi R3, Debix Model A, EmbedFire LubanCat 1/2, Facebook Greatlakes, Orange Pi R1 Plus, Tesla FSD e também dispositivos baseado em SoC Qualcomm MSM8953 (Snapdragon 610), SM8550 (Snapdragon 8 Gen 2), SDM450 e SDM632, caixa de TV Rockchips RK3128, RV1126 Vision, RK3588, RK3568, RK3566, RK3588 e RK3328, TI K3 (AM642/AM 654 68/AM69 / AMXNUMX).

Ao mesmo tempo, a Fundação Latino-Americana de Software Livre formou uma variante do kernel 6.3 totalmente gratuito - Linux-libre 6.3-gnu, livre de firmware e elementos de driver contendo componentes não livres ou seções de código, cujo escopo é limitado por O manufatureiro. Na versão 6.3, os blobs foram limpos nos novos drivers ath12k, aw88395 e peb2466, bem como nos novos arquivos devicetree para dispositivos qcom baseados em AArch64. Código de limpeza de blob atualizado em drivers e subsistemas amdgpu, xhci-rcar, qcom-q6v5-pas, sp8870, av7110, bem como em drivers para placas DVB com decodificação de software e em arquivos BPF pré-compilados. Parou de limpar os drivers mga, r128, tm6000, cpia2 e r8188eu, pois foram removidos do kernel. Limpeza aprimorada de blob do driver i915.

Fonte: opennet.ru

Adicionar um comentário