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:
Utilice una arquitectura compatible.
Soporte de plataforma
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.
Activar Transparent Hugepages (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.
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.
Cree un archivo de servicio
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:
Crea el archivo de unidad systemd
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.
Inicie el servicio
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
Crear el script init.d
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
Ejecute el script
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
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 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.
Habilitar cachés por CPU
Para verificar que TCMalloc se está ejecutando con cachés por CPU, asegúrese de que:
tcmalloc.usingPerCPUCachesestrue.tcmalloc.tcmalloc.cpu_freees mayor que0.
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.
Desactivar glibc rseq
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
Verificar la versión del kernel
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