Docs Menu
Docs Home
/ /

Deshabilite Transparent Hugepages (THP) para implementaciones autogestionadas

Importante

TCMalloc actualizado en MongoDB 8.0

A partir de MongoDB 8.0, MongoDB utiliza una versión mejorada de TCMalloc que mejora el rendimiento con las páginas enormes transparentes habilitadas. Si utiliza MongoDB 8.0 o posterior, consulte Habilitar páginas enormes transparentes (THP).

Transparent Hugepages (THP) es un sistema de gestión de memoria de Linux que reduce los gastos en general de las búsquedas en el Translation Lookaside Buffer (TLB). THP logra esto combinando páginas pequeñas y haciendo que se presenten como páginas de memoria más grandes para la aplicación.

Cuando se ejecuta MongoDB 7.0 o una versión anterior en Linux, THP debe estar desactivado para obtener el mejor rendimiento. En versiones anteriores de MongoDB, las cargas de trabajo de bases de datos a menudo experimentaban disminución del rendimiento con THP activado porque suelen usar patrones de acceso a memoria no contiguos.

Nota

THP opera a nivel de sistema, por lo que se aplica a todos los procesos del sistema. No puede activar ni desactivar THP a nivel de proceso.

Para garantizar que THP esté deshabilitado antes mongodAl iniciarse, cree un archivo de servicio para su sistema operativo que deshabilite THP al arrancar. Las siguientes instrucciones incluyen ejemplos para los sistemas de inicialización systemd y System V init.

Además, para Para los sistemasRHEL y CentOS que utilizan ktune tuned perfiles de rendimiento y, también debe crear un tuned perfil personalizado.

Para crear un archivo de servicio que deshabilite THP, utilice el sistema de inicialización integrado de su sistema operativo. Las versiones recientes de Linux suelen usar systemd, que utiliza el systemctl comando. Las versiones anteriores de Linux usan System V init, que utiliza el comando. Para obtener más información, consulte service la documentación de su sistema operativo.

Utilice el sistema de inicialización correspondiente a su sistema operativo:

1

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.

2

Para recargar los archivos de la unidad systemd y hacer que disable-transparent-huge-pages.service esté disponible para su uso, ejecute el siguiente comando:

sudo systemctl daemon-reload
3

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
4

Para asegurarse de que esta configuración se aplique cada vez que se inicie el sistema operativo, ejecute el siguiente comando:

sudo systemctl enable disable-transparent-huge-pages
5

Si utiliza tuned perfiles ktune o en RHEL/CentOS,también debe crear un tuned perfil personalizado.

1

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
2

Ejecuta:

sudo chmod 755 /etc/init.d/disable-transparent-hugepages
3

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
4

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

sudo update-rc.d disable-transparent-hugepages defaults

SUSE

sudo insserv /etc/init.d/disable-transparent-hugepages

Red Hat, CentOS, Amazon Linux y derivados

sudo chkconfig --add disable-transparent-hugepages
5

Si está utilizando perfiles tuned o ktune en RHEL/CentOS, también se debe crear un perfil de tuned personalizado.

Importante

Si se utiliza tuned o ktune, realizar los pasos de esta sección después de crear el archivo de servicio.

tuned y ktune son utilidades de optimización del kernel que pueden afectar la configuración de Transparent Hugepages en su sistema. Si usa tuned o ktune en su sistema RHEL o CentOS mientras mongod ejecuta, debe crear un tuned perfil personalizado para garantizar que THP permanezca deshabilitado.

1

Cree un nuevo perfil a partir de uno existente copiando el directorio correspondiente. Este ejemplo utiliza el perfil virtual-guest como base y virtual-guest-no-thp como el nuevo perfil:

sudo cp -r /etc/tune-profiles/virtual-guest /etc/tune-profiles/virtual-guest-no-thp
2

Edite /etc/tune-profiles/virtual-guest-no-thp/ktune.sh y cambie la configuración set_transparent_hugepages a lo siguiente:

set_transparent_hugepages never
3

Habilitar el nuevo perfil:

sudo tuned-adm profile virtual-guest-no-thp
1

Cree un nuevo directorio para el perfil tuned personalizado. Este ejemplo hereda del perfil virtual-guest existente y utiliza virtual-guest-no-thp como el nuevo perfil:

sudo mkdir /etc/tuned/virtual-guest-no-thp
2

Crea y edita /etc/tuned/virtual-guest-no-thp/tuned.conf para que contenga lo siguiente:

[main]
include=virtual-guest
[vm]
transparent_hugepages=never

Este ejemplo hereda del perfil virtual-guest existente. Seleccione el perfil más adecuado para su sistema.

3

Habilitar el nuevo perfil:

sudo tuned-adm profile virtual-guest-no-thp

Volver

Rendimiento de TCMalloc

En esta página