1. 论文信息
- 文章来自ASPLOS, 2023
- Towards an Adaptable Systems Architecture for Memory Tiering at Warehouse-Scale
所有作者及单位
- all Google. Padmapriya Duraisamy, Wei Xu, Scott Hare etc.
2. Background
DRAM主导大规模计算环境中的基础设施支出,如果不进行架构转变,这种趋势可能会恶化(给不起钱了)。使用PM在高度多租户的仓库规模计算环境中提出了许多挑战。其应用程序的多样性和规模激发了一般情况下应用程序透明的解决方案,可适应特定的工作负载需求。
3. 解决了什么问题
- 定义内存分层的机器级优化指标,用于自适应平衡复杂的高层次全机群应用性能和利用率目标(第2节)。
- 引入了用于大规模实时复杂系统评估的健壮A/B测试方法(第4节)。
- 首次对生产仓库规模环境中的可直接访问分层内存系统进行全面分析,该系统成功服务于不同的应用程序类别(第5节和第7节)。
- 评估一系列策略并证明硬件辅助事件分析满足性能要求的有效性(第6节),确定主动降级和快速检测升级的重要性。(还是免不了做这个工作,hh)
- 揭示了一旦布局得到很好的优化,地址转换开销、干扰效应和页面大小问题如何成为关键挑战,需要新的malloc级技术来减少“访问碎片”,特别是对于大页面。
- 利用实时A/B测试机制,以事实为依据开发自适应分层感知集群调度,在最大限度提高利用率的同时减少性能影响tails,并利用应用指导的分层感知巨页管理,减少访问碎片,提高第二层利用率(第8节)。
我们的经验凸显了大规模管理内存层的复杂性,其中工作负载行为可能每天都会发生变化,或者稳定数周后突然发生变化。我们相信,这种系统设计和用于捕获大规模实时多样化工作负载的复杂交互影响的方法将开辟新的、日益重要的研究途径。
4. 围绕该问题作者如何构建解决思路
SLI是请求得到正常响应的百分比。Service Level Object 服务水平目标,是围绕SLI构建的目标。通常是一个百分比,并与一个时间范围挂钩。比如,月度、季度、年度等。99%(2个9的正常运行时间):意味着在过去30天中有1%,或者说7.2小时的停机时间。
与内存分层相关的应用服务可分为两类——高重要性延迟敏感型(HILS)和其他(非HILS)。HILS包括对响应时间有严格要求的面向用户的应用、处于其他HILS应用关键路径上的缓存应用以及数据处理任务中的生产层(Production Tier,见[48])。非HILS包括面向吞吐量的应用、批处理、ML训练管道和其他SLO[48]要求较弱的应用。这些类通常位于同一台机器上。Borg调度器[50]会根据观察到的性能主动管理集群中的作业,内存分层也会产生性能影响。
4.1 指标
为了更好地分析分层堆栈,我们定义了两个直接连接到分层架构本身的代理指标:
• 次要层驻留率(STRR)是驻留在第2层的已分配内存的比例。它提供了有关层使用情况的标准化视角。
• 次要层访问率(STAR)是针对驻留在第2层的页面的应用程序的所有内存访问的比例。较低的STAR意味着较低的性能影响。
未充分利用Tier1 DRAM并没有任何好处。 STAR增加反映了性能下降。使用tier2越多,风险就越大,但通过保持STAR较低可以降低风险。目标:最小化STAR,最大化STRR。
4.2 架构
TMTS以页面粒度动态管理分层内存放置。其系统架构包括四层,如图2所示。底层对硬件进行抽象,呈现跨两种或多种类型存储设备分段的物理地址空间。从顶部开始的第二层将页面管理策略与候选检测和页面迁移机制分开,这些机制由较低层内核组件执行。针对工作负载的特定方面进行优化,用户空间策略层提供了这种灵活性和速度。顶层集群层由Borg调度程序组成,它与节点代理 Borglet一起工作,管理连续的多机器作业请求流,观察负载和性能指标,在每台机器上并将任务分派到各个服务器[48]。在TMTS 中,它采用分层感知调度策略来实现更好的工作放置,如第8.2节所述。
4.3 冷页驱逐与降级策略
当一个页面在之前几秒内没有被访问过时,我们就将其归类为阈值为t的冷页面[32]。降级策略选择根据应用程序类别、每个应用程序或随时间变化确定𝑡的值及其粒度。
浅浅提了一下他们的工作负载98%都是匿名页,所以策略也有所偏好
4.4 热页升级策略
对最后一级缓存LLC未命中事件进行采样来分析最近访问的第 2 层内存中的地址。由于第2层是可缓存的,因此只需考虑LLC未命中事件。对所有LLC未命中事件进行采样是不切实际且没有用的,绝大多数未达到第一级的流量。不幸的是,硬件不支持对内存存储精确事件过滤。We configure sampling to collect 1% of memory loads from tier2 and promote all the pages identified by this sampling. 我们在第6.2节中检查了这种实用但不完美的检测器的有效性。
为了检测采样可能遗漏的热点页面,我们还执行主动、定期的基于扫描的升级。我们将页面热龄定义为最近访问页面的扫描周期数。我们扩展了内核中的页面位扫描器来跟踪页面热年龄,这使得它能够区分活跃页面和轻度访问页面。为了提高效率,我们不在A位扫描中进行TLB失效。尽管这种优化可能会牺牲一些页面年龄的准确性,但我们并没有看到它在实践中影响降级和升级的有效性。
4.5 页面迁移
ufard后台线程使用Linux中的标准perf接口(例如 perf_event_open())来设置采样和处理访问事件。它还在内核中安装了一个小型BPF[3]程序,以优化从内核内页面A位扫描器到每个NUMA节点BPF环形缓冲区的tier2热页面年龄及其页面地址的收集。
4.6 硬件限制导致的策略约束
我们的部署使用英特尔傲腾持久内存的变体作为第2层。此类第2层DIMM的带宽受到高度限制,支持的内存带宽仅为英特尔®至强®可扩展处理器上典型DDR4通道的内存带宽的1/10。
在当前的硬件实现中,第2层DIMM带宽饱和也会影响常规DRAM延迟,因为第2层DIMM与DRAM DIMM共享内存通道。这限制了升级和降级的积极性。表1列出了我们的配置中不同访问模式下测得的Tier2 DIMM带宽。测得的空闲读访问延迟约为325ns,详情请参见[28,55]。根据冷页配置文件(图3)、可用DIMM容量和硬件带宽限制,我们的目标是将25%的系统内存容量用于第2层。这些硬件限制导致我们当前的部署受到以下策略决策限制:
没有直接分配到第2层:此约束避免了第2层中新分配的页面直接就很热。系统仅将任务内存分配到第1层,并依靠降级来填充第2层。仅分配到tier1可能会增加OOM情况。QoS在限制对连接到远程socket的第2层DIMM的访问方面效果较差,因为反馈信号必须在插槽之间传输。所以只将任务的内存降级到任务运行的socket上的第2层DIMM。
这些选择并不是TMTS的基础,而是底层硬件实现的产物。未来的硬件实现可能不会受到这些限制,从而放宽上面讨论的限制。当前限制的另一个好处是展示系统设计的弹性。
4.7 TLB Misses and Huge Pages
大页面(例如2MB)可以减轻4KB页面带来的虚拟到物理地址转换延迟和TLB覆盖问题。但这些大小给基于页面迁移的分层内存系统带来了新的挑战。由于地址映射的更改,迁移会导致TLB失效。此外,大页面中的小热区域会导致整个页面显得很热。
在当前的实现中,对象最初分配在tier1中。如果TMTS将大页识别为降级候选,则该页首先被拆分为4KB页面,然后降级。这允许未来的访问提升单独的4KB页面,并减少迁移成本和不必要的tier1占用。并非原始大页面的所有降级4KB页面都可以升级,从而阻止它们成功地重新组合成大页面。由于系统的DRAM容量较低,我们看到DRAM压力增加,这会导致tier1碎片化。
我们进行了两项实验,这两项实验都以最小的副作用提高了TLB 命中率。
首先,我们尝试完整迁移大页面,而不是在降级时将其分解为4KB页面。这使TLB未命中平均减少了4.7%,并将平均性能提高了0.5%。升级带宽按预期增加,但增幅<1%,并且带宽拥塞事件没有增加。平均STRR降低 <1%。
其次,我们提高了内存压缩的积极性,目标是提高tier1中4KB页面的重组率。我们发现大页覆盖率提高了25%,平均性能提高了0.5%。额外的CPU成本微不足道,< 0.1%。
5. 评估
在Optane PM上做的。这里只记录感兴趣的。
作者们首先说加入PM后的情况和只使用DRAM差不多;然后说明了冷页面控制的很好:
图5(a)是STRR,(b)是将冷内存覆盖率定义为存储在tier2中的2分钟冷页的比例。一个重要的参考点是地址空间中可用冷页的相对数量,在图3(a)的实验中观察到在28%到42%之间变化。
但是有一点,PM不可能刚刚好就给25%,肯定会多给吧?你又不放在远端,被定义的冷的超出25%,那dram降级有装不下,只能OOM?
6. 应对仓库级规模问题的适应性政策
虽然部署的TMTS满足大多数应用程序的性能目标,但一些异常值会出现显着的性能下降,如图6c所示。上述案例研究展示了我们计算环境中典型的冷内存访问模式的多样化组合。为了在这样的环境中扩展分层,我们必须实现跨节点、集群和应用程序层的垂直集成,并制定策略,共同实现更高的冷内存识别,同时将性能下降降至最低。本节讨论支持扩展TMTS的三种自适应策略。
Lagar-Cavilla等人[32]描述了一种动态的、按应用程序冷龄阈值策略,旨在维持目标升级率。
然后以前调度的优化Borglet在集群间、机器间选择策略的完善,考虑每个机器的第一层使用率之类的。
我们相信,使用软件提示来帮助调整页面内的内存分配和对象放置的类似方法将变得越来越重要。例如,除了开发人员将应用程序内的分配注释为可能的热或冷之外,编译器还可以使用自动化技术(例如配置文件引导优化)来提供类似的提示。
7. 积累
冷页面驱逐还挺不一样,不直接分配PM也有理由也挺新奇;作者在设计和描述时感觉也尽可能在表示我知道CXL,我知道硬件会变,但是我们这个策略仍然可以参考。
图6是不同应用程序IPC的情况,说明不同应用程序差异,用这个方式分类应用程序第一次见。
使用TensorFlow框架[6]构建的面向吞吐量的机器学习训练管道,具有高内存带宽使用率和不可预测的访问模式。用这个workload也是头一次。机器学习应用程序是一个面向吞吐量的训练管道,在训练阶段频繁更新内存中的ML模型。该应用程序存储的内存数据可以是密集的,也可以是稀疏的,具体取决于更新当前正在训练的ML模型所需的数据量。这些ML模型更新需要大量内存带宽,并且它们的内存访问模式是不可预测的,因为应用程序经过优化,可以有效地将训练数据从磁盘读取到内存中,而不是针对内存中访问的局部性进行优化。训练工作线程的单个实例的任何减慢都可能减慢应用程序的整个训练阶段,从而导致CPU和加速器周期的浪费。
奇怪,他不是直接降级去PM吗,为什么要在分配时隔离冷热的虚拟地址空间。“为了避免并置冷热对象,我们扩展了new运算符以接受一个提示参数,该参数指示预期分配的对象的访问频率。C++内存分配器的开源TCMalloc实现[4]使用此参数来分隔虚拟地址空间中的“冷”和“热”分配。由于不经常访问的对象聚集在页面上,因此可以建议内核不要使用透明大页面映射冷区域。这些策略导致频繁访问和不经常访问的对象的分离,并为每个对象提供不同的策略。”