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 legadas e drivers gráficos, integração contínua do suporte à linguagem Rust, o utilitário hwnoise, suporte para estruturas de árvore rubro-negra em BPF, modo BIG TCP para IPv4, teste de desempenho Dhrystone integrado, a capacidade de desativar a execução em memfd, suporte para criação de drivers HID usando BPF, e mudanças adotadas no Btrfs para reduzir a fragmentação de grupos 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.
- A migração do branch Rust-for- continuou.Linux Funcionalidades adicionais relacionadas ao uso de Rust como segunda linguagem para o desenvolvimento de drivers e módulos do kernel. O suporte a Rust não está habilitado por padrão e não inclui Rust como uma dependência de compilação obrigatória para o kernel. A funcionalidade oferecida em versões anteriores foi expandida para incluir suporte aos tipos Arc (implementando ponteiros com contagem de referências), ScopeGuard (realizando a limpeza de escopo) e ForeignOwnable (permitindo a movimentação de ponteiros entre código C e Rust). O módulo 'borrow' (tipo 'Cow' e trait 'ToOwned') foi removido do pacote 'alloc'. Observa-se que o estado do suporte a Rust no kernel já está próximo de aceitar os primeiros módulos escritos em Rust.
- No modo de usuário Linux (Executando o kernel como um processo de usuário) em sistemas x86-64, foi implementado o suporte para código escrito em Rust. Foi adicionado suporte para assembly em modo de usuário. Linux Utilizando o clang com otimizações de tempo de ligação (LTO) ativadas.
- 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).
- Na implementação do cliente e servidor O NFS adicionou suporte para criptografia de dados usando o algoritmo AES-SHA2.
- 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 sockets de rede para simplificar a configuração de conexões de saída por meio de tradutores de endereço sem usar SNAT. Ao usar um Endereços IP Em vários hosts, o IP_LOCAL_PORT_RANGE permite que cada host use seu próprio intervalo de portas de rede de saída e, no gateway, encaminhe pacotes com base nos números de porta.
- 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 para o Software Livre criou uma versão do kernel 6.3, totalmente livre. Linux-libre 6.3-gnu, limpo de elementos de firmware e driver que contêm componentes não livres ou seções de código com escopo restrito pelo fabricante. A versão 6.3 apresenta limpeza de blobs nos novos drivers ath12k, aw88395 e peb2466, bem como em novos arquivos devicetree para dispositivos qcom baseados na arquitetura AArch64. Código de limpeza de blobs atualizado nos drivers e subsistemas amdgpu, xhci-rcar, qcom-q6v5-pas, sp8870 e av7110, bem como em drivers para placas DVB com decodificação por software e em arquivos BPF pré-compilados. A limpeza dos drivers mga, r128, tm6000, cpia2 e r8188eu foi descontinuada, pois eles foram removidos do kernel. Limpeza de blobs aprimorada no driver i915.
Fonte: opennet.ru
