C 对文本和数据段使用hugepages

C 对文本和数据段使用hugepages,c,linux-kernel,elf,huge-pages,C,Linux Kernel,Elf,Huge Pages,我正在探索是否有可能按照中的指南使用hugepages支持文本和数据段 我已经按照建议重新链接了应用程序,添加了“-B/usr/share/libhugetlbfs-Wl,--hugetlbfs-align”,并使用“hugetl--text--data--heap--bss/path/to/my/application”启动了应用程序 但我不太确定如何验证数据和文本段是否确实复制到hugetlbfs文件系统上的文件中 通过检查/proc/{pid}/maps,可以看到hugepages用于堆,

我正在探索是否有可能按照中的指南使用hugepages支持文本和数据段

我已经按照建议重新链接了应用程序,添加了“-B/usr/share/libhugetlbfs-Wl,--hugetlbfs-align”,并使用“hugetl--text--data--heap--bss/path/to/my/application”启动了应用程序

但我不太确定如何验证数据和文本段是否确实复制到hugetlbfs文件系统上的文件中

通过检查/proc/{pid}/maps,可以看到hugepages用于堆,但不用于文本和数据段,因为前两个地址范围映射到应用程序,而不映射到hugepage文件系统

我的理解正确吗?实际上,我怀疑我的结论,即hugepages用于/proc/{pid}/maps中的heap也是不正确的

如何验证hugepages中的数据段和文本段是否已备份?我知道如果成功,数据和文本段将被复制到hugetlbfs文件系统,但如何验证呢

谢谢

/proc/{pid}/maps的输出

00400000-00d2c000 r-xp 00000000 fd:02 46153351 /path/to/my/application

00f2b000-00fa3000 rw-p 0092b000 fd:02 46153351 /path/to/my/application

00fa3000-00fbb000 rw-p 00000000 00:00 0

02a0c000-02a2d000 rw-p 00000000 00:00 0  [heap]

40000000-80000000 rw-p 00000000 00:15 2476090 /dev/hugepages-1G/libhugetlbfs.tmp.nS7exn (deleted)
检查

包含关于给定进程使用的每个内存区域的信息,其中包括允许确定哪些节点用于页面的信息


对于formar,请参见

如果设置HUGETLB_DEBUG=1变量,它将告诉您大量有用的信息。其中之一是:

信息:段2的对齐memsz太小:0x864<0xFFFFFFFFFFFFFF

如果成功,它看起来像:

libhugetlbfs[zupa:154297]:信息:段0(phdr 2):0x400000-0x400864(filesz=0x864)(prot=0x5)

libhugetlbfs[zupa:154297]:信息:段1(phdr 3):0x600868-0x600af8(filesz=0x27c)(prot=0x3)

libhugetlbfs[zupa:154297]:DEBUG:Total memsz=0xaf4,最大段的memsz=0x864

libhugetlbfs[zupa:154297]:信息:libhugetlbfs版本:2.16(已修改)

libhugetlbfs[zupa:154951]:信息:映射到0x2aac0000处的hugeseg。正在从0x400000复制0x864字节和0个额外字节…完成

libhugetlbfs[zupa:154297]:信息:准备成功

libhugetlbfs[zupa:154952]:信息:映射到0x2aac0000处的hugeseg。正在从0x600868复制0x27c字节和0个额外字节…完成

libhugetlbfs[zupa:154297]:信息:准备成功


有关每个映射的详细信息,请参见/proc/$pid/smap,包括匿名hugepages。BSS是一种与堆类似的匿名映射,它将使用透明的hugemages进行充分对齐的映射。
   /proc/$pid/numa_maps