对文本和数据段使用hugepages

时间:2016-04-12 14:36:03

标签: c linux-kernel elf huge-pages

我正在探索按照https://github.com/libhugetlbfs/libhugetlbfs/blob/master/HOWTO中的指南,使用大页面支持文本和数据段的可能性。

我按照建议添加了“-B / usr / share / libhugetlbfs -Wl, - hugetlbfs-align”重新链接了应用程序并使用“hugectl --text --data --heap --bss /”启动了应用程序路径/要/我的/应用”。

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

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

我的理解是否正确?实际上我怀疑我的结论是,从/ proc / {pid} / maps使用的大页面也是不正确的。

我应该如何验证数据和文本段是否在大页面中得到支持?我知道如果成功但是如何验证数据和文本段将被复制到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)

2 个答案:

答案 0 :(得分:1)

检查

   /proc/$pid/numa_maps

包含有关给定进程使用的每个内存区域的信息,允许 - 以及其他信息 - 确定哪些节点用于页面。

formar的

http://linux.die.net/man/5/numa_maps

答案 1 :(得分:1)

如果你设置HUGETLB_DEBUG = 1变量,它会告诉你很多有用的信息。其中之一是:

  

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

如果成功,它看起来像:

  

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

     

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

     

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

     

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

     

libhugetlbfs [zupa:154951]:INFO:在0x2aaaaac00000处映射hugeseg。从0x400000复制0x864字节和0个额外字节...完成

     

libhugetlbfs [zupa:154297]:INFO:准备成功

     

libhugetlbfs [zupa:154952]:INFO:在0x2aaaaac00000处映射hugeseg。从0x600868复制0x27c字节和0个额外字节...完成

     

libhugetlbfs [zupa:154297]:INFO:准备成功