静态二进制文件中的文本段为什么可能不可共享?

4
我正在尝试在Linux x86的小二进制文件中追踪不需要的脏页面。整个二进制文件小于4k页(没有使用glibc编译)。在我的笔记本电脑上运行2.6.32内核时,.text/proc/$pid/smaps中显示为Private_Clean: 4Private_Dirty: 0,与预期相符。但是,在我的服务器上运行2.6.36时,.textPrivate_Dirty: 4。有什么想法是什么原因造成这种情况?据我所知,没有启用任何地址布局随机化或类似功能(我已禁用所有相关设置)。有什么想法是什么导致程序的.text变脏?
$ strace ~/em2
execve("/home/R/em2", ["/home/R/em2"], [/* 28 vars */]) = 0
nanosleep({100000, 0}, ^C <unfinished ...>

现在 smaps 显示 .textPrivate_Clean: 4。这很奇怪,因为我实际上有两个不同的二进制文件,在不同的机器上编译,当它们在我的服务器上运行时都显示脏页,现在它们都是干净的了。对不起浪费大家的时间。如果问题不再出现,我会关闭/删除这个问题或采取适当的措施,因为我无法再现它。


1
请将smaps的摘录(显示您程序文件名的所有条目 - 通常至少有三个)添加到您的帖子中。 - user562374
1
请您能否提供您的应用程序的 ldd {yourapp}strace {yourapp} 2>&1|grep "^mmap\|mprotect" 的输出结果。 - Raphael Bossek
1
顺便提一下,一定要阅读 Ulrich Drepper 的《如何编写共享库》(http://people.redhat.com/drepper/dsohowto.pdf)。 - Raphael Bossek
1个回答

2
问题解决了:显然,Linux有一个“特性”(我会称之为bug),如果二进制文件在创建后还没有被刷新到磁盘上,页面将显示为Private_Dirty。这就是为什么问题在一段时间后神奇地消失了。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接