数据库不用mmap

你确定你想用 MMAP 实现数据库么?_哔哩哔哩_bilibili

MMAP 的随机读与顺序读的性能表现不好,以及对于写主要是不可控的刷入时机以及代码冗余,所以 MMAP 不适合在数据库中使用。

mmap是posix系统调用,它提供由操作系统管理内存映射的文件。基于mmap的文件io并不适合您的dbms。持久化存储中读取和写入文件的能力(persistent file storage)。一些流行使用的是内存映射文件io即mmap。在程序需要文件页之前,他实际上不会将文件页加载到内存。但是当操作系统检索页面的时候,他会意识到内存中没有关联的物理页面,所以它需要触发一个页面错误才能从磁盘上获取它,然后OS向页面添加物理地址映射到虚拟地址的条目,映射也将被存储在称为转译后备缓冲区或TLB的特殊cpu缓存中,这将有助于加速未来的重复访问,所以我们不总是在页表中进行查找内容

操作系统管理文件io,您完全不知道哪些页面在内存中,哪些页在磁盘上,意味着,任何时候读取页面时,您都可能会阻塞在操作系统获取页面

根据头中的校验和验证刚从磁盘读取的页面是一个很好的事件 ,并在页面写回磁盘之前,再次检查页面是否损坏,但是文件io发生之前,您仍然没有任何可见性,一切有OS处理

操作系统只使用单个进程执行页面移除 ,在我们的实验中,这变成了cpu的约束(cpu bound)。其次是同步页表的开销,以及高竞争下关联的数据结构(本例中100个并发线程),TLB shootdowns(TLB缓存存储的是CPU中的页表条目),当页边被逐出时,这些条目需要删除,这需要昂贵的处理器间中断

TLB shootdown是指在多处理器系统中,当一个处理器修改了共享内存中的页表信息时,需要通知其他处理器相应的TLB项已经失效,需要被清除。这个过程就称为TLB shootdown。

在多处理器系统中,每个处理器都有自己的TLB用于加速虚拟地址到物理地址的转换。当一个处理器修改了共享内存中的页表信息,比如将某个页面标记为无效或者修改了映射关系,其他处理器的TLB中可能仍然包含该页面的映射信息,这时就需要进行TLB shootdown操作,通知其他处理器清除相应的TLB项。

TLB shootdown通常由操作系统或者硬件协助完成,确保各个处理器的TLB保持一致性。这样可以避免因为不一致的TLB导致的内存访问错误或者数据一致性问题。

TLB shootdown是多处理器系统中保证内存一致性的重要机制之一,通过协调各个处理器的TLB,确保共享内存中的数据一致性。

相关推荐
ZePingPingZe1 分钟前
不使用Spring事务的管理—原生JDBC实现事务管理
java·数据库·spring
与遨游于天地11 分钟前
了解Redis
数据库·redis·缓存
TG:@yunlaoda360 云老大13 分钟前
如何了解华为云国际站代理商CDN主要有什么作用呢?
大数据·数据库·华为云
毕设十刻14 分钟前
基于Vue的家教预约系统7fisz(程序 + 源码 + 数据库 + 调试部署 + 开发环境配置),配套论文文档字数达万字以上,文末可获取,系统界面展示置于文末
前端·数据库·vue.js
lightningyang15 分钟前
渗透入门之SQL 注入(1)
数据库·sql·渗透·sql注入·天枢一体化虚拟仿真平台
阿坤带你走近大数据21 分钟前
Oracle专家级数据库工程师的认知与经验
数据库·oracle
ZePingPingZe29 分钟前
MySQL-InnoDB锁与事务
数据库·mysql
韩立学长41 分钟前
Springboot森林资源检测管理系统xowdi7nq(程序、源码、数据库、调试部署方案及开发环境)系统界面展示及获取方式置于文档末尾,可供参考。
数据库·spring boot·后端
h79971043 分钟前
高效统计mysql数据踩坑笔记
数据库·mysql
爱可生开源社区1 小时前
在数据库迁移中,如何让 AI 真正“可用、可信、可落地”?
数据库·sql·llm