Após dois meses de desenvolvimento, Linus Torvalds apresentou o lançamento do kernel Linux 6.8. Entre as alterações mais notáveis estão: driver Xe para GPU Intel, modo de proteção de dispositivos de bloco com sistemas de arquivos montados, mecanismo de escalonamento de tarefas Deadline server, otimização automática da fusão de páginas de memória idênticas, primeiro driver na linguagem Rust, chamadas de sistema listmount e statmount, remoção do bpfilter e SLAB, mecanismo guest_memfd no KVM, e perfilamento de acesso a dados.
A nova versão contém 15.641 correções de 2018 desenvolvedores, com o tamanho do patch sendo 44 MB (as alterações afetaram 12.212 arquivos, adicionando 663.864 linhas de código e removendo 339.094 linhas). Na versão anterior, houveram 18.405 correções de 2.066 desenvolvedores, com o tamanho do patch de 72 MB. Cerca de 42% de todas as alterações introduzidas no 6.8 estão relacionadas a drivers de dispositivos, aproximadamente 15% das mudanças estão associadas à atualização de código específico de arquiteturas de hardware, 14% estão ligadas à pilha de rede, 6% a sistemas de arquivos e 3% a subsistemas internos do kernel.
No repositório Git com o kernel 6.8 existem 9.996 milhões de objetos, o que indica que o próximo kernel 6.9 superará a marca de 10 milhões de objetos git. Anteriormente, a mudança de números das branches 3.x e 4.x correlacionava bem com o número de objetos git no repositório: o kernel 3.0 foi lançado quando havia cerca de 2 milhões de objetos no repositório, e o kernel 4.0 tinha 4 milhões de objetos. No entanto, em 2019, o lançamento do 5.0 quebrou essa lógica, pois na sua formação o repositório incluía cerca de 6,5 milhões de objetos git.
Principais inovações no kernel 6.8:
- Subsistema de disco, entrada/saída e sistemas de arquivos
- Adicionado o modo de bloqueio de gravação direta em dispositivos de bloco que têm sistemas de arquivos montados (após ativar o modo, o usuário root não poderá fazer alterações no sistema de arquivos por meio de manipulações no nível do dispositivo de bloco). Por padrão, o modo está desativado e requer a especificação do parâmetro BLK_DEV_WRITE_MOUNTED durante a compilação. Para partições com Btrfs, o bloqueio ainda não funciona, pois as alterações necessárias no código do Btrfs ainda não foram aceitas.
- Adicionadas as chamadas de sistema listmount() e statmount(), que permitem ao espaço do usuário obter informações detalhadas sobre os sistemas de arquivos montados.
- No sistema de arquivos XFS, continuam os esforços para implementar a utilização da ferramenta fsck para verificar e corrigir problemas identificados em modo online, sem a necessidade de desmontar o sistema de arquivos.
- No sistema Ext4, para blocos menores que uma página de memória, foi utilizado o chamado dioread_nolock, que melhora o desempenho ao eliminar bloqueios desnecessários. Algumas funções foram adaptadas para usar folhetos de páginas de memória (page folios).
- No Btrfs, foi adicionada a suporte à flag de montagem "nospace_cache" para desativar o cache de blocos livres. Algumas funções foram adaptadas para usar folhetos de páginas de memória (page folios).
- No sistema de arquivos EROFS (Extendable Read-Only File System), que é utilizado em partições acessíveis apenas em modo de leitura, foi adicionada a suporte à compactação de subpáginas e aprimorada a operação em situações de falta de memória.
- No sistema de arquivos F2FS, a suporte para dispositivos de armazenamento zonificados foi aprimorada (divisão em zonas de grupos de blocos ou setores, nos quais é permitido apenas a adição sequencial de dados com atualização de todo o grupo de blocos).
- Para o FS SMB, foi implementada a possibilidade de criar arquivos de dispositivos de bloco e de caractere.
- No Bcachefs, foi adicionada suporte parcial para verificação e recuperação de integridade de sistemas de arquivos montados.
- No subsistema device-mapper, a suporte para os manipuladores MD_LINEAR, MD_MULTIPATH e MD_FAULTY foi descontinuada, sendo declarada obsoleto em 2021.
- Memória e serviços do sistema
- No subsistema Zswap, foi adicionada uma opção que pode ser ativada em situações de falta de memória, permitindo a descarregamento forçado para uma partição de swap real de páginas de memória "frias", que não foram acessadas e que provavelmente permanecerão não utilizadas. O Zswap realiza o cache das páginas descarregadas na partição de swap, mantendo-as na memória RAM de forma compactada, evitando tanto quanto possível o despejo em uma partição de swap não compactada real no disco. As alterações implementadas durante a falta de memória permitem reduzir o tamanho do pool de Zswap armazenado na RAM e liberar memória para o sistema.
- No Zswap, foi proposto um novo modo que desativa completamente a gravação diferida (writeback) na partição de swap real, se a tentativa de gravação não for bem-sucedida, e não despeja as páginas já existentes no pool do zswap na partição de swap.
- No planejador de tarefas foi adicionado o mecanismo SCHED_DEADLINE server, que resolve o problema da não obtenção de recursos da CPU por tarefas normais em condições de monopolização da CPU por tarefas de alta prioridade (em tempo real). Para evitar a monopolização da CPU, anteriormente utilizava-se o mecanismo Realtime throttling, que tentava reservar 5% para tarefas de baixa prioridade, deixando 95% do tempo para tarefas em tempo real. Este mecanismo deixava a desejar, pois as tarefas normais frequentemente não conseguiam obter tempo de CPU. O SCHED_DEADLINE server implementa um mecanismo de reserva de recursos mais eficiente.
- Na subsistema DAMON (Data Access MONitor), que permite monitorar o acesso do processo a dados na memória operacional (por exemplo, é possível saber quais áreas da memória foram acessadas pelo processo e quais áreas permaneceram não utilizadas), foi adicionado um mecanismo de ajuste automático da agressividade do consumo de memória com base nas quotas definidas.
- Foi adicionada a suporte para páginas grandes de vários tamanhos na memória (mTHP — multi-size Transparent Huge Pages), permitindo a alocação de memória em blocos maiores que a página base, mas menores que a tradicional página THP.
- Foi adicionada a suporte para folhetos grandes (page folios, páginas de memória combinadas) para memória anônima (não vinculada ao sistema de arquivos, por exemplo, alocada via malloc). Essa alteração visa melhorar o desempenho ao alocar grandes blocos de memória durante o acesso a páginas de memória não alocadas (page faults). Por exemplo, a utilização de folhetos grandes reduziu o tempo de recompilação do kernel em 5% (reduzindo o tempo gasto no nível do kernel em 40%).
- O parâmetro TRANSPARENT_HUGEPAGE_NEVER foi adicionado ao arquivo de configuração do kernel, permitindo desativar o uso de páginas grandes de memória (Transparent Huge Pages).
- Na chamada de sistema userfaultfd(), que permite criar manipuladores para acessos a páginas não alocadas (page faults) no espaço do usuário, foi adicionada a operação UFFDIO_MOVE, permitindo, durante a compactação do heap, mover páginas de memória no espaço de endereços virtuais sem realizar a operação de alocação de páginas de memória. Em testes realizados, a aplicação do UFFDIO_MOVE conseguiu reduzir em 40% o tempo de compactação em comparação ao uso da operação UFFDIO_COPY.
- Adicionado o mecanismo "KSM advisor", que permite otimizar automaticamente os parâmetros do subsistema de mesclagem de páginas de memória idênticas (KSM - Kernel Samepage Merging).
- Continua a transferência de alterações da branch Rust-for-Linux, relacionadas ao uso da linguagem Rust como segunda linguagem para o desenvolvimento de drivers e módulos do kernel (o suporte a Rust não é ativado por padrão e não exige a inclusão do Rust como uma dependência obrigatória na compilação do kernel). A nova versão inclui alterações que adicionam uma ligação em Rust sobre o nível de abstração phylib e utiliza essa ligação no driver ax88796b_rust, que oferece suporte ao interface PHY do controlador Ethernet Asix AX88772A (100MBit). Funcionando de maneira equivalente ao antigo driver ax88796b, escrito em C, ele pode ser utilizado com placas de rede X-Surf 100 equipadas com o chip AX88796B. Para a arquitetura LoongArch, foi possibilitada a escrita de módulos em Rust. A transição para o uso da versão Rust 1.74.1 foi efetuada.
- Adicionado o mecanismo BPF token, permitindo delegar seletivamente o processamento de recursos BPF, como o carregamento de um programa BPF ou a criação de um mapa BPF, a processos não privilegiados no espaço do usuário, cuja autenticidade é confirmada por um token especial.
- Expandida a funcionalidade do verificador de programas BPF.
- Adicionada à ferramenta perf suporte para a profilagem de dados, permitindo rastrear leituras e gravações em estruturas de dados, por exemplo, para identificar os campos mais ativamente modificados nas estruturas. Em sistemas com processadores que suportam a coleta de informações sobre operações de memória (Intel, AMD, ARM), para acumular estatísticas, deve-se usar o comando "perf mem record", e para gerar um relatório sobre acessos a estruturas de dados, utiliza-se "perf annotate --data-type".
- Realizada a otimização do desempenho do processamento de chamadas do sistema na arquitetura s390 (IBM Z), que resultou em um aumento de cerca de 11% na velocidade de entrada nas chamadas do sistema durante os testes.
- Possibilitada a alteração do tamanho dos buffers de rastreamento, usados para armazenar informações sobre eventos de rastreamento enviados ao espaço do usuário.
- O mecanismo de alocação de memória SLAB, anteriormente declarado obsoleto, foi removido, sendo que agora apenas o SLUB é utilizado no núcleo. Os motivos incluem problemas de manutenção, a presença de falhas no código e a duplicação de funcionalidades com o alocador mais avançado SLUB.
- Durante a compilação do núcleo, a opção '-Wmissing-prototypes' foi ativada, gerando avisos para chamadas de funções globais que não possuem a definição de protótipo.
- Para a arquitetura RISC-V em sistemas com suporte para a extensão SUSP, o SBI implementou suporte para transição para o modo de espera, preservando o estado na RAM. Foi disponibilizada a possibilidade de utilizar a chamada de sistema riscv_hwprobe() para obter informações sobre as extensões suportadas pelo conjunto de instruções RISC-V.
- Virtualização e segurança
- Novas chamadas de sistema lsm_list_modules(), lsm_get_self_attr() e lsm_set_self_attr() foram adicionadas para listar os módulos LSM (Linux Security Modules) carregados e obter/definir atributos do módulo LSM. Uma nova estrutura lsm_ctx foi adicionada para comunicação no contexto LSM entre o espaço do usuário e o núcleo.
- O subsistema AppArmor foi atualizado para utilizar o algoritmo SHA-256 para verificação de regras, em vez de hashes SHA-1.
- A implementação da função strlcpy() foi removida do núcleo, que foi incluída anteriormente na biblioteca C Glibc 3.38. A strlcpy é uma alternativa à função strncpy(), que oferece proteção contra estouro de buffer e sempre adiciona o caractere nulo de terminação.
- No hipervisor KVM Foi adicionada a suporte para o subsistema guest_memfd (memória guest-first), que fornece funções de gerenciamento de memória, permitindo a implementação de capacidades e otimizações que seriam inacessíveis com o uso do subsistema de gerenciamento de memória comum. Por exemplo, o guest_memfd possibilita o mapeamento de uma área de memória inacessível para o ambiente host na máquina convidada, o que pode ser usado para realizar computações confidenciais.
- Para sistemas convidados, que operam sob o hipervisor KVM, foi adicionado suporte para o modo LAM (Linear Address Masking) disponível em processadores Intel, permitindo que parte dos bits dos ponteiros de 64 bits (do 57º ao 62º bit) seja usada para armazenar metadados não relacionados à endereçamento.
- O hipervisor KVM para sistemas baseados na arquitetura ARM64 agora suporta endereços físicos de 52 bits (LPA2). Para sistemas com arquitetura x86, foi possibilitada a compilação sem emulação das chamadas de hipervisor Hyper-V, permitindo reduzir o tamanho do kernel.
- Adicionado o driver iaa (IAA Compression Accelerator) para acelerar a operação de compressão e descompressão de dados usando o método DEFLATE, aproveitando as capacidades dos aceleradores criptográficos Intel Analytics Accelerator (IAA).
- No lado do ambiente de hospedagem, foi implementado o suporte ao mecanismo Intel TDX (Trusted Domain Extensions), que permite, com o uso do hipervisor KVM, criar ambientes de convidado protegidos, nos quais é utilizado o criptografia da memória. máquinas virtuais.
- No SELinux, foi adicionado o identificador SID 'init', que permite identificar os processos iniciados no início da inicialização, executados antes da aplicação das políticas do SELinux. A interface /sys/fs/selinux para gerenciamento do SELinux foi aprimorada.
- Subsistema de Rede
- Realizou-se uma reorganização em baixo nível das estruturas de dados da rede, visando aumentar a eficiência do cache. Anteriormente, os campos nas estruturas da pilha de rede socks, netdev, netns e mibs eram organizados conforme eram adicionados, o que limitava o uso do cache do processador. A revisão do posicionamento das variáveis nas estruturas resultou em um aumento significativo na velocidade de operação do TCP, minimizando o uso de linhas do cache durante a transferência de dados e otimizando o acesso às variáveis. Em casos de processamento de múltiplas conexões TCP paralelas, a aceleração pode atingir 40%.
- O subsistema bpfilter, que usava BPF para filtragem de pacotes, foi removido. O bpfilter foi introduzido a partir da versão 4.18, mas nunca foi desenvolvido a um nível utilizável amplamente. Nos últimos anos, o código do bpfilter no kernel não evoluiu, enquanto o desenvolvimento continuava pela empresa Facebook em um repositório separado.
- Hardware
- Inclui um novo driver drm (Direct Rendering Manager) Xe para GPUs baseadas na arquitetura Intel Xe, que é usada nas placas gráficas Intel da família Arc e na gráfica integrada, a partir dos processadores Tiger Lake. O driver Xe é posicionado como a base para garantir o funcionamento de novos chips, desvinculado do código para suporte a plataformas mais antigas. O driver é construído com uma nova arquitetura, onde componentes existentes do subsistema DRM são mais ativamente utilizados, bem como componentes padrão do driver i915, não vinculados a GPUs específicas, por exemplo, código para interação com telas, modelo de memória e implementação de execbuf. No Mesa, a operação do OpenGL e Vulkan sobre o driver Xe é implementada em nível de alterações feitas nos drivers existentes do Mesa Iris e ANV.
- O driver i915 continua o trabalho de implementação do suporte a chips Intel LunarLake (Xe 2). O suporte a chips Intel Meteor Lake foi melhorado.
- No driver Nouveau, foi implementada a configuração para utilizar por padrão as funções de firmware GSP para trabalhar com GPUs NVIDIA baseadas nas microarquiteturas Turing e Ampere, nas quais as operações de inicialização e controle da GPU são realizadas por um microcontrolador separado GSP (GPU System Processor). Ao habilitar essa configuração, o driver funcionará por meio do acesso ao firmware, em vez de programar diretamente as operações de interação com o hardware.
- No driver AMDGPU, foi implementado suporte ao ACPI WBRF e VPE DPM, modificada a manipulação da velocidade do canal PCIe, utilizados números de sequência de 64 bits nas filas de sincronização, adicionado suporte a mecanismos de controle de cor específicos da AMD, e resolvido um problema com a transição para o modo de hibernação.
- Adicionada uma implementação inicial do driver para GPU Broadcom VideoCore 7.1, utilizado nas placas Raspberry Pi 5.
- Adicionado um driver para GPUs da série PowerVR 6, baseadas na microarquitetura Rogue da Imagination Technologies.
- Adicionada suporte a controladores Thunderbolt/USB4 integrados em chips baseados na microarquitetura Intel Lunar Lake.
- Adicionados drivers para câmeras utilizadas em SoC Starfive, GalaxyCore GC2145/GC0308, Chips&Media Wave e THine THP7312.
- Adicionada suporte a controladores de jogos NSO (Nintendo Switch Online) — variantes de controladores antigos do SNES (Super Nintendo), Genesis e N64 (Nintendo 64), adaptados para Nintendo Switch. Adicionado driver para gamepads Adafruit Seesaw. Suporte para controladores Lenovo Legion Go foi adicionado ao driver xpad.
- O driver dts recebeu suporte para dispositivos de jogo Powkiddy RK2023, Powkiddy X55 e Anbernic RG351V.
- Foi adicionado suporte para sistemas de som utilizados em chips NXP i.MX8m MICFIL, Qualcomm SM8250, AMD ACP5x, Intel Arrow Lake, SM8550, SM8650 e X1E80100.
- A AMD fez alterações relacionadas ao suporte da futura série de processadores baseada na nova microarquitetura Zen 5.
- Foi adicionado suporte a ARM64 SoC: Qualcomm SM8650 (Snapdragon 8 Gen 3), Qualcomm X1E80100 (Snapdragon X Elite), Samsung Exynos Auto v920, Google GS101 (Tensor G1), MediaTek MT8188 e Unisoc UMS9620 (Tanggula 7).
- Foi adicionado suporte a plataformas e dispositivos ARM: Huashan Pi, Microsoft Lumia, HTC One Mini 2, Motorola MotoG 4G, Huawei Honor 5X/GR5, Anbernic RG351V, Powkiddy RK2023, Powkiddy X55, ComXpress baseado em Marvell CN913x, Chromebook Lenovo, Asus e Acer baseado em Mediatek MT8183, Toradex Verdin AM62, placas baseadas em Allwinner H616/H618.
- O suporte para processadores ARM11 ARMv6K SMP foi descontinuado.
Simultaneamente, o Fundo Latino-Americano de Software Livre formou uma variante completamente livre do kernel 6.8 — Linux-libre 6.8-gnu, limpo de elementos de firmware e drivers que contêm componentes ou trechos de código não livres, cuja aplicação é limitada pelo fabricante. Na versão 6.8, o código de limpeza de blobs foi atualizado em vários drivers e subsistemas. A limpeza dos drivers Intel qat_420xx, Imagination PowerVR, Intel Xe, Chips&Media Wave5, Intel VSC, Aquantia PHY e Realtek rtw8922a foi realizada. Devido à exclusão do núcleo, a limpeza dos drivers atmel, hermes, orinoco_usb, libertas_cs e zd1201 foi descontinuada. A limpeza dos nomes de blobs em arquivos dts (devicetree) para as arquiteturas ARM e Aarch64 foi realizada. Problemas com a limpeza do driver i915 foram corrigidos.
Fonte: opennet.ru
