文档菜单
文档首页
/
MongoDB 手册
/ / / /

为自管理部署禁用透明大页面 (THP)

本页内容

  • 创建服务文件
  • 使用tunedktune

重要

MongoDB 8.0 中升级了 TCMalloc

从 MongoDB 8.0 版本开始,MongoDB 使用了升级版的 TCMalloc,在启用透明大页面(THP)的情况下提高了性能。如果您正在使用 MongoDB 8.0 或更高版本,请参阅启用透明大页面(THP).

透明大页面(THP)是 Linux 内存管理系统,它可以减少转换后备缓冲区(TLB)查找的开销。THP 通过合并小型页面,使它们对应用程序看起来像更大的内存页面来实现这一点。

在 Linux 上运行 MongoDB 7.0 或更早版本时,应禁用 THP 以获得最佳性能。在 MongoDB 的早期版本中,数据库工作负载通常在启用 THP 的情况下会降低性能,因为它们通常使用非连续的内存访问模式。

注意

您可以在系统级别启用 THP 并在进程级别禁用它。如果您在一台机器上运行多个 MongoDB 进程,请确保 8.0 版本的进程启用 THP,而 7.0 或更早版本的进程禁用 THP。

为确保在 mongod 启动之前禁用 THP,为您的操作系统创建一个服务文件以在启动时禁用 THP。以下指令包括针对 systemdSystem V init 初始化系统的示例。

此外,对于RHEL 和 CentOS 系统,这些系统使用 ktunetuned 性能配置文件,您还必须创建一个自定义的 tuned 配置文件。

要创建禁用 THP 的服务文件,请使用操作系统内置的初始化系统。Linux 的最新版本通常使用 systemd,它使用 systemctl 命令。较旧的 Linux 版本使用 System V init,它使用 service 命令。有关更多信息,请参阅您的操作系统文档。

使用您的操作系统初始化系统

1

创建以下文件,并保存到 /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

注意

某些版本的 Red Hat Enterprise Linux 以及可能的其他基于 Red Hat 的衍生产品,使用不同的路径来存储 THP 启用 文件

/sys/kernel/mm/redhat_transparent_hugepage/enabled

验证您的系统上使用的路径,并相应地更新 disable-transparent-huge-pages.service 文件。

2

要重新加载 systemd 单元文件,并使 disable-transparent-huge-pages.service 可用,请运行以下命令

sudo systemctl daemon-reload
3

运行

sudo systemctl start disable-transparent-huge-pages

要验证相关 THP 设置是否已更改,请运行以下命令

cat /sys/kernel/mm/transparent_hugepage/enabled && cat /sys/kernel/mm/transparent_hugepage/defrag

在 Red Hat Enterprise Linux 以及可能的其他基于 Red Hat 的衍生产品上,您可能需要使用以下命令

cat /sys/kernel/mm/redhat_transparent_hugepage/enabled && cat /sys/kernel/mm/redhat_transparent_hugepage/defrag

输出应类似于以下内容

never
never
4

为确保每次操作系统启动时都应用此设置,请运行以下命令

sudo systemctl enable disable-transparent-huge-pages
5

如果您在 RHEL/CentOS 上使用 tunedktune 配置文件,您还必须创建一个自定义的 tuned 配置文件。

1

创建以下文件并将其保存到 /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

运行

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

运行

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

要验证相关 THP 设置是否已更改,请运行以下命令

cat /sys/kernel/mm/transparent_hugepage/enabled && cat /sys/kernel/mm/transparent_hugepage/defrag

在 Red Hat Enterprise Linux 以及可能的其他基于 Red Hat 的衍生产品上,您可能需要使用以下命令

cat /sys/kernel/mm/redhat_transparent_hugepage/enabled && cat /sys/kernel/mm/redhat_transparent_hugepage/defrag

输出应类似于以下内容

never
never
4

为确保每次操作系统启动时都应用此设置,请为您的Linux发行版运行以下命令

发行版
命令
Ubuntu和Debian
sudo update-rc.d disable-transparent-hugepages defaults
SUSE
sudo insserv /etc/init.d/disable-transparent-hugepages
Red Hat、CentOS、Amazon Linux及其衍生版本
sudo chkconfig --add disable-transparent-hugepages
5

如果您在RHEL/CentOS上使用tunedktune配置文件,您还必须创建一个自定义的tuned配置文件。

重要

如果使用tunedktune,在创建服务文件后执行本节中的步骤。

tunedktune是内核调整工具,可能会影响您系统上的透明大页设置。如果您在运行mongod的同时使用tunedktune在您的RHEL或CentOS系统上,您必须创建一个自定义的tuned配置文件,以确保THP保持禁用状态。

1

通过复制相关目录从现有配置文件创建新配置文件。此示例使用 virtual-guest 配置文件作为基础,并使用 virtual-guest-no-thp 作为新配置文件

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

编辑 /etc/tune-profiles/virtual-guest-no-thp/ktune.sh 并将 set_transparent_hugepages 设置更改为以下内容

set_transparent_hugepages never
3

启用新配置文件

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

创建一个新的目录来保存自定义 tuned 配置文件。此示例继承自现有的 virtual-guest 配置文件,并使用 virtual-guest-no-thp 作为新的配置文件

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

创建并编辑 /etc/tuned/virtual-guest-no-thp/tuned.conf 以包含以下内容

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

此示例继承自现有的 virtual-guest 配置文件。选择最适合您系统的配置文件。

3

启用新配置文件

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

返回

TCMalloc 性能