UPS项目打算用mmap做增量数据管理,对数据可靠性有一定要求,简单做了些实验,结果与大家分享下。
1. 对mmap内存的写操作,会直接进入系统page-cache;msync调用负责把脏的page-cache持久化到硬盘。
2. Page-cache操作系统自身也有管理策略:一个是定期把脏数据(有过更新的)刷回硬盘(默认30s);一个是脏数据达到一定比例,也会触发刷新(默认10%)。
具体可参考:http://www.westnet.com/~gsmith/content/linux-pdflush.htm
3. 通过mmap更新文件(PROT_WRITE和MAP_SHARED模式),文件的mtime和ctime没有发生更新,与man中对mmap的描述不一致。据说是kernel的一个bug,目前还没有修复。
可参考:http://forum.soft32.com/linux/mmap-mtime-updates-ftopict338320.html
https://lkml.org/lkml/2006/5/17/138
从上面实验结果可以判断:
1. 如果使用mmap的进程挂了&#