棋子 · 2023年03月31日 · 香港

Persistent Memory Introduction

背景

PMEM定义

持久内存 (PMEM) 是非易失性、字节可寻址、低延迟的内存设备,其密度大于或等于DRAM。PMEM 位于内存总线上,支持像 DRAM 一样访问数据,这意味着它具备与 DRAM 相当的速度和延迟,而且兼具 NAND 闪存的非易失性。NVDIMM(非易失性双列直插式内存模块)和 Intel 3D XPoint DIMM(也称为 Optane DC 持久内存模块)是持久内存技术的两个示例。

下图是Intel Optane PMEM:
image.png

PMEM特点

  • 访问时延低于SSD
    image.png
  • 内存容量大

目前持久内存单条内存容量最大可以达到512GB,而目前服务器单条内存一般最多到 32/64 GB。

  • 比DRAM便宜

持久内存在单位价格上约为普通内存的一半。

  • 数据持久性

可以作为高速的数据持久化设备使用。

PMEM工作模式

  • Memory Mode(内存模式)

作为内存使用,主要用于一些内存大容量的应用,比如redis/mysql等。

  • App Direct Mode(应用模式)

可以利用PMEM的持久化特性,比如fs中的dax模式,将PMEM作为高速block设备使用(跳过pagecache)。

在混合模式下,PMEM容量的百分比用于内存模式,其余在App Direct模式下使用。

产品背景

PMEM的普及,特别是Intel的下几代pmem产品(AEP, BPS, CPS, ...)在硬件上越来越高效,PMEM将会慢慢取代DRAM,特别是类似Redis, AI, 大数据等需要大内存的云上应用越来越多,以及CXL总线的成熟,很有可能成为未来数据中心的主流方案,并颠覆未来的计算机体系统架构(memory-based architecture)。

阿里云已发布基于pmem的大内存实例,例如:
https://help.aliyun.com/document_detail/108492.html?spm=a2c4g.11186623.6.610.8d317bdeFdfsqt#section-k8y-u9u-vax

业务进程内存分层扩展适用于对内存使用较多且访问相对不频繁的业务软件,扩展效果较好,比如 MySQL、Redis等。客户更期望透明内存方案,降低成本。

方案实现

整体解决方案参考:https://openanolis.cn/sig/pmem

image.png

  • demotion策略

系统启动自动创建node demotion策略,根据node distance自动为dram node选择合适的target demotion node策略。

  • 支持1:1,1:n,n:n等node配置策略。
  • 识别冷内存,迁移到pmem上

    • 当DRAM node内存紧张时,不是将内存回收,而是将inactive list中扫描出来的cold memory迁移到AEP上,即所谓的demotion操作。
    • 匿名页回收扫描优化,本来对于没有swap设备的匿名页无需扫描回收,现在对于没有swap的匿名页,可以判断该匿名页是否可以demote到AEP上来进行优化。
    • 当dram内存水位比较低时,主动唤醒kswapd进行demotion操作,达到dram的demote水位(比high水位要高)。
    • kswapd中基于kidled算法来proactive demote冷内存,防止dram被轻易占满,并且proactive demote ratelimit可调整。

      • 根据dram大小判断出hot memory的范围,kidled判断出age threshold,主动demote大于该age threshold的“冷”内存。
    • 识别热点内存,及时的将热点内存从pmem迁移到DRAM node上,即为promotion操作。

      • 复用page->_last_cpupid来记录PMEM page的access time,用来记录page的hot程度。
      • 利用numa balancing扫描(设置page为protnone属性)来动态的迁移hot memory。
      • numa balancing自动跳过fast memory的扫描
      • 当promote时,dram内存不足时,唤醒dram node的kswapd进行demotion,直到设置的promote wartermark。
      • 设置热点内存的hot threshold,防止过多的冷内存错误的移动到dram上。
      • 设置promotion的ratelimit,防止workload size超过dram大小时,过多的无意义的demotion和promotion来影响性能。
      • 根据周期内的promotion和demotion的数据比例,自动微调hot threshold,防止过多的promotion。
      • 实现speculative promotion,根据数据访问的局部性,提前promote连续的内存到dram上,一些wordloads可以提升5%左右性能。
      • 支持unmapped filepage热点识别及迁移。

方案效果

  • 在针对mysql与redis数据库的测试中,性能相比纯DRAM的情况下,相差在7%左右;
  • 针对该tiered memory方案,在十项基础性能测试场景下,除了specjbb严重不达标外,还有部分case存在性能波动问题。

mysql

redis

java应用(specjbb)

基本无效果,相对同等DRAM实例性能差一倍以上。

技术难点

  • Java类应用无明显冷热内存分布的场景
  • 冷热算法的及时性和有效性
  • slab(或者不可移动内存)的远端访问保障
  • VM的内存带宽信息获取

未来展望

  • 更多的解决方案
  • 作为高速存储设备使用时,针对PMEM特性的文件系统:NVFS/EulerFS。
  • 基于PMEM的应用垂直优化,例如Intel Memkeydb方案。
  • CXL

image.png

文章来源:龙蜥社区
欢迎大家点赞留言,更多Arm技术文章动态请关注极术社区Arm技术专栏欢迎添加极术小姐姐微信(id:aijishu20)加入技术交流群,请备注研究方向。
推荐阅读
关注数
23583
内容数
1033
Arm相关的技术博客,提供最新Arm技术干货,欢迎关注
目录
极术微信服务号
关注极术微信号
实时接收点赞提醒和评论通知
安谋科技学堂公众号
关注安谋科技学堂
实时获取安谋科技及 Arm 教学资源
安谋科技招聘公众号
关注安谋科技招聘
实时获取安谋科技中国职位信息