4篇Optane DC Persistent Memory Module 测试与评估报告

(一)An Empirical Guide to the Behavior and Use of Scalable Persistent Memory(fast 20)

本文将 Optane DC Persistent Memory Module 叫做 Optane DIMMs。

Optane DIMMs 不只是“较慢的持久性的DRAM”,其性能更依赖于访问大小、访问类型(读与写)、模式(应该是访问模式:顺序和随机)和并发程度。此外Optane DIMMs的持久性与英特尔最新处理器提供的架构支持相结合,为软件设计师提供了更广泛的设计选择。

Optane dimm可以在两种模式下运行: Memory和App Direct。内存模式使用Optane扩展主内存容量,而无需持久性。App Direct模式提供持久性,不使用DRAM缓存。

如何构建和调优基于Optane系统的四项原则:
在这里插入图片描述

1.Avoid small random accesses

避免小的随机访问。

2.Use non-temporal stores for large writes

对大的写操作使用非临时存储。

3.Limit the number of concurrent threads accessing a Optane DIMM

限制访问Optane DIMM的并发线程数。

4.Avoid mixed or multi-threaded accesses to remote NUMA nodes

避免对远程NUMA节点进行混合或多线程访问。

(二)Characterizing the Performance of Intel Optane Persistent Memory– A Close Look at its On-DIMM Buffering

摘要

本文重点是探讨Optane的内存上读写缓冲的内部设计,以及它对应用程序感知的性能的影响、读写放大、不同类型持久的开销,以及持久模型之间的折中。
值得注意的是,我们发现在单独的内存读写缓冲区中读和写进行了不同的管理。这两个缓冲区的大小相当,但用于不同的目的。
读缓冲区提供了更高的并发性和有效的内存预取,从而带来了更高的读带宽和优越的顺序读性能。但是,它不能帮助隐藏中间层的访问延迟。
相反,写缓冲区提供有限的并发性,但它是DDR-T协议中支持异步写的管道中的一个关键阶段。
令人惊讶的是,除了写合并之外,无论工作集大小、写类型、访问模式或持久性模型如何,写缓冲区带来的延迟都低于读和一致写的延迟。
此外,我们发现cacheline 访问粒度与3D-Xpoint中间层访问粒度的不匹配会对CPU缓存预取的效率产生负面影响,并导致持久内存带宽的浪费。
我们的主张是在持久化程序的性能分析和优化中解耦读写。基于这一见解,我们提出了三个案例研究,并展示了相当大的性能改进。我们在两代Optane DCPMM上验证了结果。

介绍

最近的研究发现Optane DCPMM不应该被简单地视为较慢的、持久的DRAM。与DRAM相比,Optane DCPMM表现出复杂的行为,并根据访问大小、访问类型和模式大幅改变性能。

Optane DCPMM在几个方面与DRAM不同:

  • (1)在Optane DCPMM中,CPU cacheline访问粒度(64字节)和3D-Xpoint媒体访问粒度(256字节XPLine)之间存在不匹配,如果数据访问大小小于256字节,就会导致写或读放大
  • (2)为了弥补访问粒度上的差距,Optane DCPMM配备了复杂的内存上缓冲,以支持 读-修改-写操作(read-modify-write operations) 和针对小型写操作的写组合。
  • (3)连接Optane DCPMM和集成内存控制器(iMC)的新的DDR-T协议支持异步存储,以隐藏对物理中间层的长写延迟,而DRAM使用的DDR4协议对于负载和存储都是同步的。

本文试图理解Optane的内存上读写缓冲的设计,以及它与CPU缓存的交互,以及DDR-T协议。目标是理解on-DIMM缓冲是如何影响程序感知的性能。

使用微基准评估了现有的两代Optane DCPMM,得到以下以前未报道过的结果:

  • (1)Optane DCPMM使用专用的内存缓冲区空间单独管理读和写。
  • (2)写合并(写)缓冲区在合并小的写和减少写放大是有效的。然而,由于它的大小很小(16 KB),对于程序来说,利用局域性并命中写缓冲区是一个挑战。
  • (3)Contrary to popular belief that write performance is worse than read in Optane DCPMM, we find that for data stores with weak or little locality that comprise of frequent random reads (often in the form of pointer chasing) followed by writes and persists, a typical access pattern found in linked lists, hash tables, and balanced search trees, the overall latency is bottlenecked by expensive random media reads.(没看懂,大概意思是某种情况下random media reads成为性能瓶颈)
  • (4)由于异步DDR-T协议,cacheline刷新或普通写操作在到达iMC中的写挂起队列时返回,以隐藏long media write latency。

