如果我在内存映射区域上使用MS_ASYNC调用msync,同步过程将被异步处理。但是,如果我立即对该区域调用munmap,我是否可以假设msync将安全执行?或者我必须在munmap之前调用msync吗? 最佳答案 简短的回答是肯定的——即使您从不调用msync,对内容的更改最终(并且安全地)进入文件。来自man2mmap:MAP_SHAREDSharethismapping.Updatestothemappingarevisibletootherprocessesthatmapthisfile,andarecarriedthrou
我在Linux2.6上的应用程序中使用msync以确保在发生崩溃时的一致性。我需要彻底测试我对msync的使用,但实现似乎正在为我刷新所有相关页面。有没有一种方法可以防止将mmap页面自动刷新到磁盘上,从而暴露我对msync的错误使用? 最佳答案 向@samold致歉,“swappiness”与此无关。Swappiness只会影响内核在内存不足时如何权衡交换脏匿名页面与驱逐页面缓存页面。您需要使用LinuxVMtunablescontrollingthepdflushtask.对于初学者,我建议:sysctl-wvm.dirty_w
我在Linux2.6上的应用程序中使用msync以确保在发生崩溃时的一致性。我需要彻底测试我对msync的使用,但实现似乎正在为我刷新所有相关页面。有没有一种方法可以防止将mmap页面自动刷新到磁盘上,从而暴露我对msync的错误使用? 最佳答案 向@samold致歉,“swappiness”与此无关。Swappiness只会影响内核在内存不足时如何权衡交换脏匿名页面与驱逐页面缓存页面。您需要使用LinuxVMtunablescontrollingthepdflushtask.对于初学者,我建议:sysctl-wvm.dirty_w
我想使用mmap在Linux下运行的C程序中实现程序状态某些部分的持久化,方法是使用带有MAP_SHARED标志集的mmap()将固定大小的结构与众所周知的文件名相关联。出于性能原因,我宁愿根本不调用msync(),并且没有其他程序会访问该文件。当我的程序终止并重新启动时,它将再次映射同一个文件并对它进行一些处理以恢复它在终止之前所处的状态。我的问题是:如果我从不在文件描述符上调用msync(),即使我的进程被SIGKILL终止,内核是否会保证所有对内存的更新都将写入磁盘并随后可恢复?此外,即使我的程序从不调用msync(),内核是否会定期将页面写入磁盘而产生一般系统开销?编辑:我已经
我想使用mmap在Linux下运行的C程序中实现程序状态某些部分的持久化,方法是使用带有MAP_SHARED标志集的mmap()将固定大小的结构与众所周知的文件名相关联。出于性能原因,我宁愿根本不调用msync(),并且没有其他程序会访问该文件。当我的程序终止并重新启动时,它将再次映射同一个文件并对它进行一些处理以恢复它在终止之前所处的状态。我的问题是:如果我从不在文件描述符上调用msync(),即使我的进程被SIGKILL终止,内核是否会保证所有对内存的更新都将写入磁盘并随后可恢复?此外,即使我的程序从不调用msync(),内核是否会定期将页面写入磁盘而产生一般系统开销?编辑:我已经
我们对FlushViewOfFile的时间消耗感兴趣和msync。引用UnmapViewOfFile文档:Tominimizetheriskofdatalossintheeventofapowerfailureorasystemcrash,applicationsshouldexplicitlyflushmodifiedpagesusingtheFlushViewOfFilefunction.FlushViewOfFile()和msync()是昂贵的操作吗?我们问的原因是,在我们的应用程序中,我们可能不需要将系统崩溃时数据丢失的风险降至最低。谢谢, 最佳答案