刚刚,Meta(原 Facebook)工程师团队在博客倒退示了一种叫“通明内存卸载”(Transparent Memory Offloading,简称 TMO)的全新 Linux 内核性能,可为每台 Linux 服务器节俭 20% 至 32% 的内存。据悉,该性能已于 2021 年在 Facebook/Meta 服务器中投入使用,团队已胜利地将 TMO 的操作系统组件降级到 Linux 内核中。
通明内存卸载(TMO)是 Meta 针对异构数据中心环境推出的的解决方案,它引入了一种新的 Linux 内核机制,可实时测量由 CPU、内存 和 I/O 之间的资源短缺而导致的工作损失。在这些信息的领导下,TMO 在没有任何应用程序先验常识的状况下,主动调整要卸载到异构设施(如压缩内存或 SSD)的内存量。
也就是说,TMO 会依据设施的性能特色和应用程序,来对较慢内存拜访的敏感性来出做调整。除了应用程序容器外,TMO 还从提供基础架构级性能的 sidecar 容器中全面辨认卸载机会。
卸载机会
近年来,大量更便宜的非 DRAM 内存技术(如 NVMe SSD)已被胜利部署在数据中心或正在开发的数据中心。此外,新兴的非 DDR 内存总线技术【如 Compute Express Link(CXL)】也提供了相似内存的拜访语义,并靠近 DDR 性能。数据图显示的内存存储层次结构阐明了各种技术是如何互相重叠的。这些趋势的联合,为内存分层提供了新的机会,这在过来是不可能的。
应用内存分层,拜访频率较低的数据将迁徙到速度较慢的内存中。应用程序自身、用户空间库、内核或虚拟机监控程序能够驱动迁徙过程。Meta 的 TMO 性能工作专一于内核驱动的迁徙或替换,它能够通明地利用于许多应用程序,而无需批改应用程序。
只管概念简略,但内核驱动的对提早敏感数据核心应用程序的替换在超规模上仍具备挑战性。Meta 构建了 TMO,这是一个用于集装箱化环境的通明内存卸载解决方案。
解决方案:通明内存卸载
TMO 的组成 :
- 压力暂停信息(PSI),一个 Linux 内核组件,用于实时测量因为 CPU、内存和 I/O 之间的资源短缺而导致的工作损失。Meta 首次实现了可间接测量应用程序对内存访问速度减慢的敏感性,而不用求助于软弱的低级别指标,如页面晋升率。
- Senpai 是一个用户空间代理,它能够施加轻微的主动式内存压力,跨不同的工作负载和异构硬件无效地卸载内存,对应用程序性能的影响最小。
- TMO 以阈下内存压力级别执行内存卸载以替换,周转率与文件缓存成比例。这与在重大内存压力下作为紧急溢出进行替换的历史行为造成比照。
DRAM 的老本占服务器老本的一小部分,这促使 Meta 在 TMO 上发展工作。数据图显示了 DRAM、压缩内存和 SSD 存储的绝对老本。Meta 依据代表其生产工作负载平均值的 3 倍压缩率来预计压缩 DRAM 的老本。
据预计,DRAM 的老本将增长到 Meta 基础设施收入的 33%,同时 DRAM 功耗遵循相似的趋势将达到服务器基础架构功耗的 38%。
在压缩 DRAM 的根底上,Meta 还为所有生产服务器装备了功能强大的 NVMe SSD。在零碎级别,NVMe SSD 占服务器老本的比例不到 3%(大概是以后一代服务器压缩内存的 3 倍)。数据图显示,在各代中,iso 容量到 DRAM、SSD 的老本仍低于服务器老本的 1%——每字节老本大概比压缩内存低 10 倍。
只管比 DRAM 便宜,但压缩内存和 NVMe SSD 的性能特色较差。好在典型的内存拜访模式为卸载到较慢的介质提供了大量机会。数据图中显示了“冷”应用程序内存,过来 5 分钟内未拜访的页面的百分比。这种内存能够卸载到压缩内存或 SSD 中,而不会影响应用程序性能。
总体而言,冷存储均匀约占 Meta 服务器总内存的 35%。然而,它在不同的应用程序中变化很大,从 19% 到 62% 不等。这突出了对各种应用程序行为具备鲁棒性的卸载办法的重要性。
除拜访频率之外,卸载解决方案还须要思考卸载哪种类型的内存。应用程序拜访的内存包含两大类:匿名和文件备份。匿名内存由应用程序以堆或堆栈页的模式间接调配。文件反对的内存由内核的页面缓存调配,以代表应用程序存储常常应用的文件系统数据。
TMO 设计概述
TMO 蕴含跨用户空间和内核的多个局部,“Senpai”作为用户空间代理位于卸载操作的外围,在围绕察看到的内存压力的管制循环中,它应用内核的回收算法来辨认应用起码的内存页,并将它们移出卸载后端。在此过程中,PSI(压力失速信息)内核组件量化并报告内存压力,回收算法则通过内核的 cgroup2 内存控制器定向到特定的应用程序。
Senpai
Senpai 位于 PSI 指标之上,它应用压力作为反馈,以确定驱动内核内存回收的力度。如果容器测量值低于给定的压力阈值,Senpai 将进步回收率;如果压力降到以下,Senpai 就会缓解。压力阈值失去校准,这样分页开销在性能上不会影响工作负载的性能。
替换算法
TMO 是在不影响工作负载的低压力级别下卸载内存的,但只管 Linux 在压力下退出了文件系统缓存,但它仿佛“不愿”将匿名内存移出到替换设施。即便存在已知的冷堆,并且文件缓存的速度超过了 TMO 压力阈值,配置的替换空间也会处于令人丧气的闲暇状态。
因而,TMO 引入了一种新的替换算法,该算法利用了这些驱动器的劣势,无需复原仍应用旋转存储介质的传统设置,可通过跟踪零碎中文件系统缓存重构的速率并按比例进行替换来实现。也就是说,对于每个反复须要从文件系统读取的文件页,内核都会尝试替换掉一个匿名页,这样就为翻页腾出了空间。如果产生替换插入,Recall 会再次推回文件缓存。
目前,Meta 依据应用程序的内存可压缩性及其对内存访问速度减慢的敏感性,在压缩内存和 SSD 反对的替换之间手动抉择卸载后端。只管能够开发工具来自动化该过程,但更根本的解决方案须要内核治理卸载后端的层次结构(如主动应用 zswap 解决较热的页面,应用 SSD 解决较冷或压缩性较差的页面,以及未来将 NVM 和 CXL 设施折叠到内存层次结构中)。内核回收算法应该在这些内存池之间动态平衡,Meta 正在踊跃钻研这个体系结构。
随着 CXL 等行将推出的总线技术提供相似内存的拜访语义,内存卸载不仅能够帮忙卸载冷存储,还能够帮忙卸载热存储。Meta 也正积极关注该体系结构,以利用 CXL 设施作为内存卸载后端。
参考链接:https://engineering.fb.com/20…