假设我在C中使用mmap分配缓冲区。是否有任何linux操作可用于确保此缓冲区已被分页到内存中,并且页表中有此缓冲区的条目。我想要这个,因为我看到我的应用程序出现了一些页面错误,即使我的内存远大于应用程序要求。我正在使用CentOS 7.
答案 0 :(得分:2)
通过MAP_POPULATE
as a flag to the mmap
call。这正是它的目的所在。它不会保证页面在内存压力下不会出页,但如果可能的话,它会在mmap
时将它们分页。引用手册页:
MAP_POPULATE(自Linux 2.5.46起)
填充(prefault)页面表以进行映射。对于文件映射,这会导致对文件进行预读。以后访问映射不会被页面错误阻止。自Linux 2.6.23起,仅支持私有映射的MAP_POPULATE。
如果你真的想强迫东西被锁定在内存中,你也可以尝试传递MAP_LOCKED
标志(mlock
s内存阻止页面出来),但这很危险,因为它会阻止它内存管理因此,mlock
页上的上限通常很低,以避免引起问题。