在 Linux 中检查 Hugepages 是否启用

问题:

在你的 Linux 系统上,你想检查系统上是否启用了透明大页。

解决方案

这很简单:

check_hugepages.sh
cat /sys/kernel/mm/transparent_hugepage/enabled

你会得到这样的输出:

hugepages_output.txt
always [madvise] never

你会看到所有可能选项(alwaysmadvisenever)的列表,当前活动选项用方括号括起来。madvise 是默认值。

这意味着透明大页仅为使用 madvise(2) 显式请求大页的内存区域启用。

always 意味着透明大页始终为每个进程启用。这通常提高性能,但如果你有许多每个只消耗少量内存的进程的用例,你的总体内存使用可能急剧增长。

never 意味着即使使用 madvise 请求,透明大页也不会启用。

详情请查看 Linux 内核文档中的 Documentation/vm/transhuge.txt

如何更改默认值

选项 1: 直接修改 sysfs(设置在重启后恢复为默认值):

set_hugepages_sysfs.sh
echo always >/sys/kernel/mm/transparent_hugepage/enabled
echo madvise >/sys/kernel/mm/transparent_hugepage/enabled
echo never >/sys/kernel/mm/transparent_hugepage/enabled

选项 2: 通过使用修改的配置重新编译内核来更改系统默认值(这仅在你使用自己的自定义内核时推荐):

为了将默认值设置为 always,设置这些选项:

set_hugepages_always.sh
CONFIG_TRANSPARENT_HUGEPAGE_ALWAYS=y
# Comment out CONFIG_TRANSPARENT_HUGEPAGE_MADVISE=y

为了将默认值设置为 madvise,设置这些选项:

set_hugepages_madvise.sh
CONFIG_TRANSPARENT_HUGEPAGE_MADVISE=y
# Comment out CONFIG_TRANSPARENT_HUGEPAGE_ALWAYS=y

Check out similar posts by category: Linux, Performance