O Facebook propôs um novo mecanismo de gerenciamento de memória para o kernel Linux

Roman Gushchin (Roman Gushchin) do Facebook опубликовал na lista de discussão de desenvolvedores do kernel Linux um conjunto de patches com a implementação de um novo controlador de alocação de memória laje (controlador de memória de placa). O novo controlador é notável por mover a contabilidade de placas do nível da página de memória para o nível do objeto do kernel, o que torna possível compartilhar páginas de placas em diferentes cgroups, em vez de alocar caches de placas separados para cada cgroup.

A abordagem proposta permite aumentar a eficiência do uso de laje, reduzir o tamanho da memória usada para laje em 30-45% e reduzir significativamente o consumo geral de memória do kernel. Ao reduzir o número de placas imóveis, há também um efeito positivo na redução da fragmentação da memória. O novo controlador de memória simplifica significativamente o código de contabilização de blocos e não requer o uso de algoritmos complicados para criar e excluir dinamicamente caches de blocos para cada cgroup. Todos os cgroups de memória na nova implementação usam um conjunto comum de caches de laje, e o tempo de vida dos caches de laje não está mais vinculado ao tempo de vida daqueles instalados através do cgroup restrições no uso de memória.

A contabilidade de recursos mais precisa implementada no novo controlador de placas deveria, teoricamente, carregar mais a CPU, mas na prática as diferenças revelaram-se insignificantes. Em particular, o novo controlador de placas tem sido usado há vários meses em servidores de produção do Facebook que lidam com diferentes tipos de carga de trabalho, e ainda não foram identificadas regressões perceptíveis. Ao mesmo tempo, há uma redução significativa no consumo de memória - em alguns hosts foi possível economizar até 1 GB de memória, mas esse indicador depende muito da natureza da carga, do tamanho total da RAM, do número de CPUs e as características de trabalhar com memória. Testes anteriores ter mostrado redução no consumo de memória em 650-700 MB (42% da memória plana) no front-end web, 750-800 MB (35%) no servidor com cache DBMS e 700 MB (36%) no servidor DNS.

Fonte: opennet.ru

Adicionar um comentário