Nonblocking Memory Refresh&2018ISCA/Security& 非阻塞内存刷新
Abstract
我们提议的非阻塞刷新工作是一次刷新内存块中的一部分数据,并在内存块中使用冗余数据,如RS码,在块中计算块的刷新/不可读数据以满足读取请求。作为概念的证明,我们将非阻塞刷新应用于服务器内存系统,其中每个内存块已经包含冗余数据,以提供硬件故障保护。评估结果显示,在具有不同冗余和故障保护强度的五种服务器内存系统中,对于16 GB和32 GB DRAM芯片,非阻塞刷新分别提高了16.2%和30.3%的性能。
I. INTRODUCTION
虽然dram和sram都是易失性的,但是dram需要动态/主动刷新操作来延迟读取请求来刷新数据;相比之下,sram依靠锁存反馈来执行静态/背景刷新,而不延迟任何读取访问。
以前的工作已经研究了如何减少内存刷新对性能的影响,如智能调度;许多工作探索了如何更积极地解决内存刷新性能开销,如跳过许多所需的内存刷新操作。但牺牲安全性和可靠性。
为了有效地解决不需要跳过刷新而增加刷新延迟的问题,我们建议使用非阻塞刷新。非阻塞刷新一次只刷新内存块中的一些数据,并使用冗余数据(如RS码)计算刷新块中不可访问的数据以完成读取请求。与每次刷新块中的所有数据的传统方法相比,非阻塞刷新一次只刷新块中的一些数据,方法是在后台更频繁地操作。
我们将非阻塞刷新应用于重视安全性和可靠性的服务器内存系统。我们观察到,服务器内存系统已经包含冗余数据。
该论文具有以下四点贡献:
1.提出我们非阻塞刷新,以避免延迟访问刷新内存块。
2.在服务器内存系统的上下文中应用非阻塞刷新,在不增加存储开销的情况下,可以利用现有的冗余内存数据。
3.我们发现,对于使用16 GB和32 GB dram芯片的服务器内存系统,非阻塞刷新的平均性能分别提高了16.2%和30.3%。
II. BACKGROUND
DDR存储结构介绍:channel、DIMM、rank、chip、bank、存储阵列row/colum
A. Memory Refresh
tRFC:单个刷新间隔的持续时间称为刷新周期时间refresh cycle time【Refresh latency】。与不断恶化的刷新延迟相比,总线周期时间和最小读取延迟都有所改善。随着这些趋势的持续,内存刷新成为影响整个内存系统性能的决定性因素之一。
B. Skipping Refresh
跳过刷新减少了dram单元格中存储的平均电荷量,因此大大增加了dram易受读干扰错误的影响。以较低的刷新速率操作内存不足也可能增加内存错误率,因为保留分析不能总是识别所有弱单元;较高的内存错误率反过来会降低可靠性。可靠性对于服务器系统很重要,因为一个小时的服务器停机时间通常会导致数百万美元的收入损失。
总之,需要新的解决方案来解决具有严格的安全性、可靠性和可使用性要求的系统的内存刷新性能开销。
III. MOTIVATION 动机
服务器系统中的每个内存块都包含大量冗余数据。因此,我们可以利用公共情况下无故障内存位置中未充分利用的冗余数据来实现非阻塞刷新。
由于服务器内存中的大量冗余数据与实际用于纠正错误的少量数据之间的差距越来越大,我们认为冗余数据是一种未充分利用的资源,可以重用以提高内存性能。
IV. NONBLOCKING REFRESH
我们建议使用非阻塞刷新来刷新内存块,同时允许读取请求访问刷新块;它的工作方式是在任何时间点刷新内存块中的一部分数据,并使用每块冗余数据(如RS码)来重构块中的不可读/刷新数据,以满足对刷新块的读取请求。
在本文中,我们重点探讨了服务器内存系统上下文中的非阻塞刷新。设计服务器内存的非阻塞刷新需要解决以下三个主要挑战:
1)如何重用服务器内存中现有的冗余数据来执行非阻塞刷新?
2)如何执行与一次刷新整个块的常规方法相同的总刷新量?
3)在内存故障突然发生时,冗余数据必须保持硬件故障保护的初衷。因此,如何在利用冗余数据实现非阻塞刷新的同时保持基线故障保护是第三个挑战。
A. How to Utilize Existing Redundant Server Memory Data?
传统的服务器内存系统不能利用冗余数据来计算存储在刷新芯片中的不可访问数据,因为它们同时刷新所有芯片。
要计算存储在刷新芯片中的不可访问数据,每个块中不可访问的数据量必须小于块的冗余数据能够重建的最大数据量。我们建议一次刷新几个芯片,以便每个块中只有一小部分数据由于刷新而无法访问。
图6b显示了一个每次只刷新一个芯片的示例。
为了实现非阻塞刷新,每个级别的芯片在逻辑上被划分为刷新组。非阻塞刷新操作刷新单个刷新组。由于传统的服务器内存系统同时刷新所有芯片,因此需要进行硬件修改,为了单独刷新每个刷新组。
B. How to Ensure Each Chip Performs Same Amount of Refresh as Conventional Blocking Refresh
一次只刷新一个等级中的一些芯片的一个明显的挑战是,如何在每个芯片中执行与常规的同时刷新所有芯片的方法相同的刷新。MC必须比传统的阻塞刷新更频繁地发出非阻塞刷新,以弥补每次刷新芯片的次数减少。我们观察到,因为非阻塞刷新是因为非阻塞刷新。不阻塞读取请求,MC可以在后台连续刷新内存,性能影响最小。另一方面,常规的阻塞刷新系统只能不频繁地刷新每个级别,以避免过多地阻塞读取请求。图7对比了非阻塞刷新的时间线和常规刷新的时间线。
由于非阻塞刷新比传统的阻塞刷新执行得更频繁,所以非阻塞刷新可能会产生命令总线带宽超限。假设每个channel都有一个rank,并且tRFC=550 ns,如果MC在每个tRFC之后连续发出命令刷新,则聚合命令总线带宽仅为0.2−0.4%。然而,这种命令总线带宽开销随着channel中的rank数而成比例增加;这可能转化为不可忽略的命令总线带宽利用率(例如,5%)对于非常大的信道来说。一个有效的解决方案是让同一channnel中的多个rank(例如,相同DIMM中的所有rank)对命令总线上的每个刷新命令MC并行执行非阻塞刷新。
根据刷新组大小和trefi,非阻塞刷新可能并不总是完全保持常规的每次刷新整个块的方法。在这种情况下,具有非阻塞刷新的内存系统可能需要偶尔执行常规的阻塞刷新以满足要求。即使在这种情况下,非阻塞刷新仍然有助于避免许多常规的阻塞刷新,因此,与仅执行常规刷新相比,性能有所提高。具有非阻塞刷新的内存系统可以使用按等级的硬件计数器来计数过去的非阻塞刷新操作的次数;在秩执行了与有刷新组相同的非阻塞刷新之后,mc不需要向th的秩发出阻塞刷新。
与读请求不同,当每个级别频繁/持续刷新时,写入请求可能会受到负面影响。写入级别不能与刷新级别并行进行,因为芯片中的数据不能在芯片刷新时更新。写入请求仍然需要等待一个级别才能完成任何在运行中的刷新操作。因此,更频繁地刷新每个级别可能会增加写入延迟和减少写带宽。我们注意到,增加写延迟并不会降低性能,因为内存写并不在程序执行的关键路径上;但是,减少写带宽会降低性能,因为它会降低内存存储指令的吞吐量。
为了在经常执行非阻塞刷新的同时保持内存写入带宽,我们进行了两个观察:第一,由于同一通道中的所有级别共享相同的内存总线,MC一次只能写入一个级别。因此,一个通道中的总写入带宽被划分为信道中的所有级别,如图8a所示。尽量减少由于行冲突造成的读取延迟开销。这种交织导致写入请求在信道中的所有级别之间分布相当均匀。根据这些观察,我们建议重新排序写入请求,以便将每个信道的写入带宽集中在几个级别上,如图8b所示。这保持了相同的信道级写入带宽。
我们建议将信道中的级别逻辑地分组为单独的写入组,这样每个n级的信道包含k个写入组,每个写入组的n/k级别。在每个trf c间隔期间,MC写入一个k写入组,同时对其余k−1写入组执行非阻塞刷新。其余级别将在每个trf之后完成当前的非阻塞刷新。同时,MC选择要写入的不同的写组,并再次将其余的级别置于非阻塞刷新中。这种方法可以提供常规系统的信道级写入带宽,同时允许大多数级别(即(k−1)/k)从非阻塞刷新中受益。服务器内存通常包含多个级别的每个信道以提供足够的容量;因此,它们通常可以从一个较大的(k−1)/k值中受益(例如,对于每个信道只有四个等级的信道,3/4)
对于每个trf c间隔只对一个写组的写请求,需要修改mc以缓冲更多的次写入。在写入请求的最坏情况下,我们使用Little定律[30]来估计与写入缓冲区的输出速率相匹配所需的写入缓冲区的大小。Little定律规定,队列中元素的平均数量为l=λ·w,其中λ是平均到达速率,w是每个元素在队列中等待的平均时间。在写缓冲区的上下文中,l是缓冲区大小,λ是内存写带宽,w是块平均需要在缓冲区中等待多久,直到它的写组被选择为写。假设写请求占内存请求总数的一半,因为处理器通常需要先从内存中提取块,然后再写到块。λ=12.8gbps,对于3.2GHz和64位宽信道。对于k写入组,一个新到达的块平均等待k·tRFC才能选择其写入组;因此,我们悲观地估计w=k·trf C.w=4.550=2200 ns,假设服务器系统具有16 GB芯片(550 Ns tRFC))[21]和每信道4个写组,那么该信道的写入缓冲器的新大小应为1=12.8·2200=28 kb。