1. 论文信息

  • 文章来自Design, Automation & Test in Europe(DATE), 2022
  • Characterizing and Optimizing Hybrid DRAM-PM Main Memory System with Application Awareness

所有作者及单位

  • Yongfeng Wang, Yinjin Fu, Yubo Liu, Zhiguang Chen, Nong Xiao中山大学计算机科学与工程学院

2. Background

PM大容量之后,多个应用程序工作负载并发执行的数据放置、内存并发和工作负载调度方面存在关键的管理挑战作者总结在混合内存系统场景下讨论的3个问题:数据放置、优化线程分配、并发程序执行顺序如表1

3. 解决了什么问题

提出了一系列应用感知的操作策略,包括:应用感知的数据放置、自适应线程分配和避免应用间干扰,以提高混合存储器上多个应用的并发性能。

1)如何将应用工作负载分配到合适的内存设备上,以提高并发应用的整体系统性能?
2)如何通过为每个应用程序分配最佳的线程数来保证不同工作负载的并发执行的公平性?
3)什么样的应用工作负载调度方案可以避免或减轻两个或多个同时运行的应用之间的干扰,以实现更高的性能?

4. 其他学者解决这个问题的思路和缺陷

但是这些方案没有去具体考虑并发应用的个别需求(应用感知)。

5. 围绕该问题作者如何构建解决思路

1)将应用感知解释为带宽敏感或者延迟敏感。

根据系统资源需求的不同,我们可以将计算服务器的应用工作负载分为CPU绑定和内存绑定。为了将我们的工作重点放在内存资源管理上,绑定内存的应用被进一步分为对带宽敏感的应用和对延时敏感的应用。我们的分类使我们能够清楚地区分工作负载类别,因为每个工作负载类别都形成了自己独特的集群。

图1显示了所有工作负载的延迟和内存带宽需求的敏感性。当一个应用程序在x轴和y轴上的数值都很低时,它
就是一个受CPU约束的应用程序。对性能要求高的数据库工作负载对延迟最敏感,而对带宽的敏感度低。而大数据
分析的工作负载,如OLAP、Lu cb和facesim,对带宽和延迟的敏感性处于中间水平。HPCG、Graph500和一些数据密
集型工作负载对带宽的敏感性最高,对延迟的敏感性最低绑定CPU的工作负载,如HPL、swaptions和freqmine, 对
内存延迟或带宽的敏感性不高。

不过,这个图是怎么得到的?

下图表示应用感知优化后达到的效果:

大致看起来是想说,第三节数据放置达到缩短运行时间的效果、第四节线程分配、第五节接口冲突。

2)数据放置策略

在混合内存中,两种内存介质上的应用性能是完全不同的,而且这种影响的大小在很大程度上取决于应用的特性为了评估这一点,我们从PARSEC[16]、splash2x[17]和NPB[18]选择了几个测试。

这里选择都是并发的程序,而且两种介质可以影响性能的差别就是延迟和带宽(还有其他什么吗?),程序又有不同的延迟带宽敏感。在纯PM上运行,这只说了物理机配置,所以这是怎么跑起来的?

图3显示了在PM上运行的8线程应用程序工作负载与DRAM上运行的应用程序工作负载的性能下降情况以及完成时间的比率。每个应用程序将分别在PM和DRAM上运行10次,我们记录它们的平均完成时间。

持久性存储器的带宽比DRAM低,这使得应用程序在PM上运行的时间更长。以ocean_cp为例,它在计算的不同阶段流经其分割的许多不同的网格,随着问题大小的增加,会产生大量的容量和冲突失误[17]。当工作集超过高速缓存的
大小时,内存带宽就会成为这个应用的瓶颈。在这个实验中,ocean_cp在DRAM上的读和写分别消耗了40.9GB/s和
15.3GB/s的带宽,而在PM上由于其带宽较低,只消耗了2.45GB/s和0.8GB/s。这个17倍的带宽差距可以解释ocean_cp在PM上的减速。PM的有限带宽也是对带宽敏感的应用减速的主要原因,如canneal、radix、NPB/FT、NPB/MG和
NPB/SP。此外,其他应用工作负载在PM上的运行时间不到DRAM上的1.5倍,如freqmine和swaption。 它们都是与CPU绑定的应用,可以充分利用内存的局部性来减少高速缓存的miss。因此,内存不是这类应用的瓶颈。因此,在不同的内存介质上运行的应用程序对这些工作负载的执行时间有着难以察觉的影响。

