持久性内存是一种创新性的存储技术,它允许程序直接以字节寻址方式访问数据,并且数据内容在掉电后也不会丢失,即具备非易失性。持久性内存同时具备类似内存和存储的特点,但通常并不是内存或存储的替代品,而是作为第三层存在,与内存和存储一同协作。

傲腾持久性内存

傲腾持久性内存是由英特尔于2019年发布的第一款商用持久性内存,单条容量最高可达512GB。傲腾持久性内存采用3D XPoint技术,这是一种新型存储介质,介于传统DRAM和闪存之间,它既具有与DRAM类似的快速读写性能,同时是一种非易失性存储介质。

傲腾持久性内存可设置为以下两种模式,一种为内存模式(memory mode),该模式下的傲腾持久性内存与DRAM相似,作为易失性内存使用,此时的DRAM作为一层缓存cache;

另一种为应用直访模式(app-direct mode),该模式下的傲腾持久性内存与DRAM不同,具有非易失性的特点,并且拥有自己独立的物理地址空间,应用程序可以通过mmap系统调用将其映射到用户态进行访问。

DAX模式

持久性内存通过内存总线与CPU互连,应用程序因此能够按字节粒度访问持久性内存。对于持久性内存而言,由于其本身支持应用程序按字节寻址访问数据,如果仍然和使用与传统存储器相同的访问方式,数据访问路径中的操作系统虚拟文件系统层页缓存会导致额外的数据拷贝,严重影响持久性内存的性能。为此,持久性内存上的大部分文件系统均支持了用户态直接访问模式(direct access,DAX),该模式下的文件系统可将持久性内存空间直接映射到用户态,绕过传统 DRAM 页面缓存,从而避免页缓存的冗余数据拷贝,降低软件开销。

DAX拥有两种模式,一种是fsdax(filesystem direct access)模式,该模式下的持久性内存支持挂载具有DAX功能的文件系统,如Ext4-DAX、XFS-DAX等,操作系统内核驱动程序将首先创建一个常规的块设备并挂载文件系统,在文件系统上操作时,内核驱动程序将静态地对物理地址进行块访问。

另一种是devdax(device direct access)模式,该模式下的持久性内存被创建为特殊的字符设备,并被直接映射到用户态的虚拟地址空间。

PMDK

为了开发人员能够更方便地使用持久性内存的直接访问模式,英特尔官方开发了持久性内存编程库PMDK(persistent memory development kit),使用该编程库能够直接在用户态直接访问持久性内存。通过PMDK为应用程序提供存储服务,应用程序将不再需要陷入内核访问存储设备,大幅降低数据的访问延迟。

Persistent Memory Development Kit (PMDK) (pmem.io)

服务器配置PM

1.将PM设置为app direct模式:ipmctl create -goal PersistentMemoryType=AppDirect

2.创建命名空间:ndctl create-namespace

3.挂载文件系统:

mkfs.xfs /dev/pmem5 mount -o dax /dev/pmem5 /mnt/pmem5

参考:

另:用dram虚拟PM参考: