当前位置: 首页 > news >正文

执行perf-report命令时,会打开vdso的信息,这个vdso的信息是从哪里读取的?怎么映射的

文章目录

  • 问题
  • 回答
  • VDSO 信息从哪里来?
    • 记录阶段:来自内核的 MMAP 事件
    • 报告阶段:VDSO 的“内容”从哪里读?
    • 简要流程小结
  • 总结

问题

执行perf-report命令时,会打开vdso的信息,这个vdso的信息是从哪里读取的?怎么映射的

回答

确认 MMAP 事件的处理路径及 DSO 与 map 的关联:
下面是 perf report 里 VDSO 信息的来源和映射方式,按代码路径说明。

VDSO 信息从哪里来?

记录阶段:来自内核的 MMAP 事件

perf record 时,内核会为被监测进程生成 PERF_RECORD_MMAP / PERF_RECORD_MMAP2,其中 filename 为 [vdso](以及可能的 [vdso32] / [vdsox32])。是一块VDSO 映射,从 perf 数据里的 MMAP 事件来的,事件里带有这块映射的地址范围(start/len)和名字。

报告阶段:VDSO 的“内容”从哪里读?

做符号、反汇编等时,需要的是 VDSO 的二进制内容。这部分不是从 perf.data 里读的,而是从当前正在运行 perf report 的进程的地址空间里读的:
读的是 /proc/self/maps(即当前进程 = perf report 自己的 maps)。
在 maps 里找到名为 [vdso] 且属性为 r-xp(可读可执行、私有)的那一行,解析出 start 和 end。
然后从当前进程的这段虚拟地址 直接读内存,把 VDSO 的二进制拷出来。
对应代码在 util/find-map.c 和 util/vdso.c:

“这块是 VDSO、地址范围是多少” → 来自 perf.data 里的 MMAP 事件(内核在 record 时写入)。
“VDSO 的二进制长什么样” → 来自 当前进程的 /proc/self/maps + 按 start/end 读当前进程内存,再写到临时文件。
设计上依赖:同一台机器、同一内核,VDSO 内容一致,所以用“当前进程的 VDSO”来解析被记录进程的 VDSO 是合理的。
2. 怎么“映射”的?(和 report 的关联)
“映射”在这里有两层意思:① 在进程地址空间里对应哪段;② 在 perf 里对应哪个 DSO/map。
① 处理 MMAP 事件、创建 map
perf report 读 perf.data 时,对每条 MMAP/MMAP2 会调用:
perf_event__process_mmap / perf_event__process_mmap2
→ machine__process_mmap_event / machine__process_mmap2_event
→ map__new(…, event->mmap.filename, thread)(例如 filename = “[vdso]”)
在 util/map.c 里,若 filename 是 [vdso],会走 VDSO 分支,并给这条 map 绑定一个“VDSO 的 DSO”。
也就是说:MMAP 事件里的 start/len 决定了这条 map 的地址范围,和内核里该进程的 [vdso] 映射一致;DSO 则通过 machine__findnew_vdso() 得到。
② 为 VDSO 准备 DSO 和“文件”
machine__findnew_vdso()(在 util/vdso.c)里会:
若该 machine 已有对应的 VDSO DSO(如已处理过别的线程的 [vdso]),直接复用。
否则对 64 位主 VDSO 调用 get_file(&vdso_info->vdso):
用 find_map(&start, &end, “[vdso]”) 从 /proc/self/maps 拿到当前进程的 [vdso] 区间;
用 memdup(start, size) 从当前进程内存拷出 VDSO;
写入临时文件 /tmp/perf-vdso.so-XXXXXX;
用这个临时文件路径作为该 DSO 的 long_name(相当于“这个 DSO 从哪读符号/二进制”)。
新建一个 DSO,名字为 [vdso],long_name 设为该临时文件,并加入 machine->dsos。
之后所有 同一 machine 上、名为 [vdso] 的 map 都会指向这个 DSO。
这样,当 report 根据 sample 的 IP 做符号解析时:
通过 threadfind_map() 找到该 IP 属于哪条 map(包括 MMAP 里记录的那段 [vdso] 区间);
该 map 的 map->dso 就是上面这个 VDSO DSO;
需要符号时会对该 DSO load,实际读的是 /tmp/perf-vdso.so-XXXXXX,即从当前进程拷出来的那份 VDSO。
32 位兼容的 [vdso32] / [vdsox32] 会用 perf-read-vdso32 / perf-read-vdsox32 通过 popen 跑起来,把对应兼容 VDSO 写到另一个临时文件,再作为 DSO 的 long_name,逻辑类似。

