Non-Volatile RAM/非易失内存

2017/12/25 system

通常我们系统中使用的内存都是易失内存,当断电后,内存中的数据都会丢失。因此我们的程序一般都需要 启动时将数据加载进内存,退出时将数据持久化到磁盘。如果我们有一种内存,省去了这些问题,是不是会 使我们的程序变得更加简单?

实现Non-Volatile RAM的方式也很多:

  • 有从硬件入手,实现这种物理介质12
  • 有从kernel入手,将SSD与内核内存映射相结合3
  • 有从文件系统入手,利用文件的mmap机制来实现

当然Non-Volatile RAM一直都是科研的先锋,一般用户还很难接触到它们,但是随着SSD的高速发展, SSD的读写性能越来越高,我们一般可以借助SSD来实现Non-Volatile RAM,或者作为一种持久的内存 来看待。这样我们的程序就有了另一种写法,对于各种数据结构的处理都可以重新进行考虑。

disk.png

从上图来看,SSD的写入速度、延时已经与RAM差距很小了。

比如pmdk,就是上面的第三种方案的实现,其使用mmap文件作为可持久化 的内存,然后依赖jemalloc进行内存管理。Apache Kudu也在尝试使用pmdk。在这方面给了我们一些新方案 的启示,以后可以在一些项目中进行尝试4

Linux DAX

在高版本的linux中新增加了DAX机制,使 得用户可以直接将块设备直接映射到内存空间,减少了拷贝到page cache额外开销(之前的文件系统,需要将设备 上的数据拷贝到page cache中,然后将page cache映射到用户的内存空间,中间的所有操作都需要额外的内存开 销,以及page cache的异步写入磁盘等步骤,对于NVMe/FusionIO/NVDIMM这种高速设备来说,page cache 这层是额外的开销),当然DAX也需要硬件自身的支持。

参考

Search

    Table of Contents