(三)Understanding the Idiosyncrasies of Real Persistent Memory(理解真正的PM的特性,VLDB 2021)

摘要

在本文中,我们首先列出并分类了PMEM的特殊行为,通过在真实的DCPMM平台上使用我们提出的pmidibench基准套件进行有针对性的实验。
接下来,我们进行详细研究,以指导存储系统的设计,考虑一般PMEM特性。第一项研究指导使用PMEM的NUMA系统上的数据放置,而第二项研究指导了无锁数据结构的设计,适用于eADR和adr启用的PMEM系统。我们的结果通常是反直觉的,并且突出了使用PMEM进行系统设计的挑战。

介绍

第一项研究指导数据放置在带PMEM的非统一内存访问(NUMA)系统。以MongoDB为例,我们确定了以最小的性能影响最大化PMEM容量利用率的方法。

第二项研究指导了异步DRAM刷新(ADR)和增强ADR (eADR) PMEM系统的无锁数据结构的设计。

本文给出了环缓冲区和链表这两种数据库系统中常用的数据结构的无锁设计。

两种真正的无锁持久数据结构的设计——多生产者、多消费者环缓冲区和并发链表。

4.特性分类(7个特性,I1-I7)

特性、根源、适用性
在这里插入图片描述
PM的分类(不互斥),如:DCPMM也属于C2和C3
在这里插入图片描述

4.1 Asymmetric load/p-store latency(不对称的加载/持久化存储延迟)

p-store:persistent store
LLC: last level cache

在考虑PMEM延迟时,重要的是要考虑缓存的影响。之前的研究只考虑了直接的PMEM延迟,并没有反映应用程序感知到的延迟。本研究测量了缓存延迟,这揭示了PMEM延迟的不对称性。实验使用的PMEM区域等于最后一级缓存的大小(LLC)

  • PMEM的p-store延迟比DRAM差3.4倍,但PMEM的加载延迟只差2.2倍。原因是PMEM的写带宽较低。
  • 当所有访问都直接进入内存时,PMEM和DRAM负载之间的延迟差异非常显著。但随着LLC命中率的增加,这种差异会急剧减小。当从缓存中处理更多的负载时,它们的延迟会减少并收敛到缓存延迟。但是,存储延迟主要由缓存刷新延迟决定,并且不受缓存命中率增加的影响。

当命中率为1时,DRAM在load和p-store延迟之间有6.7倍的差异,而PMEM有23.3倍的差异。由于这一趋势对于PMEM和DRAM都是可见的,因此它是可推广的。在真实的用例中,大多数PMEM访问都是缓存命中,p-store比loads要慢得多。因此避免不必要的p-store,并将相关数据保存在缓存中,是有益的。

结论:真实用例中大多数PM访问都是缓存命中,持久化存储比加载要慢得多,因此避免不必要的持久化存储,并将相关数据保存在缓存中,是有益的。

4.2 Asymmetric load/p-store bandwidth

load bandwidthstore bandwidth
PMEM30GB/s8GB/s
DRAM76GB/s42GB/s
2.5X5.2X

通常,存储带宽低于负载带宽,因为非易失性存储的写延迟较慢,这是之前在闪存中观察到的一个效应。然而,这种不对称性在PMEM中更为明显。造成这种额外差异的原因是在iMC上的竞争。

结论:存储带宽低于负载带宽的不对称性在PMEM中更为明显。

4.3 Poor bandwidth for small-sized random IO

在这里插入图片描述

测量small-sized (64–512B) IO的带宽:顺序IO和随机IO。
所有IO大小的顺序带宽基本相同,但在64B和128B IO大小的随机带宽明显较低。产生这种行为的原因是DCPMM内部ECC块(xline)的256B大小。原因:任何小于块大小的IO都会导致写放大,降低带宽。
这种影响在顺序IO中不太明显,因为DCPMM使用一个内部写合并缓冲区将相邻的写合并到同一个ECC块。

