LWN:用 BPF 控制内存管理

现代 Linux 内存管理的演进与变革:从传统 LRU 到多代架构 MGLRU Linux内核内存管理正经历从传统LRU到多代架构LRU(MGLRU)的重大变革。传统LRU采用双链表结构(活跃/非活跃),在现代TB级内存场景下暴露出粒度粗、反向映射开销大等缺陷。MGLRU引入多世代概念(默认4代),通过页表扫描和布隆过滤器显著提升回收效率,但导致内核代码冗余复杂。在2026年LSFMM+BPF峰会上,社区重点讨论了三大议题:统一回收代码路径、优化MGLRU性能(如写回节流和页面缓存保护)、解决Android移动端的高响应需求(需8.3ms内完成回收)。尽管存在整合挑战,MGLRU代表内 阅读详情

作者: Jonathan Corbet
2026 年 5 月 15 日 


LSFMM+BPF 

Roman Gushchin 在 2026 年 Linux 存储、文件系统、内存管理与 BPF 峰会(LSFMM+BPF)的内存管理分会场开始了他的演讲。他提到,社区已经看到了许多为内存管理添加基于 BPF 的接口的提案。然而,目前还没有一个提案进入主线(mainline)。他希望探讨 BPF 可能发挥作用的方式,以及到目前为止阻碍基于 BPF 的解决方案进入主线的障碍。随后,Shakeel Butt 主持了一场讨论,探讨了用于内存控制组(memory control groups)的新型 BPF 接口可能需要满足哪些要求。 

BPF 集成的障碍

他首先指出,现有的尝试已经试图涵盖许多不同的内存管理启发式方法。已经有提案建议使用 BPF 来控制 内存不足处理(out-of-memory handling,OOM)、 NUMA 平衡、 内存控制组、 页面缓存置换(page-cache eviction)等。还有更多有趣的构想尚未付诸实践,包括预读(readahead)控制、 madvise() 、 内核同页合并(kernel samepage merging)以及客户机内存控制。尤其是预读,它包含了一套混乱的启发式规则,但对于性能至关重要。 

他说,为内存管理子系统添加 BPF 接口存在许多障碍;他将按照重要性从小到大的顺序进行介绍。第一个障碍是对树外(out-of-tree)BPF 程序的担忧。内核开发者希望看到生产级别的代码进入主线,但目前 BPF 的运作方式并非如此。例如,已经有了生产级别的 sched_ext 调度器,但它们都固执地留在树外。BPF 维护者 Alexei Starovoitov 表示,“ sched_ext 是一个错误”,因为它没有随之将任何生产级别的调度器带入主线。他说,这种局面现在很难扭转。如果能有一个好的树内 OOM 处理器就好了;即便没有别的作用,它也能帮助开发者评估提议的接口。 

Gushchin 说,在内核树中包含 BPF 程序似乎并无争议,因此真正的问题在于开发者应该走多远。第一步可以仅仅是包含源码供人们研究和试用。Starovoitov 说,自动加载内置的 BPF 程序可能是很好的第二步;这能让人们轻松地使用内置的 BPF 程序。Gushchin 建议,一个基于 BPF 实现的 systemd-oomd 将是展示该子系统如何运作的一个绝佳范例。 

另一个障碍是目前无法将 struct ops 程序挂载到控制组(cgroup)上。虽然可以挂载普通的 BPF 程序 ,但无法挂载那些使用 struct ops 接口的程序。他已经为 OOM 处理器提供了一个实现,但 sched_ext 使用的是另一种解决方案。 

接下来是安全性和回退(fallback)问题;一个有缺陷的 BPF 内存管理程序可能会轻而易举地使系统无法使用。在 Gushchin 看来,这是最难解决的问题;甚至很难定义在这种情况下“安全性”意味着什么。他说,基于时间的回退方案难以实现且不够优雅。内存管理操作可以被封装进受监控的 kfuncs 中,但这会导致非通用的解决方案,从而损害性能。需要定义可接受的服务级别;一个丢弃所有数据包的流量控制程序是可以接受的,但一个让系统中一半任务处于饥饿状态的 sched_ext 调度器则没那么容易被接受。如果加载了一个有问题的 BPF 程序,导致系统再也无法回收内存,该怎么办? 

