Esta página resume os principais recursos de cada versão do kernel e fornece 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 criação de perfil de alocação de memória (CONFIG_MEM_ALLOC_PROFILING
na configuração).
Com a criação de perfis de alocação de memória, cada alocação é atribuída a uma linha de origem exclusiva para que os problemas 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 no kernel e carregados.
io_uring mais rápido com leitura de cópia zero e multishot
No kernel 6.12, os módulos statsd
e logd
usam cópia zero do sendfile, melhorando o desempenho deles.
Além disso, essa versão do kernel implementa a leitura multishot, em que uma única operação de leitura pode recuperar várias partes de dados simultaneamente, melhorando o desempenho.
Melhoria no suporte e nos recursos do Berkeley Packet Filter (BPF)
No kernel 6.12, a cadeia de ferramentas do 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 do BPF moderno para programas que fazem parte do AOSP.
Execução de proxy
A execução de proxy permite que o programador empreste ciclos de CPU de processos de alta prioridade para recuperar bloqueios mantidos por processos de baixa prioridade. Esse recurso minimiza problemas de inversão de prioridade.
Novos recursos do kernel 6.6
Esta seção explica os novos recursos do kernel 6.6.
Suporte ao Rust
Vários projetos do kernel 6.6 usam Rust.
Bloqueios por área de memória virtual (VMA)
O kernel 6.6 usa bloqueios por área de memória virtual para resolver problemas de disputa
com mmap_sem
(antigamente conhecido como mmap_lock
). Assim, os apps que usam
um grande número de linhas de execução podem ter tempos de inicialização reduzidos em até 20%.
O programador EEVDF (Earliest Eligible Virtual Deadline First) substitui o CFS
O EEVDF substitui o Completely Fair Scheduler (CFS) para equilibrar melhor o acesso da CPU entre tarefas de curta e longa duração.
Redução do consumo de energia das 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 loteamento de callback RCU baseado em timer para
economizar energia. Para um sistema com pouca carga ou inativo, essa opção pode reduzir o consumo de energia em 5% a 10%.
Melhor compactação de memória zRAM
A nova configuração de build CONFIG_ZRAM_MULTI_COMP
permite que o ZRAM recompacte páginas com
um de três algoritmos alternativos. Essa recompressão reduz 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 integridade do fluxo de controle do kernel (KCFI)
O KCFI substitui a integridade do fluxo de controle (CFI), resultando em um custo de tempo de execução reduzido e sem custo de tempo de build. O custo reduzido de tempo de execução permite que o KCFI seja ativado em mais lugares em comparação com o CFI, principalmente tracepoints e hooks de fornecedor.
Além do KCFI, o kernel 6.1 apresenta vários recursos de segurança, como
verificação estrita de limites memcpy
e mitigações de
ataques de especulação em linha reta.
Para mais informações sobre o KCFI, consulte Integridade do fluxo de controle do kernel.
LRU multigeneracional (MGLRU)
A MGLRU foi adicionada ao kernel 6.1 para melhorar o gerenciamento de memória, identificando melhor quais páginas estão em uso. Essa melhoria reduz a necessidade de interromper apps quando o sistema tem pouca 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 do MGLRU também inclui suporte para uma nova árvore de maple RCU-safe, que, em alguns casos, pode ser usada para substituir a árvore rubro-negra (rbtree). Quando usada, a árvore de maple RCU-safe aumenta o desempenho devido à menor ocupação e à ausência de bloqueios.
Para mais informações sobre MGLRU, consulte LRU multigeração.
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:
- Adição de programação com reconhecimento de cluster, que aumenta o desempenho migrando para núcleos que compartilham o cache L2.
- Removida a heurística de margem de energia desnecessária. Ao limitar algumas migrações, essa atualização melhora a utilização de energia em até 5%.
- Melhoria no balanceamento de carga para reduzir a latência de ativação.
- Períodos de carência acelerados da RCU movidos para uma kthread em tempo real. Essa atualização reduziu muito os outliers de latência relacionados a RCUs.
Gráficos
O kernel 6.1 contém novos métodos para dma-buf para exportar e importar arquivos de sincronização, alinhados à necessidade da API Vulcan Video.
O novo método futex_waitv()
simplifica a portabilidade de jogos de outras
plataformas aguardando vários futexes simultaneamente.
Ferramentas de depuração
Use o Kernel Concurrency SANitizer (KCSAN) em builds de depuração para identificar disputas 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 as 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) ARMv9
- Melhorias no patch do recurso de alternativas, resultando em um tamanho menor da imagem do kernel