Após dois meses de desenvolvimento, Linus Torvalds apresentou o lançamento do kernel Linux 6.0. A mudança significativa no número da versão é por motivos estéticos e é um passo formal para aliviar o desconforto de acumular um grande número de exemplares na série (Linus brincou que o motivo da mudança no número da filial era mais provável porque ele estava ficando sem dedos e dedos dos pés para contar números de versão). Entre as mudanças mais notáveis: suporte para escrita assíncrona em buffer em XFS, driver de bloco ublk, otimização do agendador de tarefas, mecanismo para verificar o correto funcionamento do kernel, suporte para cifra de bloco ARIA.
Principais inovações no kernel 6.0:
- Subsistema de disco, E/S e sistemas de arquivos
- O sistema de arquivos XFS adicionou suporte para gravações assíncronas em buffer usando o mecanismo io_uring. Testes de desempenho realizados usando ferramentas fio (1 thread, tamanho de bloco de 4kB, 600 segundos, gravação sequencial) mostram um aumento nas operações de entrada/saída por segundo (IOPS) de 77k para 209k, velocidade de transferência de dados de 314MB/s para 854MB/s, e queda na latência de 9600ns para 120ns (80 vezes).
- O sistema de arquivos Btrfs implementa uma segunda versão do protocolo para o comando “send”, que implementa suporte para metadados adicionais, enviando dados em blocos maiores (mais de 64K) e transmitindo extensões em formato compactado. O desempenho das operações de leitura direta aumentou significativamente (até 3 vezes) devido à leitura simultânea de até 256 setores. Redução da contenção de bloqueio e aceleração da verificação de metadados, reduzindo metadados reservados para elementos adiados.
- Novas operações ioctl EXT4_IOC_GETFSUUID e EXT4_IC_SETFSUUID foram adicionadas ao sistema de arquivos ext4 para recuperar ou definir o UUID armazenado no superbloco.
- O sistema de arquivos F2FS oferece um modo de baixo consumo de memória, que otimiza a operação em dispositivos com pequena quantidade de RAM e permite reduzir o consumo de memória ao custo de desempenho reduzido.
- Adicionado suporte para autenticação de unidade NVMe.
- O servidor NFSv4 implementa um limite no número de clientes ativos, que é definido como 1024 clientes válidos para cada gigabyte de RAM no sistema.
- A implementação do cliente CIFS melhorou o desempenho no modo de transmissão multicanal.
- Um novo sinalizador FAN_MARK_IGNORE foi adicionado ao subsistema de rastreamento de eventos no fanotify FS para ignorar eventos específicos.
- No Overlayfs FS, quando montado sobre um FS com mapeamento de ID de usuário, é fornecido suporte correto para listas de controle de acesso compatíveis com POSIX.
- Adicionado o driver de bloco ublk, que move lógica específica para o lado do processo em segundo plano no espaço do usuário e usa o subsistema io_uring.
- Serviços de memória e sistema
- Novos recursos foram adicionados ao subsistema DAMON (Data Access MONitor), permitindo não apenas monitorar o acesso do processo à RAM a partir do espaço do usuário, mas também influenciar o gerenciamento da memória. Em particular, foi proposto um novo módulo “LRU_SORT”, que permite o reagrupamento de listas LRU (menos usadas recentemente) para aumentar a prioridade de certas páginas de memória.
- A capacidade de criar novas regiões de memória foi implementada usando os recursos do barramento CXL (Compute Express Link), usado para organizar a interação de alta velocidade entre a CPU e os dispositivos de memória. CXL permite conectar novas regiões de memória fornecidas por dispositivos de memória externos e usá-las como recursos adicionais de espaço de endereço físico para expandir a memória de acesso aleatório (DDR) ou memória permanente (PMEM) do sistema.
- Resolvidos problemas de desempenho com processadores AMD Zen causados por código adicionado há 20 anos para contornar um problema de hardware em alguns chipsets (uma instrução WAIT adicional foi adicionada para desacelerar o processador para que o chipset tivesse tempo de entrar em estado inativo). A mudança resultou na redução do desempenho em cargas de trabalho que frequentemente alternam entre estados inativos e ocupados. Por exemplo, depois de desativar a solução alternativa, as pontuações médias dos testes de bancada aumentaram de 32191 MB/s para 33805 MB/s.
- O código com heurística foi retirado do agendador de tarefas, garantindo a migração dos processos para as CPUs menos carregadas, levando em consideração o ganho previsto no consumo de energia. Os desenvolvedores concluíram que a heurística não era útil o suficiente e que era mais fácil removê-la e migrar processos sem avaliação adicional sempre que tal migração pudesse resultar potencialmente em menor consumo de energia (por exemplo, quando a CPU de destino estiver em um nível de energia mais baixo). A desativação da heurística levou a uma redução no consumo de energia ao realizar tarefas intensivas, por exemplo, no teste de decodificação de vídeo, o consumo de energia diminuiu 5.6%.
- A distribuição de tarefas entre núcleos de CPU em sistemas grandes foi otimizada, o que melhorou o desempenho para determinados tipos de carga de trabalho.
- A interface de E/S assíncrona io_uring oferece um novo sinalizador, IORING_RECV_MULTISHOT, que permite usar o modo multi-shot com a chamada de sistema recv() para executar múltiplas operações de leitura do mesmo soquete de rede de uma só vez. io_uring também suporta transferência de rede sem buffer intermediário (cópia zero).
- Implementada a capacidade de colocar programas BPF anexados ao uprobe em estado de suspensão. O BPF também adiciona um novo iterador ksym para trabalhar com tabelas de símbolos do kernel.
- A interface obsoleta “efivars” no sysfs, destinada ao acesso às variáveis de inicialização UEFI, foi removida (o FS virtual efivarfs agora é usado universalmente para acessar dados EFI).
- O utilitário perf possui novos relatórios para analisar conflitos de bloqueio e o tempo gasto pelo processador na execução de componentes do kernel.
- A configuração CONFIG_CC_OPTIMIZE_FOR_PERFORMANCE_O3 foi removida, o que permitiu que o kernel fosse construído no modo de otimização "-O3". Observa-se que experimentos com modos de otimização podem ser realizados passando sinalizadores durante a montagem (“make KCFLAGS=-O3”), e adicionar uma configuração ao Kconfig requer um perfil de desempenho repetível, mostrando que o desenrolamento de loop usado no modo “-O3” oferece um benefício em comparação com o nível de otimização “-O2”.
- Uma interface debugfs foi adicionada para obter informações sobre a operação de “redutores de memória” individuais (manipuladores chamados quando não há memória suficiente e compactação de estruturas de dados do kernel para reduzir seu consumo de memória).
- Para as arquiteturas OpenRISC e LoongArch, é implementado suporte para o barramento PCI.
- Para a arquitetura RISC-V, a extensão “Zicbom” foi implementada para gerenciar dispositivos com DMA que não são coerentes com cache.
- Virtualização e Segurança
- Um mecanismo de verificação RV (Runtime Verification) foi adicionado para verificar a operação correta em sistemas altamente confiáveis que garantem a ausência de falhas. A verificação é realizada em tempo de execução anexando manipuladores a pontos de rastreamento que verificam o progresso real da execução em relação a um modelo determinístico de referência predeterminado da máquina que define o comportamento esperado do sistema. A verificação com o modelo em tempo de execução se posiciona como um método mais leve e fácil de implementar para confirmar a exatidão da execução em sistemas críticos, complementando os métodos clássicos de verificação de confiabilidade. Entre as vantagens do RV está a capacidade de fornecer verificação rigorosa sem uma implementação separada de todo o sistema em uma linguagem de modelagem, bem como resposta flexível a eventos imprevistos.
- Componentes de kernel integrados para gerenciamento de enclaves baseados na tecnologia Intel SGX2 (Software Guard eXtensions), que permite que aplicativos executem código em áreas criptografadas isoladas da memória, às quais o resto do sistema tem acesso limitado. A tecnologia Intel SGX2 é suportada nos chips Intel Ice Lake e Gemini Lake e difere do Intel SGX1 em instruções adicionais para gerenciamento dinâmico de memória de enclaves.
- Para a arquitetura x86, foi implementada a capacidade de transferir a semente para o gerador de números pseudoaleatórios através das configurações do bootloader.
- O módulo SafeSetID LSM agora tem a capacidade de gerenciar alterações feitas por meio da chamada setgroups(). SafeSetID permite que os serviços do sistema gerenciem usuários com segurança sem aumentar privilégios (CAP_SETUID) e sem obter privilégios de root.
- Adicionado suporte para cifra de bloco ARIA.
- O módulo de gerenciamento de segurança baseado em BPF fornece a capacidade de anexar manipuladores a processos individuais e grupos de processos (cgroups).
- Um mecanismo com implementação de watchdog foi adicionado para detectar travamentos de sistemas convidados com base no monitoramento da atividade da vCPU.
- subsistema de rede
- Manipuladores para geração e verificação de cookies SYN foram adicionados ao subsistema BPF. Também foi adicionado um conjunto de funções (kfunc) para acessar e alterar o estado das conexões.
- A pilha wireless adicionou suporte ao mecanismo MLO (Multi-Link Operation), definido na especificação WiFi 7 e que permite que dispositivos recebam e enviem dados simultaneamente usando diferentes bandas de frequência e canais, por exemplo, para estabelecer simultaneamente vários canais de comunicação entre um ponto de acesso a um dispositivo cliente.
- O desempenho do protocolo TLS integrado ao kernel foi melhorado.
- Adicionada uma opção de linha de comando do kernel "hostname=" para permitir que o nome do host seja definido no início do processo de inicialização, antes que os componentes do espaço do usuário sejam iniciados.
- Оборудование
- O driver i915 (Intel) fornece suporte para placas de vídeo discretas Intel Arc (DG2/Alchemist) A750 e A770. Foi proposta uma implementação inicial de suporte para GPUs Intel Ponte Vecchio (Xe-HPC) e Meteor Lake. O trabalho continua para oferecer suporte à plataforma Intel Raptor Lake.
- O driver amdgpu continua a fornecer suporte para as plataformas AMD RDNA3 (RX 7000) e CDNA (Instinct).
- O driver Nouveau reformulou o código de suporte para mecanismos de exibição de GPU NVIDIA nv50.
- Adicionado novo driver DRM logicvc para telas LogiCVC.
- O driver v3d (para GPU Broadcom Video Core) oferece suporte a placas Raspberry Pi 4.
- Adicionado suporte para GPU Qualcomm Adreno 619 ao driver msm.
- Adicionado suporte para GPU ARM Mali Valhall ao driver Panfrost.
- Adicionado suporte inicial para processadores Qualcomm Snapdragon 8cx Gen3 usados em laptops Lenovo ThinkPad X13s.
- Adicionados drivers de som para plataformas AMD Raphael (Ryzen 7000), AMD Jadeite, Intel Meteor Lake e Mediatek MT8186.
- Adicionado suporte para aceleradores de aprendizado de máquina Intel Habana Gaudi 2.
- Adicionado suporte para ARM SoC Allwinner H616, NXP i.MX93, Sunplus SP7021, Nuvoton NPCM8XX, Marvell Prestera 98DX2530, Google Chameleon v3.
Ao mesmo tempo, a Fundação Latino-Americana de Software Livre formou uma versão do kernel 6.0 totalmente gratuito - Linux-libre 6.0-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 desabilita o uso de blobs no driver de áudio HD CS35L41 e no driver UCSI para microcontroladores STM32G0. Os arquivos DTS dos chips Qualcomm e MediaTek foram limpos. A desativação de blobs no driver MediaTek MT76 foi reformulada. Código de limpeza de blob atualizado nos drivers e subsistemas AMDGPU, Adreno, Tegra VIC, Netronome NFP e Habanalabs Gaudi2. Parou de limpar o driver VXGE, que foi removido do kernel.
Fonte: opennet.ru