我正在尝试在Linux x86上搜索小二进制文件中不需要的脏页面。整个二进制文件小于4k页(它没有glibc编译)。在运行2.6.32内核的笔记本电脑上,.text
在/proc/$pid/smaps
显示为Private_Clean: 4
和Private_Dirty: 0
,正如所料,但在我的服务器上使用2.6.36,{{ 1}}是.text
。知道是什么原因引起的吗?据我所知,没有地址布局随机化或类似的有效(我已经禁用了我所知道的所有相关设置)。知道什么可能弄乱程序的Private_Dirty: 4
?
修改
.text
并且......现在$ strace ~/em2
execve("/home/R/em2", ["/home/R/em2"], [/* 28 vars */]) = 0
nanosleep({100000, 0}, ^C <unfinished ...>
将smaps
显示为.text
。这很奇怪,因为我实际上有两个不同的二进制文件在不同的机器上编译,两者在我的服务器上运行时显示无法解释的脏页,现在它们都是干净的。抱歉浪费了每个人的时间。如果问题没有回来,我会关闭/删除这个问题或任何合适的问题,因为我再也无法复制它。
答案 0 :(得分:2)
问题解决了:显然Linux有一个“功能”(我称之为bug),如果二进制文件在创建之后尚未刷新到磁盘,则页面显示为Private_Dirty
。这就是为什么问题在一段时间后神秘地消失了。