如何禁用写入时复制和零填充需求的mmap()

我正在执行使用mmap()的cp(文件复制)命令。 为此我映射MAP_PRIVATE(正如我只想读取)模式和目标文件在MAP_SHARED模式(因为我必须写回目标文件的更改内容)的源文件。

在这样做的时候,我观察到由于2个原因导致的大量小页面错误导致的性能损失。 1)在调用源文件的mmap(MAP_PRIVATE)时,根据需要进行零填充。 2)在调用mmap(MAP_SHARED)作为目标文件时复制写入。

有什么办法可以禁用零点填充和写入时复制?

谢谢Harish

有mmap(2)的MMAP_POPULATE标志:

http://linux.die.net/man/2/mmap

MAP_POPULATE(自Linux 2.5.46开始)为映射填充(缺省)页表。 对于文件映射,这会导致文件上的预读。 以后访问映射不会被页面错误阻塞。 自Linux 2.6.23以来,MAP_POPULATE仅支持私有映射。

它应该预先排除mmapped区域中的所有页面。 它应该为问题(1)工作,并且可能不适用于问题(2)(共享)。