对于热路径(hot path)性能的担忧将一直存在,这使得在最核心的路径中添加 BPF 程序变得难以自圆其说。内存管理子系统在很大程度上依赖批处理(batching)来提升性能,这就产生了一个问题:BPF 程序应该在批处理之前还是之后运行?他建议批处理应该先行,但这使得无法通过 BPF 程序来控制批处理本身。 

最后,他说最重要的障碍是 ABI 的稳定性;这一担忧最近刚被 David Hildenbrand 在邮件列表中 提出。Hildenbrand 在现场表示,关于为 BPF 程序提供钩子(hook)意味着什么,存在一些困惑:它们是一种永久性的内存管理特性吗?社区可能并不想承诺无限期地保留这些钩子。这种担忧导致了一项决定,即不为透明大页(transparent huge pages)的管理提供钩子;他说,没人知道五年后情况会变成什么样,因此现在不可能设计出正确的接口。 

他说,未来可能会发生这样的情况:内存管理开发者某天醒来,意识到接口的某些方面应该换一种做法。如果他们付诸行动,程序就会崩溃,人们会感到愤怒。或许解决方案是仅承诺支持那些在内核树本身维护的 BPF 程序。Hildenbrand 最后总结道,他看到了使用 BPF 的价值,但担心添加接口可能会迫使子系统在未来去维护那些令其后悔的特性。 

演讲此时已到预定时间。在结束语中,Gushchin 表示,仅添加最通用的 BPF 钩子至关重要。例如,添加一个用于分配 OOM 分数的钩子可能不是个好主意,因为未来的 OOM 杀手可能不再使用这些分数。但一个在压力下释放内存(或许是通过杀掉某些进程)的钩子可能会很有用。 

重新构想内存控制组

紧接着,Shakeel Butt 讨论了他希望看到的内核 内存控制器(memory controller)的演进方向,以及 BPF 如何融入其中。他首先介绍说,内存控制器分层级地分配内存资源,并实现了硬限制(hard limit)和软限制(soft limit)。当内存充裕时,任何给定的组都可以使用多达其硬限制的内存,但当内存紧张时,其用量会被压缩回软限制。 

他说,内存控制器面临着许多挑战。限制的执行缺乏灵活性且具有干扰性;由于它是同步发生的,可能会导致对延迟敏感的线程出现意外停顿。其接口已被证明难以演进,因为重大更改会破坏现有的 ABI,而内核开发者是不允许这么做的。他说,如果有一种机制能让实验替代方案成为可能,那就太好了。 

新接口的目标是提供能够支持各种用例的能力。 他的会议提案中提供了一个用例示例,并在会议期间再次提及: 

策略:“将系统级内存利用率保持在 95% 以下;通过不限制持有锁的分配器来避免优先级反转(priority inversions);在不降低相关性能指标的前提下,将每个工作负载的用量削减至其工作集(working set)大小;与工作负载协作进行减载和内存削减决策;在极端内存压力下,与 OOM 杀手和中央作业调度器协作,杀死并清理某个工作负载。” 

他说,新的内存控制器需要提供应用程序可以响应的内存使用通知。它需要支持后台回收(background reclaim),以便在不阻塞运行线程的情况下执行内存限制。内存使用限制(throttling)应该能感知到持有锁的线程,以避免优先级反转问题。用户空间需要能够以其他方式影响限制操作,例如,能够识别出哪些特定线程在一定程度上应该被豁免。控制器还应支持内存分层(memory tiering),提供对页面在各层之间迁移方式的控制。 

