我在具有 64G RAM 和大量磁盘空间的 debian-64 上运行专门的数据库守护程序。它使用磁盘上的哈希表(已映射)并通过常规 write() 调用将实际数据写入文件。当进行大量更新时,mmap 的很大一部分会变脏,页面缓存会尝试将其刷新到磁盘,从而产生大量随机写入,这反过来会降低对数据文件的常规(顺序)写入的性能.
如果可以延迟 mmaped 区域的页面缓存刷新,性能会提高(我假设),因为对脏页面的多个(或全部)更改将一次写入,而不是每次更新一次(最坏的情况,实际上当然,无论如何它聚合了很多变化)。
所以我的问题是:是否可以延迟内存映射区域的页面缓存刷新?或者是否可以优先考虑常规写入?或者有人有其他想法吗?madvise 和 posix_fadvise 似乎没有任何区别......