找回密码
 注册
搜索
系统gho:最纯净好用系统下载站投放广告、加入VIP会员,请联系 微信:wuyouceo
查看: 270|回复: 11

[转贴] 两项极具突破性的内存管理优化特性将正式并入Linux 7.3内核版本

[复制链接]
发表于 昨天 09:16 | 显示全部楼层 |阅读模式
安德鲁·莫顿于周二正式提交了面向Linux 7.3合并窗口的全部内存管理(MM)子系统更新。本次内存管理相关的合并请求体量格外庞大:他提到,本开发周期内标记为“纳入内存管理子系统”的相关邮件多达1250封,而上一个开发周期的对应邮件数量仅为920封。面对海量的补丁迭代变更,他甚至借助谷歌的Gemini AI来协助撰写补丁汇总说明。在通读这份内容极为详尽的AI生成汇总文档后,我发现有两个补丁系列在Linux 7.3的性能维度上格外亮眼。

首个值得关注的补丁系列用于降低zs_free()函数中的锁竞争问题。该函数是Linux内核中zsmalloc内存分配器的核心组件,被Zswap和zRAM用于释放已压缩的内存页。无论是谷歌旗下的安卓设备,还是大量运行Zswap高负载工作负载的服务器,当系统处于内存压力状态时,在内存页解映射流程中,zs_free()内部的锁竞争问题会变得非常突出。在当前内存硬件价格的背景下,Zswap/zRAM的应用普及率持续攀升,尤其是在大内存服务器场景中,本次锁竞争优化的实用价值极高。


针对zsmalloc中锁竞争降低的性能影响所做的基准测试显示:无论是20核的英特尔x86服务器平台,还是树莓派4B这类小型嵌入式设备,在执行“每个进程独立映射256MB内存、写入数据、通过madvise主动触发页换出到zRAM交换分区,随后并发执行解映射操作”的测试场景时,两类设备都获得了显著的性能提升。来自小米的开发者郝文超的测试结果显示,该操作下树莓派的运行速度最高提升至原来的1.83倍,英特尔平台的性能提升最高可达1.4倍。
另一项同样被纳入本次内存管理子系统合并请求的优化,是针对rmap_walk_ksm()函数的性能改进。rmap_walk_ksm是Linux内存管理体系下的专用函数,作用是对经由内核同页合并(KSM)机制管理的内存页执行反向映射遍历操作。中兴通讯的工程师发现了KSM反向映射逻辑中一个“严重”的性能缺陷:当系统处于内存压力状态时,相关应用可能会出现数百毫秒级的卡顿冻结。当大量互不关联的虚拟内存区域(VMA)共享同一个匿名虚拟内存区域对象(anon_vma)时,该性能问题的表现会尤为突出。
本次优化的效果极其显著:锁持有时长直接从原先的500毫秒以上降至2毫秒以内!在最极端的测试场景下,锁持有时长从原本的705毫秒,优化至平均1.44毫秒、最高仅1.67毫秒的水平。
中兴通讯的徐鑫在之前提交的补丁系列中详细说明了该问题的性能影响与真实业务场景案例,核心亮点有两点:
锁持有时长从500毫秒以上降至2毫秒以内:在我们的基准测试中(20000个虚拟内存区域共享同一个anon_vma对象),KSM反向映射遍历过程中anon_vma锁的最坏持有时长从705毫秒降至最高1.67毫秒、平均1.44毫秒。
对真实用户的业务价值:anon_vma锁还会被缺页异常、内存回收、页迁移、内存规整、mlock内存锁定、进程退出时的内存空间释放、cgroup资源统计等核心内核流程抢占。低效的反向映射遍历导致的锁长时间持有,会阻塞大量应用线程,最终引发业务延迟尖刺、吞吐量下降,甚至容器运行超时故障。
该性能问题甚至无需通过fork()系统调用触发——虚拟内存区域(VMA)的拆分操作(例如长期反复调用mprotect或madvise),就可能生成数万个全部挂载在同一个匿名虚拟内存区域对象(anon_vma)下的VMA。

