c - 文本和数据段使用大页

标签 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,可以看出,大页用于堆,但不用于文本和数据段,因为前两个地址范围映射到应用程序,而不是大页文件系统。

我的理解正确吗?实际上我怀疑我的结论,即大页用于来自/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)

最佳答案

检查

   /proc/$pid/numa_maps

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

有关格式,请参阅 http://linux.die.net/man/5/numa_maps

关于c - 文本和数据段使用大页,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36576462/

相关文章:

c - 在 C 中隐藏类型定义

linux - 什么会导致产生SIGHUP?

c - Linux头文件中的__VMKLNX__是什么?

c - Wait_event_interruptible 与wake_up_interruptible

_edata 值可以通过 ELF 头或程序头中的信息推断出来吗?

shared-libraries - 为什么 libtool 的 "current"在 BSD 上用作 "SOVERSION"而不是 "major"?

c - 尝试创建一个程序来计算系列 𝑆 = 1^2 - 2^2 + 3^2

c - 多线程数组的段错误

c - 动态符号的地址从何而来

c++ - 对齐和未对齐的内存访问?