Roman Gushchin () de la empresa Facebook en la lista de distribución de desarrolladores del núcleo de Linux un conjunto de parches con la implementación de un nuevo controlador de distribución de memoria (controlador de memoria slab). El nuevo controlador se distingue por trasladar el registro de slab del nivel de páginas de memoria al nivel de objetos del núcleo, lo que permite compartir páginas de slab entre diferentes cgroup, en lugar de asignar cachés de slab separadas para cada cgroup.
El enfoque propuesto permite aumentar la eficiencia en el uso de slab, reducir en un 30-45% el tamaño de la memoria utilizada para slab y disminuir significativamente el consumo total de memoria por parte del núcleo. La reducción en la cantidad de slab no trasladables también tiene un efecto positivo en la disminución de la fragmentación de la memoria. El nuevo controlador de memoria simplifica notablemente el código para contabilizar slabs y no requiere la aplicación de algoritmos complejos para la creación y eliminación dinámica de cachés de slab para cada cgroup. Todos los cgroups para la memoria en la nueva implementación utilizan un conjunto común de cachés de slab, y la vida útil de las cachés de slab ya no está vinculada al tiempo de vida establecido a través de cgroup para el uso de memoria.
El nuevo controlador slab, que implementa una contabilización más precisa de los recursos, teóricamente debería aumentar más la carga del CPU, pero en la práctica las diferencias resultaron ser insignificantes. En particular, el nuevo controlador slab ya se ha estado usando durante varios meses en los servidores de trabajo de Facebook, procesando diferentes tipos de carga, y hasta ahora no se han identificado regresiones notables. A la vez, se observa una reducción significativa en el consumo de memoria: en algunos hosts se logró ahorrar hasta 1GB de memoria, aunque este indicador depende en gran medida de la naturaleza de la carga, el tamaño total de RAM, el número de CPU y las particularidades del manejo de memoria. Las pruebas anteriores mostraron una reducción en el consumo de memoria de 650-700 MB (42% de la memoria slab) en el frontend web, 750-800 MB (35%) en un servidor con caché de la base de datos y 700 MB (36%) en un servidor DNS.
Fuente: opennet.ru
