能否追踪内联函数?BTF 扩展方案待时间检验
1. 内联函数调试难题待解BPF 程序借助 BPF 类型格式BTF调试信息确定与内核中函数的交互方式。追踪内核函数时需在内核的 BTF 段中找其地址。然而内联函数无单一特定地址此方法对其不适用。Alan Maguire 希望在 BTF 中添加内联函数信息以实现追踪并在 2026 年的 Linux 存储、文件系统、内存管理和 BPF 峰会上主持相关会议。2. 内联函数现状如何Maguire 表示内核中有超 10 万个内联函数分布在多达 5 倍数量的位置。部分函数是部分内联的这可能导致看似函数被成功追踪实则有些调用未被监测到。不过用于追踪内联函数的其他基础设施已就位可支持 kprobes它能附着在任意位置。Maguire 指出只需将函数内联位置的数据转换为可用格式“整个流程实际上已经相当完善”。3. 信息存储在 BTF 需做什么DWARF 调试格式已有表示内联信息的方法但使用困难且无简单方式表示常见情况。Maguire 认为BTF 的解决方案应紧凑并允许去重以降低内存开销。理想情况下内联信息可存储在内核二进制文件的单独段中甚至作为单独的内核模块分发按需加载。4. Maguire 提议添加哪些信息Maguire 提议在 BTF 中添加三项新信息。第一项是内联位置特定信息即“位置段”包含每个调用点内联的函数及未内联时的调用方式。因数据特定于调用点不易去重应尽量由指向可去重数据的指针组成。第二项和第三项是被指向的数据“位置原型”和“位置参数”。位置原型指定内联函数参数在调用点的表示方式以指向位置参数的指针列表呈现每个位置参数存储访问单个函数参数的方式。当前内核中对位置原型去重后只有 57,141 个不同条目仅引用 17,535 个位置参数条目。总体而言Maguire 提议的扩展将增加约 11MB 数据即每个内联调用点约 21 字节若提取到单独内核模块并压缩数据总量降至 3.5MB。5. 特定函数信息如何存储以函数“int foo(int a, void *b, bool c);”为例若编译器以内联方式调用 foo()消除未使用的 a将 b 提升为寄存器传递确定 c 为常量BTF 表示为单独的位置段条目存储 foo() 的 BTF 类型 ID、调用点相对于内核内存基地址的偏移量以及指向位置原型条目的指针。该条目是带长度标签的数组引用位置参数条目。第一个条目为空表明 a 无法恢复第二个条目指向位置参数条目含标志表明值在寄存器中及具体寄存器编号最后一个位置参数条目有不同标志表明是常量及常量值。6. 位置段条目如何排序Alexei Starovoitov 询问位置段条目的存储顺序因为内核设置追踪时需遍历条目找正确的。起初Maguire 认为按调用点地址排序最好但考虑数据使用方式后决定按函数名排序以便追踪器通过二分查找快速找到所需信息。7. 添加内联信息有哪些先决问题Maguire 提到添加内联信息有两个先决问题。一方面位置段条目的数量需将包含结构的长度字段大小增加到 24 位。更严重的是一些现有处理 BTF 的工具无法很好处理不认识的新标签这也是 DWARF 脆弱的部分原因。为解决此问题Maguire 在内联信息中添加解析 BTF 的信息使能读取元信息的工具可正确跳过不理解的新标签。此外Maguire 还需更新 poke - a - hole (pahole) 实用工具以正确处理新型 BTF 标签的排序虽有点复杂但对正常内核构建可行。Andrii Nakryiko 询问如何处理外部模块Maguire 解释模块需弹性模块 BTF加载到运行内核中时可显式重定位其设计允许但会使构建过程稍复杂关于支持优雅处理外部模块的更改讨论未达成一致。8. 方案能否落地撰写本文时Maguire 的补丁集尚未合并。能够追踪内联和部分内联的函数显然有用但这样做是否值得付出复杂性和内存开销的代价还有待时间证明。9. 评论区观点如何有评论者认为BTF 扩展新类型信息时出现的问题类似内核开发者审视现有解决方案认为复杂后实现新方案随着用例增加又重新引入问题且所有人都需处理两种解决方案。也有评论者指出这在开源生态系统中是传统做法还有人认为这不是整个开源生态系统的传统除 Linux 内核外 DWARF 是通用的。另外关于 DWARF 是否支持描述内联函数返回值的位置表达式评论者也有不同看法。

相关新闻

ASMR声音工程:从神经科学到数字产品设计的沉浸式体验构建

ASMR声音工程:从神经科学到数字产品设计的沉浸式体验构建

深夜,当世界陷入沉寂,你是否也渴望一段能让自己彻底放松、安然入眠的旅程?对于许多被失眠困扰,或是在高强度工作后难以“关机”的现代人来说,传统的白噪音或轻音乐有时显得力不从心。今天,我们要深入探讨的…

2026/9/28 19:12:44 阅读更多 →
Python装饰器实战:从闭包原理到数据管道里的4个实用装饰器

Python装饰器实战:从闭包原理到数据管道里的4个实用装饰器

文章目录环境信息前言:同样的代码,有人写成一百行,有人写成一行装饰器一、装饰器原理:为什么一个 就能包住函数二、坑:为什么装饰后函数名变了三、带参数的装饰器:三层嵌套四、数据管道里的4个实用装饰器装…

