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

如何使用perf测量程序执行期间的页错误耗时?

用Perf测量页错误耗时的方案

Perf默认只统计页错误的发生次数,但通过追踪事件时间戳或内核tracepoint,可以实现耗时测量:

1. 用perf trace直接获取事件时间戳

perf trace可以记录每个页错误事件的精确时间,以此计算耗时。执行命令:

perf trace -e mm:page_fault_user ./your_program

该命令会输出用户态页错误的触发时间(相对程序启动的时长)、进程/线程ID等信息。你可以将输出重定向到文件,再用脚本(如Python)分析时间戳,计算单个页错误的处理耗时或统计耗时分布。

如果需要更完整的上下文,加上调用栈参数:

perf trace -e mm:page_fault_user -g ./your_program

2. 结合perf record与perf script分析原始数据

先记录包含时间戳的页错误事件:

perf record -e page-faults -T -g ./your_program

其中-T参数用于保存每个事件的时间戳,-g记录调用栈。随后导出原始数据:

perf script > page_faults.log

导出的日志包含事件发生的精确时间、调用栈等信息,可通过脚本解析时间戳计算耗时。


替代工具与方法

如果perf的方式不够直观,可尝试以下工具:

1. ftrace(内核内置追踪)

ftrace能直接追踪页错误的完整处理流程,需root权限:

# 启用页错误相关tracepoint
echo 1 > /sys/kernel/debug/tracing/events/mm/page_fault_user/enable
echo 1 > /sys/kernel/debug/tracing/events/mm/page_fault_done/enable
# 指定追踪目标进程PID
echo <your_program_pid> > /sys/kernel/debug/tracing/set_pid
# 查看追踪结果
cat /sys/kernel/debug/tracing/trace

日志会显示每个页错误的触发和完成时间,可直接计算耗时。需确保内核开启CONFIG_FTRACE和CONFIG_TRACEPOINTS选项。

2. bpftrace脚本统计耗时

用bpftrace编写简单脚本,直接生成页错误耗时直方图:

tracepoint:mm:page_fault_user {
    @start[tid] = nsecs;
}

tracepoint:mm:page_fault_done {
    if (@start[tid]) {
        @latency_hist = hist(nsecs - @start[tid]);
        delete(@start[tid]);
    }
}

END {
    print(@latency_hist);
}

保存为page_fault_latency.bt,执行bpftrace page_fault_latency.bt即可看到耗时分布。需root权限,内核需开启CONFIG_BPF和CONFIG_BPF_SYSCALL。

3. strace间接分析

strace可追踪与页错误相关的系统调用(如mmap、mprotect),用-T参数查看调用耗时:

strace -T -e mmap,mprotect ./your_program

此方法仅能间接关联页错误耗时,适合粗略排查。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 02:40:25