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

Linux下如何按指令类型统计执行次数(可借助perf工具)

按指令类型统计执行次数的方法(Linux环境)

当然可以实现按指令类型统计执行次数,下面是几种实用的方案,涵盖perf原生工具链、硬件追踪工具以及现成脚本工具,最后附上版本对比的方法:

方法1:perf + 自定义脚本(通用方案,无需特殊硬件)

这个方案通过perf记录指令地址,结合程序的反汇编结果映射到指令类型,最终统计次数:

步骤1:生成程序的反汇编映射

编译程序时保留调试信息(加-g参数),然后导出.text段的反汇编结果:

objdump -d -j .text --no-show-raw-insn your_program > disasm.txt

该文件包含每个内存地址对应的汇编指令。

步骤2:编写统计脚本

创建awk脚本insn_count.awk,用来加载反汇编映射并处理perf输出:

BEGIN {
    # 加载地址到指令的映射
    while ((getline < "disasm.txt") > 0) {
        if ($1 ~ /^[0-9a-f]+:$/) {
            addr = substr($1, 1, length($1)-1)
            # 提取指令类型(兼容movzx、cmovb这类多字符指令)
            insn = $2
            insn_map[addr] = insn
        }
    }
}

# 处理perf输出的指令地址
$NF ~ /^0x/ {
    addr = substr($NF, 3)  # 去掉0x前缀
    if (addr in insn_map) {
        count[insn_map[addr]]++
    }
}

END {
    # 按执行次数降序输出
    PROCINFO["sorted_in"] = "@val_num_desc"
    for (insn in count) {
        printf "%6d %s\n", count[insn], insn
    }
}

步骤3:执行统计

用perf记录用户空间指令事件,再用脚本统计:

# 记录用户空间指令事件
perf record -e instructions:u ./your_program
# 提取指令地址并统计类型次数
perf script -F ip | awk -f insn_count.awk

方法2:Intel PT硬件追踪(精确统计,需Intel CPU支持)

如果你的CPU支持Intel Processor Trace(PT),可以用硬件级追踪精确统计所有执行的指令,效率更高:

步骤1:确认CPU支持PT

grep -i intel_pt /proc/cpuinfo

输出包含intel_pt则说明支持。

步骤2:记录并统计

# 记录PT追踪数据
perf record -e intel_pt//u ./your_program
# 解析PT数据并统计指令类型
perf script --itrace=ie -F insn | awk '{if ($2 != "") count[$2]++}' | sort -nr -k1

--itrace=ie参数用来展开执行的指令流,最终输出按指令执行次数降序排列。

方法3:pmu-tools的insn_hist.py(现成工具)

pmu-tools套件中的insn_hist.py脚本可以直接完成指令类型统计,无需自行编写脚本:

# 安装pmu-tools(通过包管理器或本地编译)
insn_hist.py ./your_program

该工具会自动结合perf和反汇编,输出类似你要求的统计格式。


两个版本程序的对比方法

分别对两个版本的程序生成统计结果,再用diff工具对比:

# 生成版本1的统计并排序
perf record -e instructions:u ./prog_v1
perf script -F ip | awk -f insn_count.awk | sort > prog_v1_stats.txt

# 生成版本2的统计并排序
perf record -e instructions:u ./prog_v2
perf script -F ip | awk -f insn_count.awk | sort > prog_v2_stats.txt

# 对比差异
diff -u prog_v1_stats.txt prog_v2_stats.txt

对比结果会清晰显示两个版本在指令类型执行次数上的差异,帮你定位性能变化的原因。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.19 16:40:19