NVM和DRAM混合存储小结

NVRAM(Non-Volatile Random Access Memory): 非易失性随机访问存储器。电子设备能快速地访问该存储空间的内容(大多数情况下此类设备都是以字节方式地访问这些内容,并且掉电后也能保存它们)。有多种 技术能实现这一策略,其中EEPROM是比较常见的。但是需注意的是:在手机设计中,通常用ROM的一个或两个扇区(实际上更多的情况下这个ROM就是 FLASH)来模拟NVRAM,这样做的原因当然是节省花费了(因为ROM是必须的,而NVRAM则不一定)。

FLASH:是一种ROM(Read Only Memory),与其他ROM的不同在于半导体等级。注意:FLASH必须以扇区为单位访问,而NVRAM以字节为单位访问。这是NVRAM驱动必须实现一个算法(即一开始就复制一个扇区内的所有内容到RAM)的原因。

NVM:非易失性存储器。这是更普遍的概念,它涵盖了所有在掉电后仍能保持其内容的内存组件。在体系设计上这个技术是很有用的,它的技术详情此处省略。实际上,在一个工程中一个带有电池的DRAM(动态随机访问存储器)就能扮演NVM的角色,并且能很好地工作。

原文:

NVRAM: Non-Volatile RAM. The target is to have a electrical device that could be accessed quite fast, most of the time the content is calculated by bytes and the content could be saved after power down. There are different technical ways to implement this concept such as EEPROM which is very common. Please note, in mobile phone design, most of the time one or two sectors of ROM (most of the time it is FLASH) will be used to simulate NVRAM, the only reason is cost saving since ROM is a "must" but NVRAM is not.

FLASH: One kind of ROM and the difference to other ROM is semiconductor level. Please note, FLASH must be read/write by sectors but NVRAM should be read/write by bytes. It is why NVRAM driver have to implement an algorithm such as copying all the content in one sector to RAM first.

NVM: Non-volatie memory. It is more generic concept and covers all the memory components that could keeps its content after power off. It is useful during architecture design when the technical detail could be skipped. In fact, in one project, a DRAM with battery played as NVM and it worked quite good in that case.

与  DRAM 相比,新型 NVM 具有扩展性好、静态能耗低以及非易失性等优势,有望用于内存系统。 
然而,NVM 同样存在着写延迟长、写功耗大等缺点,如 PCM 的写延迟为150ns左右,明显大于 DRAM 的写延迟;DRAM的写能耗为4×10-15J/b,而PCM 的写能耗为6×10-12J/b,也显著大于 DRAM 的写能耗。

将 NVM 用 于内存系统有 3 种不同的内存 结构:


  第1种 结 构 是 NVM 完 全 替 代 DRAM 作 为 内存; 
  第2种结构是 NVM 与 DRAM 构成混合内存,但二 者 处 于 同 一 层 次; 
  第 3 种 结 构 是 NVM 与DRAM 构 成 混 合 内 存,但 DRAM 作 为 NVM 的Buffer或者 Cache


DRAM&NVM混合内存的两种架构


  一种是DRAM&NVM 混合内存是平行结构,另一种混合内存是层次结构,DRAM 作为 PCM 的 
  Buffer或者 Cache。 
  两种混合内存结构各有优劣: 
  平行结构可以避免存储相同数据,更好地利用 DRAM的容量; 
  层次结构可以更好地缓存频繁访问的数据,从而减少 DRAM 和 PCM 间的数据移动开销。


NVM的耐久性问题


  NVM 存 在 耐 久 性 问 题(即写入寿命的问题),过 多 的 写 会 导 致NVM 存储单元磨损,影响 NVM 使用寿命。因此,要合理安排NVM和DRAM写入的策略,避免NVM的过度磨损。例如,最小化写入策略。


NVM和DRAM的内存配置策略


  由于 NVM 具有扩展性优势,未来的内存容量配置可能是较小容量的 DRAM 与较大容量的 NVM 构成混合内存。 
  因此,合理配置内存的容量对内存系统性能也会有一些影响,需要进行测试找到合适的内存配置策略。


合理利用NVM的非易失性持久化数据


  NVM 相对于 DRAM 的一个明显优势是非易失性。 
  利用 NVM 的 非 易 失 性,在 内 存 中 直 接 对一部分数据做持久化,这种使用方式对存储系统性能(包括内存和外存)有何影响也是未来工作的一个方向。


影响 NVM 内存系统性能的因素

通过评测 NVM内存的性能,分析了影响 NVM 内存系统性能的因素. 
通过评测,我们发现: 
1)提高 NVM Rank并行度可以提高 NVM 内存系统性能; 
2)合理的地址映射策略可以提高 NVM 访存并行度,从而提高NVM 内存系统的性能; 
3)为了充 分 发挥 DRAM&PCM 混合内存中 DRAM 和 PCM 各自 的优势,需要设计合理的数据放置和迁移策略.
 

现在团队项目基于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过程都不会影响到DRAM输出数据到DISK的过程。DRAM的数据输出到DISK这个过程是可以由软件来控制的,也就不会出乱子了。


然而,一旦引入NVM到内存管理机制,reordering就不再是一个可以忽略的问题了。我们知道,NVM是可以字节寻址的,因此在作为混合架构时它与DRAM是平级的,都可以由CPU直接访问,cache也可以直接flush数据到NVM中。

这么说来太过于理论化、表面化,我们可以举一个例子来说明乱序带来的NVM一致性问题。

想象在NVM中现在存在一个树数据结构,我们有一段程序是要新写一个节点值并加入到这棵树中。如果程序经CPU执行后将数据送至Cache并且在cache flush数据到NVM的过程中发生了乱序。比如说先将树节点的指针指向本该写入数据的一块NVM地址,而后才将数据写入到该NVM中(正常的顺序应该是先将数据写入该地址,然后才将树节点的指针指向这块地址)。这样一来,一旦在第一步完成之后第二步之前发生了crash系统故障,则产生了一个不一致状态(因为对NVM所做的修改时持久化的)。在系统恢复后这样的不一致状态会保留下来,此时树节点中的指针指向的其实是一个无效地址(因为有用数据尚未写入该地址)。

这只是一个小小的例子,但NVM一致性其实不只是由reordering引起的,在某些场合仅仅crash就会导致不一致的发生,我们在下一部分进行介绍。

Crash Consistency 与 Reordering Consistency

故障一致性

当乱序遇上故障
 

猜你喜欢

转载自blog.csdn.net/sinat_22510827/article/details/107381386
nvm