LWN:pahole 进展!

Linux内核编译指南:从环境准备到性能优化 Linux内核作为操作系统的核心组件,其编译过程是系统管理员和开发者的重要技能。内核编译技术涉及工具链配置、源码获取、选项定制等关键环节,通过合理配置可以显著提升硬件兼容性和系统性能。在云计算和嵌入式领域,内核定制能优化资源利用率,例如针对特定CPU架构的调度器调优可带来5%以上的性能提升。实践中常见场景包括驱动开发(如WiFi6网卡支持)、实时系统构建(CONFIG_PREEMPT_RT配置)以及安全加固。Ubuntu等发行版虽然提供预编译内核,但手动编译能解决硬件兼容性问题,如Intel Arc显卡支持 阅读详情

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

Updates to pahole

By Daroc Alden
June 20, 2024
LSFMM+BPF
Gemini-1.5-flash translation
https://lwn.net/Articles/978727/

Arnaldo Carvalho de Melo 在 2024 年的 Linux 存储、文件系统、内存管理和 BPF 峰会 (Linux Storage, Filesystem, Memory Management, and BPF Summit) 上介绍了他对 Poke-a-hole (pahole) 的工作。pahole 是一个程序,这些年来得到了很大的扩展,它与 BPF 轨道 (BPF track) 相关,因为它能够从 DWARF 调试信息中生成 BPF 类型格式 (BTF) 信息。他介绍了一些对该程序的小改动,然后详细介绍了支持该数据类型分析的新功能。他的 幻灯片 包含了一些示例。

BTF 也随着 BPF 在不断演进。随着时间的推移,Carvalho 一直在为 pahole 添加选项来应对这些变化,但这些选项只会让 pahole 更难使用。有时很难知道在某个特定调用中应该使用什么标志或标志组合。因此,他最近添加了一个 --btf_features 标志,它可以接受一个由逗号分隔的 feature 列表,以便把多种标志集合起来。任何未知标志都会被忽略,这可能会让用旧版本的 pahole 生成 BTF 变得不那么痛苦。在开发过程中,可以利用 --btf_features_strict 生成拼写错误的警告。这种新方法 略微简化了 内核用来生成 BTF 信息的 Makefile ,用一组静态的标志取代了条件语句:

--btf_features=encode_force,var,float,enum64,decl_tag,type_tag,optimized_func,consistent_func

另一个近期的改变是引入了可重现的构建 (reproducible builds)。另一位开发人员提交了一个禁用并行 BTF 编码的补丁,因为输出可能在不同运行之间存在差异。确保 pahole 的输出可重现是非常重要的,因为 BTF 信息被编码到内核映像中——因此不可重现的 BTF 意味着得到的是不可重现的内核映像。现在 Carvalho 添加了代码来确保并行编码线程每次都按相同的顺序输出信息。新的可重现性测试证实,用户现在可以同时拥有并行编码和可重现的构建,并且性能开销很小。

BPF 一直拥有用于 kfuncs 的 "按 BTF ID 调用" 机制,但以前实际上没有办法查看给定内核中有哪些 kfuncs。现在,pahole 为 kfuncs 输出了声明信息(当启用 decl_tag_kfuncs 功能时),因此感兴趣的代码可以遍历所有声明。Carvalho 也一直在致力于改变 BTF 处理内核模块的方式。现在,内核模块中的调试信息通过 BTF ID 引用内核中的项目,这样就不需要将整个内核的调试信息与每个模块一起发送。这不会有问题,除非内核的每个构建的编号都会发生变化。通常,这需要随着内核也重新编译模块。但经过一些额外的努力,内核模块可以在生成的 BTF 中使用 ELF 重定位来进行构建,因此它们并不总是需要重新编译一次。他说,该实现几乎要完成了,准备合并。

数据类型分析

