source:SOSP 2024 阅读评述连载(二)
Tiered Memory Management: Access Latency is the Key!
Midhul Vuppalapati (Cornell University), Rachit Agarwal (Cornell University)
背景和动机
内存密集型应用带来了逐年增长的内存容量需求,云服务厂商中的内存成本占比也逐年提高,但是传统基于DRAM模块扩展内存容量和带宽的技术陷入停滞;因此分层内存管理系统使用如CXL等技术访问额外的内存层级,扩展总体内存容量/带宽。
由于不同层级内存访存性能的差异,现有的分层内存管理系统使用了多种内存迁移技术尝试优化系统的吞吐和时延,但是它们都假定访问默认内存层级(硬件标明的内存访问时延最低的层级)的时延总是优于额外内存层级,因此总是把最热的页面放进默认层级。然而,由于默认内存层级带宽限制和内存控制器中的请求排队,该策略可能导致默认层级访存时延上升。如下图所示,当冷热页面访存比例为1:9时,现有分层内存系统的访问策略导致默认层级(DRAM)访存竞争严重,时延反而超过访问额外层级(CXL设备)的时延。
设计与实现
基于上述观察,作者认为并不是把越多的热页面放进默认层级越好,对某个层级的访存请求越多,可能导致这个层级的访存时延劣化,并通过实验发现现有的分层内存系统最坏情况下带宽可能不到最优值的一半。
作者提出了内存管理机制Colloid。Colloid基于“平衡各层访存时延”的原则迁移页面,将页面转移到访问时延更低的层级中,最终平衡时默认和额外层级的时延基本相同,从而动态地调节系统访问default tier内存的概率,使得全系统平均时延和带宽到达接近最优值。
Colloid利用了Intel 处理器中的CHA(Caching and Home Agent)硬件计数器来统计读取时延。CHA可以低开销地统计当前访存请求队列中通往默认和额外层级的时间占用和请求次数,因此可以直接算出两个内存层级的时延,以及默认层级访问概率p。如果默认层级的延迟低于备选层级,则Colloid通过迁移热页面到默认层级增加 p(提升访问默认层级概率);反之,减少p(降低访问默认层级概率)。Colloid通过多轮迁移中不断缩小搜寻范围,尝试探查到使得两个层级访存时延相等的p*,并使实际访问默认层级的概率逼近这一点。如果系统的负载发生变化,算法会重新探查p*,使得系统尽快恢复平衡。
测试评估
作者将Colloid集成到了现有的三个Tiered Memory System中,替代了其原有的页面放置算法。做到了接近最优的访问吞吐量,在访存密集的情况下相比未优化时吞吐增大了130%。
Q&A
Q1:你有考虑过交错(interleaving)方法吗?
A1:我们目前还没有评估交错方法。从概念上看,交错的目的是在不同内存层之间平衡请求率。
Q2:那你认为这种交错过程能最大化内存管理效果吗?
A2:我们的重点不在请求率,而在访问延迟。不同类型的访问会导致不同的延迟,因此我们基于访问延迟来进行优化,以实现更有效的内存管理。