使用延迟开关时,Perf stat 不会计算事件

问题描述 投票:0回答:1

我尝试在启动后 20 秒分析我的应用程序,因为我对初始化阶段不感兴趣。

所以我使用了

perf
和延迟(微秒)开关:

sudo perf stat --delay=20000 -e page-faults my_app

最初我收到错误:

Some events weren't counted. Try disabling the NMI watchdog:
    echo 0 > /proc/sys/kernel/nmi_watchdog
    perf stat ...
    echo 1 > /proc/sys/kernel/nmi_watchdog

所以我尝试了这个:

echo 0 | sudo tee  /proc/sys/kernel/nmi_watchdog

错误消失了,但 Perf 没有计算该事件:

 <not counted>      page-faults                                                                                     

然后我再次尝试,移除延迟开关:

sudo perf stat -e page-faults my_app

并且有效。

使用延时开关时,确实输出

events enabled

我使用这个开关是否错误/如何在 N 秒后开始分析?

linux performance optimization x86 perf
1个回答
0
投票

对我有用。

您的应用程序是否在 20 秒延迟结束之前退出? 在这种情况下,任何计数器都不会计算任何事件。我可以通过在我的系统上大约 3.6 秒后退出的繁忙循环来重现您的症状:

perf stat --delay=20000 -e task-clock,cycles,page-faults  \
    awk 'BEGIN{for(i=0;i<100000000;i++){}}'

它会在退出时打印

Events disabled
,然后打印
Events enabled
,但对于硬件 (
<not counted>
) 和软件(任务时钟和页面错误)事件,都会打印
cycles

将延迟减少到

2000
ms(2 秒),它确实计入 3.6 秒运行时间的后半部分:

$ perf stat --delay=2000 -e task-clock,cycles,page-faults  awk 'BEGIN{for(i=0;i<100000000;i++){}}'
Events disabled
Events enabled

 Performance counter stats for 'awk BEGIN{for(i=0;i<100000000;i++){}}':

          1,591.87 msec task-clock                       #    1.000 CPUs utilized             
     6,208,241,402      cycles                           #    3.900 GHz                       
                 6      page-faults                      #    3.769 /sec                      

       1.591902071 seconds time elapsed

       3.590486000 seconds user
       0.000000000 seconds sys
© www.soinside.com 2019 - 2024. All rights reserved.