首页/系统/Linux 内核与性能调优速查/MADV_HUGEPAGE 按需启用大页
内存与 OOM58 条

MADV_HUGEPAGE 按需启用大页

应用对特定内存区间声明 MADV_HUGEPAGE 启用、MADV_NOHUGEPAGE 关闭 THP,在全局 always 之外获得按需控制能力。

接口madvise(2)
启用MADV_HUGEPAGE
关闭MADV_NOHUGEPAGE
验证/proc/<pid>/smaps 的 AnonHugePages

C 调用片段

C 调用片段
madvise(addr, len, MADV_HUGEPAGE);   // 对该区间启用 THP
madvise(addr, len, MADV_NOHUGEPAGE); // 对该区间关闭

验证

验证
grep -i -A1 'AnonHugePages' /proc/<pid>/smaps | head

易错点

  • 大块分配未按 2MiB 对齐时合并命中率低,应用侧结构体布局会影响效果
  • madvise 仅在 THP=always/madvise 模式下有意义,never 下调用不生效

数据来源与参考

  • man-pages madvise(2)
  • Linux 内核 Documentation/admin-guide/mm/transhuge.rst
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