BTF 已经为像 perf 这样的性能监控工具提供了一种简单的方法来跟踪哪些代码行是对应于特定的指令。然而,这并不总是能说明全部情况。现代 CPU 具有积极的缓存机制,从内存中获取值会带来严重的性能损失;从计算交互的数据类型而不是正在运行的代码的角度来分析性能问题是有好处的。

Carvalho 演示了两个工具: perf mem ,它显示了按每个结构的各个成员细分的访问内存所花费的时间,以及 perf c2c,它会跟踪伪装共享(flase sharing)和缓存逐出(cache eviction)。为了使这些工具能够正常工作,需要有某种方式将内存访问不仅跟代码行关联起来,而且要跟所涉及的值的特定类型关联起来。perf mem 的原始版本 使用 DWARF 调试信息来建立这种连接。现在,BTF 拥有足够的信息来用于该目的。 perf 仍然更喜欢在 DWARF 表可用时优先用它们,但它确实会使用 BTF 来显示有关 kfuncs 的信息。

Carvalho 详细介绍了 perf 如何处理程序反汇编;简而言之,它使用 Capstone 库,当 Capstone 不可用时,退回到 objdump。与 objdump 的集成也意味着它支持所有由 GNU Binutils 支持的架构。

Daniel Borkmann 询问这些更改是否已经可用,Carvalho de Melo 说已经可用。他正在继续改进,但基本功能现在可以使用。José Marchesi 询问如果内核更改为直接生成 BTF,而不是使用 DWARF 信息进行编译,然后使用 pahole 进行转换,是否会导致问题。Carvalho 解释说,pahole 拥有一个 BTF 加载器,因此它不需要改变工具的使用方式。此时会议时间结束了。

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

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

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

5c9df31ec6b9ca6b344c4f11f3f2f7f4.jpeg

编译内核之BTF报错 最近在编译5.15.138版本内核的时候,由于启用了BTF功能,导致在编译过程中报错,网上好多教程都存在坑,本人研究测试下来能用,特此记录一下,供有需要的人参考。 阅读详情

相关推荐

Linux: pahole: 如何使用命令dump内核内存

pahole属于dwarves。这个命令可以局部dump内存,不需要整个dump。或者实时使用crash命令。第一行是符号的地址;

mzhan017的博客 1210

pahole安装及使用

http://download.youkuaiyun.com/detail/mynameislu/7195913

1万+

pahole工具