effective write ratio (EWR):有效写比率

为了验证这种行为,在进行实验时测量EWR,结果清楚地显示了随机IO在64B和128B时的写放大问题。对于256B或更大的访问大小,不存在写放大,因为不存在部分XPLine写。
众所周知,小的IO导致较差的带宽,这一事实适用于任何存储设备。因此,这种特性是通用的,但是cache-line和xline大小之间的不匹配意味着PMEM在访问粒度上的不匹配更为严重

结论:cacheline和PM内部xline的不匹配会导致写放大问题。

4.4 Poor p-store bandwidth on remote NUMA

non-uniform memory access (NUMA) :非统一内存访问

随着NUMA系统最近的流行和普遍存在,研究远程NUMA访问的性能影响是很重要的。为此,我们测量DRAM和PMEM的本地和远程NUMA带宽的差异。必须为每个事务检查网格互连会增加开销,从而降低总体带宽。
高并发和大IO显示远程访问的性能下降更多,这是因为接口带宽和Intel Ultra Path Interconnect (UPI)通道都是有限的。
PMEM在远程访问时性能下降更大,特别是在顺序IO时。原因是跨线程的UPI lane共享将访问模式从顺序更改为随机。PMEM的性能下降更大,因为它对IO访问模式比DRAM更敏感,因为DCPMM中的XPPrefetcher更有利于顺序IO而不是随机IO。
由于远程NUMA访问的开销,我们观察到DRAM和PMEM的带宽都有所减少,因此这种特性适用于所有类的PMEM。但是,使用带有预取器的内部缓存的PMEM会更加严重。

结论:PMEM在远程访问时性能下降更大。

4.5 Lower bandwidth for store than p-store

缓存层次结构将常规存储的缓存回写模式更改为非确定性随机模式。
缓存清除算法是异步工作的,与应用程序的IO模式无关。因此,它有效地将顺序的CPU存储转换为对PMEM的随机写入。而PMEM上的随机IO比顺序IO更糟糕。
在eADR模式下,应用程序通常不会刷新缓存以最小化延迟,因为缓存位于持久域中。
但是实验表明在使用带有内置预取器的PMEM时,不刷新缓存实际上会损害带宽。

4.6 Sequential IO faster than random IO

比较了DRAM、PMEM和Flash的顺序和随机读带宽。
DRAM和PMEM的顺序带宽和随机带宽是有区别的,但Flash没有。Flash没有表现出这种特性,因为无论IO模式如何,它的低带宽都很容易饱和。

4.7 P-stores are read-modify-write transactions

即使XPBuffer没有满,DCPMM也会在写完XPLine后立即将其写入媒体。此外,即使我们正在编写一个完整的(256B) xline,写入也会被分解成(64B)缓存行大小的请求,因为DDR-T以缓存行粒度操作。

XPBuffer没有得到有效利用。有两种方法可以改进DCPMM内部体系结构。首先,在XPBuffer中保留完全写入的行可以提高具有高时间局部性的工作负载的命中率。其次,如果控制器发现对同一个xline有连续的写操作,那么它就不应该从媒体读取数据,以避免不必要的读-修改-写操作。我们相信未来的DCPMM应该采用这些优化来提高性能。

7.5 系统设计建议(7个建议,R1-R7)

