写在前面
现在团队项目基于NVM的内存管理走到了一个瓶颈区,我的着眼点逐渐迁移到持久内存的一致性问题上来。关于NVM的相关基础知识,我在之前的博客中有过不少介绍,比如一种新型内存SCM(Storage Class Memory)的简单介绍和一种新型内存(SCM)的简单应用思考。一致性历来是做存储系统(比如文件系统,数据库系统)的重中之重,但却一直不是内存管理方面的重点,然而在引进NVM到内存管理中却又使之成为一个不能不解决的关键问题。那么这种来龙去脉到底是什么呢?该如何定义这个一致性问题呢?
NVM中的一致性问题
首先介绍关于现代计算机系统的一个基本事实:内存级reordering。
- 什么叫reordering呢?简单来说就是数据乱序输出。
- 从哪里输出到哪里呢?数据会从cache乱序输出到memory。
- 这个乱序会造成什么问题吗?对于传统的DRAM-DISK架构来说,不会。因为在机器不故障的情况下,乱序执行的数据最终可以达到一致状态;而一旦故障发生在中间某个环节,由于DRAM是易失内存,因此重启时存储在DRAM中的数据会全部丢失,也就无所谓一致不一致了。
- 那么数据从DRAM到DISK也会有reordering过程吗?并不会,因为DISK是DRAM的后备存储器,所以无论是CPU还是cache的reordering过程都不会