Lançamento do kernel Linux 6.3

Após dois meses de desenvolvimento, Linus Torvalds apresentou o lançamento do kernel Linux 6.3. Entre as mudanças mais notáveis estão: a limpeza de plataformas ARM obsoletas e drivers gráficos, a continuação da integração do suporte à linguagem Rust, a ferramenta hwnoise, suporte para estruturas de dados em árvore red-black no BPF, o modo BIG TCP para IPv4, um teste de desempenho Dhrystone integrado, a possibilidade de proibir a execução em memfd e suporte à criação de drivers HID usando BPF. No Btrfs, foram feitas alterações para reduzir a fragmentação de grupos de blocos.

Na nova versão, foram aceitas 15.637 correções de 2.055 desenvolvedores; o tamanho do patch é de 76 MB (as alterações afetaram 14.296 arquivos, com 1.023.183 linhas de código adicionadas e 883.103 linhas removidas). Para comparação, na versão anterior, foram propostas 16.843 correções de 2.178 desenvolvedores; o tamanho do patch foi de 62 MB. Cerca de 39% de todas as mudanças apresentadas no kernel 6.3 estão relacionadas a drivers de dispositivos, aproximadamente 15% dizem respeito à atualização de código específico de arquiteturas de hardware, 10% estão relacionados à pilha de rede, 5% a sistemas de arquivos e 3% a subsistemas internos do kernel.