由于时间紧迫,无法深入探讨这一新接口的具体运作方式;总的来说,这项工作似乎还处于早期阶段。Butt 说,可以添加一个新的 BPF 回调函数 bpf_memcg_charge_succeed() ,以告知 BPF 程序内存用量的增加;该程序随后可能会通过启动后台回收来做出响应。其他回调函数可以在控制组达到使用水位线(或触及使用上限)时通知程序,并依靠程序提供如何应对的暗示。该程序可能会启动某种形式的回收,但它也可以将情况告知应用程序,并期望该应用程序通过减少其内存用量来做出响应。 

最后,一名听众提到,一个有用的特性是能够内省应用程序正在使用哪些类型的内存;Butt 回答说,这项特性已经在开发中了。 

LWN 评论概述:

[一位未知用户对 BPF 在内存管理中的稳定性发表了看法…] 

审视支持 BPF 稳定性的问题非常有趣。从技术上讲,文档确实做出了一些关于 ABI 的声明,例如 kfuncs 可能随时发生变化,而 BPF 辅助函数(helpers)则不然,且被认为是稳定的。 

要论证在 BPF 中验证内存管理程序的可行性是件难事。似乎不太可能在第一次尝试时就获得一个足够灵活、能涵盖所有用例,同时又不从根本上破坏验证器(verifier)所提供的“安全性”的方案。所以我明白为什么这成了一个棘手的话题。 

关注了就能看到更多这么棒的文章哦~   全文完
 LWN 文章遵循 CC BY-SA 4.0 许可协议。 

欢迎分享、转载及基于现有协议再创作~

长按下面二维码关注,关注 LWN 深度文章以及开源社区的各种新近言论~

深入解析 Linux 内核交换(Swap)子系统及 2026 技术前沿 Linux内核交换子系统迎来重大革新 摘要:Linux内核交换(Swap)子系统作为内存管理的核心组件,正经历显著技术变革。本文首先解析其基础机制:通过LRU算法管理匿名页在内存与存储设备间的换入换出,在内存压力缓解和系统休眠中发挥关键作用。2026年LSFMM+BPF峰会揭示了三大前沿进展:(1)宋凯瑞主导的交换表优化将每页开销从3-11字节降至2-10字节,并计划通过虚拟交换层实现动态调整和碎片整理;(2)朴英俊提出的闪存友好方案采用顺序写入和去重技术,使嵌入式设备SSD寿命提升10倍;(3)何宝权设计 阅读详情

相关推荐

【硬核前沿】CXL 深度解析:重塑数据中心架构的“高速公路”,Linux 内核如何应对挑战?-- CXL 协议详解与 LSF/MM 最新动态

摘要: CXL(Compute Express Link)是基于PCIe的高效互连协议,旨在解决CPU内存带宽不足问题,支持内存扩展、池化和缓存一致性。2019年推出后迅速发展为行业标准,2026年CXL 4.0商用,实现TB级带宽。当前生态成熟,硬件、网络和软件全面支持。在LSF/MM峰会上,CXL引发内核内存管理革新,包括私有内存节点、动态热插拔、固件兼容性及错误处理等议题。CXL正推动Linux内核重构传统内存架构,成为系统开发的必备技术。

mounter625的专栏 934

2026 年 LSFMM+BPF 峰会聚焦内核交换子系统:性能提升、闪存友好与模块化后端探索

最终还可添加对压缩页面 I/O 的支持,Li 还提出允许后端处理交换插槽的分配,以及研究在不同后端之间移动页面的最佳方法。Song 正在研究交换表的压缩问题,还提出将交换文件重命名为“交换映射”,并展示了虚拟交换层的设计,已有 RFC 补丁集初步实现这一想法。交换 I/O 是异步的,可能导致系统过度交换,Song 考虑写出操作完成就立即从交换缓存中删除页面来解决问题。交换子系统最初设计为直接与块设备交互,人们对在交换子系统的存储层使用其他类型的设备感兴趣,这个概念被称为“swap_ops”。