简要流程小结

1 内核 / perf.data MMAP 事件里带有 [vdso] 及 start/len,表示被记录进程里 VDSO 的地址范围。
2 util/map.c 处理 MMAP 时若 is_vdso_map(filename),则调用 machine__findnew_vdso(),为该线程的这条映射创建/复用“VDSO 的 map”,并绑定到对应的 DSO。
3 util/vdso.c get_file() 用 find_map() 读 /proc/self/maps,找到当前进程的 [vdso] 的 start/end,从当前进程内存 memdup 出 VDSO,写到 /tmp/perf-vdso.so-XXXXXX,并把这个路径设为 DSO 的 long_name。
4 util/find-map.c find_map() 打开 /proc/self/maps,解析出名为 [vdso] 的 r-xp 映射的起止地址。

总结

VDSO 的“身份”和地址范围来自 perf.data 里的MMAP事件(内核在 record 时写入)。
VDSO 的二进制内容来自 运行 perf report 的进程:通过 /proc/self/maps 找到 [vdso] 区间,再从当前进程地址空间读出并写到临时文件,再通过 DSO 映射到这条 [vdso] map 上用于符号解析和显示。

http://www.jsqmd.com/news/361221/

相关文章:

  • 2026年分析平舆口碑好的驾校培训中心,靠谱机构怎么联系 - mypinpai
  • 缩分仪生产厂家推荐:2026推荐品牌+样品缩分仪价格及选购+实验室缩分仪品牌排名全解析 - 品牌推荐大师1
  • 2.9 思维题
  • 小小电脑安装logisim-evolution - 教程
  • sentry私有化部署: 在8c16g上降低资源使用
  • *我的编码哲学:『满意解』
  • 郑州点泰景观设计有限公司推荐,郑州点泰设计风格、项目质量解读 - 工业品网
  • 好写作AI:打造个人品牌别佛系,让AI成为你的“影响力永动机”
  • Linux Kernel (三) —— Linux 基本编译和安装
  • 【更新2026年1月数据】2000-2026年中国逐月250米分辨率平均值合成NDVI数据集
  • 不只问哪个品牌好:更应关注定制、真空技术与专业生产能力的厂家盘点 - 品牌推荐大师
  • 2026筛分仪振动筛分仪口碑推荐:密封圈耐用性+筛网更换周期核心指标TOP厂家盘点 - 品牌推荐大师1
  • 全国逐年气象条件贡献率数据集(2002-2024)
  • 想让 Git 忽略这个文件夹怎么办 ---- .gitignore Git文件使用教程
  • 书籍-《伯希和敦煌石窟笔记》
  • 8-6 WPS JS宏 正则表达式:元字符
  • 赶deadline必备! 10个AI论文网站深度测评:自考毕业论文+格式规范全攻略
  • 西门子S7-1200通讯实战:从Modbus到以太网,快速打通设备对话
  • [无线通信基础-19]:通信系统是超级智慧生物的传导神经系统
  • Claude提示词工程 01,Claude 提示词基础:让 AI 一次读懂你的核心需求
  • Claude提示词工程 02,为Claude补充背景的实用技巧,让输出更精准戳需求
  • 智能安全充电控制系统的研究与开发
  • 【开题答辩全过程】以 基于springboot网上订餐系统的设计与实现为例,包含答辩的问题和答案
  • 全球十大激光设备制造商技术优势深度解析
  • 2026年适合追剧吃的零食:客厅茶几的“常驻嘉宾”——浪味仙(旺旺旗下) - Top品牌推荐
  • 2026年专业推荐:各类电阻测试仪实力源头厂家与生产商名录 - 品牌推荐大师
  • 2026年四川定制酒柜实力厂商排名,看看哪家口碑好 - myqiye
  • C# 基本语法详解:从面向对象到 C# 9 顶级语句一文入门
  • 分析长沙有实力的商标服务机构,高性价比商标服务企业费用多少 - 工业品牌热点
  • 2026年比较好的玻璃阳光房/定制阳光房如何选畅销厂家采购指南 - 品牌宣传支持者