Meta “透明内存卸载” 功能亮相:可为 Linux 服务器节省 20%-32% 内存

简介: Meta “透明内存卸载” 功能亮相:可为 Linux 服务器节省 20%-32% 内存

刚刚,Meta(原 Facebook)工程师团队在博客发展示了一种叫“透明内存卸载” (Transparent Memory Offloading,简称 TMO)的全新 Linux 内核功能,可为每台 Linux 服务器节省 20% 至 32% 的内存。据悉,该功能已于 2021 年在 Facebook/Meta 服务器中投入使用,团队已成功地将 TMO 的操作系统组件升级到 Linux 内核中。

image.png

透明内存卸载(TMO)是 Meta 针对异构数据中心环境推出的的解决方案,它引入了一种新的 Linux 内核机制,可实时测量由 CPU、内存 和 I/O 之间的资源短缺而导致的工作损失。在这些信息的指导下,TMO 在没有任何应用程序先验知识的情况下,自动调整要卸载到异构设备(如压缩内存或 SSD)的内存量。

也就是说,TMO 会根据设备的性能特征和应用程序,来对较慢内存访问的敏感性来出做调整。除了应用程序容器外,TMO 还从提供基础架构级功能的 sidecar 容器中全面识别卸载时机。

卸载时机

image.png

近年来,大量更便宜的非 DRAM 内存技术(如 NVMe SSD)已被成功部署在数据中心或正在开发的数据中心。此外,新兴的非 DDR 内存总线技术【如 Compute Express Link(CXL)】也提供了类似内存的访问语义,并接近 DDR 性能。数据图显示的内存存储层次结构说明了各种技术是如何相互堆叠的。这些趋势的结合,为内存分层提供了新的机会,这在过去是不可能的。

使用内存分层,访问频率较低的数据将迁移到速度较慢的内存中。应用程序本身、用户空间库、内核或虚拟机监控程序可以驱动迁移过程。Meta 的 TMO 功能工作专注于内核驱动的迁移或交换,它可以透明地应用于许多应用程序,而无需修改应用程序。

尽管概念简单,但内核驱动的对延迟敏感数据中心应用程序的交换在超规模上仍具有挑战性。Meta 构建了 TMO,这是一个用于集装箱化环境的透明内存卸载解决方案。

解决方案:透明内存卸载

TMO 的组成

  • 压力暂停信息(PSI),一个 Linux 内核组件,用于实时测量由于 CPU、内存和 I/O 之间的资源短缺而导致的工作损失。Meta 首次实现了可直接测量应用程序对内存访问速度减慢的敏感性,而不必求助于脆弱的低级别指标,如页面提升率。
  • Senpai 是一个用户空间代理,它可以施加轻微的主动式内存压力,跨不同的工作负载和异构硬件有效地卸载内存,对应用程序性能的影响最小。
  • TMO 以阈下内存压力级别执行内存卸载以交换,周转率与文件缓存成比例。这与在严重内存压力下作为紧急溢出进行交换的历史行为形成对比。

image.png

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% 不等。这突出了对各种应用程序行为具有鲁棒性的卸载方法的重要性。

image.png

除访问频率之外,卸载解决方案还需要考虑卸载哪种类型的内存。应用程序访问的内存包括两大类:匿名和文件备份。匿名内存由应用程序以堆或堆栈页的形式直接分配。文件支持的内存由内核的页面缓存分配,以代表应用程序存储经常使用的文件系统数据。

TMO 设计概述

image.png

TMO 包含跨用户空间和内核的多个部分,“Senpai ”作为用户空间代理位于卸载操作的核心,在围绕观察到的内存压力的控制循环中,它使用内核的回收算法来识别使用最少的内存页,并将它们移出卸载后端。在此过程中,PSI(压力失速信息)内核组件量化并报告内存压力,回收算法则通过内核的 cgroup2 内存控制器定向到特定的应用程序。

Senpai

image.png

Senpai 位于 PSI 指标之上,它使用压力作为反馈,以确定驱动内核内存回收的力度。如果容器测量值低于给定的压力阈值,Senpai 将提高回收率;如果压力降到以下,Senpai 就会缓解。压力阈值得到校准,这样分页开销在功能上不会影响工作负载的性能。

交换算法

TMO 是在不影响工作负载的低压力级别下卸载内存的,但尽管 Linux 在压力下退出了文件系统缓存,但它似乎“不愿”将匿名内存移出到交换设备。即使存在已知的冷堆,并且文件缓存的速度超过了 TMO 压力阈值,配置的交换空间也会处于令人沮丧的空闲状态。

因此,TMO 引入了一种新的交换算法,该算法利用了这些驱动器的优势,无需恢复仍使用旋转存储介质的传统设置,可通过跟踪系统中文件系统缓存重构的速率并按比例进行交换来实现。也就是说,对于每个重复需要从文件系统读取的文件页,内核都会尝试交换掉一个匿名页,这样就为翻页腾出了空间。如果发生交换插入,Recall 会再次推回文件缓存。

