[英]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.