Um dos membros da equipe de desenvolvimento da rede social Facebook, Roman Gushchin, propôs em uma newsletter de desenvolvedores um conjunto de patches para o kernel Linux, visando melhorar o desempenho da memória através da implementação de um novo controlador de gerenciamento — slab (controlador de memória slab).
A alocação de slab –– é um mecanismo de gerenciamento de memória projetado para uma distribuição mais eficiente da memória e para eliminar significativa fragmentação. A base deste algoritmo é manter a memória alocada, contendo um objeto de um determinado tipo, e reutilizar essa memória na próxima alocação para um objeto do mesmo tipo. Este método foi introduzido pela primeira vez no SunOS por Jeff Bonwick e é amplamente utilizado nos kernels de muitos sistemas operacionais Unix, incluindo FreeBSD e Linux.
A nova controladora baseia-se na transferência do controle de slab do nível de páginas de memória para o nível de objetos do kernel, permitindo o compartilhamento de uma página de slab entre diferentes cgroups, ao invés de alocar um cache separado para cada cgroup.
Os resultados dos testes indicam que o método proposto de gerenciamento de memória permite aumentar a eficácia da utilização de slab em até 45%, além de reduzir o consumo total de memória pelo kernel do sistema operacional. A diminuição do número de páginas alocadas para slabs também reduz a fragmentação da memória em geral, o que sem dúvida impacta no desempenho do sistema.
O novo controlador está sendo testado há vários meses em servidores de produção do Facebook e até agora esses testes podem ser considerados bem-sucedidos: sem perda de desempenho e aumento de erros, foi notada uma clara redução no consumo de memória — em alguns servidores, até 1GB. Esse número é bastante subjetivo, pois testes anteriores mostraram resultados ligeiramente menores:
- 650-700 MB no frontend web
- 750-800 MB em servidores com cache de banco de dados
- 700 MB em servidores DNS
>>> Resultados de testes anteriores
Fonte: linux.org.ru
