Docs 菜单
Docs 主页
/
MongoDB Manual
/ / /

禁用透明大页 (THP)

在此页面上

  • 创建服务文件
  • 使用 tunedktune

透明大页 (THP) 是一种 Linux 内存管理系统。在具有大量内存的计算机上,该系统可以利用较大的内存页面来减少查找转换后备缓冲区 (TLB) 的开销。

然而,在启用 THP 的情况下,数据库工作负载通常性能较差,因为它们往往具有稀疏而不是连续的内存访问模式。在 Linux 上运行 MongoDB 时,应禁用 THP 以获得最佳性能。

为了确保在 mongod 启动之前禁用 THP,您应该为平台的初始化系统创建一个服务文件,以便在启动时禁用 THP。下面提供了针对 systemdSystem V init 初始化系统的说明。

此外,对于使用 ktunetuned 性能配置文件的 RHEL /CentOS 系统,您还必须创建自定义的 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 enabled 文件使用不同的路径:

/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/disabled && 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 时,于您的 RHEL/CentOS 系统上使用 tuned/ktune,您必须创建一个自定义的 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

后退

性能