介绍
在这个实验中,你将学习如何检查 Linux 系统上是否启用并配置了内核大页(Hugepages)。大页是一项内核特性,通过使用更大的内存页,它可以提高内存密集型应用程序的性能。
通过一系列实际操作步骤,你将探索不同的方法来验证大页设置。首先,你将检查 /proc/meminfo 文件,以查看当前大页的统计信息,包括大页总数、空闲大页数、保留大页数以及大页大小。接下来,你将使用 sysctl 命令检查 vm.nr_hugepages 内核参数,该参数表示所需的大页数量。最后,你将检查 /sys/kernel/mm 目录,以进一步了解内核内存管理子系统中的大页配置。通过完成这些步骤,你将深入了解如何确定 Linux 系统上的大页状态。
检查 /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/meminfo、sysctl 和 /sys 文件系统。
点击 Continue 完成实验。
总结
在本次实验中,我们学习了如何检查 Linux 系统上是否启用并配置了内核大页(Hugepages)。我们探索了三种实现此目的的方法。首先,我们使用 cat 和 grep 命令检查了 /proc/meminfo 文件,以查看关键的大页统计信息,如 HugePages_Total、HugePages_Free 和 Hugepagesize。
接下来,我们通常会使用 sysctl vm.nr_hugepages 来验证大页设置,并检查 /sys/kernel/mm 目录中的大页配置,尽管在提供的内容中未完整给出这些方法的详细步骤。这些步骤共同展示了如何确定 Linux 系统上大页的当前状态和配置。



