You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

perf report出现无文件名[unknown]共享对象缓存缺失问题咨询

Samples: 3M of event 'cache-misses', Event count (approx.): 35941375181
  Children      Self  Command    Shared Object            Symbol                                                                                                                                                                            
    14.74%    14.72%  exe        exe                      [.] symbolA                                                                                                              
+   12.07%     0.00%  exe        [unknown]                [.] 0000000000000000                                                                                                                                                        
+   10.33%     0.00%  exe        [unknown]                [.] 0x0000000300000002                                                                                                                                                      
+    9.09%     0.00%  exe        [unknown]                [k] 0x3ff0000000000000                                                                                                                                                      
+    7.67%     7.67%  exe        exe                      [.] symbolB  
[unknown]共享对象的产生原因

perf的工作流分采样和后处理两个完全独立的阶段,[unknown]标记是后处理阶段地址映射失败导致的,和采样本身无关,常见触发场景:

  • 抓到无效指令地址:比如输出里的0000000000000000就是典型的空指针地址,一般是栈溢出破坏返回地址、异常控制流跳转到未映射内存区导致的,这类地址根本没有对应的文件映射,自然匹配不到共享库名。
  • 地址对应无文件 backing 的可执行内存:比如JIT运行时动态生成的代码、动态链接器生成的跳转跳板、程序自行申请可执行权限内存写入的机器码,这类代码直接存在于内存中,没有对应的磁盘文件,perf默认不会采集这类动态代码的符号信息,就会标记为unknown。
  • 权限不足无法读取映射信息:如果运行perf的用户权限不够,没法读取目标进程的/proc/<pid>/maps内存映射表,或者开启了kptr_restrict等内核安全限制屏蔽了内核地址映射,哪怕地址是合法的,perf也没法把地址对应到具体的共享库、内核模块。
  • 采样落到特殊执行阶段:比如CPU正在做上下文切换、中断/异常返回的过渡状态,此时指令指针不在任何已注册的文件映射区间内,也会被判定为unknown。
这类样本被纳入cache-miss统计的原因

perf的采样逻辑不会因为地址无法解析就丢弃样本,核心原因如下:

  • 采样阶段只做最精简的上下文抓取:cache-miss是硬件PMU触发的中断,为了避免采样本身严重干扰系统运行,中断上下文中只会快速抓取CPU的指令指针、栈地址等核心寄存器值,根本不会做地址解析这类耗时操作,所以记录采样的时候根本不知道这个地址后续能不能匹配到文件名,只要硬件触发了事件就会留存样本。
  • 后处理阶段只做分类不做过滤:perf report解析离线采集的采样数据时,只会把能匹配到映射的样本归到对应的共享库、符号名下,匹配失败的统一归到[unknown]分类,不会直接丢弃——这些样本确实是硬件触发cache-miss时抓到的真实上下文,本身就是统计结果的一部分。
  • 你看到的这几个unknown条目Self占比都是0%,说明这些地址本身没有直接触发cache-miss,只是调用栈展开时落到了无法解析的位置,Children列的占比是它下游调用链上累计的cache-miss占比,所以数值看起来不低。

内容的提问来源于stack exchange,提问作者Frank Puck

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.28 15:00:53