在这里插入图片描述

  • R1:考虑到特性1和特性2(I1和I2:load/p-store的不对称的延迟和带宽),建议减少不必要的p-store。但是表格中的建议是“消除DRAM中不必要的stores and/or cache stores”。
  • R2:基于特性2的实验观察到的结果,8个线程就可以实现最大的PMEM带宽。限制PMEM的并发写入的线程数,可以有效最大化带宽利用率。
  • R3:基于特性3,由于DCPMM的内部IO放大,小型IO会导致带宽降低。一个较好的方法是将几个小的stores合并成一个大的store。在无法避免small stores的情况下,应采用 store + cacheflush,而不是nt-store。(提到nt-store:We use nt-store to indicate an optimized non-temporal store instruction that bypasses the cache hierarchy,也是一个存储指令)
  • R4:是从特性4和MongoDB的NUMA研究中推断出来的。从研究中得出的结论:将具有较高EBR(effective
    bandwidth ratio)的数据结构放置在远程NUMA上,可以获得最大的容量利用率,且性能损失最小。
  • R5:基于特性5,p-stores比常规stores获得更高的带宽,并且在非关键数据上使用p-stores可以改善延迟。在eADR模式下,flush无关数据是有好处的。
  • R6:基于特性6,对于DCPMM,随机IO比顺序IO更糟糕。log structuring 和 write buffering 这两种技术都有助于将小的随机IO转换为大的顺序IO。
  • R7:基于无锁案例研究观察到的结果。此建议更适用于eADR模式,eADR模式下更容易避免事务。使用 per-thread logging 或 dirty-bit design 这两种方法可以用来避免事务。

(4)Unexpected Performance of Intel OptaneTM DC Persistent Memory(IEEE 2020)

摘要

评估DCPMM,发现PM对数据局部性、大小和访问模式高度敏感(data locality , size, and access patterns),通过优化虚拟内存页面大小和针对位置的数据布局,这一点变得更加清晰。
Linux PMEM支持优先映射大页面中的持久内存,而总是将DRAM映射到小页面。
对于PMEM使用大页面,而对于DRAM使用小页面,可以产生5倍的性能差异。
在控制页面大小并针对数据局部性进行优化的情况下,在大多数测试中,PMEM的性能与DRAM的性能相当。

data locality 应该翻译成什么?数据局部性

介绍

对 locality 影响最大的是默认的内存管理策略,其次是 PMEM 内存控制器使用的 striping, read-ahead 和 write-behind caching
Linux 默认的内存管理策略是对 PMEM 使用最大可能的页面,而对 DRAM 默认为4 KB的页面。这种策略产生的影响高达5X,那些已发布的PMEM评估应该控制PMEM的页面大小。
PMEM striping 主要有利于具有good data locality(在stripe大小内)和高带宽要求的工作负载。当高带宽不那么重要时,没有 striping 的 PMEM 通常表现相似。
内存控制器和内存模块中的 PMEM 缓存对拥有更小缓存的 cpu 有益。
一旦控制页面大小并使用内存位置优化工具,PMEM的性能会变好。

背景

Linux操作系统包含对PMEM的原生支持。但是,PMEM的策略不同于DRAM的策略。Linux内核在可能的情况下透明地为PMEM使用大内存页映射,这取决于页映射的对齐和长度,并根据需要返回到更小的大小。**Linux版本5.3为PMEM使用1 GB、2 MB或4 KB的页面大小。**早期的Linux版本只对PMEM使用2 MB或4 KB的页面。**DRAM的默认值仍然是4 KB。**我们注意到,大页面对性能的影响在两篇文献中有很好的描述。这种差异导致PMEM的性能比DRAM高5倍。

结论

PMEM 比 DRAM 对 memory locality 更敏感,这是由于实现这些内存技术的硬件不同造成的。
在PMEM中默认使用大页面的Linux策略提供了更好的TLB和页表局部性,这转化为更好的性能。
考虑到使用大型数据集是PMEM的一个重要用途,这对优化高效TLB和最后一级缓存使用而不是要求分页是有意义的。
对于正确的评估来说,确保正确地控制Linux页面大小处理以确保DRAM和PMEM之间的比较是有效的是至关重要的。
对于虚拟地址转换和内存访问,局部优化对于使用PMEM获得最佳结果至关重要。
在使用PMEM时,各种优化的好处在不同的工作负载之间存在很大差异。
不使用PMEM进行优化会造成严重的性能损失。

前三篇都提出了PM的特性并给出设计的建议和原则。
第四篇不太明确,好像意思是说:Linux 默认的内存管理策略是对 PMEM 使用最大可能的页面,而对 DRAM 默认为4 KB的页面,这种差异导致PMEM的性能比DRAM高5倍,所以那些已发布的PMEM评估应该控制PMEM的页面大小。如果是在控制页面大小并针对数据局部性进行优化的情况下,在大多数测试中,PMEM的性能与DRAM的性能相当。

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值