首页/系统/Linux 内核与性能调优速查/khugepaged 合并线程观测
内存与 OOM58 条

khugepaged 合并线程观测

khugepaged 后台把连续 4KiB 页合并为 2MiB 大页;pages_collapsed 持续增长说明合并活跃,合并过程可能影响相关进程的延迟。

khugepaged 是什么

khugepaged 是透明大页(THP)的后台合并线程:它扫描进程的匿名内存,把连续的 4 KiB 页合并成一个 2 MiB 大页,减少 TLB 缺失、提升大内存应用的访存效率。合并是异步进行的,因此它既是性能优化手段也是抖动来源——合并过程需要拷贝与迁移页面,可能给相关进程带来延迟尖峰,pages_collapsed 的增长速度就是它活跃程度的直接指标。

基本信息

线程查看ps -eo pid,pcpu,psr,comm | grep khugepaged
核心计数/sys/kernel/mm/transparent_hugepage/khugepaged/pages_collapsed
调优文件pages_to_scan、scan_sleep_millisecs、alloc_sleep_millisecs、max_ptes_none
全局开关/sys/kernel/mm/transparent_hugepage/enabled(always/madvise/never)
权限读取一般开放,写入需 root
生效层级宿主全局参数,容器内改不了宿主的 THP 行为

典型使用场景

  • 排查偶发延迟尖峰是否与页面合并有关:把 pages_collapsed 增量与业务延迟对齐观察
  • 确认 THP 是否真的在工作:只看开关不够,要看到合并计数增长
  • 降低空闲时的 CPU 占用:khugepaged 扫描本身消耗 CPU,可调整扫描与睡眠间隔
  • 数据库、缓存类应用评估 THP 收益与风险,必要时切到 madvise 模式按需启用
  • 判断大页配置是否生效:结合 AnonHugePages 与显式大页配置一起看

观察与调整

观察与调整
ps -eo pid,pcpu,psr,comm | grep khugepaged  # 扫描线程的 CPU 占用与所在核
cat /sys/kernel/mm/transparent_hugepage/enabled  # always / madvise / never
cat /sys/kernel/mm/transparent_hugepage/khugepaged/pages_collapsed  # 累计合并页数,两次采样看增量
cat /sys/kernel/mm/transparent_hugepage/khugepaged/scan_sleep_millisecs  # 扫描间隔(毫秒)
cat /sys/kernel/mm/transparent_hugepage/khugepaged/pages_to_scan  # 每轮扫描页数上限
grep -E 'AnonHugePages|ShmemPmdMapped' /proc/meminfo  # 大页的实际使用量

调优文件读法

文件含义调整影响
pages_collapsed累计合并成的大页数量看增量判断活跃度
pages_to_scan每轮扫描的页数上限调大加快合并也增加 CPU 开销
scan_sleep_millisecs两轮扫描之间的睡眠时间调大降低干扰、合并变慢
alloc_sleep_millisecs分配失败后的睡眠时间内存紧张时避免反复尝试
max_ptes_none允许合并的空缺页表比例调大更易合并,也更费内存
pages_collapsed 是累计值,单次读取没有意义,必须两次采样求增量;判断抖动是否与合并有关时,应把它和业务延迟曲线放在同一时间轴上对照,而不是只看平均值。
透明大页(THP)与显式大页(hugetlbfs、vm.nr_hugepages)是两套机制:前者由内核自动合并、对应用透明,后者需要应用显式申请并预留内存。两者都出现「大页」字样但配置与观测方式完全不同。

易错点

  • 只改扫描间隔而不先确认延迟与合并相关:微调收益不确定,却可能让内存占用或延迟表现变化
  • 把 khugepaged 的 CPU 占用当成故障:后台扫描本来就消耗 CPU,关键是判断它是否影响关键业务
  • 直接关闭 THP 而不评估代价:部分负载会因 TLB 缺失增加而吞吐下降,改动前应做前后对比
  • 混淆 THP 与显式大页:两者的开启方式、观测文件与失败表现都不同,排查方向容易跑偏
  • 在容器里改 THP 参数并期望只影响本容器:这些文件是宿主级全局参数,容器内通常既不生效也不可见

数据来源与参考

  • Linux 内核 Documentation/admin-guide/mm/transhuge.rst
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