2026/10/13 19:35:34 阅读更多 →
DeepAgents智能体开发框架:从LLM到AI应用落地的实践指南

DeepAgents智能体开发框架:从LLM到AI应用落地的实践指南

1. 从零开始:DeepAgents是什么,以及为什么你需要关注它最近在AI圈子里,DeepAgents这个词的热度突然就上来了。作为一个长期关注AI应用落地的从业者,我习惯性地去扒了一下它的底细。简单来说,DeepAgents不是一个单一的工…

2026/10/12 0:01:55 阅读更多 →

最新新闻

从画图到设计:用文本化DSL把架构图变成可维护的工程资产

从画图到设计:用文本化DSL把架构图变成可维护的工程资产

平时我见得最多的“图”,不是最终文档里那张漂亮的架构图,而是评审会上被临时画在白板上的方框加箭头。主讲人一边画一边改,台下的人一边看一边猜。等会议结束,没人记得箭头谁指向谁,只记得“好像讲了一个方案”。后来…

2026/10/15 8:25:33 阅读更多 →
t3code赛事编码协议:从计时数据到成绩榜单的自动化方案

t3code赛事编码协议:从计时数据到成绩榜单的自动化方案

如果你跟我一样,经常被各种赛事计时表、Excel 成绩单、手动排名搞到半夜,那你一定要试试 t3code 这套思路。t3code 最开始只是我给一个周末赛车活动写的三行脚本,后来慢慢变成了一套三段式赛事编码协议:练习、排位、正赛三段&…

2026/10/15 8:25:33 阅读更多 →
SylixOS应用开发指南:线程模型、同步机制与调试实践

SylixOS应用开发指南:线程模型、同步机制与调试实践

简介:《SylixOS应用开发手册1》是一份面向具备C语言基础的程序员的实时嵌入式操作系统开发指南,系统讲解SylixOS应用程序设计接口,适用于航空航天、工业自动化、通信、新能源等场景。压缩包内共1个pdf文件,大小14.95MB&#xff0c…

2026/10/15 8:25:33 阅读更多 →
多协议网络库的架构设计与核心实现:从Reactor线程模型到协议解析

多协议网络库的架构设计与核心实现:从Reactor线程模型到协议解析

1. 为什么需要多协议网络库大概两年前,我们团队接手了一个典型的“什么都要接”的后台系统:对外要提供HTTP接口,方便前端和第三方系统调用;要和一批长期在线的硬件设备保持TCP长连接,并且随时可能下发指令;…

2026/10/15 8:25:33 阅读更多 →
T3 Stack全栈实战:构建类型安全的代码片段管理应用

T3 Stack全栈实战:构建类型安全的代码片段管理应用

如果你正在找一份能直接上手、不用绕弯子的全栈项目教程,那么基于 T3 Stack 打造的t3code应该能对上你的胃口。这个项目本质上是一个代码片段分享与管理系统,开发者可以注册登录,把自己常用的代码块按语言分类保存,支持标签检索、…

2026/10/15 8:25:33 阅读更多 →
多模态AI视频搜索实战:从250分钟到2分钟的工程化落地

多模态AI视频搜索实战:从250分钟到2分钟的工程化落地

1. 项目背景与核心痛点拆解1.1 250分钟到底卡在哪里视频搜索这件事,没做过的人会觉得不就是搜个关键词吗。但真正处理过大规模视频素材库的从业者都清楚,传统视频检索的流程有多笨重。Cond Nast 作为一家拥有海量视频内容的媒体集团,旗下品牌…

2026/10/15 8:24:32 阅读更多 →

日新闻

Docker Compose 容器化部署 ChirpStack LoRaWAN 网络服务器实战

Docker Compose 容器化部署 ChirpStack LoRaWAN 网络服务器实战

1. 为什么选择容器化方式部署 LoRa 网络服务LoRa 物联网项目落地时,网络服务器是整个链路的核心枢纽。它负责接收网关上报的数据包、完成去重与解密、再把有效载荷分发给上层应用。早期大家习惯把网络服务器直接装在物理机上,依赖一堆系统库和特定版本的…

2026/10/15 0:00:46 阅读更多 →
共享LLM服务下的跨模型自动扩缩容:Kubernetes实战与避坑指南

共享LLM服务下的跨模型自动扩缩容:Kubernetes实战与避坑指南

1. 共享推理服务里,扩缩容到底难在哪做过大模型推理服务部署的人,大概都经历过这样的场景:一个团队共用一套推理集群,A 业务跑的是 7B 的小模型,B 业务跑的是 72B 的大模型,C 业务白天流量高、晚上几乎归零…

2026/10/15 0:00:46 阅读更多 →
Systemd 启动阶段根文件系统只读之谜:fstab 与 remount-fs 服务深度解析

Systemd 启动阶段根文件系统只读之谜:fstab 与 remount-fs 服务深度解析

1. 引子:一次内核恐慌引发的追查先从一个真实场景说起。某次我给一台老旧的嵌入式设备折腾系统裁减,为了把启动时间压进两秒以内,我手贱地把一串自认为“没用”的 systemd 服务给 disable 了,其中就包括systemd-remount-fs.servic…

2026/10/15 0:00:46 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/14 3:30:28 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/14 16:30:29 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/14 3:29:58 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/15 0:14:36 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/14 22:45:47 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/14 7:53:34 阅读更多 →