我有一个程序可以处理由大量(300+)大内存(40MB+)映射文件组成的大型数据集。尽管以顺序方式访问所有文件,但它们都需要一起使用。目前我正在对文件进行内存映射,然后使用madvise
withMADV_SEQUENTIAL
因为我不希望这个东西比它需要的更占用内存(没有任何madvise
消费成为问题)。程序运行速度比系统磁盘慢得多(如慢 50 倍)的问题表明它应该运行,并且比线性运行速度更快。随着涉及的文件数量增加。处理 100 个文件的速度比 300 个文件快 10 倍以上,尽管数据量只有 3 倍。我怀疑每次跨越 4kb 页面时内存映射文件都会产生页面错误,最终结果磁盘寻道时间大于磁盘传输时间。
任何人都可以想出比使用madvise
withMADV_WILLNEED
和MADV_DONTNEED
时常使用更好的方法吗?如果这是最好的方法,有什么想法可以展望未来吗?