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

perf报告出现未知符号,寻求QEMU/KVM性能分析完整报告解决方案

解决QEMU perf剖析中的未知符号问题

一、排查内核符号缺失

你看到的[unknown] [k]标记属于内核空间符号缺失,可按以下步骤处理:

  • 安装内核调试符号包(Debian/Ubuntu):
    sudo apt install linux-image-$(uname -r)-dbg
    
  • 确认内核编译选项:检查/boot/config-$(uname -r),确保CONFIG_KALLSYMS=y和CONFIG_KALLSYMS_ALL=y已开启;如果是自定义内核,需重新编译开启这两个选项。
  • 记录perf数据时添加--kcore参数,让perf读取内核核心文件以获取完整符号:
    perf record -g --quiet -p $qemu_pid --kcore -o perf.out -F 99 -- sleep 10 &
    

二、定位未知地址所属模块

对于0x6a00000002这类用户空间未知地址,可通过以下方式定位:

  • 查看QEMU进程的内存映射,搜索目标地址对应的文件:
    cat /proc/$qemu_pid/maps | grep 0x6a00000002
    
  • 用perf原始数据解析地址映射:
    perf report -D -i perf.out | grep -A5 -B5 0x6a00000002
    
  • 用addr2line解析地址(需先从/proc/$qemu_pid/maps中提取库的加载基址):
    addr2line -e /path/to/target/library $(printf "0x%x" $((0x6a00000002 - 0xBASE_ADDR)))
    

三、安装系统依赖库的调试符号

QEMU依赖的系统库(如libc、libglib2.0)如果缺少调试符号,也会导致未知符号,Debian/Ubuntu下可安装对应调试包:

  • libc调试符号:
    sudo apt install libc6-dbg
    
  • libglib2.0调试符号:
    sudo apt install libglib2.0-0-dbg
    
  • 其他依赖库:先用ldd /path/to/your/build/qemu-system-x86_64列出所有依赖,再安装对应-dbg包。

四、优化perf记录与解析

  • 使用dwarf调用图提升符号解析精度,替换-g参数:
    perf record --call-graph dwarf --quiet -p $qemu_pid -o perf.out -F 99 -- sleep 10 &
    
  • 解析报告时指定你编译的带调试符号的QEMU路径,避免使用系统默认版本:
    perf report -i perf.out --executable=/path/to/your/build/qemu-system-x86_64
    
  • 清理perf缓存,避免旧符号干扰:
    perf buildid-cache -r
    

五、QEMU自身验证

  • 确认运行的是你编译的QEMU:用ps aux | grep qemu检查进程路径,确保是build目录下的二进制,而非系统默认的/usr/bin/qemu-system-x86_64。
  • 验证QEMU模块调试符号:编译QEMU时默认开启模块支持,确保build/modules目录下的模块也带有调试符号,若编译时加了--disable-modules需移除该选项重新编译。

内容的提问来源于stack exchange,提问作者Trilok Bhattacharya

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.24 00:05:55