如何检查 Linux 中内核大页是否启用

LinuxLinuxBeginner
立即练习

💡 本教程由 AI 辅助翻译自英文原版。如需查看原文,您可以 切换至英文原版

简介

在这个实验中,你将学习如何检查 Linux 系统上是否启用并配置了内核大页(Hugepages)。大页是一项内核特性,通过使用更大的内存页,它可以提高内存密集型应用程序的性能。

通过一系列实际操作步骤,你将探索不同的方法来验证大页设置。首先,你将检查 /proc/meminfo 文件,以查看当前大页的统计信息,包括大页总数、空闲大页数、保留大页数以及大页大小。接下来,你将使用 sysctl 命令检查 vm.nr_hugepages 内核参数,该参数表示所需的大页数量。最后,你将检查 /sys/kernel/mm 目录,以进一步了解内核内存管理子系统中的大页配置。通过完成这些步骤,你将深入了解如何确定 Linux 系统上的大页状态。


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL linux(("Linux")) -.-> linux/BasicFileOperationsGroup(["Basic File Operations"]) linux(("Linux")) -.-> linux/FileandDirectoryManagementGroup(["File and Directory Management"]) linux(("Linux")) -.-> linux/TextProcessingGroup(["Text Processing"]) linux(("Linux")) -.-> linux/UserandGroupManagementGroup(["User and Group Management"]) linux/BasicFileOperationsGroup -.-> linux/ls("Content Listing") linux/BasicFileOperationsGroup -.-> linux/cat("File Concatenating") linux/FileandDirectoryManagementGroup -.-> linux/cd("Directory Changing") linux/TextProcessingGroup -.-> linux/grep("Pattern Searching") linux/UserandGroupManagementGroup -.-> linux/env("Environment Managing") subgraph Lab Skills linux/ls -.-> lab-558793{{"如何检查 Linux 中内核大页是否启用"}} linux/cat -.-> lab-558793{{"如何检查 Linux 中内核大页是否启用"}} linux/cd -.-> lab-558793{{"如何检查 Linux 中内核大页是否启用"}} linux/grep -.-> lab-558793{{"如何检查 Linux 中内核大页是否启用"}} linux/env -.-> lab-558793{{"如何检查 Linux 中内核大页是否启用"}} end

检查 /proc/meminfo 中的大页信息

在这一步中,我们将探讨如何检查你的 Linux 系统上当前的大页(Hugepages)配置。大页是 Linux 内核的一项特性,它允许系统使用比默认 4KB 更大的内存页。这可以提高使用大量内存的应用程序(如数据库和虚拟化软件)的性能。

我们可以在 /proc/meminfo 文件中找到有关大页的信息。该文件包含了系统各种与内存相关的统计数据。

如果你还没有打开终端,请打开它。你可以通过点击桌面左侧的 Xfce Terminal 图标来打开终端。

现在,让我们使用 cat 命令查看 /proc/meminfo 的内容。cat 命令用于显示文件的内容。

在终端中输入以下命令并按回车键:

cat /proc/meminfo

此命令会将 /proc/meminfo 文件的全部内容打印到终端。你会看到很多关于系统内存的信息。

为了专门查找大页信息,我们可以使用 grep 命令过滤 cat 的输出。grep 命令用于搜索匹配特定模式的行。

输入以下命令并按回车键:

cat /proc/meminfo | grep HugePages

| 符号称为管道。它将左侧命令(cat /proc/meminfo)的输出作为输入传递给右侧的命令(grep HugePages)。这样,grep 只会在 cat 的输出中进行搜索。

你应该会看到类似以下的行(具体数字可能会有所不同):

HugePages_Total:       0
HugePages_Free:        0
HugePages_Rsvd:        0
HugePages_Surp:        0
Hugepagesize:       2048 kB

让我们来详细解释这些行的含义:

  • HugePages_Total:系统上配置的大页总数。
  • HugePages_Free:当前空闲且可供使用的大页数量。
  • HugePages_Rsvd:为未来使用而保留的大页数量。
  • HugePages_Surp:超出 vm.nr_hugepages 设置的大页数量(我们将在下一步中查看该设置)。
  • Hugepagesize:每个大页的大小。在大多数系统上,这个大小是 2048 kB(2MB)。

