概述 对于mmap,您是否能从原理上解析以下三个问题:mmap比物理内存swap空间大情况下,是否有问题?MAPSHARED,MAPPRIVATE,MAPANONYMOUS,MAPNORESERVE到底有什么区别?常听说mmap的读写比传统的系统调用(read,write)快,但真的是这样子吗?原因是什么? 要解决这些疑问,可能还需要在操作系统层面多了解。本文将尝试通过这些问题深入剖析,希望通过这篇文章,能使大家对mmap有较深入的认识,也能在存储引擎的设计中,有所参考。背景 最近在研发分布式日志存储系统,这是一个基于Raft协议的自研分布式日志存储系统,Logstore则是底层存储引擎。 Logstore中,使用mmap对数据文件进行读写。Logstore的存储结构简化如下图: logstoremmap。png Logstore使用了SegmentsFilesIndexFiles的方式存储Log,SegmentFile是存储主体,用于存储Log数据,使用定长的方式,默认每个512M,IndexFile主要用于SegmentFile的内容检索。 Logstore使用mmap的方式读写SegmentFile,SegmentsFiles的个数,主要取决于磁盘空间或者业务需求,一般情况下,Logstore会存储1T5T的数据。什么是mmap 我们先看看什么是mmap。 在