O Facebook lançou patches que melhoram o controlador de memória Slab no Linux

Roman Gushchin (um engenheiro de software do Facebook) registro na lista de desenvolvimento do kernel Linux, um conjunto de patches para o aplicativo de mapeamento de memória do controlador de placa (um controlador de memória).

O novo controlador é notável movendo a contabilidade de placas do nível de página de memória para o nível de objeto do kernel, tornando possível compartilhar páginas de placas entre diferentes grupos c, em vez de alocar caches de placas separadas para cada grupo c.

Roman encontrou o que ele chama de "falha muito séria" no controlador de memória slab existente que leva à baixa utilização atualmente com cgroups.

“A verdadeira razão pela qual o design existente leva a uma baixa utilização de placas é simples: as páginas de placas são usadas exclusivamente por um pool de memória.

Se houver apenas algumas alocações de um certo tamanho feitas por um cgroup, ou se houver alguns objetos ativos deixados após o cgroup ser removido, ou o cgroup contém um único aplicativo threaded que mal está alocando quaisquer objetos de kernel, mas sempre uma nova CPU: em todos esses casos, a utilização da placa resultante é muito baixa.

Se a contabilidade do kmem estiver desabilitada, o kernel pode usar o espaço livre nas páginas slab para outras alocações. «

O controlador de memória Slab proposto por Romano Gushchin no ano passado foi bastante promissor como aumenta a eficiência do uso da laje, reduza o tamanho da memória usada para slab em 30-45% e reduz significativamente o consumo total de memória do kernel.

Além disso, os patches implementados indicaram que o Facebook já está usando o código em produção em seus servidores e foi economizando ~ 650-700 MB + para servidores front-end da web, cache de banco de dados e servidores DNS, entre outros prêmios.

Ao reduzir o número de placas não móveis, um efeito positivo também é observado no campo da redução da fragmentação da memória. Novo controlador de memória simplifica significativamente o código para a placa de contabilidade e não requer algoritmos complicados para a criação dinâmica e exclusão de caches de blocos para cada grupo c.

Todos os cgroups para memória na nova implementação usam um conjunto comum de caches slab, e a vida útil dos caches slab não está mais ligada à vida útil das restrições de memória definidas por meio do cgroup.

A contabilização de recursos mais precisa implementada no novo controlador de placa deveria, teoricamente, carregar mais a CPU, mas na prática as diferenças acabaram sendo insignificantes.

Em particular, o novo driver slab foi usado por vários meses nos servidores do Facebook em operação que lidam com diferentes tipos de cargas, e até agora nenhuma regressão significativa foi detectada.

O patch contém algumas partes semi-independentes, que também podem ser usadas fora do controlador de memória da placa:

  • A API de carregamento de subpágina, que pode ser usada no futuro para contar outros objetos que não são do tamanho de uma página, por exemplo, alocações de percpu
  • A API mem_cgroup_ptr, em que os ponteiros são contados para um memcg, pode ser reutilizada para uma nova geração eficiente de outros objetos, por exemplo, pagecache.

Ao mesmo tempo, há uma diminuição significativa no consumo de memória- Em alguns hosts foi possível economizar até 1 GB de memória, mas este indicador depende muito da natureza da carga, o tamanho total da RAM, a quantidade de CPU e as características de trabalho com memória.

Em vez de criar um conjunto separado de kmem_caches para cada cgroup de memória, dois conjuntos globais são usados: o conjunto raiz para não contados e as atribuições de cgroup do grupo raiz e o segundo conjunto para todas as outras atribuições. Isso permite simplificar o gerenciamento do tempo de vida de kmem_caches individuais.

Finalmente, se você estiver interessado em conhecer o novo conjunto de 19 patches, ele pode ser encontrado na lista correio do kernel.


Deixe um comentário

Seu endereço de email não será publicado. Campos obrigatórios são marcados com *

*

*

  1. Responsável pelos dados: Miguel Ángel Gatón
  2. Finalidade dos dados: Controle de SPAM, gerenciamento de comentários.
  3. Legitimação: Seu consentimento
  4. Comunicação de dados: Os dados não serão comunicados a terceiros, exceto por obrigação legal.
  5. Armazenamento de dados: banco de dados hospedado pela Occentus Networks (UE)
  6. Direitos: A qualquer momento você pode limitar, recuperar e excluir suas informações.