Persistent Memory


目录


持久内存出现的背景

背景1:存储介质的发展

目前的存储介质延迟已经发展到ns级别了。如下图所示,PCM(Phrase-change Memory,相变内存)已经能够实现ns级别的读延迟,同时也达到了较高的寿命和较低的功耗,另外还支持字节级访问。

(图源:《深入浅出SSD》P94)

背景2:现有架构存在的问题

拿目前最快的持久存储设备,NVMe SSD为例,其使用了NVMe协议在PCIe总线上与CPU相连,延时最低能到10us左右。但考虑到PCIe总线本身就有0.8us左右的延时。随着存储介质的延时进一步减小至ns级别,PCIe总线上的延迟甚至超过了存储介质本身的延迟。这样的开销是难以接受的。

持久内存的特点

在上述两个背景之下,Intel首先推出了基于3D-XPoint的傲腾持久内存

他具有下面三个特点:

  1. 与DRAM相近的读写延迟
  2. 可字节寻址
  3. 可持久存储

对于读写延迟来说,其与普通内存,也就是DRAM(Dynamic random-access memory, 动态随机存取存储器 )类似,在文章[1]中的一幅图中,可以发现非易失性内存无论是读延时还是写延迟,都比DRAM要慢一些,但数量级是相当的,所以我们可以概括说,延时和DRAM相当。

可字节寻址这个特点要和其他不同的存储介质进行对比。对于机械硬盘,其寻址的最小粒度是一个扇区,sector,一般是512B,而对于我们常见的固态硬盘,其寻址的最小粒度是一个page,一般是4KB。而对于非易失性内存,我们可以和内存一样,通过一个地址访问其每个字节的内容,访问的粒度是字节,这让非易失性内存和其他存储设备的区别更加大,编程模型要有较大的改变。

另外与DRAM非常不同的一点是,DRAM掉电了数据会丢失,而PM在掉电后数据仍然能够持久存储,在下次通电后数据还在。但非易失性内存直接接在内存插槽上,它又和普通的存储设备有些不一样的地方。这个不一样的地方来源于cpu的cache。我们执行了一条mov指令,在某个内存地址中存储某个数,那么这个数就并不一定存在了内存中,一般的cpu cache都采用了write back策略,意味着除非cache不够用了被置换了出来,否则这个数据很可能还在cache中,而cache本身仍然是断电就会丢数据的,这个时候就算下面安装了非易失性内存,也没法避免数据的丢失。所以,为了保证数据的持久性,我们需要使用一些额外的指令,比如图中的clflush,它的含义是将cache line刷写下来。为了避免CPU乱序执行的影响,我们还需要在这两条指令后面加一条mfence,内存屏障。这样下来,才能够保证整个持久化操作完成。

相关文献

[1] J. Yang, J. Kim, M. Hoseinzadeh, J. Izraelevitz, and S. Swanson, “An Empirical Guide to the Behavior and Use of Scalable Persistent Memory,” presented at the 18th USENIX Conference on File and Storage Technologies, 2020, pp. 169–182 [Online]. Available: https://www.usenix.org/conference/fast20/presentation/yang. [Accessed: 17-Apr-2020]

提到本笔记的相关内容


笔记连接图