El consumo de memoria por parte de las tablas de páginas (page tables) en el kernel de Linux ha sido históricamente un problema secundario, pero en escenarios específicos de alta concurrencia puede convertirse en un cuello de botella crítico. Este artículo técnico analiza cómo la necesidad de mantener entradas de página únicas para cada proceso que mapea la misma memoria compartida genera una sobrecarga de memoria que puede provocar el agotamiento de recursos (OOM killer) en servidores de bases de datos.
El análisis se basa en casos documentados en las listas de correo del kernel, donde la ineficiencia se debe a que cada proceso requiere su propio conjunto de entradas de página (PTE) para acceder a la misma página de datos. Por ejemplo, si 512 procesos mapean la misma página de 4 KiB, el consumo de memoria por las tablas de páginas equivale al de los datos mismos (4 KiB). Este fenómeno fue identificado por Shakeel Butt en 2020, quien introdujo métricas en memory.stat para medir este uso. Posteriormente, casos como el de Andrea Arcangeli en 2002 y Khalid Aziz en 2022 demostraron cómo esta sobrecarga podía causar fallos catastróficos en sistemas con grandes cantidades de RAM compartida, como bases de datos Oracle o PostgreSQL.
Para mitigar este problema, se han implementado soluciones como el uso de páginas gigantes (huge pages) y la propuesta de compartir tablas de páginas entre procesos (mshare). Sin embargo, estas soluciones presentan sus propias limitaciones, como la necesidad de memoria no fragmentada para las páginas gigantes o la complejidad de mantener tablas de páginas vacías cuando se liberan páginas de datos. El artículo concluye que, aunque estos casos son extremos, el patrón de alta concurrencia con memoria compartida sigue siendo un desafío significativo en la optimización de la memoria en sistemas operativos modernos.
