Para agentes de IA: hay un índice de documentación disponible en https://www.mongodb.com/es/docs/llms.txt — versiones en markdown de todas las páginas están disponibles agregando .md a cualquier ruta URL.
Docs Menu

Optimización del rendimiento de TCMalloc para una implementación autogestionada

Modificado en la 8.0 versión.:

A partir de MongoDB 8.0, MongoDB utiliza una versión mejorada de TCMalloc que utiliza cachés por CPU, en lugar de cachés por hilo, para reducir la fragmentación de la memoria y hacer que la base de datos sea más resistente a cargas de trabajo de alta presión.

Para utilizar la nueva versión de TCMalloc:

La compatibilidad con TCMalloc actualizado depende de la arquitectura de la CPU. Los sistemas Linux que admiten MongoDB 8.0 admiten el TCMalloc actualizado solo en las arquitecturas x86_64 y ARM64.

MongoDB utiliza la versión heredada de TCMalloc en las arquitecturas PPC64LE y s390x, independientemente de la versión del sistema operativo. Si utiliza una de estas arquitecturas, desactive THP.

Windows utiliza la versión heredada de TCMalloc y no tiene soporte para la versión actualizada de TCMalloc.

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.

En MongoDB 8.0 y versiones posteriores, se debe garantizar que THP esté activado antes de que mongod comience creando un archivo de servicio para el sistema de inicialización de la plataforma. Si se está utilizando MongoDB 7.0 o anterior, desactive THP.

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.

Además, para sistemas RHEL y CentOS que utilizan perfiles de rendimiento ktune y tuned, también se debe crear un perfil de tuned personalizado.

Para crear un archivo de servicio que active THP, se debe utilizar el sistema de inicialización integrado para la plataforma. Las versiones recientes de Linux suelen usar systemd, que utiliza el comando systemctl. Las versiones antiguas de Linux tienden a usar System V init, que emplea el comando service. Para aprender más, se puede consultar la documentación del sistema operativo.

Utilizar el sistema de inicialización para la plataforma:

1

Cree el siguiente archivo y guárdelo en /etc/systemd/system/enable-transparent-huge-pages.service:

[Unit]
Description=Enable Transparent Hugepages (THP)
DefaultDependencies=no
After=sysinit.target local-fs.target
Before=mongod.service
[Service]
Type=oneshot
ExecStart=/bin/sh -c 'echo always | tee /sys/kernel/mm/transparent_hugepage/enabled > /dev/null && echo defer+madvise | tee /sys/kernel/mm/transparent_hugepage/defrag > /dev/null && echo 0 | tee /sys/kernel/mm/transparent_hugepage/khugepaged/max_ptes_none > /dev/null && echo 1 | tee /proc/sys/vm/overcommit_memory > /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 enable-transparent-huge-pages.service en consecuencia.

2

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

sudo systemctl daemon-reload
3

Ejecuta:

sudo systemctl start enable-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 && cat /sys/kernel/mm/transparent_hugepage/khugepaged/max_ptes_none && cat /proc/sys/vm/overcommit_memory

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 && cat /sys/kernel/mm/redhat_transparent_hugepage/khugepaged/max_ptes_none && cat /proc/sys/vm/overcommit_memory

La salida debería asemejarse a lo siguiente:

always
defer+madvise
0
1
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 enable-transparent-huge-pages
5

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

1

Cree el siguiente archivo y guárdelo en /etc/init.d/enable-transparent-hugepages:

#!/bin/bash
### BEGIN INIT INFO
# Provides: enable-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: Enable Linux Transparent Hugepages
# Description: Enable 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 'always' | tee ${thp_path}/enabled > /dev/null && echo defer+madvise | tee ${thp_path}/defrag > /dev/null && echo 0 | tee ${thp_path}/khugepaged/max_ptes_none > /dev/null && echo 1 | tee /proc/sys/vm/overcommit_memory > /dev/null'
unset thp_path
;;
esac
2

Ejecuta:

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

Ejecuta:

sudo /etc/init.d/enable-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 && cat /sys/kernel/mm/transparent_hugepage/khugepaged/max_ptes_none && cat /proc/sys/vm/overcommit_memory

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

La salida debería asemejarse a lo siguiente:

always
defer+madvise
0
1
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 enable-transparent-hugepages defaults

SUSE

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

Red Hat, CentOS, Amazon Linux y derivados

sudo chkconfig --add enable-transparent-hugepages
5

Si se están 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 ajuste del kernel que pueden afectar la configuración de Transparent Hugepages en el sistema. Si está utilizando tuned o ktune en su sistema RHEL o CentOS mientras ejecuta mongod, debe crear un perfil tuned personalizado para asegurarse de que THP permanezca habilitado.

1

Crear un nuevo directorio para almacenar el perfil personalizado de tuned. El siguiente ejemplo hereda del perfil virtual-guest existente y utiliza virtual-guest-thp como el nuevo perfil:

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

Cree y edite /etc/tuned/virtual-guest-thp/tuned.conf. Añada el siguiente texto:

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

Este ejemplo hereda del perfil virtual-guest existente. Seleccionar el perfil adecuado para el sistema.

3

Ejecuta:

sudo tuned-adm profile virtual-guest-thp

Para verificar que TCMalloc se está ejecutando con cachés por CPU, asegúrese de que:

Si las cachés por CPU no están activadas, se debe verificar que:

  • Deshabilitar glibc rseq.

  • La versión del kernel de Linux 4.18 o posterior está en uso.

El nuevo TCMalloc requiere Restartable Sequences (rseq) para implementar cachés por CPU. Si otra aplicación, como la librería glibc, registra una estructura rseq antes que TCMalloc, TCMalloc no puede utilizar rseq. Sin rseq, TCMalloc utiliza cachés por subproceso, que son utilizadas por la versión heredada de TCMalloc.

Para habilitar las cachés por CPU, desactive el registro rseq de glibc estableciendo la siguiente variable de entorno antes de iniciar mongod:

GLIBC_TUNABLES=glibc.pthread.rseq=0
export GLIBC_TUNABLES

Si las cachés por CPU aún no están habilitadas después de deshabilitar glibc rseq, verifique que esté utilizando el kernel de Linux 4.18 o posterior:

uname -r