本文内容节选自6月13日,由msup和高可用架构联合主办GIAC全球互联网架构大会,腾讯云操作系统内核技术专家曾敬翔分享的《Linux 交换子系统的技术革新》案例实录。
分享者曾敬翔,就职于腾讯内核研发团队,专注于做Linux内核内存管理相关,研究方向涉及混部场景内存的隔离与干扰指标监控、云原生场景内存透明卸载与超卖,对外输出产品方案,对内助力千万核量级业务节省内存,在Linux kernel、bcc libbpf上游社区均有贡献。
目录
• 内存管理与内存多级卸载
• 为什么要让操作系统做主动内存卸载
• 业界痛点与我们的突破
• 未来展望
演讲全文
在当今数字化时代,腾讯云的业务规模与复杂度呈现爆发式增长态势,内存成本和管理复杂性也随之不断攀升。内存作为数据中心的主要核心成本之一,在桌面和移动平台同样稀缺,其管理策略对性能和成本有着决定性影响。系统中存在大量长期未被访问的冷内存,内存卸载便是要充分利用整机所有资源,将冷内存移动到次级存储设备。
如何进行更好的内存管理卸载以提高性能,降低成本,一直是业界探索的热门方向。这其中包括,存在多级存储的设备上对内存进行合理沉降;借助高性能算法实现内存压缩;同时可以提前预防内存巅峰压力的形成。
01
内存管理与内存多级卸载
操作系统内核承担着虚拟内存管理的核心职责,涉及页表管理、缺页处理、Over commit 以及内存迁移、整理和页面分配等关键任务。内核能够充分利用 CPU 等硬件资源提供的内存控制、感知和映射能力,实现全局资源的统一调度。通过热度探测,内核精准识别冷内存页面,并将其换出到更冷的 SWAP 设备上。对于匿名页面,内核的 SWAP 功能可将其换出到块设备,释放宝贵内存资源。
02
为什么要让操作系统做主动内存卸载
当前业界在内存管理领域面临着诸多痛点。
**1、热度探测:**如何在生产环境中找出冷内存?如何平衡精度与性能?
**2、内存卸载:**匿名页 -> SWAP 系统的瓶颈在哪里?缓存 -> 回收的效率?
**3、mTHP 管理:**社区引入了新的 mTHP 概念(支持不同大小的大页),带来了更多挑战?
**4、内存管理开销优化:**内核的内存的管理提供了大量特性,这必然是有开销的,如何降到最低?特别是随着系统规模增长如何保证可扩缩性(Scalability)?
针对内存管理与卸载,我们进行了大量探索与实践,并实现了一系列创新成果。所有技术进步方案全部回馈社区,在 Linux 内核主线中我们已经在内存管理领域做出大量贡献,推动 OpenCloudOS 与整个 Linux 社区的技术进步。
03
业界痛点与我们的突破
针对上述痛点,腾讯云进行了深入的探索与实践,并取得了一系列创新成果。
突破一:冷内存识别与淘汰优化
Linux 内核管理内存页的核心机制是 LRU链表。它不仅用于管理页面热度,也是组织已分配页面的基础结构。传统的 Active/Inactive 双链表 LRU 机制存在明显缺陷,这其中包括:依赖扫描页表项中的 Access Bit 判断访问热度,开销大且精度有限;发生内存压力时需逐页降级或淘汰,并通过 RMAP 反向映射扫描所有映射了该页的进程页表,性能开销巨大。
在热度探测方面,腾讯云发现Linux kernel 6.1 中的 MGLRU 存在明显的文件页回收倾向,在文件页较热的场景(如数据库)中性能不佳。为此:
**1、重构 Workingset Refault Distance 算法:**将该源于 Active/Inactive LRU 的经典算法适配到 MGLRU 框架中,有效修复了上游的 OOM Regression 问题并提升算法效果。
**2、创新时间戳算法:**继承 Active/Inactive LRU 思想,为每个换出页面分配时间戳(8 bytes),每个 LRU 维护一个换出计数时间戳(atomic)。通过比较两者精确判断页面热度。该算法提交上游后,部分工作负载性能获得极大提升(部分场景延迟降低 5%-57%)。
突破二:SWAP 分配器重构与锁优化
内核 SWAP 路径整体设计依旧过于复杂且低效,社区有着多年的讨论,但至今收效甚微,历史包袱很重;SWAP Cache 使用 Xarray,SWAP Cgroup Map 使用 2 byte map,SWAP Map 使用 1 byte map,相互独立;目前内核 SWAP 设计非常离散,组件之间同步关系复杂,开销仍旧过大,远非最优设计。
腾讯云的深度贡献:
**1、修复重大历史隐患:**在代码审查和重构讨论中,发现并修复了一个隐藏长达 8 年之久的数据损毁漏洞。
**2、优化 Page Cache / Xarray:**由于 SWAP Cache 和 Page Cache 核心均使用 Xarray,团队在重构期间优化了相关算法并修复疑难 Bug。该修复解决了困扰多厂商数年的问题,性能提升 10%,获得 Jens Axboe、Linus Torvalds 等核心开发者的高度认可。
**3、提出 SWAP Table 新方向:**使用一个全新数据结构来表达与管理 SWAP 数据;在 LSFMM 等会议上引起讨论和关注,这也会是 SWAP 下一个重点方向;常见工作负载性能可以提升 10% 左右,同时内存占用,SWAP 内存压缩,mTHP 的通用分配与换入换出,SSD 写块适配等均可以此为基础展开。
突破三:缓存淘汰效率优化
除了页面级管理(LRU, SWAP),内核还需管理小于页面的对象(如 Inode, Dentry, Shadow Node)。每个 Cgroup 管理自己的 List LRU 用于回收这些小对象,对象的插入(由分配路径负责)和跨 Cgroup 的转移(Reparenting)操作,由同一个全局锁保护同类型 List。当多个容器同时面临内存压力进行回收时,引发严重的全局锁争抢。
腾讯云利用 RCU 与锁语义稳定化 List LRU:优化分配与回收路径,使其性能更高、代码更简洁。
突破四:基础性能与可扩缩性 - 内存计数
内存页面计数与统计(RSS)是内核最基础核心能力,所有系统都离不开它,例如 top 命令。即便是基本的计数器,也存在开销,是值得优化的部分。
旧内核采用 Task Batch 更新方式牺牲精度换取性能,新版本采用 Per Task Per CPU 计数器提高了精度和性能,但增加了内存开销,在高并发任务启动时仍有性能问题。
腾讯于 2022 年提出了 Global Per CPU RSS Counter 设计,与调度系统结合,实现了低内存消耗,极低的开销,高并发性能。
腾讯云的内存管理与卸载技术已在多个场景中成功落地。
在平滑降配场景下,业务通过内存压缩技术降低内存配置需求,如从 4C8G 降至 4C4G,且性能不受影响。容器平台利用这些技术实现超卖,在单节点上部署更多实例,提升资源利用率。负载调压场景中,开启内存压缩功能后,业务 QPS 显著提升。混布部场景里,内存压缩释放更多内存,使容器平台能够调度更多离线资源。
在平滑降配场景下,业务通过内存压缩技术降低内存配置需求,如从 4C8G 降至 4C4G,且性能不受影响,提升资源利用率。负载调压场景中,开启内存压缩功能后,业务 QPS 显著提升。混部场景里,内存压缩释放更多内存,使容器平台能够调度更多离线资源。
此外,在数据库、社交头像业务和转码业务等场景中,这些技术也展现出了显著优势,如内存使用降低、业务率失败大幅下降、CPU 利用率稳定等。
04
未来与展望
随着系统规模和内存容量的持续增长,Linux 内核在内存管理领域仍有巨大的提升空间。腾讯云将继续坚持与上游社区合作,推动内核技术的发展。目前已获得 SWAP 子系统的 review 权限,未来将更加深入地参与内核研发,加强与海外厂商的合作,共同应对技术挑战。
以上内容来自曾敬翔老师的分享。