更新时间: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整理功能。