LWN:对内核内存分配进行profiling!

关注了就能看到更多这么棒的文章哦~

Memory-allocation profiling for the kernel

By Jonathan Corbet
May 21, 2024
LSFMM+BPF
Gemini-1.5-flash translation
https://lwn.net/Articles/974380/

优化内核的内存使用变得容易很多的前提是,开发者要能对内存的使用情况有准确的了解。然而,内核的性能分析工具并不完善。当 Suren Baghdasaryan 和 Kent Overstreet 在 2023 年 Linux 存储、文件系统、内存管理和 BPF 峰会(presented)上展示他们的内存分配剖析工作时,他们的目标没有争议,但提出的解决方案却遭到了反对。这种反对意见在过去一年里在邮件列表(example)上进行了长篇大论。因此,当两人在 2024 年峰会 的内存管理环节再次讨论这个问题时,争议消失了,讨论的焦点转移到改进实现的细节上,这或许有点出人意料。

简单回顾一下:分配剖析(allocation-profiling)工作会跟踪内核中所有内存的分配,并将它们映射到执行分配的代码。它可以用来查看内存的使用情况,并追踪内存泄漏。而剖析(profiling)又依赖于 代码标记(code tagging),该标记会将特殊的结构插入代码中,以便识别位置。这两个功能都是 mainline 内核的新功能。

46278286e2ab5923957988534730c025.png

Baghdasaryan 开始说,该补丁集已被接受进入 mm-stable 树,并即将合并到 mainline 中(此后已在 6.10 合并窗口中完成)。关于是否应该合并该代码的讨论已经结束,因此现在是时候讨论下一步计划了。

主要议题是减少剖析机制的内存和性能开销。如果启用它,它会消耗大约 0.2% 的系统总内存,这足以让人担忧。事实证明,几乎所有开销都集中在 page_ext 结构 中,该结构用来保存从内存页面到标识分配该页面的代码的标签的反向指针。该指针用来在释放页面时递减关联的计数器。在性能方面,分配剖析使页面分配速度降低 40%,对 slab 分配的影响较小,只有 7%。

减少开销的一种方法是打包代码标签引用,内核中大约有 4-5000 个这样的引用。通过仔细处理,无需为每个引用使用 64 位指针。相反,可以将引用缩小,并可能将其打包到页面标志中,从而消除对 page_ext 结构的需求,并减少分配开销。另一方面,Baghdasaryan 说,这种方法会给可加载模块带来复杂性。然后,小组花了一段时间讨论可能的链接器技巧来解决这个问题,但没有得出任何具体结论。

假设可加载模块问题可以解决,分配剖析代码将存储 16 位引用而不是 64 位引用,从而使页面分配使用的内存减少 75%。然而, slab 分配的开销实际上增加到 9.5%,这表明可能不应该打包这些引用。但是,如果可以将 16 位引用塞进页面标志中,那么内存开销就会完全消失,分配时的性能开销也会从 40% 降到 7%。他说,如果没有这一额外的步骤,打包后的引用不值得额外的复杂性成本。

John Hubbard 提出了一个问题,这个问题很可能出现在房间里许多开发者的脑海中:是否真的可以找到 16 个空闲的页面标志来用于这个目的?页面标志一直以来都 非常稀缺,开发者们不得不 努力争取 才能使用哪怕一个页面标志。这个问题没有明确的答案。Pasha Tatashin 建议,对于 5000 个引用,也许不到 16 位就足够了。随后,关于各种发行版使用的内核配置、它们对页面标志可用性的影响以及是否可以更改任何配置展开了一番讨论,但没有得出任何具体结论。

fc5529f9c2e3016d06cd92f07ddefbcd.png

Tatashin 说,能够选择性地启用和禁用标签会很不错,例如,在剖析无关子系统中的分配时,避免减慢关键的网络驱动程序。他还希望将已计入和未计入的分配区分开;后者没有计入任何特定的进程,代表了内核带来的纯粹开销。Overstreet 回答说,剖析可以显示分配标志以及其他信息,但也询问是否最好直接开启所有分配的记账。他承认,要实现这一点,必须降低记账的成本。

分配剖析子系统进入内核的道路,是通过放弃它最初包含的一些功能而变得更加容易的。现在,开发者希望将其中一些功能恢复回来,Baghdasaryan 说。这些功能包括捕获更多关于分配上下文的信息和动态故障注入(这次会议没有讨论;该功能允许将分配失败注入到特定的代码路径中,以测试错误处理)。列表中还包括 Tatashin 之前要求的某种选择机制。Overstreet 在会议结束时说,对分配剖析(和代码标记)的兴趣正在增长,并且出现了一些他从未想到的有趣用例。

全文完
LWN 文章遵循 CC BY-SA 4.0 许可协议。

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

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

2e5196aaed0fe5f42922e697bc9717dc.jpeg

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值