更新时间:2020-08-28 09:40
免责声明: 本文档可能包含第三方产品信息,该信息仅供参考。阿里云对第三方产品的性能、可靠性以及操作可能带来的潜在影响,不做任何暗示或其他形式的承诺。
本文主要介绍在Alibaba Cloud Linux 2系统中,与透明大页THP(Transparent Huge Pages)相关的性能调优方法。关于透明大页THP的概念,请参见更多信息。
阿里云提醒您:
- 如果您对实例或数据有修改、变更等风险操作,务必注意实例的容灾、容错能力,确保数据安全。
- 如果您对实例(包括但不限于ECS、RDS)等进行配置与数据修改,建议提前创建快照或开启RDS日志备份等功能。
- 如果您在阿里云平台授权或者提交过登录账号、密码等安全信息,建议您及时修改。
在Alibaba Cloud Linux 2 4.19.81-17.2
及更早的内核版本中,透明大页THP默认配置为madvise
,即限定开启透明大页THP的功能。这一设置与其他主流操作系统不一致,例如RHEL 7、CentOS 7、Amazon Linux 2等。为尽量保证与主流操作系统默认场景的兼容性,从Alibaba Cloud Linux 2 4.19.91-18
内核版本开始,透明大页THP默认配置为always
,即系统全局开启THP功能。
在Alibaba Cloud Linux 2内核中,透明大页THP的配置文件位于/sys/kernel/mm/transparent_hugepage/enabled
,可选的配置项如下:
注意:在Alibaba Cloud Linux 24.19.91-18
及之后的内核版本中,系统默认设置为always
。
madvise()
系统调用,并且设置了MADV_HUGEPAGE
标记的内存区域中开启透明大页THP功能。除了上述全局配置外,还有下列两个与透明大页THP相关的碎片整理配置。
发生缺页异常(Page Fault)时,该功能可控制内存分别进行直接回收(Direct Reclaim)、后台回收(Background Reclaim)、直接整理(Direct Compaction)、后台整理(Background Compaction)的行为。开启或关闭该功能的配置文件路径为/sys/kernel/mm/transparent_hugepage/defrag
,可选的配置项如下:
madvise()
系统调用,并且设置了MADV_HUGEPAGE
标记的内存区域中,内存分配行为等同于always
。其余部分的内存分配行为保持为:发生缺页异常时,转为分配普通的4 KB页。
注意:在Alibaba Cloud Linux 24.19.91-18
及之后的内核版本中,系统默认设置为madvise
。
madvise()
系统调用,并且设置了MADV_HUGEPAGE
标记的内存区域中,内存分配行为等同于always
。其余部分的内存分配行为保持为defer
。与该功能相关的重要配置如下:
/sys/kernel/mm/transparent_hugepage/khugepaged/defrag
,可选的配置项如下:1
时,khugepaged内核守护进程会在系统空闲时周期性唤醒,尝试将连续的4 KB页合并成2 MB的透明大页。
注意:
- 在Alibaba Cloud Linux 2
4.19.91-18
及之后的内核版本中,系统默认设置为1
。- 由于该操作会在内存路径中加锁,并且khugepaged内核守护进程可能会在错误的时间启动扫描和转换大页,因此存在影响应用性能的可能性。
60000
,单位为毫秒,即默认等待60秒。配置文件路径如下。
/sys/kernel/mm/transparent_hugepage/khugepaged/alloc_sleep_millisecs
10000
,单位为毫秒,即默认每10秒唤醒一次。配置文件路径如下。
/sys/kernel/mm/transparent_hugepage/khugepaged/scan_sleep_millisecs
/sys/kernel/mm/transparent_hugepage/khugepaged/pages_to_scan
透明大页THP能增加转译后备缓冲器TLB(Translation Lookaside Buffer)命中的几率,减少内存访问页表项PTE(Page Table Entries)时的开销,使系统获得性能提升。透明大页THP试图进一步释放运维压力,使用户在无感知的情况下享受到性能的提升。然而,透明大页THP的资源是有限的,当系统达到透明大页THP分配的瓶颈时,需要使用一系列机制来保证系统的正常运行。在这种情况下,系统的默认配置不一定适用于所有用户场景。
透明大页THP的利弊在业内早有讨论,至今业内的普遍观点依然认为:在系统运维人员不够了解透明大页THP的前提下,使用系统的默认配置对于许多应用来说是存在风险的。主要的风险可能有:
always
,内存紧张时会和普通4 KB页一样,出现内存的直接回收或内存的直接整理,这两个操作均是同步等待的操作,会造成系统性能下降。1
,在khugepaged内核守护进程进行内存合并操作时,会在内存路径中加锁。如果khugepaged碎片整理在错误的时间被触发,会对内存敏感型应用造成性能影响。综上所述,透明大页THP对系统性能的影响,不能一概而论。需要根据业务、系统、应用的实际情况进行调整,下面列举常见的示例场景供您参考:
注意:请您在修改任何配置文件之前,备份相关配置文件或者创建ECS快照,确保数据安全。
echo 'defer+madvise' > /sys/kernel/mm/transparent_hugepage/defrag
echo 30000 > /sys/kernel/mm/transparent_hugepage/khugepaged/scan_sleep_millisecs或者直接关闭khugepaged内核守护进程,示例命令如下。
echo 0 > /sys/kernel/mm/transparent_hugepage/khugepaged/defrag
echo 'never' > /sys/kernel/mm/transparent_hugepage/enabled
注意:该命令仅在本次系统运行期间有效,系统重启后透明大页THP功能仍会开启。如果需要持久关闭透明大页THP功能,请参见更多信息。
透明大页THP的使用情况主要分为两个层面,分别如下:
cat /proc/meminfo | grep AnonHugePages系统显示的示例如下。
AnonHugePages: 614400 kB
说明:如果系统返回非零值,则说明系统中使用了一定数量的透明大页THP。
cat /proc/[$PID]/smaps | grep AnonHugePages
说明:[$PID]指进程的PID。系统显示的示例如下。
AnonHugePages: 0 kB AnonHugePages: 0 kB AnonHugePages: 0 kB AnonHugePages: 0 kB AnonHugePages: 0 kB AnonHugePages: 0 kB AnonHugePages: 0 kB AnonHugePages: 0 kB AnonHugePages: 0 kB AnonHugePages: 0 kB
透明大页THP可以使内核为用户进程自动分配大页(Huge Pages),而无需像HugeTLB一样预先保留一定数量的大页。此功能在一定程度上使用户的应用程序性能得以提升,然而在实际生产中,如果该选项设置不当,反而可能造成应用程序的性能波动。
以root用户依次执行下列命令,在内核启动参数中添加关闭透明大页THP功能的参数。
grubby --args="transparent_hugepage=never" --update-kernel="/boot/vmlinuz-$(uname -r)"
reboot
请参考下列文档了解更多关于透明大页THP的功能说明和风险。
在文档使用中是否遇到以下问题
更多建议
匿名提交