Cambiado en la versión 8.0.
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 subproceso, para reducir la fragmentación de la memoria y hacer que su base de datos sea más resistente a cargas de trabajo de alto estrés.
Para utilizar la nueva versión de TCMalloc:
Soporte de plataforma
Los sistemas operativos que dan soporte a MongoDB 8.0 también dan soporte al TCMalloc actualizado, excepto los siguientes:
RHEL 9 / CentOS 9 / Oracle 9 en la arquitectura PPC64LE
Estos sistemas operativos utilizan la versión heredada de TCMalloc. Si se utilizan estos sistemas operativos, se debe desactivar 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, asegúrese de que THP esté habilitado antes
mongodcomienza creando un archivo de servicio para el sistema de inicialización de su plataforma. Si usa MongoDB 7.0 o una versiónanterior, 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 En los sistemasRHEL y CentOS que utilizan ktune tuned perfiles de rendimiento y, también debe crear un tuned perfil 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:
Crear el systemd archivo de unidad
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 init.d script
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 | |
Usando 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 se está utilizando tuned o ktune en el sistema RHEL o CentOS mientras se ejecuta mongod, se debe crear un perfil tuned personalizado para asegurarse de que THP permanezca activado.
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 asegurar que TCMalloc pueda usar rseq para activar cachés por CPU, se puede desactivar el registro de glibc de una estructura rseq. Para desactivar glibc rseq, se debe establecer la siguiente variable de entorno antes de que se inicie mongod:
GLIBC_TUNABLES=glibc.pthread.rseq=0 export GLIBC_TUNABLES
Verificar la versión del kernel
Si ha desactivado glibc rseq y las cachés por CPU aún no están activadas, se deber verificar que se está utilizando la versión 4.18 o posterior del kernel de Linux. Para comprobar la versión de kernel, se debe ejecutar el siguiente comando:
uname -r