Lançamento do kernel Linux 6.19. O próximo kernel será atribuído o número 7.0.

Após dois meses de desenvolvimento, Linus Torvalds apresentou o lançamento do kernel Linux 6.19. Entre as mudanças mais notáveis estão: o subsistema Live Update Orchestrator, suporte para PCIe Link Encryption, chamada de sistema listns, modo Zero-Copy Receive em io_uring, suporte à extensão ARM MPAM, klp-build para geração de patches ao vivo, suporte à arquitetura LoongArch32, QoS para s2idle, otimização do subsistema de auditoria, Intel LASS para proteção contra Spectre, suporte a hashes SHA-3 e BLAKE2b, mecanismo Confidential VMBus, otimizações TX no subsistema de rede, protocolo CAN XL, API para aceleração de hardware HDR.

No anúncio da nova versão, Linus informou que o próximo lançamento do kernel receberá o número 7.0, pois na série 6.x acumulou-se uma quantidade suficiente de lançamentos para mudar o primeiro dígito na numeração (o lançamento 6.0 foi formado logo após o 5.19). A mudança de numeração é feita por razões estéticas e é um passo formal que remove o desconforto devido ao acúmulo de um grande número de lançamentos na série. Linus brincou que grandes números o confundem, pois não tem dedos suficientes nas mãos e nos pés. Contudo, há uma razão formal para a alteração significativa do número da versão, já que, a partir do próximo lançamento, o suporte ao Rust será transferido de experimental para recursos principais do kernel.

Na nova versão, foram aceitas 15657 correções de 2237 desenvolvedores, o tamanho do patch é de 52 MB (as mudanças afetaram 13682 arquivos, foram adicionadas 794649 linhas de código e removidas 335498 linhas). No lançamento anterior, houve 15035 correções de 2217 desenvolvedores, com um patch de 45 MB. Cerca de 40% de todas as mudanças apresentadas no 6.19 estão relacionadas a drivers de dispositivos, aproximadamente 13% referem-se a atualizações de código específico para arquiteturas de hardware, 12% estão relacionadas à pilha de rede, 5% às sistemas de arquivos e 3% aos subsistemas internos do kernel.

