TMO, un mecanismo de Facebook que permite ahorrar RAM en servidores
Los ingenieros de Facebook dieron a conocer, mediante un informe, la introducción de la tecnología TMO (Transparent Memory Offloading) el año pasado, que permite ahorrar significativamente RAM en los servidores al desplazar datos secundarios que no se requieren para trabajar en unidades más económicas, como discos SSD NVMe.
Facebook estima que TMO ahorra entre un 20% y un 32% de RAM en cada servidor. La solución está diseñada para su uso en infraestructuras donde las aplicaciones se ejecutan en contenedores aislados. Los componentes del lado del kernel de TMO ya están incluidos en el kernel de Linux.
Del lado del kernel de Linux, la operación de la tecnología es proporcionada por el subsistema PSI (Pressure Stall Information), suministrado a partir de la versión 4.20.
PSI ya se usa en varios controladores de memoria insuficiente y permite analizar información sobre el tiempo de espera para obtener varios recursos (CPU, memoria, E / S). Con PSI, los procesadores de espacio de usuario pueden evaluar con mayor precisión la carga del sistema y los patrones de ralentización, lo que permite detectar anomalías antes de que tengan un impacto notable en el rendimiento.
En el espacio del usuario, el componente Senpai ejecuta TMO, que ajusta dinámicamente el límite de memoria para los contenedores de aplicaciones a través de cgroup2 en función de los datos recibidos del PSI.
Senpai analiza los signos del comienzo de una escasez de recursos a través de PSI, evalúa la sensibilidad de las aplicaciones al acceso lento a la memoria e intenta determinar el tamaño mínimo de memoria requerido para un contenedor, en el que los datos requeridos para el trabajo permanecen en RAM, y relacionados los datos que se han asentado en la memoria caché del archivo o que no se usan directamente actualmente, se fuerzan a salir a la partición de intercambio.
La descarga transparente de memoria (TMO) es la solución de Meta para entornos de centros de datos heterogéneos. Introduce un nuevo mecanismo del kernel de Linux que mide el trabajo perdido debido a la escasez de recursos en CPU, memoria y E/S en tiempo real. Guiado por esta información y sin ningún conocimiento previo de la aplicación, TMO ajusta automáticamente la cantidad de memoria para descargar en un dispositivo heterogéneo, como una memoria comprimida o un SSD. Lo hace de acuerdo con las características de rendimiento del dispositivo y la sensibilidad de la aplicación a los accesos de memoria más lentos.
Por lo tanto, la esencia de TMO es mantener los procesos a «dieta estricta» en términos de consumo de memoria, obligando a que las páginas de memoria no utilizadas se muevan a la partición de intercambio, cuya eliminación no afecta notablemente el rendimiento (por ejemplo, páginas con código utilizado solo durante la inicialización y datos de un solo uso en la memoria caché del disco). A diferencia de expulsar información a la partición de intercambio en respuesta a poca memoria, TMO expulsa datos en función de la predicción predictiva.
La ausencia de acceso a una página de memoria dentro de los 5 minutos se utiliza como uno de los criterios para la preferencia. Estas páginas se denominan frías y, en promedio, constituyen alrededor del 35 % de la memoria de la aplicación (según el tipo de aplicación, hay una variación del 19 % al 65 %).
La preferencia tiene en cuenta la actividad asociada con las páginas anónimas de memoria (memoria asignada por la aplicación) y la memoria utilizada para el almacenamiento en caché de archivos (asignada por el núcleo). En algunas aplicaciones la memoria anónima es el principal consumo, pero en otras la caché de archivos también es muy importante.
Para evitar el desequilibrio al vaciar la memoria en la memoria caché, TMO utiliza un nuevo algoritmo de paginación que vacía las páginas anónimas y las páginas asociadas con la memoria caché de archivos de manera proporcional.
Empujar las páginas que se usan con poca frecuencia a una memoria más lenta no tiene un gran impacto en el rendimiento, pero puede reducir significativamente los costos de hardware. Los datos se envían a los SSD o al espacio de intercambio comprimido en la RAM. A costa de almacenar un byte de datos, el uso de SSD NVMe es hasta 10 veces más económico que usar compresión en RAM.
Finalmente si estás interesado en poder conocer más al respecto, puedes consultar los detalles en el siguiente enlace.