Esta página resume os principais recursos de cada versão do kernel e oferece links para mais informações.
Novos recursos do kernel 6.12
Esta seção explica os novos recursos do kernel 6.12.
Criação de perfil de alocação de memória
A chave para entender o uso da memória é saber onde as alocações são feitas.
O kernel 6.12 inclui um novo sistema de atribuição de alocação de memória chamado
memory allocation profiling (CONFIG_MEM_ALLOC_PROFILING
na configuração).
Com o perfil de alocação de memória, cada alocação é atribuída a uma linha de origem
única para que os problemas com alocações possam ser identificados rapidamente.
Além disso, o perfil de alocação de memória:
É usado durante a fase de engenharia, mas está disponível na imagem padrão do GKI.
Pode ser ativado usando o parâmetro de inicialização
sysctl.vm.mem_profiling
.Funciona para módulos carregados e no kernel.
io_uring mais rápido com leitura sem cópia e multishot
No kernel 6.12, os módulos statsd
e logd
usam o envio de arquivos
sem cópia, melhorando o desempenho.
Além disso, essa versão do kernel implementa a leitura de vários tiros, em que uma única operação de leitura pode recuperar vários dados simultaneamente, melhorando o desempenho.
Melhorias nos recursos e no suporte do Berkeley Packet Filter (BPF)
No kernel 6.12, a cadeia de ferramentas BPF foi movida para oferecer suporte ao CO-RE e a vários recursos modernos. Além disso, um novo carregador de BPF permite o uso de BPF moderno para programas que fazem parte do AOSP.
Execução de proxy
A execução do proxy permite que o programador empreste ciclos de CPU de processos de alta prioridade para recuperar bloqueios mantidos por processos de prioridade inferior. Esse recurso minimiza os problemas de inversão de prioridade.
Novos recursos do kernel 6.6
Esta seção explica os novos recursos do kernel 6.6.
Suporte a Rust
Vários projetos do kernel 6.6 usam Rust.
Travamentos por área de memória virtual (VMA)
O kernel 6.6 usa bloqueios por área de memória virtual para resolver problemas de contenção
com mmap_sem
(anteriormente conhecido como mmap_lock
). Assim, os apps que usam
um grande número de linhas de execução podem ter os tempos de inicialização reduzidos em até 20%.
O programador Earliest Eligible Virtual Deadline First (EEVDF, em inglês) substitui o CFS
O EEVDF substitui o Programador completamente justo (CFS, na sigla em inglês) para equilibrar melhor o acesso à CPU entre tarefas curtas e longas.
Consumo de energia reduzido de callbacks de atualização de cópia de leitura (RCU, na sigla em inglês)
A opção RCU_LAZY
usa um método de agrupamento de callbacks de RCU baseado em timer para
economizar energia. Para um sistema com carga leve ou ocioso, essa opção pode reduzir o
consumo de energia em 5% a 10%.
Melhor compressão de memória da zRAM
A nova configuração de build CONFIG_ZRAM_MULTI_COMP
permite que a ZRAM recomprima páginas com
um dos três algoritmos alternativos. Essa recompressão
diminui ainda mais a memória compactada, oferecendo mais espaço livre para tarefas ativas.
Novos recursos do kernel 6.1
Esta seção explica os novos recursos do kernel 6.1.
Segurança mais rápida com a integridade do fluxo de controle do kernel (KCFI)
O KCFI substitui a integridade do fluxo de controle (CFI, na sigla em inglês), resultando em um custo reduzido no tempo de execução e nenhum custo no tempo de build. O custo reduzido de execução permite que o KCFI seja ativado em mais lugares em comparação com o CFI, principalmente em pontos de rastreamento e acionadores de fornecedores.
Além do KCFI, o kernel 6.1 apresenta vários recursos de segurança, como
verificação rígida de limites de memcpy
e mitigações de ataques de especulação
de linha reta.
Para mais informações sobre a KCFI, consulte Integridade de fluxo de controle do kernel.
LRU de várias gerações (MGLRU)
O MGLRU foi adicionado ao kernel 6.1 para melhorar o gerenciamento de memória, identificando melhor quais páginas estão realmente em uso. Essa melhoria reduz a necessidade de interromper apps quando o sistema tem uma falta de memória. Essa atualização também melhora a experiência do usuário, já que a capacidade de resposta geral do dispositivo é melhor.
A implementação da MGLRU também inclui suporte a uma nova árvore Maple segura para RCU, que, em alguns casos, pode ser usada para substituir a árvore vermelho-preta (rbtree). Quando usada, a árvore de maple segura para RCU aumenta o desempenho devido à menor pegada e à falta de bloqueio.
Para mais informações sobre a MGLRU, consulte LRU de várias gerações.
Programação
Manter e atualizar o programador é um aspecto fundamental do trabalho para melhorar o kernel. As atualizações do kernel na versão 6.1 incluem:
- A programação compatível com cluster foi adicionada, o que aumenta o desempenho ao migrar para núcleos que compartilham o cache L2.
- A heurística de margem de energia desnecessária foi removida. Ao limitar algumas migrações, essa atualização melhora a utilização de energia em até 5%.
- O balanceamento de carga foi aprimorado para reduzir a latência de ativação.
- Os períodos de carência acelerados do RCU foram movidos para uma kthread em tempo real. Essa atualização reduziu significativamente os valores atípicos de latência relacionados à RCU.
Gráficos
O Kernel 6.1 contém novos métodos para dma-buf para exportar e importar arquivos de sincronização, alinhando-se à necessidade da API Vulcan Video.
O novo método futex_waitv()
simplifica a portabilidade de jogos de outras
plataformas, esperando por vários futexes simultaneamente.
Ferramentas de depuração
Use o Kernel Concurrency SANitizer (KCSAN) em builds de depuração para identificar conflitos no código do kernel.
Além disso, use o Kernel Memory SANitizer (KMSAN) para encontrar valores não inicializados no kernel.
Melhorias no suporte a ARM64
O kernel 6.1 traz várias melhorias para a arquitetura ARM64, incluindo:
- Suporte para extensões de timer ARMv8.6
- Suporte para o algoritmo de autenticação de ponteiro QARMA3
- Suporte inicial para a extensão de matriz escalonável (SME, na sigla em inglês) da ARMv9
- Melhorias na aplicação de patches de recursos alternativos, resultando em um tamanho de imagem do kernel menor