簡體   English   中英

性能:軟件事件之間的奇怪關系

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM