Kernel Linux versão 5.12

Após dois meses de desenvolvimento, Linus Torvalds apresentou o lançamento do kernel Linux 5.12. Entre as mudanças mais notáveis: suporte para dispositivos de bloco zoneados no Btrfs, a capacidade de mapear IDs de usuário para o sistema de arquivos, limpeza de arquiteturas ARM herdadas, um modo de gravação “ansioso” no NFS, o mecanismo LOOKUP_CACHED para determinar caminhos de arquivos do cache , suporte para instruções atômicas em BPF, um sistema de depuração KFENCE para identificar erros ao trabalhar com memória, modo de pesquisa NAPI executado em um thread de kernel separado na pilha de rede, hipervisor ACRN, a capacidade de alterar o modelo preemptivo em tempo real na tarefa agendador e suporte para otimizações LTO ao construir em Clang.

A nova versão inclui 14170 (na versão anterior 15480) correções de desenvolvedores de 1946 (1991), o tamanho do patch é de 38 MB (as alterações afetaram 12102 (12090) arquivos, 538599 (868025) linhas de código foram adicionadas, 333377 (261456) linhas foram excluídas). Cerca de 43% de todas as alterações introduzidas no 5.12 estão relacionadas a drivers de dispositivos, aproximadamente 17% das alterações estão relacionadas à atualização de código específico para arquiteturas de hardware, 12% estão relacionadas à pilha de rede, 5% estão relacionadas a sistemas de arquivos e 4% estão relacionados aos subsistemas internos do kernel.

