Transparent Huge Pages (THP) es un sistema de gestión de memoria en Linux que reduce la sobrecarga de las búsquedas en el Translation Lookaside Buffer (TLB) en máquinas con grandes cantidades de memoria mediante el uso de páginas de memoria de mayor tamaño.
Sin embargo, las cargas de trabajo de bases de datos suelen tener un bajo rendimiento con el THP activado, porque tienden a tener patrones de acceso a la memoria esparcidos en lugar de contiguos. Al ejecutar MongoDB en Linux, THP debe estar deshabilitado para un mejor rendimiento.
Para garantizar que THP esté desactivado antes de que mongod se inicie, debe crear un archivo de servicio para el sistema de inicialización de su plataforma que desactive THP al arrancar. A continuación, se proporcionan instrucciones tanto para los sistemas de inicialización systemd como System V init.
Además, para los sistemas RHEL / CentOS que utilizan los perfiles de rendimiento ktune y tuned, se debe crear un perfil tuned personalizado.
Cree un archivo de servicio
Para crear un archivo de servicio que desactive THP, utilizarás el sistema de funcionalidad incorporada para tu plataforma. Las versiones recientes de Linux tienden a utilizar systemd (que emplea el comando systemctl), mientras que las versiones más antiguas de Linux suelen utilizar System V init (que usa el comando service). Consulta la documentación de tu sistema operativo para obtener más información.
Utiliza el sistema de inicialización adecuado para tu plataforma:
Crea el archivo de unidad systemd
Cree el siguiente archivo y guárdelo en /etc/systemd/system/disable-transparent-huge-pages.service:
[Unit] Description=Disable Transparent Hugepages (THP) DefaultDependencies=no After=sysinit.target local-fs.target Before=mongod.service [Service] Type=oneshot ExecStart=/bin/sh -c 'echo never | tee /sys/kernel/mm/transparent_hugepage/enabled > /dev/null && echo never | tee /sys/kernel/mm/transparent_hugepage/defrag > /dev/null' [Install] WantedBy=basic.target
Nota
Algunas versiones de Red Hat Enterprise Linux, y potencialmente otros derivados basados en Red Hat, utilizan una ruta diferente para el archivo THP enabled:
/sys/kernel/mm/redhat_transparent_hugepage/enabled
Verificar qué ruta está en uso en el sistema y actualizar el archivo disable-transparent-huge-pages.service en consecuencia.
Inicie el servicio
Ejecuta:
sudo systemctl start disable-transparent-huge-pages
Para verificar que los ajustes relevantes de THP han cambiado, ejecute el siguiente comando:
cat /sys/kernel/mm/transparent_hugepage/enabled && cat /sys/kernel/mm/transparent_hugepage/defrag
En Red Hat Enterprise Linux y, posiblemente, en otros derivados basados en Red Hat, es posible que se necesite utilizar lo siguiente:
cat /sys/kernel/mm/redhat_transparent_hugepage/enabled && cat /sys/kernel/mm/redhat_transparent_hugepage/defrag
La salida debería asemejarse a lo siguiente:
never never
Crear el script init.d
Cree el siguiente archivo y guárdelo en /etc/init.d/disable-transparent-hugepages:
!/bin/bash ## BEGIN INIT INFO Provides: disable-transparent-hugepages Required-Start: $local_fs Required-Stop: X-Start-Before: mongod mongodb-mms-automation-agent Default-Start: 2 3 4 5 Default-Stop: 0 1 6 Short-Description: Disable Linux Transparent Hugepages Description: Disable Linux Transparent Hugepages, to improve database performance. ## END INIT INFO case $1 in start) if [ -d /sys/kernel/mm/transparent_hugepage ]; then thp_path=/sys/kernel/mm/transparent_hugepage elif [ -d /sys/kernel/mm/redhat_transparent_hugepage ]; then thp_path=/sys/kernel/mm/redhat_transparent_hugepage else return 0 fi echo 'never' | tee /sys/kernel/mm/transparent_hugepage/enabled > /dev/null && echo 'never' | tee /sys/kernel/mm/transparent_hugepage/defrag > /dev/null unset thp_path ;; esac
Ejecute el script
Ejecuta:
sudo /etc/init.d/disable-transparent-hugepages start
Para verificar que los ajustes relevantes de THP han cambiado, ejecute el siguiente comando:
cat /sys/kernel/mm/transparent_hugepage/enabled && cat /sys/kernel/mm/transparent_hugepage/defrag
En Red Hat Enterprise Linux y, posiblemente, en otros derivados basados en Red Hat, es posible que se necesite utilizar lo siguiente:
cat /sys/kernel/mm/redhat_transparent_hugepage/enabled && cat /sys/kernel/mm/redhat_transparent_hugepage/defrag
La salida debería asemejarse a lo siguiente:
never never
Configurar el sistema operativo para que se ejecute al arrancar
Para asegurarse de que esta configuración se aplique cada vez que se inicie el sistema operativo, ejecute el siguiente comando para su distribución de Linux:
Distribución | Comando | |
|---|---|---|
Ubuntu y Debian | | |
SUSE | | |
Red Hat, CentOS, Amazon Linux y derivados | |
Usar tuned y ktune
Importante
Si usas tuned o ktune, también debes realizar los pasos de esta sección después de crear el archivo de servicio anterior.
tuned y ktune son herramientas dinámicas de ajuste del núcleo que pueden afectar la configuración de páginas enormes transparentes en su sistema. Si está utilizando tuned / ktune en su sistema RHEL / CentOS mientras ejecuta mongod, debe crear un perfil tuned personalizado para garantizar que THP siga desactivado.