微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

手动标记内存页面为“脏”

在顺序修改Linux上一个巨大的(〜65GB)内存映射文件时,我注意到了以下行为:

如果我修改文件中的几乎所有内容(我猜每个内存页面至less有一个字节),读/写吞吐量约为40MB / s

如果我只修改了一些页面而不改变其他的页面,那么读/写吞吐量就会大大降低 ,达到大约7MB / s

所以减less事物的数量实际上减less了通过量。 该过程是大量的I / O限制(5%的cpu时间是user ,95%的cpu时间是iowait ),所以实际的处理发生不能解决吞吐量的差异。 我的猜测是,内核分页系统在第一种情况下使用顺序写入,随机写入在后者中写入。 由此产生的频繁寻求会考虑到性能差异。

如果我强制修改每个页面上的数据(例如通过交换一些最低有效位),性能会提高到40MB / s的水平,但这种方法会破坏数据。 有效的NOOP(例如,使用固定模式对页面上的数据进行两次XOR操作对性能没有影响(我使用objdump来validation代码没有被编译器清除)。 我的猜测是,双XOR完全在cpucaching内处理,而第二个XOR恢复原始数据,所以没有任何变化到达实际的RAM,从而保持底层内存页面的清洁。

那么有没有办法在第二种情况下提高吞吐量? 具体来说,有没有办法使内核回写甚至select干净的页面,或强有力的手动标记页面为脏编程?

页面表总是在内存中? 页表会被换出吗?

在C#窗口应用程序Datagridview分页

madvise()中MADV_USERFAULT标志的状态是什么?

文件的哪些字节保持映射?

为什么没有将locking的页面计入工作集大小?

如何不覆盖以前的terminal内容

用日历和分页htaccess获得价值

malloc在不同的机器上performance不同

c ++大量的数据处理和分页

虚拟内存:处理一个和系统的一个

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