免责声明:本文档可能包含第三方产品信息,该信息仅供参考。阿里云对第三方产品的性能、可靠性以及操作可能带来的潜在影响,不做任何暗示或其他形式的承诺。

概述

本文主要介绍在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,可选的配置项如下:

always

系统全局开启透明大页THP功能。

注意:在Alibaba Cloud Linux 2 4.19.91-18及之后的内核版本中,系统默认设置为always。

never

系统全局关闭透明大页THP功能。

madvise

仅在通过madvise()系统调用,并且设置了MADV_HUGEPAGE标记的内存区域中开启透明大页THP功能。

碎片整理配置

除了上述全局配置外,还有下列两个与透明大页THP相关的碎片整理配置。

透明大页THP碎片整理

发生缺页异常(Page Fault)时,该功能可控制内存分别进行直接回收(Direct Reclaim)、后台回收(Background Reclaim)、直接整理(Direct Compaction)、后台整理(Background Compaction)的行为。开启或关闭该功能的配置文件路径为/sys/kernel/mm/transparent_hugepage/defrag,可选的配置项如下:

always

当系统分配不出透明大页时,暂停内存分配行为,总是等待系统进行内存的直接回收和内存的直接整理。内存回收和整理结束后,如果存在足够的连续空闲内存,则继续分配透明大页。

defer

当系统分配不出透明大页时,转为分配普通的4KB页。同时唤醒kswapd内核守护进程以进行内存的后台回收,唤醒kcompactd内核守护进程以进行内存的后台整理。一段时间后,如果存在足够的连续空闲内存,khugepaged内核守护进程将此前分配的4KB页合并为2MB的透明大页。

madvise

仅在通过madvise()系统调用,并且设置了MADV_HUGEPAGE标记的内存区域中,内存分配行为等同于always。其余部分的内存分配行为保持为:发生缺页异常时,转为分配普通的4 KB页。

注意:在Alibaba Cloud Linux 2 4.19.91-18及之后的内核版本中,系统默认设置为madvise。

defer+madvise

仅在通过madvise()系统调用,并且设置了MADV_HUGEPAGE标记的内存区域中,内存分配行为等同于always。其余部分的内存分配行为保持为defer。

never

禁止碎片整理。

khugepaged碎片整理

与该功能相关的重要配置如下:

功能开关

配置文件路径为/sys/kernel/mm/transparent_hugepage/khugepaged/defrag,可选的配置项如下:

0

关闭khugepaged碎片整理功能。

1

配置为1时,khugepaged内核守护进程会在系统空闲时周期性唤醒,尝试将连续的4 KB页合并成2 MB的透明大页。

注意:

在Alibaba Cloud Linux 2 4.19.91-18及之后的内核版本中,系统默认设置为1。

由于该操作会在内存路径中加锁,并且khugepaged内核守护进程可能会在错误的时间启动扫描和转换大页,因此存在影响应用性能的可能性。

重试间隔

当透明大页THP分配失败时,khugepaged内核守护进程进行下一次大页分配前需要等待的时间。避免短时间内连续发生大页分配失败。默认值为60000,单位为毫秒,即默认等待60秒。配置文件路径如下。

/sys/kernel/mm/transparent_hugepage/khugepaged/alloc_sleep_millisecs

唤醒间隔

khugepaged内核守护进程每次唤醒的时间间隔。默认值为10000,单位为毫秒,即默认每10秒唤醒一次。配置文件路径如下。

/sys/kernel/mm/transparent_hugepage/khugepaged/scan_sleep_millisecs

扫描页数

khugepaged内核守护进程每次唤醒后扫描的页数。默认值为4096个页。配置文件路径如下。

/sys/kernel/mm/transparent_hugepage/khugepaged/pages_to_scan

配置建议

透明大页THP能增加转译后备缓冲器TLB(Translation Lookaside Buffer)命中的几率,减少内存访问页表项PTE(Page Table Entries)时的开销,使系统获得性能提升。透明大页THP试图进一步释放运维压力,使用户在无感知的情况下享受到性能的提升。然而,透明大页THP的资源是有限的,当系统达到透明大页THP分配的瓶颈时,需要使用一系列机制来保证系统的正常运行。在这种情况下,系统的默认配置不一定适用于所有用户场景。

透明大页THP的利弊在业内早有讨论,至今业内的普遍观点依然认为:在系统运维人员不够了解透明大页THP的前提下,使用系统的默认配置对于许多应用来说是存在风险的。主要的风险可能有:

如果透明大页THP的碎片整理开关设置为always,内存紧张时会和普通4 KB页一样,出现内存的直接回收或内存的直接整理,这两个操作均是同步等待的操作,会造成系统性能下降。