As principais inovações no kernel 6.19 (1, 2, 3):

  • Subsistema de disco, entrada/saída e sistemas de arquivos
    • No Btrfs, os processos de verificação do sistema de arquivos (scrub) e substituição de dispositivos não bloqueiam mais a transição do sistema para o modo de suspensão (o estado da verificação scrub é salvo antes da suspensão; após a saída do modo de suspensão, a verificação scrub continua e a operação de substituição de dispositivos é reiniciada). A implementação do RAID56 agora suporta blocos cujo tamanho excede o tamanho da página de memória. O suporte para fscrypt foi preparado. A performance em operações relacionadas à reserva de espaço foi aprimorada. Foi adicionado o suporte para a operação ioctl 'shutdown', permitindo que o sistema de arquivos entre em um estado onde é feita uma tentativa de finalizar as operações já em execução, mas bloqueia todas as novas operações.
    • No sistema de arquivos Ext4, foi implementado o suporte para blocos cujo tamanho excede o tamanho da página de memória (>4KB em sistemas x86). O uso de blocos grandes permite aumentar a performance das operações de gravação em buffer em média em 50%, mas diminui a performance de entrada/saída direta devido ao aumento do tempo de cálculo de somas de verificação. A nova versão também inclui otimizações que aumentaram a largura de banda durante a desfragmentação online.
    • Na subsistema FUSE, o suporte para leitura em buffer foi aprimorado ao utilizar grandes folhetos de páginas de memória (large folios). Através do iomap, foi implementada a capacidade de rastrear folhetos parcialmente válidos para carregar apenas os dados que não estão no buffer.
    • No VFS, foi adicionado o suporte para delegação de controle de diretório recuperável (recallable directory delegation), permitindo a implementação na NFS da transferência de controle de diretório do cliente para servidor o cliente NFS, de modo que o cliente NFS possa monitorar o estado do diretório com base no cache local, sem consultar o servidor NFS. Se outro cliente NFS fizer alterações relacionadas a este diretório, a delegação de controle será revogada do primeiro cliente.
    • Para o NFS, foi adicionado suporte para leitura no modo de entrada/saída direta (direct I/O). Foram implementadas as configurações /sys/kernel/debug/nfsd/io_cache_read e /sys/kernel/debug/nfsd/io_cache_write para gerenciar a ativação do cache e operações de entrada/saída direta. As manipulações com essas configurações permitem reduzir a sobrecarga no lado do cliente NFS durante operações de entrada/saída em grande escala.
    • No NTFS, foi implementado suporte para a operação ioctl de desligamento, as opções de montagem 'acl' e 'prealloc' estão ativadas por padrão, e foi adicionado suporte para tempo anterior a 1 de janeiro de 1970.
    • Para dispositivos de bloco e sistemas de arquivos, o cache de objetos 'bio' (Block I/O), que define as operações ativas de entrada/saída, é agora separado por CPU por padrão.
  • Memória e serviços do sistema
    • O núcleo agora inclui o subsistema Live Update Orchestrator (LUO), que permite reiniciar e atualizar o núcleo completamente sem interromper o funcionamento e sem perder o estado do sistema, dispositivos e processos. O subsistema LUO baseia-se no mecanismo KHO (Kexec HandOver) já adicionado ao núcleo e, além de permitir o lançamento de um novo núcleo a partir do antigo sem perda de estado, resolve problemas como a preservação do estado dos dispositivos e da memória RAM, e garantir a continuidade das operações relacionadas a DMA e ao processamento de interrupções. O estado é preservado até a troca para o novo núcleo e é restaurado após a ativação do novo núcleo, sem interromper as operações contínuas com dispositivos realizadas pelo sistema e aplicativos no espaço do usuário.
    • Adicionada a chamada de sistema listns() para exibir uma lista dos namespaces existentes no sistema, sem a necessidade de percorrer /proc//ns/ para todos os processos.
    • No sistema de entrada/saída assíncrona io_uring, foi adicionada a suporte para alocação de elementos de tamanhos diferentes na fila de envio (SQE, Submission Queue Entry), de forma semelhante ao que foi permitido na versão anterior com mistura de tamanhos na fila de resultados (CQE, Completion Queue Event). Antes disso, todos os elementos na fila deveriam ter um único tamanho, o que causava um uso excessivo de memória devido à necessidade de usar o tamanho máximo para todos os elementos na fila.

      No io_uring, foi adicionado suporte ao mecanismo zcrx (Zero-Copy Receive) para receber dados sem cópia entre o núcleo e o espaço do usuário. Foi adicionado suporte para solicitações de layout de memória para filas SQ (Submission Queue) e CQ (Completion Queue), permitindo obter informações sobre o tamanho do buffer em anel, necessário ao alocar memória pelo usuário usando os flags IORING_SETUP_NO_MMAP e IORING_MEM_REGION_TYPE_USER.

    • Para rastreamento rápido da pilha usando utilitários como perf, foi adicionado suporte ao formato SFrame com informações sobre a expansão da pilha de chamadas (unwind). O SFrame já é suportado no GCC e em binutils, não causa queda no desempenho e, ao contrário do formato DWARF, contém apenas o conjunto mínimo de informações necessárias para rastreamento da pilha.
    • A utilidade perf agora suporta uma descrição unificada de métricas e eventos no formato JSON, bem como a expansão atrasada (deferred unwinding) da pilha de chamadas no espaço do usuário.
    • Para processadores AMD, foi implementado um mecanismo de substituição de dados em cache, permitindo que dispositivos de entrada/saída insiram dados diretamente no cache L3 da CPU sem necessidade de colocá-los previamente na RAM.
    • Foi adicionado suporte ao MPAM (Partitionamento e Monitoramento de Recursos do Sistema de Memória), uma extensão da arquitetura de conjunto de comandos ARMv8-A para marcar cada acesso à memória com um identificador de seção (PARTID, Partition ID) e um identificador de grupo de monitoramento (PMG, Monitoring Group ID). Com o PARTID, é possível limitar o consumo de recursos, como a largura de banda da memória ou o tamanho do cache, para que um grupo de tarefas não consuma todos os recursos disponíveis. No contexto de monitoramento, a combinação do PMG e do PARTID pode ser usada para rastrear o consumo de recursos de memória sob certas cargas.
    • Em caso de encerramento inesperado do processo após receber um sinal, outro processo que possui o pidfd do processo encerrado agora pode determinar o número do sinal que levou ao seu término.
    • A implementação de sequências reiniciáveis (restartable sequences) foi reformulada, permitindo que aplicativos organizem a execução não interrompível de um grupo de instruções de forma pseudo-atômica (caso uma interrupção ocorra por outro fluxo, é feita uma nova tentativa de execução da sequência). A nova implementação se destaca por ser mais. mais alto.
    • As instruções BPF_JMP, BPF_X e BPF_JA foram implementadas para realizar saltos indiretos para uma posição específica na tabela de transições nas programações BPF. Foi adicionada a ideia de ponteiros dinâmicos (dynptr), permitindo a leitura de dados de arquivos estruturados. A possibilidade de anexar vários bytes com metadados a pacotes de rede foi adicionada.
    • Os módulos em Python utilizados para processar a documentação do núcleo foram movidos para o diretório separado tools/lib/python.
    • Uma nova função mempool_alloc_bulk() foi adicionada para alocar elementos de forma segura a partir de um pool de memória para múltiplos objetos simultaneamente.
    • A transferência de mudanças da ramificação Rust-for-Linux continuou, relacionada ao uso da linguagem Rust como segunda linguagem para o desenvolvimento de drivers e módulos do núcleo (o suporte a Rust não está ativado por padrão e não torna Rust uma dependência de compilação obrigatória para o núcleo). Na nova versão, a biblioteca 'syn', com um parser de código Rust que simplifica a escrita de macros complexas, foi embutida no núcleo. As bibliotecas kernel, pin-init e rbtree foram aprimoradas. Uma biblioteca 'num' com tipagem Integer para manipulação de números inteiros foi adicionada. Suporte a parâmetros inteiros foi integrado no macro 'module!'. Foi implementada a possibilidade de especificar parâmetros ao carregar módulos do núcleo escritos em Rust. Abstrações para subsistemas I2C e PWM (Modulação por Largura de Pulso) foram introduzidas.
    • O macro 'at_least' foi adicionado (por exemplo, 'param[at_least 7]') para informar o tamanho mínimo aceitável do array passado para a função. Se um array com menos elementos for passado, o compilador emitirá um aviso.
    • Um script klp-build foi incluído para gerar módulos do núcleo que aplicam mudanças a um núcleo em funcionamento (livepatch), baseado em um arquivo com patch. Foram feitas alterações na ferramenta objtool necessárias para criar patches ao vivo.
    • No User-mode Linux (execução do núcleo como um processo de usuário), foi adicionada um suporte limitado à multiprocessamento, mas as threads dentro de um único processo ainda não podem ser executadas simultaneamente. O port da User-mode Linux para a biblioteca nolibc começou.
    • O suporte para a arquitetura LoongArch32 (LA32R, LA32S) foi adicionado, além do LoongArch64.
    • Adicionada a capacidade de definir limites de QoS para a intensidade de ativação do processador no modo de economia de energia s2idle (Suspend-To-Idle), que suspende a execução de processos no espaço do usuário, mas mantém alguns manipuladores ativos no núcleo.
    • Adicionada a suporte para gestão de tabelas de páginas de memória para controladores IOMMU (Input-Output Memory Management Unit), que realizam a tradução de endereços virtuais visíveis para o dispositivo de hardware em endereços físicos, com a capacidade de filtrar operações DMA por endereços virtuais, bem como limitar e isolar operações de entrada e saída.
    • Nas trilhas de eventos de chamadas de sistema, foi implementada a capacidade de ler buffers do espaço do usuário e incluir seu conteúdo (como nomes de arquivos) no resultado da trilha.
    • As páginas de proteção de memória (guard page), cujo acesso gera uma exceção e termina o processo (SIGSEGV), agora são marcadas com um rótulo especial no arquivo /proc/PID/smaps.
    • Adicionada a possibilidade de gerenciar grandes páginas de memória (transparent huge page) na memória privada de dispositivos zonados.
    • No dispositivo zram, utilizado para armazenamento comprimido da partição de swap na memória, foi implementado o suporte à eliminação de várias estruturas 'bio' (Block I/O) em modo de pacote (writeback batching).
    • Incluído a fonte 'Terminus 10×18', que melhora a legibilidade das informações do console em telas de laptops com resolução média (1440×900).
    • O desempenho do subsistema de auditoria foi significativamente otimizado — nota-se uma redução das sobrecargas pela metade.
  • Virtualização e segurança
    • Foi adicionada a compatibilidade com a capacidade de separação de espaço de endereços lineares fornecida pelos processadores Intel (LASS, linear address-space separation), permitindo a separação de hardware dos intervalos de endereços entre o espaço do usuário e o núcleo para aumentar a segurança. O espaço de endereços é dividido com base no bit mais significativo do endereço — metade do espaço de endereços com o bit mais significativo definido é utilizada para o núcleo, enquanto a parte inferior é destinada ao espaço do usuário. Em uma fase inicial da execução das instruções (antes da execução especulativa), é realizada uma verificação de acessibilidade para o espaço do usuário acessar endereços com o bit mais significativo definido e vice-versa. Essa separação permite bloquear vazamentos de memória do núcleo para o espaço do usuário por meio de canais laterais, mesmo durante a execução especulativa, possibilitando o uso do LASS para proteção contra ataques do tipo Meltdown e Spectre, sem incorrer em grandes custos adicionais.
    • Foi adicionada a capacidade de ativar extensões de reforço de segurança para o barramento PCI Express — PCIe Link Encryption e PCIe Device Authentication, que permitem autenticar e criptografar o canal de comunicação entre o dispositivo PCIe e a máquina virtual, protegida por mecanismos Intel TDX (Trusted Domain Extensions) e AMD SEV-SNP (Secure Nested Paging). As tecnologias implementadas não permitem interceptar, analisar ou injetar dados no tráfego DMA quando há acesso ao sistema host ou a outros dispositivos.
    • A biblioteca criptográfica incorporada agora suporta os algoritmos SHA-3 (SHA3-224, SHA3-256, SHA3-384, SHA3-512), SHAKE128, SHAKE256 e BLAKE2b.
    • Para módulos LSM (Linux Security Modules) e, especificamente, para SELinux, foi implementada a capacidade de rastrear a criação de descritores memfd para aplicar políticas de segurança aos objetos relacionados.
    • No módulo LSM IPE (Integrity Policy Enforcement), que define a política geral de integridade para todo o sistema, foi adicionada a compatibilidade com a flag AT_EXECVE_CHECK na função execveat(), que inclui a verificação da integridade do script antes de sua execução pelo interpretador.
    • Foram adicionados os primitivos scoped_user_read_access(), scoped_user_write_access e scoped_user_rw_access() para acesso restrito a dados no espaço do usuário, com proteção contra ataques especulativos.
    • Suporte adicionado ao mecanismo Confidential VMBus, utilizado no hypervisor HyperV para comunicação protegida entre o sistema convidado, operando em modo confidencial (com criptografia de memória e isolamento de registradores com tecnologias AMD SNP e Intel TDX), e o paravisor, que lida com dispositivos que processam dados confidenciais.
    • Adicionada a capacidade de transmitir informações sobre um processo encerrado inesperadamente (para gerar coredump) através do mecanismo pidfd. O identificador PIDFD está vinculado a um processo específico e não muda, enquanto o PID pode ser associado a outro processo após o término do processo atual associado a esse PID. O uso do pidfd permite bloquear ataques de substituição de processo suid encerrado inesperadamente por outro processo, criando uma condição de corrida após o início do tratamento do encerramento emergencial pelo kernel, mas antes da verificação pelo manipulador no espaço do usuário dos parâmetros do processo.
  • Subsistema de Rede
    • O subsistema de rede recebeu otimizações para aumentar a eficiência da transmissão de dados (TX). A remoção do bloqueio spin da função __dev_queue_xmit() e a utilização de uma estrutura llist sem bloqueios permitiu que o desempenho aumentasse em quatro vezes sob alta carga e duplicasse a intensidade de envio de pacotes com a redução da carga na CPU.
    • Foi disponibilizada a opção de desabilitar os limites de memória do sistema para sockets de rede individuais (neste caso, serão utilizados os limites de memória gerais estabelecidos para contêineres individuais). Para gerenciar a desativação dos limites, foi proposto o sysctl net.core.bypass_prot_mem e a flag SK_BPF_BYPASS_PROT_MEM na função bpf_setsockopt.
    • Suporte adicionado à extensão RFC 5837, que inclui informações sobre as interfaces de rede de entrada nas mensagens ICMP 'Time Exceeded' retornadas quando o tempo de vida (TTL) do pacote expira, visando obter informações mais detalhadas durante a rastreabilidade de rotas na utilidade traceroute.
    • Suporte adicionado para polling ativo contínuo (busy polling) em uma thread separada do kernel com o objetivo de extrair descritores das filas RX/TX para aplicações que exigem menores latências.
    • Adicionada a compatibilidade com o protocolo CAN XL (Controller Area Network eXtended Length), onde o tamanho do campo de dados foi aumentado para 2048 bytes para garantir a integração com redes TCP/IP, implementada a possibilidade de tunelamento de quadros Ethernet e adicionada a suporte à modulação por largura de pulso, permitindo a transmissão de dados a velocidades de 20 Mbps e acima.
    • Adicionada a suporte à estrutura sockaddr_unsized, uma variante da estrutura sockaddr que utiliza um array com elementos flexíveis em vez de um array de tamanho fixo (sa_data[] em vez de sa_data[14], que essencialmente era utilizado para referências a outras estruturas maiores).
    • Adicionada a possibilidade de usar as funcionalidades getsockname e getpeername através do subsistema io_uring.
    • Adicionados sysctl net.ipv4.tcp_rcvbuf_low_rtt e net.ipv4.tcp_comp_sack_rtt_percent para otimização do TCP.
    • Adicionada a suporte a links com largura de banda de 1600 Gbps (1.6T).
  • Hardware
    • Na subsistema DRM (Direct Rendering Manager) foi adicionado um API para utilizar as capacidades de hardware de conversão de cores, permitindo realizar tais conversões sem a necessidade de shaders ou execução de código na CPU. Para a saída de conteúdo em monitores HDR, conversões de cores complexas agora podem ser realizadas pelo controlador de exibição na fase anterior e posterior à mistura de camadas (blending), em vez de composição de software do conteúdo no buffer final de exibição. Além de reduzir a sobrecarga e o consumo de energia na saída em HDR, a funcionalidade proposta pode ser utilizada para uma reprodução de cores precisa em editores de vídeo ou imagem.
    • Adicionado o driver 'ethosu' para NPU Arm Ethos U65 e U85, destinados à aceleração de hardware da execução de modelos de IA.
    • No driver i915 para GPU Lunar Lake e versões mais recentes, foi adicionada a suporte à melhoria de nitidez de imagem (Sharpening).
    • Continua o trabalho no driver drm (Direct Rendering Manager) Xe para GPUs baseadas na arquitetura Intel Xe, que é utilizada em placas gráficas Intel da família Arc e gráficos integrados a partir dos processadores Tiger Lake. Adicionada a suporte inicial à arquitetura Xe3P, utilizada em GPUs Crescent Island e na família de processadores com gráficos integrados Nova Lake.
    • O driver AMDGPU implementou suporte completo para placas gráficas AMD da família GCN 1.0 "Southern Island" e 1.1 "Sea Islands", que anteriormente usavam o driver Radeon. O driver AMDGPU foi atualizado para igualar as funcionalidades do driver Radeon e ativado por padrão para as GPUs mencionadas. As placas GCN 1.x foram lançadas de 2012 a 2019 e incluem modelos como Radeon HD 77xx/78xx/79xx/87xx/88xx/89xx, Radeon R9 280, FirePro W4000-W9000, Radeon Sky 700/900, Radeon R9 265/270/370, Radeon R9 290/390, HD 7790/8870 e outras placas gráficas das famílias Radeon Rx 200/Rx 300. Além do aumento médio de desempenho em 24%, a transição para AMDGPU permitiu a implementação do suporte para a API gráfica Vulkan 1.3 para estas GPUs. Além disso, o AMDGPU adicionou suporte para conectores analógicos e Video Coding Engine 1.0, e a pilha DC (Display Core) foi ativada por padrão para GPUs baseadas na microarquitetura Bonaire (Radeon HD 7700).
    • O driver Nouveau implementou suporte para o acelerador de hardware NVJPG, presente no SoC Tegra210.
    • O driver Panthor adicionou suporte para a GPU Mali-G1 e suporte inicial para o chip MediaTek MT8196.
    • Adicionado suporte para a subsystem de áudio dos chips Intel Nova Lake S, laptops HP com HDA CS35L41, além de interfaces de áudio CIX IPBLOQ HD e Onkyo SE-300PCIE.
    • A integração de componentes do driver Nova para GPUs NVIDIA, equipadas com firmware GSP, utilizada a partir da série NVIDIA GeForce RTX 2000 baseada na microarquitetura Turing, foi continuada. O driver foi escrito na linguagem Rust. Na nova versão, o trabalho sobre RPC começou e a implementação do carregamento do coprocessador GSP (GPU System Processor) foi finalizada.
    • Adicionado suporte para plataformas ARM, SoCs e dispositivos: Bananapi r4 pro, LinkEase EasePi R1, Qualcomm MSM8937 (Snapdragon 430), Renesas R-Car X5H, FriendlyElec NanoPi R76S, TI AM62L, Black Sesame Technologies C1200, Aspeed AST2600, Genio 1200 EVK, grinn geniosbc-510/700, Tanix TX9 Pro, Radxa Dragon Q6A, Tinker Board 3/3S, Aquila AM69, phyBOARD-Segin-i.MX91, i.MX 95 Verdin Evaluation Kit, Toradex SMARC iMX95, VIDIA Jetson Nano 2GB, Renesas rz/g3s, Indiedroid Nova, 24 variantes de placas Enclustra Mercury.
    • Adicionado suporte para smartphones e tablets baseados no SoC Mediatek MT6582 (Alcatel yarisxl), Nvidia Tegra124 (Xiaomi Mi Pad) e Qualcomm MSM8939 (ASUS ZenFone 2). Adicionado suporte para laptops baseados em SoC Qualcomm sdm850, como o Huawei MateBook E 2019.
    • Adicionado suporte para SoCs e placas baseadas na arquitetura RISC-V: OrangePi R2S, OrangePi RV, Anlogic dr1v90, Tenstorrent Blackhole.

Simultaneamente, a Fundação de Software Livre da América Latina formou uma versão totalmente livre do núcleo 6.19 — Linux-libre 6.19-gnu, livre de elementos de firmware e drivers que contêm componentes não livres ou seções de código cuja área de aplicação é limitada pelo fabricante. Na versão 6.19, o código para carregar firmwares binários foi removido do subsistema de áudio SDCA. O código de limpeza de blobs nos drivers Intel XE, Nova-Core, Qualcomm Iris, Venus e Q6V5, TI PRUeth, Intel iwlwifi, Marvell mwifiex, FourSemi fs210x, Realtek rt1320 e codecs de áudio TI tas2783 foi atualizado. A limpeza dos nomes dos blobs nos arquivos dts (devicetree) para chips ARM foi realizada. A limpeza do driver STM C8SECTPFE DVB foi descontinuada, sendo removido do núcleo.

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