Intel 傲腾数据中心持久内存(本文简称 PMEM)是我们认为一种开拓性的新硬件。通过同时提供远超内存的容量,和远超 SSD 磁盘的性能,弥补了现有数据中心服务器体系架构中 DRAM 和 SSD 之间的巨大鸿沟。从而为企业不断快速增长的海量实时数据分析和处理需求,提供了全新的解决方案。
图 1:基于 PMEM 的新的数据中心服务器架构
从硬件特性角度来看,PMEM 提供了很多优势:
-
高性能:相比于硬盘,更加接近内存的访问性能,特别是数据访问延迟很低。
-
持久性:数据在 PMEM 中掉电不会丢失。
-
Byte Addressable:数据访问的粒度和 CPU cache line 对齐。
但是,PMEM 并不是说完全即插即用的,在“正确”的使用它之前,有必要了解一下,PMEM 支持的几种使用模式,以及他们都有哪些优势和不足,从而选择和自身需求最匹配的模式,来发挥出 PMEM 最大的能力。
Memory Mode(内存模式)
PMEM 的内存模式,顾名思义,就是使 PMEM 也作为一种内存来工作。这种模式最早也被称作 2LM(2 Level Memory),在内存模式下,系统的内存被分成两层,PMEM 作为容量层,被操作系统识别为系统内存,正常使用。而 DRAM 则被作为性能加速缓存,用于加速 PMEM 的性能。
图 2:Memory Mode
这种模式的最大优势是兼容性好,整个的 DRAM cache 层是在硬件的 MMU 中实现的,操作系统自身完全不需要知道自己是运行在什么种类的内存之上的,所以所有的应用都不需要任何修改,就可以享受 PMEM 带来的超大系统容量的好处。
Memory Mode 的一个典型应用场景就是 Redis 内存数据库,因为所有的数据都是驻留在内存中的,所以更大的内存可以使得 Redis 数据库保存更多的数据,从而对提升 Redis cache 命中率有很大的帮助。
但是这种模式的缺点也非常明显,就是它完全抛弃了 PMEM 的持久化特性,所有写入在 PMEM 的数据,在节点掉电重启后是不可用的。另一个方面,内存模式使用 DRAM 作为缓存使用,使得整体系统可用的内存只有 PMEM 的容量,在容量利用率上也是不足的,举一个例子,在一个配置 512G DRAM 和 1.5T PMEM 的机型上,使用 Memory Mode,操作系统就仅能看到 1.5T 的内存容量,整个系统的内存容量利用率仅有 75%,考虑到内存的价格,这个成本浪费还是偏大的。
所以笔者认为,PMEM 的内存模式,在最开始 PMEM 面世的时候,作为一个过渡方案,提供了百分百的兼容性,使得传统应用可以使用到大内存带来的优势,是很有价值的,但是随着 PMEM 相关生态的完善,越来越多的应用软件的支持,内存模式的缺点就会越来越明显,从而慢慢的减少使用了。
App Direct Mode(应用模式)
相比于内存模式,APP Direct Mode 则可以利用 PMEM 的持久化特性。但是就需要操作系统和软件的支持了,Linux 内核是从 4.2 版本开始引入了对 SNIA NVDIMM 的支持,并在后续的版本中不断的进行了完善。在我们目前常用的 CentOS 8.x 的发行版中,通常来说操作系统可以将 PMEM 硬件作为两种不同的设备来使用,并且各有优缺点。
一种是 fsdax mode,在这种模式下,PMEM 被配置成类似一块磁盘设备,用户可以将其格式化成一个文件系统,然后使用。并且如果使用 xfs 或者 ext4 文件系统时,还可以在挂载时使用 dax 参数,激活文件系统的 dax mode,使得应用程序可以跳过 kernel page cache 来直接读写 PMEM 上的数据。
图 3:PMEM 作为 FSDAX
另一种是 devdax mode,在这种模式下,PMEM 被驱动为一个字符设备,用户如果想使用它,则必须自行编写程序,或者修改自己原有的应用程序,才能访问到 PMEM 上面的数据。
图 4:PMEM 作为 DEVDAX
综合这两种模式,他们都可以保存写入 PMEM 的数据,但是在具体的应用场景上还是有区别的。fsdax 模式由于提供的是标准的 POSIX 文件系统接口,所以他的兼容性更好,应用可以在完全不修改的情况下,把 PMEM 当作一个非常快速的磁盘来使用。但是这样做,在系统层面上也是有所损失的,因为要使用文件系统的 dax 模式,也有一系列前置条件,而在没有激活 dax 的模式下,所有的 IO 仍旧要通过 kernel page cache 来缓冲,对于系统内存是很大的一个浪费。同时因为是要模拟磁盘行为,IO 的粒度也是 512 个字节,对于 PMEM 这样在 cache line 大小的 IO 中,能提供的超低延迟特性的硬件来说,IO 的粒度仍旧太大了。无法真正发挥出 PMEM 的全部实力。
笔者认为,只有 devdax 模式,才是真正的可以完全发挥 PMEM 所有高性能、可持久化、字节寻址能力的最强模式!但是唯一遗憾的就是要想使用 devdax 模式,必须重写现有的应用程序,和 PMEM 设备对接。同时,在非易失性内存上编程,也是和传统编程有较大的区别,需要考虑很多以前不需要处理的问题。所以对于很多现有的应用来说,虽然 devdax 模式“看上去很美”,但是却没办法采用。
正是看到这个问题,MemVerge 创新性的设计并开发了 Memory MachineTM软件解决方案,底层由 MemVerge 的软件根据 PMEM 特性,使用 devdax 模式进行编程,实现一整套内存虚拟化解决方案,通过对应用提供池化的虚拟内存,使得应用无需修改,就可以运行在 PMEM 上,享受大内存带来的高性能,并且通过热点数据识别和内存分级技术,为不同应用量身订制最优内存配比,同时使用 MemVerge ZeroIO SnapshotTM技术,为应用软件的数据提供持久化保护。
图 5 PMEM 的使用模式的优缺点,以及和 Memory MachineTM的对比
原创文章,作者:奋斗,如若转载,请注明出处:https://blog.ytso.com/314830.html