As principais inovações no kernel 6.3:

  • Memória e serviços do sistema
    • Foi realizada uma significativa limpeza de código relacionado a plataformas ARM antigas e não utilizadas, o que permitiu reduzir o tamanho do código-fonte do kernel em 150 mil linhas. Mais de 40 plataformas ARM antigas foram removidas.
    • Implementada a possibilidade de criar drivers para dispositivos de entrada com interface HID (Human Interface Device), implementados na forma de programas BPF.
    • Continua a transferência da branch Rust-for-Linux de funcionalidades adicionais relacionadas ao uso da linguagem Rust como uma segunda linguagem para desenvolver drivers e módulos do kernel. O suporte a Rust não está ativo por padrão e não leva à inclusão do Rust entre as dependências obrigatórias de compilação do kernel. A funcionalidade proposta em versões anteriores foi ampliada com suporte para tipos Arc (implementação de ponteiros com contagem de referências), ScopeGuard (que executa a limpeza ao sair do escopo) e ForeignOwnable (que permite a transferência de ponteiros entre códigos em 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 User-mode Linux (execução do núcleo como um processo de usuário) em sistemas x86-64, foi implementado suporte para código escrito na linguagem Rust. Suporte para a construção do User-mode Linux usando clang foi adicionado, incluindo otimizações na fase de linkedição (LTO).
    • Foi adicionada a utilidade hwnoise para rastrear latências causadas por peculiaridades do hardware. As variações no tempo de execução das operações (jitter) são determinadas ao desabilitar o processamento de interrupções, superando uma microssegundo a cada 10 minutos de cálculos.
    • Um módulo do núcleo foi adicionado com a implementação do teste de desempenho Dhrystone, que pode ser utilizado para avaliar o desempenho do CPU em configurações sem componentes de espaço do usuário (por exemplo, na fase de portabilidade para novos SoCs, onde apenas o núcleo é carregado).
    • Um parâmetro da linha de comando do núcleo "cgroup.memory=nobpf" foi adicionado, desabilitando a contagem do consumo de memória para programas BPF, o que pode ser útil para sistemas com contêineres isolados.
    • Para programas BPF, uma implementação da estrutura de dados árvore rubro-negra foi proposta, utilizando kfunc + kptr (bpf_rbtree_add, bpf_rbtree_remove, bpf_rbtree_first) em vez de adicionar um novo tipo de mapeamento.
    • No mecanismo de sequências reiniciáveis (rseq), foi adicionada a capacidade de transmitir aos processos identificadores de concorrência de mapeamento de memória, que estão associados ao número do CPU. Rseq fornece meios para executar operações atômicas rapidamente, que, em caso de interrupção por outro fluxo, são limpas e uma nova tentativa de execução é feita.
    • Em processadores ARM, foi garantido suporte para as instruções SME 2 (Scalable Matrix Extension).
    • Para as arquiteturas s390x e RISC-V RV64, foi implementado o suporte ao mecanismo "BPF trampoline", que minimiza a sobrecarga na passagem de chamadas entre o núcleo e os programas BPF.
    • Em sistemas com processadores baseados na arquitetura RISC-V, foi implementado o uso das instruções "ZBB" para acelerar operações de string.
    • Para sistemas baseados na arquitetura de conjunto de instruções LoongArch (utilizada em processadores Loongson 3 5000 e que implementa um novo ISA RISC, semelhante ao MIPS e RISC-V), foi implementado suporte para randomização do espaço de endereçamento do núcleo (KASLR), alteração da alocação do núcleo na memória (relocation), pontos de parada de hardware e o mecanismo kprobe.
    • No mecanismo DAMOS (Data Access Monitoring-based Operation Schemes), que permite liberar memória com base na frequência de acesso à memória, foi implementado suporte a filtros para excluir áreas específicas de memória do processamento no DAMOS.
    • Na biblioteca padrão mínima em C Nolibc, foi implementado 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).
    • Foi realizada uma otimização no objtool para acelerar a construção do kernel e reduzir o consumo máximo de memória durante a construção (ao compilar o kernel no modo 'allyesconfig', agora não ocorrem problemas de encerramento forçado de processos em sistemas com 32 GB de RAM).
    • Foi encerrado o suporte para compilar o kernel com o compilador Intel ICC, que há algum tempo estava fora de operação e ninguém se manifestou interessado em corrigir isso.
  • Subsistema de disco, entrada/saída e sistemas de arquivos
    • No tmpfs, foi implementado suporte para mapeamento de identificadores de usuários de sistemas de arquivos montados, utilizado para mapear arquivos de um determinado usuário em uma partição montada por outro usuário no sistema atual.
    • No Btrfs, para reduzir a fragmentação de grupos de blocos, foi garantida a separação de extensões por tamanho ao alocar blocos, ou seja, qualquer grupo de blocos agora é limitado a extensões pequenas (até 128 KB), médias (até 8 MB) e grandes. Foi feito um refatoramento na implementação do raid56. O código para verificação de somas de verificação foi reescrito. Foram realizadas otimizações de desempenho, permitindo aumentar em até 10 vezes a operação de envio graças ao cache de utime para diretórios e à execução de comandos apenas quando necessário. A execução de operações fiemap foi acelerada em três vezes, evitando verificações de referências cruzadas para dados compartilhados (snapshots). As operações de metadados foram aceleradas em 10% devido à otimização da busca de chaves em estruturas de b-tree.
    • Aumentou-se o desempenho do sistema de arquivos ext4 com a possibilidade de execução simultânea de operações de entrada/saída direta em blocos previamente alocados, utilizando bloqueios compartilhados de inode em vez de bloqueio exclusivo.
    • No f2fs, foram realizados trabalhos para melhorar a legibilidade do código. Foram resolvidos problemas importantes relacionados à gravação atômica e ao novo cache de extensões.
    • No sistema de arquivos EROFS (Enhanced Read-Only File System), projetado para uso em partições acessíveis apenas em modo de leitura, foi implementada a possibilidade de vincular operações de descompactação de conteúdo comprimido a CPU para reduzir a latência no acesso aos dados.
    • O planejador de entrada/saída BFQ agora suporta dispositivos avançados de disco rígido, como aqueles com múltiplos acionadores de cabeçote gerenciados separadamente (Multi Actuator).
    • O cliente e servidor NFS agora inclui suporte para criptografia de dados utilizando o algoritmo AES-SHA2.
    • Na subsistema FUSE (Filesystems In User Space) foi adicionada a capacidade de um mecanismo de extensão de requisições, que permite incluir informações adicionais na requisição. Com base nessa capacidade, foi implementada a adição de identificadores de grupos às requisições de FS, necessários para o controle de permissões ao criar objetos no FS (create, mkdir, symlink, mknod).
  • Virtualização e segurança
    • No hipervisor KVM para sistemas x86, foi adicionada a suporte a chamadas de hipervisor avançadas Hyper-V, com a capacidade de passá-las para um manipulador que opera no ambiente host no espaço do usuário. Essa mudança permitiu implementar suporte para a execução aninhada do hipervisor Hyper-V.
    • No KVM, foi simplificada a restrição de acesso do sistema convidado a eventos PMU (Performance Monitor Unit) relacionados à medição de desempenho.
    • No mecanismo memfd, que permite identificar uma área de memória através de um descritor de arquivo passado entre processos, foi adicionada a capacidade de criar áreas onde a execução de código é proibida (non-executable memfd) e onde, no futuro, não será possível atribuir direitos de execução.
    • Foi adicionada uma nova operação prctl PR_SET_MDWE, que bloqueia tentativas de permitir direitos de acesso à memória que permitam simultaneamente gravação e execução.
    • Foi adicionada e ativada por padrão proteção contra ataques do tipo Spectre, implementada com base no modo automático IBRS (Enhanced Indirect Branch Restricted Speculation) sugerido em processadores AMD Zen 4, que permite adaptar dinamicamente o controle de execução especulativa de instruções durante o tratamento de interrupções, chamadas de sistema e troca de contexto. A proteção proposta resulta em sobrecarga reduzida em comparação com a proteção Retpoline.
    • Foi corrigida uma vulnerabilidade que permitia contornar as proteções contra ataques Spectre v2 ao usar a tecnologia de múltiplos threads simultâneos (SMT ou Hyper-Threading), causada pela desativação do mecanismo STIBP (Single Thread Indirect Branch Predictors) ao selecionar o modo de proteção IBRS.
    • Para sistemas baseados na arquitetura ARM64, foi adicionada uma nova meta de construção chamada "virtconfig", que ativa apenas o conjunto mínimo de componentes do núcleo necessário para inicialização em sistemas virtualizados.
    • Para a arquitetura m68k, foi adicionada a compatibilidade com a filtragem de chamadas de sistema através do mecanismo seccomp.
    • Foi adicionada a compatibilidade com dispositivos CRB TPM2 (Command Response Buffer) integrados nos processadores AMD Ryzen, baseados na tecnologia Microsoft Pluton.
  • Subsistema de Rede
    • Foi adicionado um interface netlink para configurar o subnível de prevenção de colisões PLCA (Physical Layer Collision Avoidance), definido na especificação IEEE 802.3cg-2019 e utilizado em redes Ethernet 802.3cg (10Base-T1S), otimizadas para conectar dispositivos de Internet das Coisas e sistemas industriais. O uso do PLCA permite aumentar o desempenho em redes Ethernet com meio compartilhado (shared media).
    • Foi interrompido o suporte à API "wireless extensions" para gerenciar interfaces sem fio WiFi 7 (802.11be), pois essa API não abrange todas as configurações necessárias. Ao tentar usar a API "wireless extensions", que continua a ser suportada como uma camada emulada, um aviso será exibido para a maioria dos dispositivos atuais.
    • Foi preparada uma documentação detalhada sobre a API netlink (para desenvolvedores de núcleo e para desenvolvedores de aplicativos no espaço do usuário). Foi implementada a ferramenta ynl-gen-c para gerar código em C com base nas especificações YAML do protocolo Netlink.
    • Foi adicionada a opção IP_LOCAL_PORT_RANGE aos sockets de rede para simplificar a configuração de conexões de saída através de tradutores de endereços sem o uso de SNAT. Ao usar um endereços IP em vários hosts, o IP_LOCAL_PORT_RANGE permite usar um intervalo exclusivo de portas de rede de saída em cada host, enquanto no gateway os pacotes podem ser redirecionados com base nos números das portas.
    • Para MPTCP (MultiPath TCP), foi implementada a possibilidade de manipulação de fluxos mistos, nos quais são usados os protocolos IPv4 e IPv6. O MPTCP é uma extensão do protocolo TCP para permitir que a conexão TCP envie pacotes simultaneamente por vários caminhos através de diferentes interfaces de rede, vinculadas a diferentes endereços IP.
    • Para IPv4, foi implementada a possibilidade de uso da extensão BIG TCP, que permite aumentar o tamanho máximo do pacote TCP para 4 GB, otimizando o funcionamento de redes internas de data centers de alta velocidade. Esse aumento do tamanho do pacote, tendo um campo de 16 bits no cabeçalho, é alcançado através da implementação de pacotes "jumbo", cujo tamanho no cabeçalho IP é definido como 0, e o tamanho real é transmitido em um campo de 32 bits separado em um cabeçalho distinto.
    • Adicionado um novo parâmetro sysctl default_rps_mask, que permite definir a configuração RPS (Receive Packet Steering) padrão, responsável pela distribuição do processamento de tráfego de entrada pelos núcleos da CPU no nível dos manipuladores de interrupção.
    • Apoio a disciplinas de tratamento de filas para limitação de tráfego CBQ (class-based queuing), ATM (circuitos virtuais ATM), dsmark (diferentiated service marker), tcindex (traffic-control index) e RSVP (resource reservation protocol) foi descontinuado. Essas disciplinas estiveram em estado abandonado por um longo tempo e não houve interessados em continuar sua manutenção.
  • Hardware
    • Todos os drivers gráficos baseados em DRI1 foram removidos: i810 (antigas placas de vídeo integradas Intel 8xx), mga (GPU Matrox), r128 (GPU ATI Rage 128, incluindo placas Rage Fury, XPERT 99 e XPERT 128), savage (GPU S3 Savage), sis (GPU Crusty SiS), tdfx (3dfx Voodoo) e via (VIA IGP), que foram considerados obsoletos em 2016 e não são suportados pelo Mesa desde 2012.
    • Drivers obsoletos de framebuffer (fbdev) omap1, s3c2410, tmiofb e w100fb foram removidos.
    • Adicionado o driver DRM para unidades VPU (Versatile Processing Unit) integradas na CPU Intel Meteor Lake (14ª geração), destinadas a acelerar operações relacionadas à visão computacional e aprendizado de máquina. O driver é implementado usando a subsistema "accel", visando fornecer suporte a aceleradores de computação que podem ser fornecidos tanto na forma de ASIC dedicados quanto como blocos de IP dentro de SoCs e GPUs.
    • No driver i915 (Intel), foi ampliado o suporte para placas de vídeo discretas Intel Arc (DG2/Alchemist), foi implementado suporte preliminar para GPU Meteor Lake e incluído suporte para GPU Intel Xe HP 4tile.
    • O driver amdgpu agora tem suporte para a tecnologia AdaptiveSync e a possibilidade de usar múltiplos monitores no modo de proteção contra interceptação de dados exibidos na tela (Secure Display). O suporte ao DCN 3.2 (Display Core Next), SR-IOV RAS, VCN RAS, SMU 13.x e DP 2.1 foi atualizado.
    • No driver msm (GPU Qualcomm Adreno) foi adicionado o suporte para as plataformas SM8350, SM8450, SM8550, SDM845 e SC8280XP.
    • O driver Nouveau descontinuou o suporte para chamadas ioctl antigas.
    • No driver etnaviv, foi adicionado suporte experimental para o NPU VerSilicon (VeriSilicon Neural Network Processor).
    • Foi implementado o driver pata_parport para dispositivos IDE conectados via porta paralela. O driver adicionado permitiu remover o antigo driver PARIDE do núcleo e modernizar o subsistema ATA. Uma limitação do novo driver é a impossibilidade de conectar simultaneamente uma impressora e um disco através da porta paralela.
    • Adicionado o driver ath12k para placas sem fio com chips Qualcomm, com suporte a Wi-Fi 7. Também foi adicionado suporte para placas sem fio com chips RealTek RTL8188EU.
    • Adicionado suporte para 46 placas com processadores baseados na arquitetura ARM64, entre as quais 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, assim como dispositivos baseados em SoC Qualcomm MSM8953 (Snapdragon 610), SM8550 (Snapdragon 8 Gen 2), SDM450 e SDM632, caixas de TV Rockchips RK3128, RV1126 Vision, RK3588, RK3568, RK3566, RK3588 e RK3328, TI K3 (AM642/AM654/AM68/AM69).

Simultaneamente, a Fundação Latino-Americana do Software Livre formou uma versão completamente livre do núcleo 6.3 — Linux-libre 6.3-gnu, limpa de elementos de firmware e drivers que contêm componentes não livres ou partes de código cujo uso é restrito pelo fabricante. Na versão 6.3, realizou-se a limpeza de blobs nos novos drivers ath12k, aw88395 e peb2466, assim como em novos arquivos devicetree para dispositivos qcom baseados na arquitetura AArch64. O código de limpeza dos blobs nos 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 foi atualizado. A limpeza foi interrompida para os drivers mga, r128, tm6000, cpia2 e r8188eu, uma vez que foram removidos do núcleo. A limpeza de blobs do driver i915 foi aprimorada.

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