如果khugepaged碎片整理的开关设置为1,在khugepaged内核守护进程进行内存合并操作时,会在内存路径中加锁。如果khugepaged碎片整理在错误的时间被触发,会对内存敏感型应用造成性能影响。

如果保持开启透明大页THP,同时关闭上述两个碎片整理的开关,则内存分配过程相较于4 KB页可能会更快地消耗完空闲页资源,然后系统开始进入内存回收和内存整理的过程,反而更早的出现系统性能下降。

综上所述,透明大页THP对系统性能的影响,不能一概而论。需要根据业务、系统、应用的实际情况进行调整,下面列举常见的示例场景供您参考:

注意:请您在修改任何配置文件之前,备份相关配置文件或者创建ECS快照,确保数据安全。

如果您对系统内核有足够信心,建议您参考下列命令,开启试验性开关(defer+madvise),使内核的内存后台回收(kswapd内核守护进程)、内存的后台整理(kcompactd内核守护进程)与khugepaged内核守护进程尽可能协同工作,在内存整理和性能平稳之间找到平衡点。

echo 'defer+madvise' > /sys/kernel/mm/transparent_hugepage/defrag

如果您发现系统中的khugepaged内核守护进程达到或接近100%的CPU使用率时,可以考虑增加khugepaged内核守护进程唤醒的间隔时间,比如修改为30秒,示例命令如下。

echo 30000 > /sys/kernel/mm/transparent_hugepage/khugepaged/scan_sleep_millisecs

或者直接关闭khugepaged内核守护进程,示例命令如下。

echo 0 > /sys/kernel/mm/transparent_hugepage/khugepaged/defrag

在特殊场景下,例如,数据库应用有大量访问请求的场景、大量延迟敏感型应用场景或大量短生命周期的内存分配(Short-lived Allocation)场景,如果系统的稳定性比性能更重要,建议关闭透明大页THP功能。在系统运行时关闭透明大页THP的示例命令如下。

echo 'never' > /sys/kernel/mm/transparent_hugepage/enabled

注意:该命令仅在本次系统运行期间有效,系统重启后透明大页THP功能仍会开启。如果需要持久关闭透明大页THP功能,请参见更多信息。

查看透明大页THP的使用情况

透明大页THP的使用情况主要分为两个层面,分别如下:

系统级别

在系统中执行下列示例命令,查看透明大页THP的使用情况。

cat /proc/meminfo | grep AnonHugePages

系统显示的示例如下。

AnonHugePages:    614400 kB

说明:如果系统返回非零值,则说明系统中使用了一定数量的透明大页THP。

进程级别

在系统中执行下列示例命令,查看某个进程使用的透明大页THP。

cat /proc/[$PID]/smaps | grep AnonHugePages

说明:[$PID]指进程的PID。

系统显示的示例如下。

AnonHugePages: 0 kBAnonHugePages: 0 kBAnonHugePages: 0 kBAnonHugePages: 0 kBAnonHugePages: 0 kBAnonHugePages: 0 kBAnonHugePages: 0 kBAnonHugePages: 0 kBAnonHugePages: 0 kBAnonHugePages: 0 kB

更多信息

透明大页THP功能概念

透明大页THP可以使内核为用户进程自动分配大页(Huge Pages),而无需像HugeTLB一样预先保留一定数量的大页。此功能在一定程度上使用户的应用程序性能得以提升,然而在实际生产中,如果该选项设置不当,反而可能造成应用程序的性能波动。

持久关闭THP功能

以root用户依次执行下列命令,在内核启动参数中添加关闭透明大页THP功能的参数。

grubby --args="transparent_hugepage=never" --update-kernel="/boot/vmlinuz-$(uname -r)"

reboot

相关文档

请参考下列文档了解更多关于透明大页THP的功能说明和风险。

适用于

云服务器ECS

