文章
· 二月 21, 2023 阅读大约需 4 分钟

Linux Transparent HugePages 及其对 InterSystems IRIS 的影响

** 2018 年 2 月 12 日修订

虽然本文是关于 InterSystems IRIS 的,但它也适用于 Caché、Ensemble 和 HealthShare 发行版。

介绍

内存以页为单位进行管理。 Linux 系统上的默认页面大小为 4KB。 Red Hat Enterprise Linux 6、SUSE Linux Enterprise Server 11 和 Oracle Linux 6 引入了一种根据系统配置提供 2MB 或 1GB 大小的增加页面大小的方法,称为 HugePages。

起初 HugePages 需要在启动时分配,如果管理或计算不当可能会导致资源浪费。因此,各种 Linux 发行版引入了默认启用 2.6.38 内核的Transparent HugePages。这是一种自动创建、管理和使用 HugePages 的方法。以前的内核版本也可能具有此功能,但可能未标记为 [always] 而是设置为 [madvise]。

Transparent Huge Pages (THP) 是一种 Linux 内存管理系统,它通过使用更大的内存页面来减少在具有大量内存的机器上进行Translation Lookaside Buffer (TLB) 查找的开销。然而,在当前的 Linux 版本中,THP 只能映射单个进程的堆栈空间。

问题

任何 Caché 系统中的大部分内存分配都是共享内存段(全局和例程缓冲池),因为 THP 不处理这些共享内存段。因此,THP 不用于共享内存,而仅用于每个单独的进程。这可以使用一个简单的 shell 命令来确认。

以下是来自 InterSystems 的测试系统的示例,其中显示了分配给 Caché 进程的 2MB THP:

# grep -e AnonHugePages  /proc/*/smaps | awk  '{ if($2>4) print $0} ' |  awk -F "/"  '{print $0; system("ps -fp " $3)} '
/proc/2945/smaps:AnonHugePages:      2048 kB

UID         PID   PPID  C STIME TTY          TIME CMD

root       2945      1  0  2015 ?        01:35:41 /usr/sbin/rsyslogd -n

/proc/70937/smaps:AnonHugePages:      2048 kB

UID         PID   PPID  C STIME TTY          TIME CMD

root      70937  70897  0 Jan27 pts/0    00:01:58 /bench/EJR/ycsb161b641/bin/cache WD

/proc/70938/smaps:AnonHugePages:      2048 kB

UID         PID   PPID  C STIME TTY          TIME CMD

root      70938  70897  0 Jan27 pts/0    00:00:00 /bench/EJR/ycsb161b641/bin/cache GC

/proc/70939/smaps:AnonHugePages:      2048 kB

UID         PID   PPID  C STIME TTY          TIME CMD

root      70939  70897  0 Jan27 pts/0    00:00:39 /bench/EJR/ycsb161b641/bin/cache JD

/proc/70939/smaps:AnonHugePages:      4096 kB

UID         PID   PPID  C STIME TTY          TIME CMD

root      70939  70897  0 Jan27 pts/0    00:00:39 /bench/EJR/ycsb161b641/bin/cache JD

/proc/70940/smaps:AnonHugePages:      2048 kB

UID         PID   PPID  C STIME TTY          TIME CMD

root      70940  70897  0 Jan27 pts/0    00:00:29 /bench/EJR/ycsb161b641/bin/cache SWD 1

/proc/70941/smaps:AnonHugePages:      2048 kB

UID         PID   PPID  C STIME TTY          TIME CMD

root      70941  70897  0 Jan27 pts/0    00:00:29 /bench/EJR/ycsb161b641/bin/cache SWD 2

/proc/70942/smaps:AnonHugePages:      2048 kB

UID         PID   PPID  C STIME TTY          TIME CMD

root      70942  70897  0 Jan27 pts/0    00:00:29 /bench/EJR/ycsb161b641/bin/cache SWD 3

/proc/70943/smaps:AnonHugePages:      2048 kB

UID         PID   PPID  C STIME TTY          TIME CMD

root      70943  70897  0 Jan27 pts/0    00:00:33 /bench/EJR/ycsb161b641/bin/cache SWD 7

/proc/70944/smaps:AnonHugePages:      2048 kB

UID         PID   PPID  C STIME TTY          TIME CMD

root      70944  70897  0 Jan27 pts/0    00:00:29 /bench/EJR/ycsb161b641/bin/cache SWD 4

/proc/70945/smaps:AnonHugePages:      2048 kB

UID         PID   PPID  C STIME TTY          TIME CMD

root      70945  70897  0 Jan27 pts/0    00:00:30 /bench/EJR/ycsb161b641/bin/cache SWD 5

/proc/70946/smaps:AnonHugePages:      2048 kB

UID         PID   PPID  C STIME TTY          TIME CMD

root      70946  70897  0 Jan27 pts/0    00:00:30 /bench/EJR/ycsb161b641/bin/cache SWD 6

/proc/70947/smaps:AnonHugePages:      4096 kB

此外,运行时内存分配存在潜在的性能损失,尤其是对于具有高作业或进程创建率的应用程序。

建议

InterSystems 建议暂时禁用 THP,因为预期的性能提升不适用于 IRIS 共享内存段,并且可能会对某些应用程序产生负面性能影响。

通过运行以下命令检查您的 Linux 系统是否启用了 Transparent HugePages:

对于 Red Hat Enterprise Linux 内核:

# cat /sys/kernel/mm/redhat_transparent_hugepage/enabled

对于其它内核:

# cat /sys/kernel/mm/transparent_hugepage/enabled

上面的命令将显示是否启用了 [always]、[madvise] 或 [never] 标志。如果从内核中删除 THP,则 /sys/kernel/mm/redhat_transparent_hugepage 或 /sys/kernel/mm/redhat/transparent_hugepage 文件不存在。

要在引导期间禁用透明 HugePages,请执行以下步骤:

1. 将以下条目添加到 /etc/grub.conf 文件中的内核引导行:

transparent_hugepage=never

2.重启操作系统

有一种方法也可以即时禁用 THP,但这可能无法提供所需的结果,因为该方法只会停止为新进程创建和使用 THP。已经创建的 THP 不会被反汇编成常规内存页。建议完全重新启动系统以在启动时禁用 THP。

*注意:建议与您各自的 Linux 经销商确认以确认用于禁用 THP 的方法。

讨论 (0)1
登录或注册以继续