Linux hugepage 介绍和配置

发布时间: 更新时间: 总字数:477 阅读时间:1m 作者: IP上海 分享 网址

Linux 以 页(page)为单位管理内存,默认内存页面的大小为 4KB。但当程序运行内存(RAM)需求量较大时,默认 4KB 大小的页面会导致较多的 TLB miss缺页中断,从而大大影响应用程序性能。Hugepage(大页内存) 应运而生。

说明

不同操作系统对 Hugepage 表述不同:

  • Linux : HugePages
  • BSD : SuperPages
  • Windows : LargePages

一些术语:

  • Page Table(页表) 是一种内存管理的实现方式,用于物理地址逻辑地址之间的映射。对于内存的访问,先是访问Page Table,然后根据Page Table中的映射关系,隐式的转移到物理地址来存取数据
  • TLB(Translation Lookaside Buffer) 是虚拟地址到物理地址转换cache,包含了部分Page Table的映射关系,用于快速实现虚拟地址到物理地址的转换
  • hugetlb 是 TLB 中指向 HugePage 的一个入口

信息

$ cat /proc/meminfo | grep -i Hugepage
AnonHugePages:     59392 kB
HugePages_Total:       4  # 预留 HugePages 的总个数
HugePages_Free:        4  # 尚未分配的 HugePages 数量 = HugePages_Total - HugePages_Rsvd
HugePages_Rsvd:        0  # HugePages 剩余数量
HugePages_Surp:        0
Hugepagesize:       2048 kB

hugepage 策略

$ cat /sys/kernel/mm/transparent_hugepage/enabled
[always] madvise never

配置

永久配置

修改 /etc/default/grub,在字段 GRUB_CMDLINE_LINUX 后添加:

GRUB_CMDLINE_LINUX="... default_hugepagesz=1G hugepagesz=1G hugepages=16"
  • 修改 grub
grub2-mkconfig -o /boot/grub2/grub.cfg
# or
grub-mkconfig -o /boot/grub/grub.cfg
  • 重启
reboot

说明

  • /etc/sysctl.d/hugepages.conf 也可以控制 hugepage 的配置
  • /proc/cmdline 可以查看启动时的配置

临时配置

2048kB指预留2M的大小为512个

  • 非numa
echo 512 > /sys/kernel/mm/hugepages/hugepages-2048kB/nr_hugepages
  • numa
echo 512 > /sys/devices/system/node/node0/hugepages/hugepages-2048kB/nr_hugepages
echo 512 > /sys/devices/system/node/node1/hugepages/hugepages-2048kB/nr_hugepages

参考

  1. https://www.kernel.org/doc/Documentation/vm/hugetlbpage.txt
Home Archives Categories Tags Statistics
本文总阅读量 次 本站总访问量 次 本站总访客数