这里的意思是带宽敏感和数据放置关系更紧密,延迟敏感和之后要说的会比较相关。后面的分配策略完全也不考虑热页面迁移了,直接不是带宽敏感丢给PM。硬件性能计数器很多啊,带宽敏感是用啥表示?而且你在DRAM不够时怎么在分配之前知道这是不是带宽敏感的,那就是用户手动指定嘛,运行时硬件计数肯定不能提前知道;另一方面正在运行时的内存分配要按照不同workload做标记咯,要不你现在要分配的page你也不知道是哪个程序申请的,他自己是不是带宽敏感

当应用程序工作负载启动时,如果有足够的可用空间,它首先尝试将其分配到DRAM上。否则,我们必须判断应用程序是否对带宽敏感。对于带宽敏感的应用程序,它可以将CPU-Bound应用程序的一些占用的DRAM页面迁移到PM,然后为新应用程序分配这些DRAM页面。如果DRAM中的所有应用程序工作负载都是带宽敏感的,我们只需将新应用程序分配给PM即可。此外,我们还将对带宽不敏感的应用程序分配给性能下降较低的PM。为了使我们的应用程序感知策略切实可行,应用程序类型可以由用户定义或根据硬件性能计数器的信息自动分类。

下面这个实验表示通过这种方法程序放置对了,而且节约了总的执行时间。

3)线程分配(内存并发)

在不同介质上,线程可扩展性不同,在PM上运行的对带宽敏感的应用程序的性能不能随着线程数的增加而同步提高。因此,有必要为运行在不同内存介质上的应用程序找到一个合适的并行参数。

这个怎么还能放先验知识,而且the remain thread resources can be allocated to other applications这个资源是可以被量化的吗?


在第1组中,左侧结果显示每个应用程序传统均匀分布的8个线程的持续时间。根据先验知识,我们发现PM上的最佳线程NPB/FT数量为4。

4)带宽争用

当两个或多个应用程序同时访问混合内存时,会出现带宽争用,这将导致严重的干扰和并发性能下降。而且混合内存中的这种干扰比纯DRAM内存系统中的干扰更为复杂。为了证明这一点,我们首先尝试遍历所有内存访问模式。我们的测试包括4种类型的内存访问模式(1)SR:顺序读取,(2)RR:随机读取,(3)SW:顺序写入,(4)RW:随机写入1、2、4、8和10DRAM和PM上运行的线程,将形成40种内存访问模式。然后,我们运行带宽基准测试并获得所有内存访问模式的带宽,没有任何干扰。最后,分别运行40种内存访问模式构建40种干扰,对每种内存访问模式重新进行基准测试,得到每种干扰下的带宽缩减率。结果如图7所示,概括为以下两个方面:

X轴代表干涉类型,Y轴代表基准类型。颜色越深意味着与没有干扰时相比,带宽减少得越多

访问DRAM对PM的带宽影响很小,而PM的读或写会显着减少DRAM的带宽。 PM上10线程顺序读取的带宽为13GB/s,相对于10线程DRAM读写的干扰,最多可以降低15%(11GB/s)。相比之下,PM上有10个干扰线程进行顺序读取,DRAM上顺序读取的带宽可减少80%(94GB/s至18GB/s)。而且,对于DRAM的带宽来说,PM读写造成的干扰比DRAM上的干扰更为显着。

其次,线程数量和内存访问模式对并发应用的干扰影响很大。随着线程数量的增加,干扰会变得更加严重。在具有1、2、4、8或10个线程的PM上随机写入将使具有10个线程的DRAM上的顺序写入的带宽减少33.8%、68.2%、89.9%、96.7%、97.6%(68GB/s 至 1.7GB/s)。对于内存访问模式来说,随机写入会对DRAM的写入性能产生最严重的干扰。考虑到PM上的密集写入会减少带宽95%以上在 DRAM 上运行的带宽敏感应用程序仍然会受到严重影响。PM上的密集访问将显着减少DRAM的带宽。对PM的随机写入和顺序读取分别对DRAM的写入和读取带宽有更严重的干扰

解决方式就是通过上面的分析动态调整这些应用程序工作负载的执行顺序,也是通过先验知识去查找。

6. 从结果看,作者如何有力证明他解决了问题

这个在上一节已经说了。

7. 缺陷和改进思路

也是在5部分吐槽了。解决方案很多靠先验经验或者用户直接指定,而且细节也不咋提。虽然这个是针对并发程序设计的,也可以和其他混合内存系统相比较一下啊。

8. 创新点

从带宽敏感考虑了内存分配,而且性能提升还不错。

9. 积累

GPU内存系统中,应用感知的内存调度方案[13], [14]可以通过减少地址转换和数据请求之间的干扰来提高
公平性和整体系统性能。

应用感知的存储器通道划分算法[15]可以为不同的应用分配首选的存储器通道,以减少应用间的存储器干扰。


文章作者: 易百分
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 易百分 !
  目录