目前,Meta 根据应用程序的内存可压缩性及其对内存访问速度减慢的敏感性,在压缩内存和 SSD 支持的交换之间手动选择卸载后端。尽管可以开发工具来自动化该过程,但更基本的解决方案需要内核管理卸载后端的层次结构(如自动使用 zswap 处理较热的页面,使用 SSD 处理较冷或压缩性较差的页面,以及将来将 NVM 和 CXL 设备折叠到内存层次结构中)。内核回收算法应该在这些内存池之间动态平衡,Meta 正在积极研究这个体系结构。

随着 CXL 等即将推出的总线技术提供类似内存的访问语义,内存卸载不仅可以帮助卸载冷存储,还可以帮助卸载热存储。Meta 也正积极关注该体系结构,以利用 CXL 设备作为内存卸载后端。

参考链接:https://engineering.fb.com/20...

相关文章
|
11天前
|
缓存 Java Linux
如何解决 Linux 系统中内存使用量耗尽的问题?
如何解决 Linux 系统中内存使用量耗尽的问题?
|
9天前
|
运维 监控 Linux
服务器管理面板大盘点: 8款开源面板助你轻松管理Linux服务器
在数字化时代,服务器作为数据存储和计算的核心设备,其管理效率与安全性直接关系到业务的稳定性和可持续发展。随着技术的不断进步,开源社区涌现出众多服务器管理面板,这些工具以其强大的功能、灵活的配置和友好的用户界面,极大地简化了Linux服务器的管理工作。本文将详细介绍8款开源的服务器管理面板,包括Websoft9、宝塔、cPanel、1Panel等,旨在帮助运维人员更好地选择和使用这些工具,提升服务器管理效率。
|
11天前
|
缓存 Linux
如何检查 Linux 内存使用量是否耗尽?
何检查 Linux 内存使用量是否耗尽?
|
17天前
|
安全 算法 Linux
Linux 服务器还有漏洞?建议使用 OpenVAS 日常检查!
在数字化时代,Linux 服务器的安全至关重要。OpenVAS 是一款优秀的开源漏洞扫描工具,可以帮助及时发现并修复服务器中的安全隐患。本文将介绍 OpenVAS 的主要功能、使用方法及应对漏洞的措施,帮助用户加强服务器安全管理,确保企业数字化安全。
40 7
|
20天前
|
算法 Linux 开发者
深入探究Linux内核中的内存管理机制
本文旨在对Linux操作系统的内存管理机制进行深入分析,探讨其如何通过高效的内存分配和回收策略来优化系统性能。文章将详细介绍Linux内核中内存管理的关键技术点,包括物理内存与虚拟内存的映射、页面置换算法、以及内存碎片的处理方法等。通过对这些技术点的解析,本文旨在为读者提供一个清晰的Linux内存管理框架,帮助理解其在现代计算环境中的重要性和应用。
|
20天前
|
监控 Ubuntu Linux
使用VSCode通过SSH远程登录阿里云Linux服务器异常崩溃
通过 VSCode 的 Remote - SSH 插件远程连接阿里云 Ubuntu 22 服务器时,会因高 CPU 使用率导致连接断开。经排查发现,VSCode 连接根目录 ".." 时会频繁调用"rg"(ripgrep)进行文件搜索,导致 CPU 负载过高。解决方法是将连接目录改为"root"(或其他具体的路径),避免不必要的文件检索,从而恢复正常连接。
|
23天前
|
缓存 Unix Linux
服务器linux!!!
本文介绍了计算机的演变历史、硬件基础知识及服务器相关知识。从电子管时代的ENIAC到冯-诺伊曼架构,再到现代计算机系统组成,详细讲解了计算机的发展历程。此外,文章还介绍了服务器的分类、品牌、硬件组成以及IDC机房的上架流程,为读者提供了全面的技术背景知识。
38 0
服务器linux!!!
|
3天前
|
存储 算法 安全
深入理解Linux内核的内存管理机制
本文旨在深入探讨Linux操作系统内核的内存管理机制,包括其设计理念、实现方式以及优化策略。通过详细分析Linux内核如何处理物理内存和虚拟内存,揭示了其在高效利用系统资源方面的卓越性能。文章还讨论了内存管理中的关键概念如分页、交换空间和内存映射等,并解释了这些机制如何协同工作以提供稳定可靠的内存服务。此外,本文也探讨了最新的Linux版本中引入的一些内存管理改进,以及它们对系统性能的影响。
|
12天前
|
监控 Linux
如何检查 Linux 内存使用量是否耗尽?这 5 个命令堪称绝了!
本文介绍了在Linux系统中检查内存使用情况的5个常用命令:`free`、`top`、`vmstat`、`pidstat` 和 `/proc/meminfo` 文件,帮助用户准确监控内存状态,确保系统稳定运行。
97 6
|
13天前
|
Linux
在 Linux 系统中,“cd”命令用于切换当前工作目录
在 Linux 系统中,“cd”命令用于切换当前工作目录。本文详细介绍了“cd”命令的基本用法和常见技巧,包括使用“.”、“..”、“~”、绝对路径和相对路径,以及快速切换到上一次工作目录等。此外,还探讨了高级技巧,如使用通配符、结合其他命令、在脚本中使用,以及实际应用案例,帮助读者提高工作效率。
52 3