[英]perf: strange relation between software events
好的,这真的让我很烦。
我正在使用perf记录cpu-clock事件(一个软件事件):
$ > perf record -e cpu-clock srun -n 1 ./stream
...,并且perf报告生成的表为空。
我正在使用perf来记录perf列表中列出的所有可用软件事件:
$ > perf record -e alignment-faults,context-switches,cpu-clock,cpu-migrations,\
dummy,emulation-faults,major-faults,minor-faults,page-faults,task-clock\
srun -n 1 ./stream
...表格为我提供了可用样品的列表:
0 alignment-faults
125 context-switches
255 cpu-clock
21 cpu-migrations
0 dummy
0 emulation-faults
0 major-faults
128 minor-faults
132 page-faults
254 task-clock
我可以查看在cpu-clock中收集的样本,它为我提供了信息。 为什么?! 如果仅测量cpu-clock,为什么它不起作用? 为什么在四个事件中没有收集到样本?
这是此问题的后续措施: 错误:perf.data文件没有样本
也许srun
不启动直接叉目标进程。 它可能会使用诸如ssh或daemon之类的各种远程shell启动进程。
perf record
(不带-a
选项)将仅跟踪直接分叉的子进程,而不跟踪由sshd或其他守护程序启动(分叉)的进程。 如果srun
可以访问远程计算机并执行perf record ... srun
,那么它将永远不会对远程计算机进行概要分析perf record ... srun
命令(这是对srun应用程序及其派生的一切进行概要分析)。
首先尝试perf stat
以获得总(原始)性能计数器,然后将perf用作srun参数; 这是使用远程外壳程序或守护程序的工具的正确用法(可能具有perf的完整路径):
srun -n 1 perf stat ./stream
srun -n 1 /usr/bin/perf stat ./stream
perf stat
将打印目标任务的运行时间。 然后选择一些原始计数器较高的事件(性能记录通常将采样率调整到几kHz左右,如果有足够的原始事件计数,则将生成数千个样本):
srun -n 1 perf record -e cpu-clock ./stream
srun -n 1 /usr/bin/perf record -e cpu-clock ./stream
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.