Join us at MongoDB.local London on 7 May to unlock new possibilities for your data. Use WEB50 to save 50%.
Register now >
Docs Menu
Docs Home
/ /
Rendimiento
/ / / /

Deshabilita Transparent Huge Pages (THP)

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 asegurar que THP esté deshabilitado antes de mongodAl iniciarse, debe crear un archivo de servicio para el sistema de inicialización de su plataforma que deshabilite THP al arrancar. A continuación, se proporcionan instrucciones para los sistemas de inicialización systemd y System V init.

Además, para Para los sistemasRHEL/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 plataforma. Las versiones recientes de Linux suelen usar systemd (que usa el systemctl comando), mientras que las versiones anteriores de Linux suelen usar System V init (que usa el service comando). Consulte la documentación de su sistema operativo para obtener más información.

Utiliza el sistema de inicialización adecuado para tu plataforma:

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 utilizas los perfiles tuned o ktune en RHEL/ CentOS, también debes crear un perfil tuned 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 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 kernel que pueden afectar la configuración de páginas grandes transparentes en su sistema. Si usa tuned / ktune en su sistema RHEL/CentOS mientras mongod ejecuta, debe crear un tuned perfil personalizado para garantizar que THP permanezca deshabilitado.

1

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

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

Edita /etc/tune-profiles/virtual-guest-no-thp/ktune.sh y cambia la configuración de set_transparent_hugepages al siguiente valor:

set_transparent_hugepages never
3

Habilite 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

Habilite el nuevo perfil:

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

Volver

Rendimiento

En esta página