用于检查结构体定义时成员排列不规范造成多余的内存占用 用法参考[http://blog.youkuaiyun.com/mynameislu/article/details/23752919]

分析结构体的内存空间布局 —— pahole

pahole这个工具可以用来分析结构体的内部布局信息,参考下面的文章: https://lwn.net/Articles/335942/

pengdonglin137的专栏 2513

pahole源码

包括pahole源码以及安装pahole所需的libebl-dev和libz

pahole-gdb:gdb的pahole实现

gdb的pahole 这段代码最初是由Fedora与gdb一起提供的。 此后,许多贡献者对其进行了扩展。 它从原始的Fedora python代码继承了GPLv3许可证。 将这两个python脚本放在方便的位置,然后在〜/ .gdbinit中编辑python包含路径以添加安装python脚本的目录后,将gdbinit复制到〜/ .gdbinit(或将python脚本添加到现有gdbinit)。 然后在已编译的二进制文件上调用gdb,并检查C ++或C类和结构的偏移量,如下所示: $ gdb test-pahole GNU gdb (Debian 10.1-1.7) 10.1.90.20210103-git ... Reading symbols from test-pahole... (gdb) pahole C /* 16 */ struct C { /* 0

LWN:用perf进行数据类型剖析!

关注了就能看到更多这么棒的文章哦~Data-type profiling for perfDecember 21, 2023This article was contributed by Julian SquiresChatGPT translationhttps://lwn.net/Articles/955709/用于分析内存使用和排布效果的工具一直不如分析处理器 CPU 活动的工具那么好,因此...

Linux News搬运工 429

CUDA详细安装及环境配置——环境配置指南 – CUDA+cuDNN+PyTorch 安装

本文详细介绍了如何确定显卡支持的CUDA版本、选择对应的cuDNN版本,并逐步安装CUDA、cuDNN和PyTorch。首先,通过命令行输入nvidia-smi.exe查看显卡支持的CUDA版本。接着,根据CUDA版本选择对应的cuDNN版本并下载。然后,从NVIDIA官方网站下载CUDA安装包,按照提示进行安装,并检查是否安装成功。同样地,下载cuDNN安装包,解压后将文件拷贝到CUDA安装目录中,并通过命令行验证安装是否成功。最后,根据PyTorch官网的指引,选择合适的安装命令进行PyTorch的安装

2501_90350274的博客 5098

【亲测免费】 pahole 项目使用教程

pahole 项目使用教程 1. 项目介绍 pahole 是一个用于分析和优化数据结构布局的工具,主要用于调试信息格式(如 DWARF 和 CTF)中的数据结构布局。它可以帮助开发者理解和优化内存布局,从而提高程序的性能和效率。pahole 是 dwarves 项目的一部分,广泛应用于 Linux 内核开发和其他需要深入分析数据结构的应用场景。 2. 项目快速启动 安装 pahole 首先,确保你...

gitblog_00202的博客 1428

图自编码器(GAE)与变分图自编码器(VGAE)

在学习图自编码器之前先了解一下自编码器与变分自编码器。

小鱼的小窝 1万+

Altium Designer 18 将Gerber文件逆向转换成PCB(详细记录)

自己看了网上的教程,弄了很久,估计还有不足的地方,但是先把思路理一理(初学AD) 同时遇到了许多问题: 不是AD导出的Gerber估计不能自动识别层 要自己设置层顺序 要有钻孔文件数据制作NC工具(我也不懂是怎么说,就是size尺寸的) 这里记录一下,以防忘记。 正常顺序: 1.新建CAM 2.导入Gerber,选择CAM文件夹下的所有文件导入 3.设置层属性和物理顺序 4.设置NC工具 5.提取网络表 ...

lb_monkey的博客 1万+

开源项目pahole常见问题解决方案

开源项目pahole常见问题解决方案 项目基础介绍 pahole是一个用于分析Linux内核结构体大小和布局的工具,可以帮助开发者更好地理解内核中数据结构的内存占用情况。这个项目是基于Linux内核的pahole工具的一个分叉版本。项目的主要编程语言是C语言,同时也包含了一些Python脚本。 主要编程语言 C:构成了项目的主体代码,用于实现内核分析的核心功能。 Python:用于一些辅助性的脚...

gitblog_01091的博客 843

.NET 4.0下HttpWebRequest请求HTTPS报错?试试这个注册表修改方案

本文深入解析.NET 4.0下HttpWebRequest请求HTTPS报错问题,提供注册表修改方案以解决'基础连接已经关闭'错误。通过调整SchUseStrongCrypto注册表项,强制使用TLS 1.2等现代加密协议,确保安全连接。适用于企业环境部署和长期维护建议。

weixin_29310631的博客 356

内核编译----- pahole 问题

kernel 编译支持pahole

mudawei1的博客 3460

使用同一个时钟源clki,做两个二分频时钟,得到div2_clk1和div2_clk2,这两个时钟都能跟源时钟clki同步,但是div2_clk1和div2_clk2的相位可能是相同的,也可能是反相

比如,触发器1的初始Q为0,而触发器2的初始Q为1(这可能由于芯片制造工艺的微小差异、上电过程的随机性、或没有全局复位信号导致)。这句话的意思是:虽然div2_clk1和div2_clk2都是由同一个妈妈(clki)生出来的,频率也都是妈妈的一半,但它们“起步”的时刻可能不同。所以,上面那段话是在提醒你注意这种潜在的、由分频产生的时钟相位关系的不确定性,这在异步电路设计或时钟管理中是必须考虑的关键因素。结果:div2_clk1和div2_clk2的波形完全重合,它们的上升沿和下降沿都发生在同一时刻。

m0_49540263的博客 591

STM32CubeMx配置串口使用printf函数打印数据(HAL库开发)

HAL库开发串口,打印printf

m0_58832575的博客 6286

pahole--C++中类的结构分析

使用pahole查看C++中类的结构

rainsssssss的博客 1146

【2025最新版】ABAP 开发百科全书专栏文章目录(上)

本文汇总了一系列SAP ABAP技术文章,内容涵盖实用技巧合集、函数式编程实践(如Currying、reduce应用)、设计模式实现(如Visitor、Singleton)、动态代理与Mock技术、性能优化方案(如Lazy Loading)、日期处理与内存管理,以及ABAP与JavaScript的编程范式对比。还涉及CDS视图、Fiori字段追踪、单元测试优化等实战经验,深入剖析了ABAP底层机制(如Internal Session、Function Module实现原理),并提供了多种反模式改进方案。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 2464

使用pahole实现编译方法检测程序伪共享

伪共享是因为多线程修改来自同一缓存行中不同的数据的时候,由于每个线程都需要从主存中取出数据存放在缓存行中,这样在一个线程修改这些来自同一缓存行的数据的时候,每次修改后都会产生与另一个线程缓存行不匹配的副本,导致另一个缓存行在修改数据之前需要从主存中重新取出数据,从而这种不必要的多次数据移动会带来更高的性能开销。这样也体现了“伪”字,即物理上是共享的体系,但是实际逻辑上并不共享。

2502_93779112的博客 683

基于libVLC的视频播放器之四:直接使用libVLC

一.效果 播放本地文件 播放网络url:rtsp://3.84.6.190/vod/mp4:BigBuckBunny_115k.mov 二.实现 既然有VLC-Qt,为什么还要直接调用libVLC呢,因为直接调用会加深对整个播放流程的理解,方便后面修改VLC-Qt源码。 注意事项: 1.编译报错:error C2065: “libvlc_media_read_cb”: 未声明的标识符。修改如下: 2.libvlc_new(0, nullptr)返回null 将plugins

草上爬的博客 5048

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

pahole安装及使用(centos7)

pahole安装及使用(centos7) 下载pahole url: https://github.com/jmesmon/pahole.git 安装依赖库 centos7: yum -y install cmake yum -y install libdwarf-debuginfo.x86_64 libdwarf-devel.x86_64 libdwarf-tools.x86_64 ...

Andrew Yang's Note 3116

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

BTF: .tmp_vmlinux.btf: pahole version v1.9 is too old, need at least v1.13

要升级的内核版本是5.4.188,当前内核版本问4.18.0,直接将/boot/config-4.18.0-394.el8.x86_64拷贝到内核源码目录,执行makemenuconfig后直接保存,再执行make是就报了上面的错误。

superbfly的专栏 1633

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

Rockchip Android平台打开GKI无法开机问题

Rockchip Android平台由于编译环境对pahole版本有要求,如果版本不对会导致ko无法加载从而导致系统无法开机。

weixin_43245753的博客 938

内核错误:BTF: .tmp_vmlinux.btf: pahole (pahole) is not available

1、内核报错BTF: .tmp_vmlinux.btf: pahole (pahole) is not available BTF: .tmp_vmlinux.btf: pahole (pahole) is not available Failed to generate BTF for vmlinux Try to disable CONFIG_DEBUG_INFO_BTF make: *** [Makefile:1161: vmlinux] Error 1 2、解决方法 sudo apt-get in

Imagine Miracle的博客 2万+
上一篇: LWN:简化BPF verifier!
下一篇: LWN:Rust实现文件系统!
LinuxNews搬运工
博客等级 码龄7年 438粉丝 20原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值