透明大页相关内核参数_Alibaba Cloud Linux 2系统中与透明大页THP相关的性能调优方法...相关推荐

  1. 从蚂蚁金服裸辞,京东三面遭调优猛击,闭关俩月啃完653页性能调优实战手册,拿到京东offer

    性能优化是很多 Java 程序员希望彻底掌握的一门技能.很多人都想学好性能优化,希望能够在自己的工作中灵活运用提高性能,从而为用户提供良好的用户体验.然而,很多人在设计技术方案或者编码时缺乏系统地.方 ...

  2. 透明大页相关内核参数_Oracle关于内存参数及大页设置的相关概念和设置之hugepage概念和配置...

    一.概念: Oracle 数据库和 Linux 内存管理 系统中使用的内存越多,管理该内存所需的资源也就越多.对于 Linux 操作系统,通过 Linux kswapd 进程和页表内存结构(针对系统中 ...

  3. 优化Linux内核参数/etc/sysctl.conf sysctl 《高性能Linux服务器构建实战:运维监控、性能调优与集群应用》...

    优化Linux内核参数/etc/sysctl.conf  sysctl  <高性能Linux服务器构建实战:运维监控.性能调优与集群应用> http://book.51cto.com/ar ...

  4. 大数据培训:Spark性能调优与参数配置

    Spark性能调优-基础篇 众所周知,正确的参数配置对提升Spark的使用效率具有极大助力,帮助相关数据开发.分析人员更高效地使用Spark进行离线批处理和SQL报表分析等作业. 推荐参数配置模板如下 ...

  5. 深入理解JVM虚拟机14:JVM性能调优的6大步骤,及关键调优参数详解

    JVM内存调优 对JVM内存的系统级的调优主要的目的是减少GC的频率和Full GC的次数. 1.Full GC 会对整个堆进行整理,包括Young.Tenured和Perm.Full GC因为需要对 ...

  6. 如何开启jvm日志_直通BAT必考题系列:JVM性能调优的6大步骤,及关键调优参数详解...

    JVM系列 直通BAT必考题系列:7种JVM垃圾收集器特点,优劣势.及使用场景 直通BAT必考题系列:JVM的4种垃圾回收算法.垃圾回收机制与总结 直通BAT必考题系列:深入详解JVM内存模型与JVM ...

  7. 王家林大咖新书预发布:清华大学出版社即将出版《Spark大数据商业实战三部曲:内核解密|商业案例|性能调优》第二版 及《企业级AI技术内幕讲解》

    王家林大咖新书预发布:清华大学出版社即将出版<Spark大数据商业实战三部曲:内核解密|商业案例|性能调优>第二版,新书在第一版的基础上以Spark 2.4.3版本全面更新源码,并以Ten ...

  8. hadoop distcp 参数调优_linux性能调优总结 - 星火撩原

    系统性能一直是个热门话题.做运维这几年也一直在搞性能调优,写这个文章也算是对工作的总结. 讲调优第一步是,要讲为什么要调优?也就是系统分析,分析还需要有指标,做好性能监控的情况下,看到确实需要调优才能 ...

  9. 参数调优为什么要采样_程序员精进之路:性能调优利器--火焰图

    本文主要分享火焰图使用技巧,介绍 systemtap 的原理机制,如何使用火焰图快速定位性能问题原因,同时加深对 systemtap 的理解. 让我们回想一下,曾经作为编程新手的我们是如何调优程序的? ...

最新文章

  1. html的下拉框的几个基本使用方法
  2. plor 回归的r方_简单线性回归模型
  3. endnotex7怎么导入中文文献_EndNote X7自动导入PDF功能详解 | 科研动力
  4. python 网络设备管理软件_一个查看网络设备信息Python小程序
  5. 使用内置的Gallery应用程序选择图形
  6. 中班机器人上课视频_家委会:出班费买智能扫地机器人,不用家长搞卫生了,莫名其妙...
  7. 大白菜ZSKAME下载 2013官方地址
  8. oracle典型安装配置,Oracle的安装配置一些有关问题
  9. HDU 6312.Game-博弈-签到题 (2018 Multi-University Training Contest 2 1004)
  10. 系统各层关注的内容【DDDD笔记】
  11. 好看流光风格个人主页源码
  12. 施耐德 m340 编程手册_施耐德电气自动化软件汇总
  13. Linux C聊天室的实现
  14. NLP自然语言处理-文本摘要简述
  15. mysql 修改校对规则_调整MYSQL校对规则
  16. Vue3+Vite+TS后台项目 ~ 10.商品管理
  17. PrivateKey私匙获取,签名生成
  18. 收集国人不良习惯 -- 有哪些不好的习惯敬请指出,那些不能算作不好的 只能说习俗不同也请指出
  19. pdf水印去除和word转换
  20. arping常见用法

热门文章

  1. “刚毕业1年,做Python能挣多少?”网友:吹的不多...
  2. YGC 问题排查,又涨姿势了!
  3. 国外开发者怒怼:“GitHub 变得不再有趣了!”
  4. 不来看看这些 VUE 的生命周期钩子函数? | 原力计划
  5. 腾讯加持,雷军力荐,这款游戏手机要火?
  6. 多云场景下,程序员该如何管理云凭据?
  7. 2020 年,哪些行业将会遭到 5G 洗礼?
  8. 真相:Java 开发者钟爱 Kotlin 的五个原因
  9. 战不胜抖音的腾讯微视,即将被判“死刑”? | 畅言
  10. PHP 5 将于年底停止更新,六成用户将面临安全风险