真实业务场景案例:


  • JVM与Go运行时:这类运行时会通过mmap系统调用申请堆内存区域,后续为了实现垃圾回收屏障或者内存警戒页机制,会调用mprotect(PROT_NONE)修改部分内存区域的权限,随着程序长期运行,原本连续的大VMA会被逐步拆分为数千个分散的小VMA。
  • 数据库引擎(MySQL、PostgreSQL):这类数据库会通过madvise(MADV_DONTNEED)机制管理大容量共享内存缓冲区或匿名内存映射,主动释放指定的内存页,该操作同样会触发VMA拆分行为。
基准测试数据具备现实参考性的原因:我们在一台开启了KSM特性、运行Java业务的生产服务器上,实际观测到了约20000个VMA共享同一个anon_vma的场景。在未打补丁的环境下,内存规整和页迁移操作触发反向映射遍历时,测得的anon_vma锁最大持有时长达到228毫秒。本次基准测试正是在可控的测试环境下,完整复现了该生产场景下的VMA数量规模与锁持有行为。


对于不存在单个anon_vma下挂载数万个VMA场景的系统,该补丁带来的性能开销几乎可以忽略不计,仅新增了一次页偏移量比较操作。而对于确实受该问题困扰的系统,优化效果极其显著:1)最坏场景下anon_vma锁的持有时长从数百毫秒降至2毫秒以内;2)直接减少了所有需要抢占该锁的并行操作的阻塞概率,包括缺页异常、内存回收、页迁移、内存规整、内存锁定(mlock)和进程退出内存释放(exit_mmap)等核心内核流程。


最终用户将直观感受到系统尾部延迟降低(应用卡顿现象大幅减少)、内存压力场景下的吞吐量提升,也不会再出现因锁持有时间过长导致的虚假死锁警告或容器运行超时故障。


简言之:未触发该极端异常场景的工作负载完全不受补丁影响;而命中该场景的工作负载,锁持有时长会直接缩短100至500倍,最终直接转化为系统响应能力的大幅提升。
这些极具实用价值的亮眼优化,以及大量其他相关改进,都被纳入了Linux 7.3内核的内存管理子系统更新中。
上述两项优化远非Linux 7.3带来的全部性能改进,近期Phoronix的多篇其他报道中还提及了其余多项性能优化特性。待本次合并窗口彻底收尾后,Phoronix很快就会启动针对Linux 7.3内核的全面基准测试工作。





发表于 昨天 10:12 | 显示全部楼层
Linux还未真正用过。
回复

使用道具 举报

发表于 昨天 11:10 | 显示全部楼层
Linux 7.3的使用者很多啊
回复

使用道具 举报

发表于 昨天 11:12 | 显示全部楼层
越来越好
回复

使用道具 举报

发表于 昨天 13:36 | 显示全部楼层
感谢分享资讯
回复

使用道具 举报

发表于 昨天 14:04 | 显示全部楼层
谢谢分享
回复

使用道具 举报

发表于 昨天 16:00 | 显示全部楼层
这是好事儿啊
回复

使用道具 举报

发表于 昨天 16:24 | 显示全部楼层
回复

使用道具 举报

发表于 昨天 17:27 | 显示全部楼层
为了灌水把两个功能性更新拉出来当新闻了。概括一下就是:

1. zsmalloc 的 zs_free() 锁竞争优化:显著降低 Zswap/zRAM 在内存压力下解映射时的锁竞争。测试中树莓派最高提速 1.83 倍,Intel 服务器最高 1.4 倍。

2. KSM 反向映射 rmap_walk_ksm() 性能优化:解决大量 VMA 共享同一个 anon_vma 时锁持有时间过长的问题(从最高 705ms 降到平均 1.44ms)。对 JVM、Go、数据库等会频繁拆分 VMA 的场景效果尤其明显,能大幅降低应用卡顿和延迟尖刺。
回复

使用道具 举报

发表于 6 小时前 | 显示全部楼层
感谢分享信息,学习了
回复

使用道具 举报

发表于 3 小时前 | 显示全部楼层
感谢分享
回复

使用道具 举报

发表于 10 分钟前 | 显示全部楼层
图片挂了
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|Archiver|捐助支持|无忧启动 ( 闽ICP备05002490号-1|闽公网安备35020302032614号 )

GMT+8, 2026-8-22 06:47

Powered by Discuz! X5.0

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表