IT界那些事儿 33

探索Linux内存管理的前沿:从经典页表、TLB演进到地址空间隔离

本文探讨了Linux内存管理的核心机制与最新发展。首先分析了页表映射和TLB的工作原理,指出它们解决了物理内存访问的安全性和碎片化问题。随着硬件发展,Linux引入了大页技术、PCID和KPTI等技术来平衡性能与安全。重点介绍了2026年LSFMM+BPF峰会上关于内核直接映射安全改进的讨论,包括__GFP_UNMAPPED标志和mermap机制的提案,这些创新旨在通过地址空间隔离提升系统安全性,但也面临TLB刷新时机等技术挑战。文章展现了Linux内核在内存管理领域持续演进的技术路线。

mounter625的专栏 432

LWN:使用BPF来选择OOM kill的对象!

关注了就能看到更多这么棒的文章哦~Out-of-memory victim selection with BPFBy Jonathan CorbetAugust 17, 2023ChatGPT assisted translationhttps://lwn.net/Articles/941614/默认配置下的 Linux 内核允许进程分配的内存比系统实际可提供的内存更多。这个策略可以更好地利用物理...

Linux News搬运工 1047

LLVM improvements for BPF verification

摘要:Alan Jowett在2024 Linux峰会上探讨如何改进LLVM对BPF程序的支持。当前LLVM优化生成的BPF代码常因校验器无法理解而失败,开发者不得不使用汇编代码规避。Jowett提出将MIT授权的PREVAIL校验器集成到LLVM流程中,但存在IR与字节码的转换难题。会议还讨论了代码覆盖率、分支提示保留等改进方向,但与会者在JIT优化复杂度等问题上存在分歧。由于BPF的特殊校验要求与传统编译器目标存在矛盾,解决方案仍需持续探索。

mounter625的专栏 951

Out-of-memory victim selection with BPF

Linux内核默认允许进程分配超过物理内存的限制,这种策略虽然提高了内存利用率,但在内存耗尽时会触发OOM-killer机制杀死进程。现有机制通过oom_badness()函数计算进程的OOM分数,但选择机制仍不够精准。最新补丁提出通过BPF(Berkeley Packet Filter)编程接口实现更灵活的进程选择策略,允许自定义评估函数动态决定OOM受害者。该方案支持四种决策结果:继续默认评估、中止选择、跳过当前进程或直接选定目标。虽然开发者对具体实现方式仍有分歧,但这一创新为优化内存管理提供了新思路,

mounter625的专栏 619

LWN:更好地控制透明巨页的使用!

PR_SET_THP_DISABLE 的实现是强制性的;相反,Hildenbrand 的补丁为 PR_SET_THP_DISABLE 添加了一个新选项,名为 PR_THP_DISABLE_EXCEPT_ADVISED,它提供了新的语义。正如 David Hildenbrand 的这个补丁(Usama Arif 已将其作为 这个系列 的一部分)所描述的,人们可以考虑让 madvise() 覆盖 PR_SET_THP_DISABLE,但正如 Hildenbrand 所说,“这会大大改变现有文档中描述的语义”。

Linux News搬运工 1812

Habitat-baselines v0.1.7防踩坑手把手带你跑通(全网唯一)

Habitat-baselines v0.1.7防踩坑手把手带你跑通(全网唯一)

shannanshouyin的博客 1276

LWN 2025内核年度回顾:调度器、文件系统与BPF演进方向

操作系统内核的发展,始终牵动着服务器性能、云原生稳定性与基础设施的可观测能力。理解内核下一代演进方向,是系统工程师做出正确技术选型的前提。近年来,内核开发从追求新功能转向精细化调优,调度器在混合负载下的公平性与延迟控制、内存管理在回收机制上的水线调节、IO栈在异步路径上的深度优化,共同构成了性能突破的关键支点。同时,随着Rust安全抽象逐步落地、BPF在追踪与网络场景扮演更重要角色,以及文件系统在稳定与兼容之间的平衡,内核正在从功能堆叠进入工程成熟期。LWN2025年度回顾揭示的正是这些底层变化与趋势,为内

