更新时间:2025-07-21 GMT+08:00
相关配置
功能开关
THP的功能开关控制系统是否启用透明大页功能。
配置路径:
/sys/kernel/mm/transparent_hugepage/enabled
参数选项说明:
- always:所有合适的内存分配都尽可能使用大页。
- madvise:仅当程序显式通过madvise()系统调用请求时才使用大页。
- never:彻底禁用透明大页。
碎片整理
由于大页分配需要连续的物理内存区域,长时间运行的系统往往因频繁分配和释放导致内存碎片化。碎片整理(defragmentation)是指内核通过页面迁移等手段合并零散的物理页,从而形成足够大的连续区域用于大页分配。碎片整理可能会导致系统延迟上升,特别是在前台执行时。
配置路径:
/sys/kernel/mm/transparent_hugepage/defrag
参数选项说明:
- always:当前线程始终等待内核整理碎片后再分配大页,可能严重影响响应时间。
- defer:当前线程不会等待,碎片整理在后台异步执行。
- madvise:仅针对显式调用madvise()请求的内存区域进行整理。
- defer+madvise:当前线程不等待,碎片整理交给后台,仅针对明确请求使用大页的内存。
- never:完全不整理碎片,若无法直接分配大页,则回退为小页。
后台合并线程
khugepaged是内核中的后台线程,定期扫描匿名内存区域,将合适的4KB页自动合并为2MB的大页。
相关配置文件目录如下,
/sys/kernel/mm/transparent_hugepage/khugepaged/
关键配置文件:
- defrag:功能开关,可选的配置项如下:
- 1:允许khugepaged主动整理内存碎片。
- 0:关闭khugepaged主动整理内存碎片功能。
- alloc_sleep_millisecs:重试间隔(单位:毫秒),当分配大页失败时,khugepaged下一次尝试分配前的等待时间,默认值为60000。
- pages_to_scan:扫描页数,khugepaged每次唤醒后扫描的页数,默认值为4096。
- scan_sleep_millisecs:扫描间隔(单位:毫秒),用于调节后台扫描频率,默认值为10000。

如业务对延迟敏感,可适当加大扫描间隔,或关闭khugepaged整理功能。
父主题: 透明大页相关调优方法