问题
分层内存将具有不同性能和容量的多个内存组件组合在一起,提供了经济高效的解决方案,可以增加内存容量并提高内存利用率。在分层存储系统中,快速存储层的特点是性能高但容量小,慢速存储层的特征是容量高但性能低。因此,分层内存可以以较低的成本带来更大的内存容量。
由于内存组件之间的性能不对称,分层内存需要内存管理系统,以充分利用快速内存层获得高性能,同时最大限度地减少页面管理开销。开销来自内存分析,以确定页面访问频率和最近度、页面迁移和页面形成(形成和拆分大页)。开销还来自高容量存储层中地址的转换成本[40,49,50]、页面分类[22,26,43,51,71]、避免页面乒乓迁移[26,43,56]的努力。
现有管理分层内存的系统软件通常继承了内存系统的传统设计,以构建统一的、基于NUMA的内存抽象和页面迁移(例如,AutoNUMA[10]、AutoTiering[22]和Tiering-0.8[71])。还定制了传统设计以支持分层内存系统(例如,为跨层页面迁移提供灵活性[22],支持多个内存层[22,56,71],解耦内存分配和回收[43])。然而,传统设计的固有局限性阻碍了分层内存管理的有效性:
-
僵化的内存分析方法。无法及时捕获新出现的内存访问模式,导致分析质量低。常见的页面分析方法可大致分为基于性能计数器和基于NUMA提示故障(基于故障)。基于性能计数器的方法使用多个时间间隔来累积对页面的内存访问,以确认页面热度并防止误报。这种方法可以准确地捕获不变的热页面集,但适应时变访问模式的速度较慢。基于故障的分析方法根据零星页面访问记录来确定页面热度,这可以机会主义地捕获新出现的热页面,但可能会误报。现有方法无法在保持准确性的同时对热页面的变化敏感。
-
僵化的页面降级。页面降级将访问频率较低的页面(冷页面)迁移到慢速内存中,为热页面的升级节省了快速内存空间。但传统设计中降级的页面数量由对可用内存空间的不变要求驱动,页面降级非常低效,导致大量页面升级失败。现有的分层内存解决方案受限于这一限制,无论如何优化页面升级,都无法及时升级热页面,从而导致性能下降。
-
僵化的温页面范围,导致不必要的页面从快速内存降级到慢速内存。
本文方法
本文提出了FlexMem,用于分层内存的页面分析和迁移系统。
-
结合了基于性能计数器和基于页面提示故障的分析方法来提高分析质量。使用统一的升级间隔,为两种分析方法提供了平等的机会来贡献热页面。当两种方法对页面识别结果不同时,在两种方法对页面热度达成一致之前,不会立即降级。
-
根据容纳热页面的需要,动态决定降级的页面数量。根据快速内存中冷页面数量、页面升级失败的频率和最近页面升级的有效性动态调整降级速率。
-
根据页面升级为热页面的频率,动态决定温页面范围,防止不必要的降级,除非可用的快速内存空间真的很稀缺。
使用常见的内存密集型基准测试来评估FlexMem。与最先进的(Tier-0.8、TPP、MEMTIS)相比,FlexMem的平均表现提升28%(geomian),页面迁移失败率降低了25%,快速内存使用率提高了21%。
总结
针对分层内存的页面管理方法,现有方法受限于单一的内存分析方法、固定的页面降级速率、固定的温页面范围。本文提出FlexMem,包括3个技术:(1)结合了基于性能计数器和基于页面故障的分析方法。使用统一的升级间隔,使用两种方法分析热页面。当两种方法对页面识别结果不同时,对页面热度达成一致之前,不会立即降级。(2)根据容纳热页面的需要,动态决定降级的页面数量。根据快速内存中冷页面数量、页面升级失败的频率和最近页面升级的有效性动态调整降级速率。(3)根据页面升级为热页面的频率,动态决定温页面范围,防止不必要的降级。