weixin_29611239的博客 261

海康威视摄像头CVE-2017-7921漏洞复现:从零到一的实战指南(含解密工具下载)

本文详细解析了海康威视摄像头CVE-2017-7921漏洞的技术原理与复现方法,提供从环境搭建到实战利用的完整指南。通过认证绕过漏洞,攻击者可获取敏感信息并执行高权限操作,文章还包含解密工具下载与防御建议,助力安全研究人员深入理解物联网设备安全风险。

weixin_29325515的博客 808

欧姆龙PLC EIP通讯配置方法

欧姆龙EIP通讯配置方法

weixin_59671695的博客 6136

LWN:给kernel的swap添加一个抽象层!

关注了就能看到更多这么棒的文章哦~A new swap abstraction layer for the kernelBy Jonathan CorbetMay 23, 2024LSFMM+BPFGemini-1.5-flash translationhttps://lwn.net/Articles/974587/交换(swapping)在本质上可能是一种内存管理技术,但其实现也涉及内核的文件系...

Linux News搬运工 698

第33次CCF-CSP认证考试 第一题 词频统计 满分题解

本人小白一枚,抱着学习的态度想到网上找一些csp的参考答案,但由于实力有限,大佬的代码大都看不太懂,于是萌生了想用一些简单,基础的语句完成csp前两题的想法并公开,以便与像我这样实力不强的同学交流学习,如有更好的建议,还请斧正,感谢!

qq_75242106的博客 1869

LWN:SLUB分配器的下一步计划!

关注了就能看到更多这么棒的文章哦~What's next for the SLUB allocatorBy Jonathan CorbetMay 20, 2024LSFMM+BPFGemini-1.5-flash translationhttps://lwn.net/Articles/974138/Linux 内核中存在两个级别的基本内存分配器:页分配器 (page allocator),以页为单...

Linux News搬运工 465

第七天 Labview进阶(7.3 Teststand简单使用)

TestStand是NI开发的自动化测试管理软件,支持多语言编程和硬件集成,广泛应用于电子产品和工业测试。安装时需注意版本选择,2022版支持离线安装。使用步骤包括:1)创建测试序列文件;2)插入测试动作并配置参数(如选择VI路径、设置变量);3)添加条件判断和延时控制;4)执行测试序列时具备流程控制功能,如失败步骤自动跳过后续测试。该软件能有效提升测试效率与准确性,通过可视化操作实现复杂测试流程管理。

weixin_38637405的博客 1728

Python爬虫实战:美团商家数据采集系统

本文将详细介绍如何使用Python最新技术栈构建高效的美团商家信息采集系统。内容涵盖异步爬虫、反爬对抗、数据存储、可视化分析等完整流程,提供可落地的代码方案和工程实践。

2201_76125261的博客 2658

LWN:6.17 合并窗口的后半部分!

网络*:Qualcomm IPQ5018 内部 PHY、Airoha AN7583 MDIO 总线控制器、Broadcom 50/100/200/400/800 千兆以太网卡、Microchip Azurite DPLL/PTP/SyncE 设备以及 Realtek 8851BU 和 8852BU USB 无线网络 (Wi-Fi 6) 适配器。供电设备 (PSE) 实现增加了对可配置预算评估策略的支持,这些策略“被 PSE 控制器用于在功率预算超出等情况下决定首先关闭哪些端口”。详情请参阅 此合并消息。

Linux News搬运工 1800

【Docker】一招解决超时镜像超时报错:`ERROR: Get https://registry-1.docker.io/v2/`