在这个环境中,默认的大页总数可能为 0,这在通用系统中很常见。

点击 Continue 进入下一步。

使用 sysctl vm.nr_hugepages 验证大页设置

在上一步中,我们查看了 /proc/meminfo 文件以了解当前大页(Hugepages)的使用情况。现在,让我们使用 sysctl 命令来检查控制大页总数的内核参数。

sysctl 命令用于在运行时查看和修改内核参数。内核参数是影响 Linux 内核行为的设置。

我们感兴趣的具体参数是 vm.nr_hugepages。该参数决定了内核应预留的大页总数。

在终端中输入以下命令并按回车键:

sysctl vm.nr_hugepages

此命令将显示 vm.nr_hugepages 内核参数的当前值。

你应该会看到类似以下的输出:

vm.nr_hugepages = 0

这个输出证实了当前大页总数的设置为 0。这与我们在 /proc/meminfo 中看到的 HugePages_Total 也为 0 相匹配。

sysctl 命令是检查和更改内核行为多个方面的强大工具。虽然我们这里只查看了 vm.nr_hugepages,但你可以使用 sysctl -a 探索许多其他参数。

理解像 vm.nr_hugepages 这样的内核参数对于针对特定工作负载调整系统性能非常重要。

点击 Continue 进入下一步。

检查 /sys/kernel/mm 中的大页配置

在这最后一步,我们将探索另一个可以获取大页(Hugepages)配置信息的地方:/sys 文件系统。/sys 文件系统提供了一个访问内核数据结构的接口,让我们能够检查,有时还能修改内核对象。

与大页相关的信息可以在 /sys/kernel/mm/transparent_hugepage 目录下找到。透明大页(Transparent Hugepages,THP)是一项功能,它尝试自动使用大页,而无需应用程序进行显式配置。

让我们使用 cd 命令进入这个目录。cd 代表“change directory”(更改目录)。

输入以下命令并按回车键:

cd /sys/kernel/mm/transparent_hugepage

现在我们已经进入了 /sys/kernel/mm/transparent_hugepage 目录,让我们使用 ls 命令列出该目录下的文件。ls 命令用于列出目录的内容。

输入以下命令并按回车键:

ls

你应该会看到类似以下的输出:

defrag  enabled  khugepaged  numa_defrag  shmem_enabled  split_huge_pmd_size  split_huge_pte_size

这些文件代表了透明大页的不同配置选项和状态指示。

让我们使用 cat 命令查看 enabled 文件的内容。这个文件显示了透明大页是启用、禁用,还是处于“madvise”模式(在这种模式下,应用程序可以向内核建议大页的使用方式)。

输入以下命令并按回车键:

cat enabled

你应该会看到类似以下的输出:

[always] madvise never

输出表示当前的设置。[always] 表示当前所有映射都启用了透明大页。

现在让我们查看 defrag 文件。这个文件控制内核是否应该尝试对内存进行碎片整理,以使大页可用。

输入以下命令并按回车键:

cat defrag

你应该会看到类似以下的输出:

[always] defer defer+madvise madvise never

同样,[always] 表示与透明大页相关的内存碎片整理的当前设置。

/sys 文件系统是了解内核内部状态和配置的宝贵资源。探索像 /sys/kernel/mm 这样的目录可以深入了解内存管理。

你现在已经成功地使用三种不同的方法探索了大页信息:/proc/meminfosysctl/sys 文件系统。

点击 Continue 完成实验。

总结

在本次实验中,我们学习了如何检查 Linux 系统上是否启用并配置了内核大页(Hugepages)。我们探索了三种实现此目的的方法。首先,我们使用 catgrep 命令检查了 /proc/meminfo 文件,以查看关键的大页统计信息,如 HugePages_TotalHugePages_FreeHugepagesize

接下来,我们通常会使用 sysctl vm.nr_hugepages 来验证大页设置,并检查 /sys/kernel/mm 目录中的大页配置,尽管在提供的内容中未完整给出这些方法的详细步骤。这些步骤共同展示了如何确定 Linux 系统上大页的当前状态和配置。