什么是透明大页(THP)以及如何在 Linux 中检查每个进程的 THP 使用情况

Hugepages 是一项允许 Linux 内核利用现代硬件架构的多页面大小功能的功能。

什么是transparent hugepage(透明大页)?

内存在称为页的块中进行管理。
一页是 4096 字节。
1MB 内存等于 256 页; 1GB 内存等于 256,000 页,以此类推。

要获取页面大小,请使用以下命令

# getconf PAGE_SIZE
4096
# getconf PAGESIZE
4096

CPU 有一个内置的内存管理单元,其中包含这些页面的列表,每个页面都通过一个页表条目引用

有两种方法可以使系统管理大量内存:

  • 增加硬件内存管理单元中的页表条目数
  • 增加页面大小

第一种方法很昂贵,因为现代处理器中的硬件内存管理单元仅支持数百或者数千个页表条目。

在 Linux 中,我们为此使用大页面,其中大页面是大小为 2MB 和 1GB 的内存块。
2MB 页使用的页表适合管理数 GB 的内存,而 1GB 页的页表最适合扩展到 TB 级内存

创建 Huge Pages 的一个副作用是映射到 Huge Page 的物理内存不再受正常内存分配的约束或者由内核虚拟内存管理器管理,因此 Huge Pages 本质上是“受保护的”并且仅对应用程序可用要求他们。

Huge Pages are 'pinned' to physical 内存 and cannot be swapped/paged out.

内核将始终尝试使用大页来满足内存分配。
如果没有可用的大页面(例如由于物理连续内存不可用),内核将回退到常规的 4KB 页面。

但是要有效地使用大页面,内核必须找到足够大的物理连续内存区域来满足请求,并且正确对齐。

分配巨大页面的一个典型目的是用于具有高内存使用率特征的应用程序,并且我们希望确保它使用的页面在系统处于内存压力下时永远不会被换出。

可以将具有大量内存的系统配置为通过留出专用于大页面的部分来更有效地利用内存。
页面的实际大小取决于系统架构。

典型的 x86 系统将具有 2048 KB 的巨大页面大小。

可以通过查看 /proc/meminfo 找到大页面大小

# cat /proc/meminfo |grep Hugepagesize
Hugepagesize: 2048 kB

如何判断 HugePages 是启用还是禁用

在上述步骤中,我们禁用了 THP 以确保内核不会分配或者保留任何大页面。

如果 HugePages_Total 的值为“0”,则表示系统上禁用了 HugePages。

# grep -i HugePages_Total /proc/meminfo
HugePages_Total:       0

如果 HugePages_Total 的值大于“0”,则表示系统启用了 HugePages

# grep -i HugePages_Total /proc/meminfo
HugePages_Total:   23090

同样,如果 /proc/sys/vm/nr_hugepages 文件或者 vm.nr_hugepages 中的值,sysctl 参数为“0”,则表示系统上禁用了 HugePages

# cat /proc/sys/vm/nr_hugepages
0
# sysctl vm.nr_hugepages
vm.nr_hugepages = 0

如果 /proc/sys/vm/nr_hugepages 文件或者 vm.nr_hugepages sysctl 参数中的值大于“0”,则表示系统启用了 HugePages

# cat /proc/sys/vm/nr_hugepages
1024
# sysctl vm.nr_hugepages
vm.nr_hugepages = 1024

如何检查每个进程的 THP 使用情况

系统当前使用的匿名透明大页面数量可通过读取/proc/meminfo中的AnonHugePages字段获得

# grep -i AnonHugePages /proc/meminfo
AnonHugePages:   1216512 kB

要识别哪些应用程序正在使用匿名透明大页面,有必要读取 /proc/PID/smaps 并计算每个映射的 AnonHugePages 字段。

# grep -e AnonHugePages  /proc/$(pgrep test.sh)/smaps | awk  '{ if(>0) print ##代码##} '
AnonHugePages:    120832 kB

注意:/proc/vmstat 中有许多计数器可用于监控系统提供大页面以供使用的成功程度。

日期:2020-06-02 22:17:21 来源:oir作者:oir