2

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

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

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

检查 /proc/{pid}/maps 可以看出,hugepages 用于堆,但不用于文本和数据段,因为前两个地址范围映射到应用程序而不是 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)
4

2 回答 2

2

查看

   /proc/$pid/numa_maps

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

形式见http://linux.die.net/man/5/numa_maps

于 2016-08-30T01:04:20.497 回答
1

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

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

如果成功,它看起来像:

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

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

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

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

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

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

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

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

于 2017-11-13T11:01:27.713 回答