Kernel Linux versão 6.1

Após dois meses de desenvolvimento, Linus Torvalds apresentou o lançamento do kernel Linux 6.1. Entre as mudanças mais destacadas: suporte ao desenvolvimento de drivers e módulos na linguagem Rust, modernização do mecanismo de determinação de páginas de memória utilizadas, gerenciador de memória especial para programas BPF, sistema de diagnóstico de problemas de memória KMSAN, o KCFI (Kernelk Control -Mecanismo de proteção Flow Integrity), a introdução da árvore de estrutura Maple.

A nova versão inclui 15115 correções de 2139 desenvolvedores, o tamanho do patch é de 51 MB, que é aproximadamente 2 vezes menor que o tamanho dos patches dos kernels 6.0 e 5.19. As alterações afetaram 13165 arquivos, 716247 linhas de código foram adicionadas e 304560 linhas foram excluídas. Cerca de 45% de todas as alterações introduzidas no 6.1 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, 14% estão relacionadas à pilha de rede, 3% estão relacionadas a sistemas de arquivos e 3% estão relacionados aos subsistemas internos do kernel.

Principais inovações no kernel 6.1:

  • Serviços de memória e sistema
    • Adicionada a capacidade de usar Rust como segunda linguagem para desenvolver drivers e módulos de kernel. A principal razão para oferecer suporte ao Rust é facilitar a gravação de drivers de dispositivos seguros e de alta qualidade, reduzindo a probabilidade de cometer erros ao trabalhar com memória. O suporte ao Rust está desabilitado por padrão e não resulta na inclusão do Rust como uma dependência necessária de construção do kernel. O kernel até agora adotou uma versão mínima simplificada dos patches, que foi reduzida de 40 para 13 mil linhas de código e fornece apenas o mínimo necessário, suficiente para construir um módulo de kernel simples escrito na linguagem Rust. No futuro, está previsto aumentar gradativamente a funcionalidade existente, transferindo outras alterações do ramo Rust-for-Linux. Paralelamente, estão sendo desenvolvidos projetos de utilização da infraestrutura proposta para desenvolvimento de drivers para drives NVMe, protocolo de rede 9p e GPU Apple M1 na linguagem Rust.
    • Para sistemas baseados nas arquiteturas AArch64, RISC-V e LoongArch com EFI, foi implementada a capacidade de carregar diretamente imagens compactadas do kernel. Adicionados manipuladores para carregar, executar e descarregar imagens do kernel, chamados diretamente do EFI zboot. Também foram adicionados manipuladores para instalação e exclusão de protocolos do banco de dados de protocolos EFI. Anteriormente, a descompactação era realizada por um gerenciador de inicialização separado, mas agora isso pode ser feito por um manipulador no próprio kernel - a imagem do kernel é formada como um aplicativo EFI.
    • A composição inclui alguns patches com a implementação de um modelo de gerenciamento de memória multinível, que permite separar bancos de memória com diferentes características de desempenho. Por exemplo, as páginas mais utilizadas podem ser armazenadas na memória mais rápida, enquanto as páginas menos utilizadas podem ser armazenadas na memória relativamente lenta. O Kernel 6.1 introduz um mecanismo para determinar onde as páginas muito utilizadas estão localizadas na memória lenta, para que possam ser promovidas para memória rápida, e também introduz um conceito geral de camadas de memória e seu desempenho relativo.
    • Inclui o mecanismo MGLRU (Multi-Generational LRU), que substitui a antiga implementação LRU (Least Recentemente Usada) baseada em duas filas com uma estrutura de vários estágios que determina melhor quais páginas de memória estão realmente em uso e quais podem ser enviadas para fora. a partição swap.
    • Adicionado suporte para a estrutura de dados “árvore de bordo” proposta pelos engenheiros da Oracle, que é posicionada como um substituto mais eficaz para a estrutura de “árvore vermelha e preta”. Maple tree é uma variante da árvore B que suporta indexação de intervalo e foi projetada para fazer uso eficiente do cache dos processadores modernos. Alguns subsistemas de gerenciamento de memória já foram transferidos para Maple Tree, o que teve um efeito positivo em seu desempenho. No futuro, o maple tree pode ser usado para implementar o bloqueio de intervalo.
    • A capacidade de criar programas BPF “destrutivos” especialmente projetados para iniciar um desligamento de emergência por meio da chamada crash_kexec() foi adicionada ao subsistema BPF. Esses programas BPF podem ser necessários para fins de depuração para iniciar a criação de um despejo de memória em um determinado momento. Para acessar operações destrutivas ao carregar um programa BPF, você deve especificar o sinalizador BPF_F_DESTRUCTIVE, ativar sysctl kernel.destructive_bpf_enabled e ter direitos CAP_SYS_BOOT.
    • Para programas BPF, é possível enumerar elementos cgroup, bem como enumerar recursos (arquivos, vma, processos, etc.) de um thread ou tarefa específica. Um novo tipo de mapa foi implementado para criar buffers de anel de usuário.
    • Adicionada uma chamada especial para alocação de memória em programas BPF (memory allocator), que fornece alocação de memória mais segura no contexto BPF do que o padrão kmalloc().
    • A primeira parte das mudanças foi integrada, proporcionando a possibilidade de criação de drivers para dispositivos de entrada com interface HID (Human Interface Device), implementados na forma de programas BPF.
    • O kernel removeu completamente o código para suportar o formato de arquivo executável a.out, que foi descontinuado na versão 5.1 e desativado para as principais arquiteturas desde as versões 5.18 e 5.19. O formato a.out está obsoleto há muito tempo em sistemas Linux, e a geração de arquivos a.out não é suportada por ferramentas modernas nas configurações padrão do Linux. O carregador para arquivos a.out pode ser implementado inteiramente no espaço do usuário.
    • Para sistemas baseados na arquitetura de conjunto de instruções LoongArch usada nos processadores Loongson 3 5000 e implementando o novo RISC ISA, semelhante ao MIPS e RISC-V, é implementado suporte para eventos de medição de desempenho (eventos perf), kexec, kdump e compilação BPF JIT. .
    • A interface de E/S assíncrona io_uring oferece um novo modo, IORING_SETUP_DEFER_TASKRUN, que permite que o trabalho relacionado ao buffer de anel seja temporariamente adiado até que uma solicitação do aplicativo seja feita, o que pode ser usado para trabalho em lote e evitar problemas de latência devido à preempção. momento errado.
    • Os processos no espaço do usuário têm a capacidade de iniciar a conversão de um intervalo de páginas de memória normais em um conjunto de páginas de memória grandes (Transparent Huge-Pages).
    • Adicionada implementação do dispositivo /dev/userfaultfd, que permite acesso à funcionalidade da chamada de sistema userfaultfd() usando direitos de acesso no FS. A funcionalidade userfaultfd permite criar manipuladores para acessar páginas de memória não alocadas (falhas de página) no espaço do usuário.
    • Os requisitos para a versão do utilitário GNU Make foram aumentados - pelo menos a versão 3.82 agora é necessária para construir o kernel.
  • Subsistema de disco, E/S e sistemas de arquivos
    • Otimizações significativas de desempenho foram feitas no sistema de arquivos Btrfs; entre outras coisas, o desempenho da chamada ioctl FIEMAP foi aumentado em ordens de magnitude. Adicionado suporte para gravações assíncronas em buffer para aplicativos que usam io_uring. Adicionado suporte para arquivos protegidos com fs-verity à operação de “envio”.
    • O sistema de arquivos ext4 adicionou otimizações de desempenho relacionadas à manutenção do diário e operação somente leitura.
    • O sistema de arquivos EROFS (Enhanced Read-Only File System), projetado para uso em partições acessíveis em modo somente leitura, implementa a capacidade de compartilhar dados duplicados em diferentes sistemas de arquivos.
    • A chamada de sistema statx() foi adicionada para exibir informações sobre se a E/S direta pode ser aplicada a um arquivo.
    • O suporte para criação de arquivos temporários com o sinalizador O_TMPFILE foi adicionado ao subsistema FUSE (Filesystems in User Space).
  • Virtualização e Segurança
    • A implementação do mecanismo de proteção CFI (Control Flow Integrity) foi substituída, adicionando verificações antes de cada chamada indireta para detectar algumas formas de comportamento indefinido que poderiam potencialmente levar a uma violação da ordem normal de execução (fluxo de controle) como resultado do uso de exploits que alteram ponteiros para funções armazenadas na memória. A implementação padrão de CFI do projeto LLVM foi substituída por uma opção também baseada no uso de Clang, mas especialmente adaptada para proteger subsistemas de baixo nível e kernels de sistemas operacionais. No LLVM, uma nova implementação será oferecida na versão Clang 16 e será habilitada com a opção "-fsanitize=kcfi". A principal diferença com a nova implementação é que ela não está vinculada a otimizações de tempo de link (LTO) e não resulta na substituição de ponteiros de função por links na tabela de salto.
    • Para módulos LSM (Linux Security Module), é possível criar manipuladores que interceptam operações para criar namespaces.
    • São fornecidas ferramentas para verificar assinaturas digitais PKCS#7 em programas BPF.
    • A capacidade de abrir em modo sem bloqueio (O_NONBLOCK), que foi removida inadvertidamente no kernel 5.6, foi retornada para /dev/random.
    • Em sistemas com arquitetura x86, foi adicionado um aviso em caso de mapeamento de páginas de memória por subsistemas do kernel que permitem simultaneamente execução e escrita. No futuro, está sendo considerada a possibilidade de proibir completamente esse mapeamento de memória.
    • Adicionado mecanismo de depuração KMSAN (Kernel Memory Sanitizer) para detectar uso de memória não inicializada no kernel, bem como vazamentos de memória não inicializada entre o espaço do usuário e os dispositivos.
    • Melhorias foram feitas no gerador de números pseudo-aleatórios CRNG cripto-seguro usado na chamada getrandom. As mudanças foram preparadas por Jason A. Donenfeld, autor do VPN WireGuard, e visam melhorar a segurança da extração de números inteiros pseudo-aleatórios.
  • subsistema de rede
    • A pilha TCP fornece a capacidade (desativada por padrão) de usar tabelas hash de soquete separadamente para cada namespace, o que melhora o desempenho em sistemas com um grande número de namespaces.
    • Código removido para oferecer suporte ao protocolo DECnet legado. Os stubs de API do espaço do usuário são deixados em vigor para permitir que aplicativos que usam DECnet sejam compilados, mas esses aplicativos não poderão se conectar à rede.
    • O protocolo netlink está documentado.
  • Оборудование
    • O driver amdgpu adicionou suporte para encaminhamento DSC (Display Stream Compression) para compactação de dados sem perdas ao trocar informações com telas que suportam resoluções muito altas. O trabalho continua para fornecer suporte para as plataformas AMD RDNA3 (RX 7000) e CDNA (Instinct). Adicionado suporte para componentes IP DCN 3.2, SMU 13.x, NBIO 7.7, GC 11.x, PSP 13.x, SDMA 6.x e GMC 11.x. O driver amdkfd (para GPUs AMD discretas, como Polaris) fornece suporte para GFX 11.0.3.
    • O driver i915 (Intel) inclui suporte para GPU Meteor Lake. Meteor Lake e GPUs mais recentes suportam interface DP 2.0 (DisplayPort). Adicionados identificadores para placas de vídeo baseadas na microarquitetura Alder Lake S.
    • Adicionado suporte para subsistemas de áudio implementados nos processadores Apple Silicon, Intel SkyLake e Intel KabyLake. O driver de áudio CS35L41 HDA oferece suporte ao modo de suspensão. Adicionado suporte ASoC (ALSA System on Chip) para chips de áudio integrados Apple Silicon, DSPs AMD Rembrant, AMD Pink Sardine ACP 6.2, Everest ES8326, Intel Sky Lake e Kaby Lake, Mediatek MT8186, DSPs NXP i.MX8ULP, Qualcomm SC8280XP, SM8250, SM8450 e Texas Instruments SRC4392
    • Adicionado suporte para painéis LCD Samsung LTL101AL01, B120XAN01.0, R140NWF5 RH, Densitron DMT028VGHMCMI-1A TFT, AUO B133UAN02.1, IVO M133NW4J-R3, Innolux N120ACA-EA1, AUO B116XAK01.6, BOE NT116WH M-N21 116, INX N2BCA- EA116, INX N1BCN-EA0800, Tecnologia Multi-Inno MI9FT-XNUMX.
    • Adicionado suporte para controladores AHCI SATA usados ​​no SoC Baikal-T1.
    • Adicionado suporte para chips Bluetooth MediaTek MT7921, Intel Magnetor (CNVi, conectividade integrada), Realtek RTL8852C, RTW8852AE e RTL8761BUV (Edimax BT-8500).
    • O driver ath11k para módulos sem fio Qualcomm adicionou suporte para varredura espectral na faixa de 160 MHz, implementou NAPI multithread e melhorou o suporte para chips Wi-Fi Qualcomm WCN6750.
    • Adicionados drivers para teclado PinePhone, touchpads InterTouch (ThinkPad P1 G3), X-Box Adaptive Controller, PhoenixRC Flight Controller, VRC-2 Car Controller, DualSense Edge Controller, IBM Operation Panel, controles remotos XBOX One Elite, tablets XP-PEN Deco Pro S e Intuos Pro Pequeno (PTH-460).
    • Adicionado driver para aceleradores criptográficos Aspeed HACE (Hash and Crypto Engine).
    • Adicionado suporte para controladores integrados Thunderbolt/USB4 Intel Meteor Lake.
    • Adicionado suporte para smartphones Sony Xperia 1 IV, Samsung Galaxy E5, E7 e Grand Max, Pine64 Pinephone Pro.
    • Adicionado suporte para ARM SoC e placas: AMD DaytonaX, Mediatek MT8186, Rockchips RK3399 e RK3566, TI AM62A, NXP i.MX8DXL, Renesas R-Car H3Ne-1.7G, Qualcomm IPQ8064-v2.0, IPQ8062, IPQ8065, Kontron SL/ BL i.MX8MM OSM-S, MT8195 (Acer Tomato), Radxa ROCK 4C+, NanoPi R4S Enterprise Edition, JetHome JetHub D1p. Drivers atualizados para SoC Samsung, Mediatek, Renesas, Tegra, Qualcomm, Broadcom e NXP.

Ao mesmo tempo, a Fundação Latino-Americana de Software Livre formou uma versão do kernel 6.1 totalmente gratuito - Linux-libre 6.1-gnu, livre de elementos de firmware e drivers contendo componentes ou seções de código não livres, cujo escopo é limitado pelo fabricante. A nova versão limpa o novo driver rtw8852b e arquivos DTS para vários SoCs Qualcomm e MediaTek com processadores baseados na arquitetura AArch64. Código de limpeza de blob atualizado em drivers e subsistemas amdgpu, i915, brcmfmac, r8188eu, rtw8852c, Intel ACPI. A limpeza de drivers desatualizados das placas de TV tm6000, cpia2 v4l, sp8870, av7110 foi corrigida.

Fonte: opennet.ru

Adicionar um comentário