Principais inovações:

  • Subsistema de disco, E/S e sistemas de arquivos
    • A capacidade de mapear IDs de usuários para sistemas de arquivos montados foi implementada (você pode mapear arquivos de um usuário em uma partição externa montada com outro usuário no sistema atual). O mapeamento é compatível com sistemas de arquivos FAT, ext4 e XFS. A funcionalidade proposta facilita o compartilhamento de arquivos entre diferentes usuários e em diferentes computadores, incluindo o mapeamento que será usado no mecanismo de diretório inicial portátil systemd-homed, permitindo aos usuários mover seus diretórios iniciais para mídia externa e usá-los em computadores diferentes, mapeando IDs de usuário aos quais não corresponde. Outra aplicação útil é organizar o fornecimento de acesso compartilhado a arquivos de um host externo, sem realmente alterar os dados sobre os proprietários dos arquivos no sistema de arquivos.
    • Os patches LOOKUP_CACHED foram adotados no kernel, permitindo que as operações determinem um caminho de arquivo a partir do espaço do usuário sem bloqueio, apenas com base nos dados disponíveis no cache. O modo LOOKUP_CACHED é ativado na chamada openat2() passando o flag RESOLVE_CACHED, no qual os dados são servidos apenas do cache, e se a determinação do caminho requer acesso ao drive, o erro EAGAIN é retornado.
    • O sistema de arquivos Btrfs adicionou suporte inicial para dispositivos de bloco zoneados (dispositivos em discos magnéticos rígidos ou SSDs NVMe, cujo espaço de armazenamento é dividido em zonas que compõem grupos de blocos ou setores, aos quais apenas é permitida a adição sequencial de dados, atualizando todo o grupo de blocos). No modo somente leitura, é implementado suporte para blocos com metadados e dados menores que uma página (subpágina).
    • No sistema de arquivos F2FS, foi adicionada a capacidade de selecionar o algoritmo e o nível de compactação. Adicionado suporte para compactação de alto nível para o algoritmo LZ4. Implementada a opção de montagem checkpoint_merge.
    • Um novo comando ioctl FS_IOC_READ_VERITY_METADATA foi implementado para ler metadados de arquivos protegidos com fs-verity.
    • O cliente NFS implementa um modo de gravação “ansioso” (writes=eager), quando habilitado, as operações de gravação em um arquivo são imediatamente transferidas para o servidor, ignorando o cache da página. Este modo permite reduzir o consumo de memória, fornece recebimento instantâneo de informações sobre o fim do espaço livre no sistema de arquivos e, em algumas situações, permite obter maior desempenho.
    • Novas opções de montagem foram adicionadas ao CIFS (SMB): acregmax para controlar o cache de arquivos e acdirmax para controlar o cache de metadados de diretório.
    • No XFS, o modo de verificação de cota multithread foi habilitado, a execução do fsync foi acelerada e o código growfs foi preparado para implementar a função de redução do tamanho do sistema de arquivos.
  • Serviços de memória e sistema
    • Foi adicionado o subsistema DTMP (Dynamic Thermal Power Management), que permite regular dinamicamente o consumo de energia de diferentes dispositivos com base nos limites gerais de temperatura definidos.
    • Foi implementada a capacidade de construir o kernel usando o compilador Clang com a inclusão de otimizações na fase de vinculação (LTO, Link Time Optimization). As otimizações LTO diferem por levar em consideração o estado de todos os arquivos envolvidos no processo de construção, enquanto os modos de otimização tradicionais otimizam cada arquivo separadamente e não levam em consideração as condições de chamada de funções definidas em outros arquivos. Por exemplo, com LTO, a implantação in-line é possível para funções de outros arquivos, o código não utilizado não é incluído no arquivo executável, a verificação de tipo e a otimização geral são realizadas no nível do projeto como um todo. O suporte LTO está atualmente limitado às arquiteturas x86 e ARM64.
    • É possível selecionar modos de preempção (PREEMPT) no agendador de tarefas no estágio de inicialização (preempt=none/voluntary/full) ou durante o trabalho através de debugfs (/debug/sched_debug), se a configuração PREEMPT_DYNAMIC foi especificada ao construir o kernel. Anteriormente, o modo de extrusão só podia ser definido no nível dos parâmetros de montagem. A mudança permite que as distribuições enviem kernels com o modo PREEMPT habilitado, que fornece latência mínima para desktops ao custo de uma pequena penalidade de taxa de transferência e, se necessário, volte para PREEMPT_VOLUNTARY (um modo intermediário para desktops) ou PREEMPT_NONE (fornece taxa de transferência máxima para servidores) .
    • O suporte para operações atômicas BPF_ADD, BPF_AND, BPF_OR, BPF_XOR, BPF_XCHG e BPF_CMPXCHG foi adicionado ao subsistema BPF.
    • Os programas BPF têm a capacidade de acessar dados na pilha usando ponteiros com deslocamentos variáveis. Por exemplo, se antes você só podia usar um índice de elemento constante para acessar um array na pilha, agora você pode usar um índice variável. O controle de acesso apenas dentro dos limites existentes é realizado pelo verificador BPF. Este recurso está disponível apenas para programas privilegiados devido a preocupações com a exploração de vulnerabilidades de execução especulativa de código.
    • Adicionada a capacidade de anexar programas BPF a pontos de rastreamento simples que não estão associados a eventos de rastreamento visíveis no espaço do usuário (a preservação da ABI não é garantida para tais pontos de rastreamento).
    • Foi implementado suporte para o barramento CXL 2.0 (Compute Express Link), que é usado para organizar a interação de alta velocidade entre a CPU e os dispositivos de memória (permite usar dispositivos de memória externos como parte da RAM ou memória permanente, como se esta memória foram conectados através de um controlador de memória padrão na CPU).
    • Adicionado driver nvmem para recuperar dados de áreas de memória reservadas ao firmware que não são diretamente acessíveis ao Linux (por exemplo, memória EEPROM que é fisicamente acessível apenas ao firmware ou dados que são acessíveis apenas durante a fase inicial de inicialização).
    • Foi removido o suporte para o sistema de criação de perfil “oprofile”, que não era amplamente utilizado e foi substituído pelo mecanismo perf mais moderno.
    • A interface de E/S assíncrona io_uring fornece integração com cgroups que controlam o uso de memória.
    • A arquitetura RISC-V suporta sistemas NUMA, bem como mecanismos kprobes e uprobes.
    • Adicionada a capacidade de usar a chamada do sistema kcmp() independentemente da funcionalidade dos instantâneos do estado do processo (ponto de verificação/restauração).
    • As macros EXPORT_UNUSED_SYMBOL() e EXPORT_SYMBOL_GPL_FUTURE(), que não eram usadas na prática há muitos anos, foram removidas.
  • Virtualização e Segurança
    • Adicionado mecanismo de proteção KFence (Kernel Electric Fence), que detecta erros ao trabalhar com memória, como saturação de buffer e acesso após liberar memória. Ao contrário do mecanismo de depuração KASAN, o subsistema KFence é caracterizado por alta velocidade operacional e baixa sobrecarga, o que permite detectar erros de memória que aparecem apenas em sistemas em funcionamento ou durante operação de longo prazo.
    • Adicionado suporte para o hipervisor ACRN, escrito pensando na prontidão para tarefas em tempo real e na adequação para uso em sistemas de missão crítica. ACRN fornece sobrecarga mínima, garante baixa latência e capacidade de resposta adequada ao interagir com o equipamento. Suporta virtualização de recursos de CPU, E/S, subsistema de rede, gráficos e operações de som. O ACRN pode ser usado para executar múltiplas máquinas virtuais isoladas em unidades de controle eletrônico, painéis de instrumentos, sistemas de informação automotiva, dispositivos IoT de consumo e outras tecnologias embarcadas. ACRN oferece suporte a dois tipos de sistemas convidados - VMs de serviço privilegiadas, que são usadas para gerenciar recursos do sistema (CPU, memória, E/S, etc.) e VMs de usuário personalizadas, que podem executar distribuições Linux, Android e Windows.
    • No subsistema IMA (Integrity Measurement Architecture), que mantém um banco de dados hash para verificação da integridade dos arquivos e metadados associados, agora é possível verificar a integridade dos dados do próprio kernel, por exemplo, para rastrear alterações nas regras do SELinux .
    • A capacidade de interceptar hiperchamadas Xen e encaminhá-las para o emulador em execução no espaço do usuário foi adicionada ao hipervisor KVM.
    • Adicionada a capacidade de usar Linux como ambiente raiz para o hipervisor Hyper-V. O ambiente raiz tem acesso direto ao hardware e é usado para executar sistemas convidados (análogo ao Dom0 no Xen). Até agora, o Hyper-V (Microsoft Hypervisor) suportava Linux apenas em ambientes convidados, mas o próprio hipervisor era controlado a partir de um ambiente baseado em Windows.
    • Adicionado suporte para criptografia em linha para cartões eMMC, permitindo que você use mecanismos de criptografia integrados ao controlador de unidade que criptografam e descriptografam E/S de forma transparente.
    • O suporte para os hashes RIPE-MD 128/256/320 e Tiger 128/160/192, que não são usados ​​no núcleo, bem como a cifra de fluxo Salsa20, que foi substituída pelo algoritmo ChaCha20, foi removido do subsistema criptográfico. O algoritmo blake2 foi atualizado para implementar blake2s.
  • subsistema de rede
    • Adicionada a capacidade de mover o manipulador de sondagem NAPI para dispositivos de rede para um thread de kernel separado, o que permite melhor desempenho para alguns tipos de carga de trabalho. Anteriormente, a pesquisa era realizada no contexto do softirq e não era coberta pelo agendador de tarefas, o que dificultava a realização de otimizações refinadas para atingir o desempenho máximo. A execução em um thread de kernel separado permite que o manipulador de polling seja observado no espaço do usuário, anexado a núcleos de CPU individuais e levado em consideração ao agendar a alternância de tarefas. Para habilitar o novo modo no sysfs, o parâmetro /sys/class/net//threaded é proposto.
    • Integração no núcleo do MPTCP (MultiPath TCP), uma extensão do protocolo TCP para organizar o funcionamento de uma conexão TCP com a entrega de pacotes simultaneamente ao longo de diversas rotas através de diferentes interfaces de rede associadas a diferentes endereços IP. A nova versão adiciona a capacidade de atribuir prioridade a determinados threads, o que permite, por exemplo, organizar o trabalho de threads de backup que são ativados apenas se houver problemas com o thread primário.
    • IGMPv3 adiciona suporte para o mecanismo EHT (Explicit Host Tracking).
    • O mecanismo de filtragem de pacotes do Netfilter oferece a capacidade de possuir determinadas tabelas para obter controle exclusivo (por exemplo, um processo de firewall em segundo plano pode se apropriar de determinadas tabelas, evitando que qualquer outra pessoa interfira nelas).
  • Оборудование
    • Limpamos plataformas ARM obsoletas e sem manutenção. O código das plataformas efm32, picoxcell, prima2, tango, u300, zx e c6x, bem como seus drivers associados, foi removido.
    • O driver amdgpu oferece a capacidade de fazer overclock (OverDrive) de placas baseadas na GPU Sienna Cichlid (Navi 22, Radeon RX 6xxx). Adicionado suporte para formato de pixel FP16 para DCE (mecanismo de controlador de exibição) da 8ª à 11ª geração. Para GPU Navy Flounder (Navi 21) e APU Van Gogh, a capacidade de redefinir a GPU foi implementada.
    • O driver i915 para placas gráficas Intel implementa o parâmetro i915.mitigations para desabilitar mecanismos de isolamento e proteção em favor de melhor desempenho. Para chips a partir de Tiger Lake, está incluído suporte para o mecanismo VRR (Variable Rate Refresh), que permite alterar de forma adaptativa a taxa de atualização do monitor para garantir suavidade e sem lacunas durante os jogos. O suporte para a tecnologia Intel Clear Color está incluído para melhorar a precisão das cores. Adicionado suporte para DP-HDMI 2.1. Foi implementada a capacidade de controlar a retroiluminação dos painéis eDP. Para GPUs Gen9 com suporte a LSPCON (Level Shifter e Protocol Converter), o suporte a HDR está habilitado.
    • O driver nouveau adiciona suporte inicial para GPUs NVIDIA baseadas na arquitetura GA100 (Ampere).
    • O driver msm adiciona suporte para GPUs Adreno 508, 509 e 512 usadas em chips SDM (Snapdragon) 630, 636 e 660.
    • Adicionado suporte para placas de som Sound BlasterX AE-5 Plus, Lexicon I-ONIX FW810s e Pioneer DJM-750. Adicionado suporte para subsistema de áudio Intel Alder Lake PCH-P. O suporte para simulação de software de conexão e desconexão de um conector de áudio foi implementado para depuração de manipuladores no espaço do usuário.
    • Adicionado suporte para consoles de jogos Nintendo 64 fabricados de 1996 a 2003 (tentativas anteriores de portar Linux para o Nintendo 64 não foram concluídas e foram classificadas como Vaporware). A motivação para a criação de um novo port para uma plataforma desatualizada, que não é lançada há quase vinte anos, é o desejo de estimular o desenvolvimento de emuladores e simplificar a portabilidade de jogos.
    • Adicionado driver para controlador de jogo Sony PlayStation 5 DualSense.
    • Adicionado suporte para placas, dispositivos e plataformas ARM: PineTab, Snapdragon 888/SM8350, Snapdragon MTP, Two Beacon EmbeddedWorks, Intel eASIC N5X, Netgear R8000P, Plymovent M2M, Beacon i.MX8M Nano, NanoPi M4B.
    • Adicionado suporte para smartphones Purism Librem5 Evergreen, Xperia Z3+/Z4/Z5, ASUS Zenfone 2 Laser, BQ Aquaris X5, OnePlus6, OnePlus6T, Samsung GT-I9070.
    • Adicionado driver bcm-vk para placas aceleradoras Broadcom VK (por exemplo, placas Valkyrie e Viper PCIe), que podem ser usadas para descarregar operações de processamento de áudio, vídeo e imagem, bem como operações relacionadas à criptografia, para um dispositivo separado.
    • Adicionado suporte para a plataforma Lenovo IdeaPad com a capacidade de controlar o carregamento constante e a luz de fundo do teclado. Também é fornecido suporte para o perfil ACPI da plataforma ThinkPad com a capacidade de controlar os modos de consumo de energia. Adicionado driver para o subsistema HID Lenovo ThinkPad X1 Tablet Gen 2.
    • Adicionado driver ov5647 com suporte para módulo de câmera para Raspberry Pi.
    • Adicionado suporte para placas RISC-V SoC FU740 e HiFive Unleashed. Um novo driver para o chip Kendryte K210 também foi adicionado.

Fonte: opennet.ru

Adicionar um comentário