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

并行运行perf record采集多进程性能数据报资源忙的解决方法

问题原因

并行执行perf record触发Device or resource busy报错和输出文件冲突无关,本质是x86硬件性能监控单元(PMU)的资源抢占问题:你使用的4.18版本内核配套perf默认会独占硬件PMU计数器资源,同一时间默认仅允许一个perf进程调用硬件PMU采样,多实例同时启动就会触发资源占用报错。

解决方案

按场景选择对应方法即可:

  • 方法1:追加--no-inherit参数降低PMU占用
    该参数会关闭perf对目标进程后续新建子线程、子进程的事件继承,大幅减少需要占用的PMU计数器数量,多数场景下可直接支持2-3个perf实例并行采样,命令示例:

    perf record -F 99 -g --no-inherit -o <executable_name_1>.data -- <executable_1 with args>
    perf record -F 99 -g --no-inherit -o <executable_name_2>.data -- <executable_2 with args>
    

    注意:该参数生效后,仅会采集perf启动时目标进程已存在的线程性能数据,进程运行过程中新创建的子进程、子线程不会被纳入采样范围,需要跟踪全进程树的场景不适用该方法。

  • 方法2:使用软件事件采样绕开硬件PMU限制
    如果需要保留全进程树采样能力,或者加--no-inherit后仍然报错,可以指定使用cpu-clock软件事件做采样,完全不占用硬件PMU资源,支持任意数量perf实例并行:

    perf record -F 99 -g -e cpu-clock -o <executable_name_1>.data -- <executable_1 with args>
    perf record -F 99 -g -e cpu-clock -o <executable_name_2>.data -- <executable_2 with args>
    

    注意:软件采样在函数调用栈、CPU占用分布这类常规性能分析场景下精度和硬件采样无明显差异,仅无法采集缓存命中率、分支预测错误率这类硬件相关的性能指标。

  • 方法3:调整内核参数开启硬件事件多路复用
    如果必须采集硬件性能事件,可以修改内核参数放开PMU访问限制,内核会自动对多个perf进程的硬件事件做分时复用,无需独占PMU资源:

    # 临时生效,系统重启后恢复默认配置
    sudo sysctl -w kernel.perf_event_paranoid=-1
    sudo sysctl -w kernel.perf_event_mlock_kb=20480
    

    该方法的缺点是多实例并行时,硬件事件会因为分时调度产生统计误差,并行的perf实例数量越多,误差越大。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 22:57:19