COMPRESSION ARCHITECTURE FOR BIT-WRITE REDUCTION IN NON-VOLATILE MEMORY TECHNOLOGIES论文解读
写在前面
本文是CACHE压缩研究系列的论文解读第7篇,本论文题目是COMPRESSION ARCHITECTURE FOR BIT-WRITE REDUCTION IN NON-VOLATILE MEMORY TECHNOLOGIES,作者是来自 University of Pittsburgh 的 David Dgien
背景知识
这些新的非易失性技术,如相变存储器、电阻RAM和自旋转移转矩RAM,一直是近年来研究的焦点,旨在取代主存储器中的DRAM。然而,尽管这些新技术不易波动,密度也有所提高,但与DRAM相比,它们的发展还是相对较新的,而且在性能方面也存在一些问题。除非这些问题得到缓解,否则随着DRAM开发速度的减慢,主存将成为高性能计算系统发展中越来越大的瓶颈。然而,这些新技术的性能受到许多问题的影响。有些,如PCM或ReRAM,会受到细胞耐力差的影响。在PCM中,这是在写操作期间相变材料上的物理应力的结果。每个电池的反复加热和冷却使相变材料略微膨胀和收缩。在足够的循环下,这些应力会在材料中产生间隙,或导致材料完全脱离加热元件。这会破坏电池的导电性,导致它“卡”在一种状态。与DRAM单元在1015次写入时的维持能力相比,PCM和ReRAM单元只能在故障前保持108次写入的顺序。其他技术,如STT-RAM,会受到长写延迟和高写能量的影响。在写入过程中,STT-RAM需要极化电流脉冲来改变磁隧穿结中自由铁磁层的自旋方向。这个脉冲的长度和大小是不同的,更快的开关时间需要更高的电流,导致写入延迟比DRAM差1.25-2倍,写入能量比DRAM差5-10倍。在所有这些技术中,限制设备可以消耗的最大能量需要内存一次只写入有限的数据量,从而进一步影响设备的总体写入延迟。在我们能够在主存系统中广泛采用这些技术之前,必须设计出解决这些问题的方案。
首先,所有这些NVM技术中的SET和RESET操作都需要比DRAM大得多的电流来改变设备的状态。现代的存储模块通常会在其运行时设置能耗限制,以防止模块从电源消耗过多的电力,并防止过热。因此,设备被限制为一次写入有限数量的数据,在内存数组上迭代以完成写入。此限制会增加写入延迟,从而影响性能[32]。其次,PCM中的设置和重置操作需要长脉冲,以确保材料适当冷却,最多可达数百纳秒。由于SET和RESET操作在一次写入过程中同时发生,下一次写入无法开始,直到所有较长的SET操作完成,从而在单个写入操作中造成瓶颈[33]。最后,在PCM和ReRAM的操作过程中,经常变化的细胞会受到物理应力的影响。在PCM中,反复的加热和冷却会对硫系材料产生热应力,而在ReRAM中,反复的编程会导致导电材料产生不希望的膨胀。这些压力可能导致数据保留率低,或最终导致单元故障。这将这些存储单元的生存期限制在单元故障前大约108个写入周期。
已有工作
已经存在的压缩方法
- FVC
第一种是频繁值压缩,它依赖于每个应用程序中最常用值的字典,然后使用Hu-ffman编码算法压缩这些值。
使用FVC的很多研究直接把压缩引擎放在了片上 - FPC
第二种方法实现了频繁模式压缩(FPC)算法来压缩传入的数据。FPC算法使用一个静态模式表,能够匹配范围广泛的值,不需要额外的内存或应用程序来跟踪频繁值。
使用FPC的很多研究把压缩引擎放在内存控制器中
详情可见这篇博客
FPC压缩
当内存控制器接收到写访问时,每个字都通过压缩引擎来尝试压缩数据。如果无法压缩单词,内存控制器会将其“原样”写入内存单元。在对NVM单元的写操作期间,内存控制器使用读-修改-写操作。此操作将新的(可能是压缩的)字与内存中的现有字进行比较,并仅更新更改的位。通过压缩每个字,可以显著减少每次写入访问期间可能需要的最大位写入次数。在读取访问期间,内存控制器检查在写入期间设置的标记位的状态,以确定它是否以压缩格式存储。如果有的话,控制器会再次使用压缩引擎对单词进行解压缩,然后在内存总线上转发给处理器。
扩展知识
什么是read-modify-write?
读-修改-写(read-modify-write)是计算机科学中的一个原子操作(atomic operation,类似的还有test-and-set, fetch-and-add, compare-and-swap等),操作过程是读一个内存位置(或IO端口),修改其值,再写回原位置。
必须要先读操作的一个原因是,系统架构往往只允许字(word)级的读写,必须先读出那些不做修改的比特,保持不变再写回。
链接一
链接二
本文探索了一种提高非易失性存储器性能和寿命的新方法。随着新的DRAM技术的发展达到了物理扩展的极限,对新的非易失性存储器技术的研究已经取得进展,以寻找可能的替代品。然而,这些新技术中的许多都存在固有的问题,如低耐久性、长延迟或高动态能量。
论文中提到的改进方向
- 有条件的位写入
第一个建议,数据比较写入(DCW)利用了这些新内存技术的非易失性,指出与DRAM不同,未定义的位在写入操作期间不需要刷新。结果,只有那些由于用一个新的字覆盖内存中的一个字而改变的位元需要位写操作,而任何不变的位元只剩下一个了。
与DRAM不同,DRAM在读或写操作中的每一行**后都需要回写整个内存行,刷新在NVMs中不需要保持不变的位,因此不需要花费额外的能量或时间。
- 位写入的位数减少,Flip-N-Write(FNW)建立在DCW方法的基础上,通过有条件地“浮动”要写入的数据,减少在写入访问期间更改的最大位数,将新旧数据之间的位写入次数至少减少一半。然而,FNW的改进依赖于现有数据和新数据来减少位写入。因为我们的方法和这些方法一样,主要关注于减少在写访问期间执行的位写操作的数量,所以我们认为这些方法是最先进的,并且希望进一步减少超出FNW的位写操作。
简单地减少每个字需要写入的位的数量是非常有益的,因为它可以潜在地提高能量消耗、单元耐力和写入延迟,这取决于如何配置内存体系结构。通过减少位写入来提高单元的持久性是相当简单的。通过不对不改变的单元执行写操作,单元不会受到任何磨损,并且其使用寿命略有延长。类似地,写能耗的改进也很简单,因为只有正在进行写操作的单元才会消耗能量。减少位写入如何提高延迟稍微复杂一些。如果存储器体系结构使用迭代过程执行写入,其中每个字的一部分同时写入,或者如果存储器的功率预算有限,那么我们可以看到减少位写入可以如何增加一次写入的有效数据量。例如,如果某个体系结构可以在一个电源周期内执行8位写入,并且我们有4个字,每个字只需要2位写入操作,那么我们就可以潜在地并行写入所有4个字,从而大大减少通过并行写入每个字所需的有效时间。
此外,减少位写入是灵活的,因为它不依赖于内存技术的任何特殊特性,除了要求内存是“位可寻址的”。也就是说,可以有选择地写入单个位,这与DRAM不同,DRAM将一行中的所有位写入以执行刷新。因此,仅依赖于减少位写入以获得性能增益的技术可以应用于任何非易失性存储器技术。
压缩的三种方式
- 利用CAM相联存储器来压缩
在频繁值缓存体系结构中,硬件维护存储器中最常用单词的字典,通常将结果存储在本地内容可寻址存储器(CAM)中。这个CAM允许硬件快速确定写访问中的一个字是否在常用字的集合内,因此它可以用匹配值的CAM地址替换它。这会将数据的有效大小减少到log2 - 利用固定pattern来压缩
详情可见这篇博客
FPC压缩 - 直接暴力上mlc和slc
部分研究直接确定是否可以压缩,然后把压缩结果往MLC里面扔以期待更好的结果。但是个人认为这种办法很不可取,过于浪费而且单纯的堆料毫无意义。
本论文压缩的写入结构
为了减少位写入,我们的方法将每个内存字的写入访问分成一系列步骤。
- 首先,尝试使用直接集成到存储器控制器中的压缩引擎压缩要写入的新数据。此压缩引擎实现了基于FPC的压缩方法。
- 其次,当压缩引擎尝试压缩传入的数据时,内存控制器读取当前位于内存阵列中目标地址处的现有数据。
- 一旦压缩尝试完成,将逐位比较旧数据和新数据,以确定不同的位。如果压缩成功,则将压缩数据与旧数据进行比较,否则将使用未压缩数据。
使用这个按位比较得到的信息,只有那些在旧数据和新数据之间不同的位才会被更新并编程到NVM单元。如果新数据大小小于压缩后写入的空间,则在比较和更新过程中将忽略数组中未使用的位。
由于比较的目的是确定哪些单元格需要写操作,所以我们只需要把新数据与旧数据进行比较,而不管其压缩状态如何。最后,系统将压缩过程的状态记录在存储器阵列中的压缩标记位中,用于指示该地址处的数据是否被压缩。
如下图所示,在这种架构中,压缩引擎直接集成到内存控制器中,允许在读写操作期间无缝压缩和解压缩数据。增加了额外的电路,以方便通过压缩/解压引擎的新数据路径,并允许在读取操作期间绕过解压引擎读取未压缩的数据。
下图显示了对于1个32bit的字的存储阵列,我们添加2位,1个位置位,1个压缩位。第一个标记位用于向存储器控制器指示来自存储器阵列的数据是否被压缩。该位从存储器控制器中的字总线中提取,用作多路复用器的选择信号,该多路复用器将数据传送到读缓冲器。第二个标记位用于支持机会性磨损均衡技术
本论文压缩的读结构
在读取访问期间,步骤被反向执行以获取原始数据。首先,存储器控制器从NVM单元读取单词,包括标记位。检查压缩标记位以确定单词read是压缩形式还是未压缩形式。如果标记位指示压缩,则字将通过解压引擎,解压的结果将通过内存总线传递到处理器。否则,数据使用多路复用器电路绕过解压引擎,读取的字直接传递到内存总线上,允许系统保存几个周期。