malloc使用大页

glibc可以通过Tunables参数来设置malloc使用大页,注意该特性对glibc的版本有要求,可通过ldd --version命令确认当前glibc版本。

glibc版本

启用方式

2.28到2.34之间(不包括2.34)

  1. 首先需要额外安装libhugetlbfs库。
  2. 安装完成后通过命令find /usr -name "libhugetlbfs.so*"寻找对应动态库路径。一般在/usr/lib64/libhugetlbfs.so路径下,然后执行以下命令:

    export HUGETLB_MORECORE=yes

    export LD_PRELOAD=/usr/lib64/libhugetlbfs.so

glibc版本低于2.34(不包括2.34)只能通过libhugetlbfs库的能力使用标准大页。

大于等于2.34

  • 导入环境变量export GLIBC_TUNABLES=glibc.malloc.hugetlb=1,其中1表示glibc的malloc函数会使用透明大页。
  • export GLIBC_TUNABLES=glibc.malloc.hugetlb=2,2表示glibc的malloc函数会使用标准大页。
  • 如果训练模型场景下,使用标准大页出现报错: Bus error. It is possible that dataloader's workers are out of shared memory. Please try to raise your shared memory limit. ,可以尝试使用透明大页规避这个问题。
  • 若在容器中使用,请先确保容器环境有权限申请大页内存池;低版本glibc(glibc版本低于2.34)采用libhugetlbfs申请大页的方式。