6

我正在使用 mmap() 实现 cp(file copy) 命令。为此,我将源文件映射为 MAP_PRIVATE(我只想读取)模式,并将目标文件映射为 MAP_SHARED 模式(因为我必须写回目标文件的更改内容)。

在执行此操作时,我观察到由于两个原因而发生的许多次要页面错误导致性能下降。1) 为源文件调用 mmap(MAP_PRIVATE) 时按需填零。2) 为目标文件调用 mmap(MAP_SHARED) 时写入时复制。

有什么方法可以禁用 Zero-fill-on-demand 和 Copy-on-write 吗?

谢谢, 哈里什

4

1 回答 1

5

mmap(2) 有 MMAP_POPULATE 标志:

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

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

它应该预先故障映射区域中的所有页面。它应该适用于问题(1),可能不适用于问题(2)(共享)。

于 2012-06-21T14:08:55.593 回答