Docker 镜像拉取超时或失败并不是 Docker 本身的缺陷,而是网络环境和默认配置在特定场景下的限制所导致的结果。通过本文的分析可以看到,问题的核心往往集中在三个方面:网络访问延迟、DNS 解析速度以及客户端默认超时时间。针对这些问题,最直接、有效的做法是使用国内镜像加速器,这不仅能够显著提升拉取速度,还能保证在企业内网或家庭网络中更加稳定

博客 1027

LWN: 5.13 合并窗口第二部分!

关注了就能看到更多这么棒的文章哦~The second half of the 5.13 merge windowBy Jonathan CorbetMay 10, 2021DeepL a...

Linux News搬运工 259

基于Lumerical的1550 nm InGaAs/InP与InGaAs/InAlAs APD设计与功率饱和度优化

摘要 本研究利用Ansys Lumerical软件对1550 nm激光雷达应用的InGaAs/InP和InGaAs/InAlAs雪崩光电二极管(APD)进行仿真设计与优化。通过FDTD光学仿真获取光吸收分布,结合CHARGE模块的电学仿真分析暗电流、光电流及雪崩增益特性。重点研究了两种材料体系的性能差异,并针对近距离强反射导致的功率饱和问题提出结构优化方案。仿真结果表明,InGaAs/InAlAs APD具有更优的过量噪声特性,而优化的电荷层设计可显著提升器件的功率饱和阈值。研究提供了完整的仿真流程与代码实

huanghm88的专栏 95

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

LWN:要提供更好的 OOM 调试工具!

关注了就能看到更多这么棒的文章哦~Better tools for out-of-memory debuggingBy Jonathan CorbetMay 11, 2022LSFMMDeepL assisted translationhttps://lwn.net/Articles/894546/Out-of-memory(OOM)的情况是用户、系统管理员以及内核开发人...

Linux News搬运工 400

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

LWN: 6.1 合并窗口第一部分!

关注了就能看到更多这么棒的文章哦~The first half of the 6.1 merge windowBy Jonathan CorbetOctober 7, 2022DeepL assisted translationhttps://lwn.net/Articles/910312/6.1 合并窗口正在顺利进行中:自从窗口打开以来,已经有 5,752 个 non-merge changes...

Linux News搬运工 368

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

LWN:代码标记以及内存分配追踪!

关注了就能看到更多这么棒的文章哦~Code tagging and memory-allocation profilingBy Jonathan CorbetMay 31, 2023LSFMM+BPFDeepL assisted translationhttps://lwn.net/Articles/932402/去年由 Suren Baghdasaryan 和 Kent Overstreet 提...

Linux News搬运工 1269

LWN:get_user_pages() 仍在带来麻烦!

关注了就能看到更多这么棒的文章哦~The ongoing trouble with get_user_pages()By Jonathan CorbetMay 4, 2023DeepL assisted translationhttps://lwn.net/Articles/930667/2018 年的 Linux 存储、文件系统和内存管理(LSFMM)会议包括一个关于 get_user_page...

Linux News搬运工 1408

LWN:XFS在线检测和修复!

关注了就能看到更多这么棒的文章哦~XFS online filesystem check and repairBy Jake EdgeJune 15, 2023LSFMM+BPFDeepL assisted translationhttps://lwn.net/Articles/934561/Darrick Wong 多年来一直致力于 XFS online repair 工作,目前文件系统里内部的...

Linux News搬运工 1609

LWN:减少vmap 锁冲突!

关注了就能看到更多这么棒的文章哦~Mitigating vmap lock contentionBy Jonathan CorbetMay 26, 2023LSFMM+BPFDeepL assisted translationhttps://lwn.net/Articles/932396/"vmap area" 是在 kernel 需要映射一段内存到虚拟地址时可以使用的一段 kernel 地址空间...

Linux News搬运工 1134
上一篇: LWN:内存管理维护工作的新纪元
LinuxNews搬运工
博客等级 码龄7年 438粉丝 20原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值