mmap映射大于4g的文件_高级程序员,应该对MMap有所了解——深入剖析MMap

为什么分享

MMap,我对这个概念其实是不熟悉的,昨天看一篇文章的时候,读到这个名词,所以就专门搜索了一下,这篇文章写得比较全面,所以进行了分享。了解这个概念,有助于提高对操作系统底层的认识。

概述

对于mmap,您是否能从原理上解析以下三个问题:

  1. mmap比物理内存+swap空间大情况下,是否有问题?
  2. MAP_SHARED,MAP_PRIVATE,MAP_ANONYMOUS,MAP_NORESERVE到底有什么区别?
  3. 常听说mmap的读写比传统的系统调用(read, write)快,但真的是这样子吗?原因是什么?

要解决这些疑问,可能还需要在操作系统层面多了解。本文将尝试通过这些问题深入剖析,希望通过这篇文章,能使大家对mmap有较深入的认识,也能在存储引擎的设计中,有所参考。

背景

最近在研发分布式日志存储系统,这是一个基于Raft协议的自研分布式日志存储系统,Logstore则是底层存储引擎。

Logstore中,使用mmap对数据文件进行读写。Logstore的存储结构简化如下图:

f3a94b61565e7a4931c64fe0cc6769f1.png

logstore mmap.png

Logstore使用了Segments Files + Index Files的方式存储Log,Segment File是存储主体,用于存储Log数据,使用定长的方式,默认每个512M,Index File主要用于Segment File的内容检索。

Logstore使用mmap的方式读写Segment File,Segments Files的个数,主要取决于磁盘空间或者业务需求,一般情况下,Logstore会存储1T~5T的数据。

什么是mmap

我们先看看什么是mmap。

在<>这本书中,mmap定义为:Linux通过将一个虚拟内存区域与一个磁盘上的对象(object)关联起来,以初始化这个虚拟内存区域的内容,这个过程称为内存映射(memory mapping)。

在Logstore中,mapping的对象是普通文件(Segment File)。

mmap的原理

mmap在进程虚拟内存做了什么

我们先来简单看一下mapping一个文件,mmap做了什么事情。如下图所示:

03447a32a083c1be919860e44170e4ae.png

map file.png

假设我们mmap的文件是FileA,在调用mmap之后,会在进

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值