标签: perf

从交流程序测量页面错误

我正在比较一些系统调用,我从/向内存读/写.是否有任何API定义来测量页面错误(页面输入/输出)C

我找到了这个库 libperfstat.a,但它是为了AIX,我找不到任何关于linux的东西.

编辑: 我知道linux中的time&perf-stat命令,只是探索我是否可以在C程序中使用.

c linux page-fault perf

8
推荐指数
2
解决办法
3821
查看次数

如何减少花在一条指令上的时间?

我正在尝试优化C语言中的代码,似乎一条指令占用了大约22%的时间。

该代码是使用gcc 8.2.0编译的。标志是-O3 -DNDEBUG -g-Wall -Wextra -Weffc++ -pthread -lrt

    509529.517218      task-clock (msec)         #    0.999 CPUs utilized
            6,234      context-switches          #    0.012 K/sec
               10      cpu-migrations            #    0.000 K/sec
        1,305,885      page-faults               #    0.003 M/sec
1,985,640,853,831      cycles                    #    3.897 GHz                      (30.76%)
1,897,574,410,921      instructions              #    0.96  insn per cycle           (38.46%)
  229,365,727,020      branches                  #  450.152 M/sec                    (38.46%)
   13,027,677,754      branch-misses             #    5.68% of all branches          (38.46%)
  604,340,619,317      L1-dcache-loads           # 1186.076 M/sec                    (38.46%)
   47,749,307,910      L1-dcache-load-misses     #    7.90% of all L1-dcache hits    (38.47%)
   19,724,956,845      LLC-loads …
Run Code Online (Sandbox Code Playgroud)

c optimization x86-64 perf

8
推荐指数
1
解决办法
185
查看次数

perf stat中的cycles注释是什么意思

      8.014196 task-clock                #    0.004 CPUs utilized          
           204 context-switches          #    0.025 M/sec                  
            32 cpu-migrations            #    0.004 M/sec                  
             0 page-faults               #    0.000 K/sec                  
    11,841,196 cycles                    #    1.478 GHz                     [46.17%]
     9,982,788 stalled-cycles-frontend   #   84.31% frontend cycles idle    [80.26%]
     8,122,708 stalled-cycles-backend    #   68.60% backend  cycles idle   
     5,462,302 instructions              #    0.46  insns per cycle        
                                         #    1.83  stalled cycles per insn
     1,098,309 branches                  #  137.045 M/sec                  
        94,430 branch-misses             #    8.60% of all branches         [77.23%]
Run Code Online (Sandbox Code Playgroud)

周期注释中的1.478 GHz[46.17%]是什么意思?

linux perf

7
推荐指数
1
解决办法
3504
查看次数

使用 Babeltrace 构建 Perf(用于 Perf 到 CTF 的转换)

我正在尝试使用 TraceCompass 来进一步调查我的系统跟踪。为此,您需要 CTF 格式,在 Linux 中有两种可能的方法来获取它,据我所知:

  1. 使用 LTTng 进行跟踪并使用 CTF 格式
  2. 使用“perf data Convert”从 perf.data 创建 CTF 数据

我一直在尝试使用第二个选项,因为第一个选项需要安装跟踪点,而我从 perf 获得的内容对我来说已经足够了。所以假设我有我的 perf.data 可用,

perf data convert --to-ctf=./ctf 
Run Code Online (Sandbox Code Playgroud)

结果是: 没有编译版本支持。 深入研究lwn的在线资源,我发现如果没有babeltrace,这种转换是不可用的。为了安装 babeltrace 我尝试了以下方法:

第一个:

sudo apt-get install libbabeltrace-ctf-dev libbabeltrace-ctf1 libbabeltrace1 libbabeltrace-dev python3-babeltrace
Run Code Online (Sandbox Code Playgroud)

这并没有完全解决以下问题:没有编译版本支持。

第二个

我尝试过从源代码构建 babeltrace。我事先挖掘并找到了它的所有依赖项:

sudo apt-get install dh-autoreconf bison libdw-dev libelf-dev flex uuid-dev libpopt-dev
git clone git://git.efficios.com/babeltrace.git
cd babeltrace
./bootstrap
sudo ./configure --prefix=/opt/libbabeltrace LDFLAGS=-L/usr/local/lib
sudo make -j4 prefix=/opt/libbabeltrace
sudo make install prefix=/opt/libbabeltrace
Run Code Online (Sandbox Code Playgroud)

然后尝试了,

LD_LIBRARY_PATH=/opt/libbabeltrace/lib perf data convert …
Run Code Online (Sandbox Code Playgroud)

linux trace linux-kernel perf babeltrace

7
推荐指数
1
解决办法
2289
查看次数

perf 无权收集统计信息

当我使用 perf 收集系统统计信息时,像这样

sudo perf record -a -g -F 997 -p pid sleep 30
Run Code Online (Sandbox Code Playgroud)

然后我得到了

Error:
You may not have permission to collect stats.
Consider tweaking /proc/sys/kernel/perf_event_paranoid:
 -1 - Not paranoid at all
  0 - Disallow raw tracepoint access for unpriv
  1 - Disallow cpu events for unpriv
  2 - Disallow kernel profiling for unpriv
Run Code Online (Sandbox Code Playgroud)

我无权修改/proc/sys/kernel/perf_event_paranoid,即使在root. 我尝试添加"kernal.perf_event_paranoid=-1"/etc/sysctl.conf,并使用

sysctl -p
Run Code Online (Sandbox Code Playgroud)

重新加载参数。我再次无权加载参数 kernal.perf_event_paranoid。

如何使用 perf 收集统计信息?

linux permissions performance perf

7
推荐指数
0
解决办法
7541
查看次数

硬件缓存事件和性能

当我运行时,perf list我看到一堆Hardware Cache Events,如下所示:

$ perf list | grep 'cache event'
  L1-dcache-load-misses                              [Hardware cache event]
  L1-dcache-loads                                    [Hardware cache event]
  L1-dcache-stores                                   [Hardware cache event]
  L1-icache-load-misses                              [Hardware cache event]
  LLC-load-misses                                    [Hardware cache event]
  LLC-loads                                          [Hardware cache event]
  LLC-store-misses                                   [Hardware cache event]
  LLC-stores                                         [Hardware cache event]
  branch-load-misses                                 [Hardware cache event]
  branch-loads                                       [Hardware cache event]
  dTLB-load-misses                                   [Hardware cache event]
  dTLB-loads                                         [Hardware cache event]
  dTLB-store-misses                                  [Hardware cache event]
  dTLB-stores                                        [Hardware cache event]
  iTLB-load-misses                                   [Hardware cache event]
  iTLB-loads                                         [Hardware cache event]
  node-load-misses …
Run Code Online (Sandbox Code Playgroud)

linux performance x86 perf intel-pmu

7
推荐指数
1
解决办法
1663
查看次数

LBR vs DWARF vs fp 的性能记录选择有什么作用?

当我perf record在我的代码上使用 时,我找到了三个--call-graph选项:(lbr最后一个分支记录)dwarffp.

这些有什么区别?

linux perf

7
推荐指数
1
解决办法
1440
查看次数

Mac OS 的 Perf stat 等效项?

Mac OS 上有等效的性能统计吗?我想对 CLI 命令做同样的事情,但谷歌搜索没有产生任何结果。

macos profiling performancecounter perf intel-pmu

7
推荐指数
1
解决办法
5580
查看次数

性能报告的函数位于 0xffffffffffffffff

我正在尝试了解 myApp 非常忙的事情(90% cpu 单线程)。这是一个我不应该重新启动的服务器。我收集了样本

\n
perf record -p 5068 -F 99 --call-graph dwarf sleep 10\n
Run Code Online (Sandbox Code Playgroud)\n

perf report给了我这个:

\n
+  100.00%     0.00%  myApp    [unknown]              [.] 0xffffffffffffffff                                                                                                                           \xe2\x97\x86\n+   80.67%     0.67%  myApp    myApp                  [.] pipeline_run                                                                                                                                 \xe2\x96\x92\n+   67.71%     0.00%  myApp    myApp                  [.] QueryProcessor::process\n
Run Code Online (Sandbox Code Playgroud)\n

我花了一些时间谷歌搜索和阅读文档,我怀疑 0xffffffffffffffff 无法解析,因为perf不知道堆栈底部在哪里,因为它没有启动该过程。但有人可以证实这一点或指出我正确的方向吗?

\n

performance linux-kernel perf

7
推荐指数
1
解决办法
565
查看次数

使用性能记录对多线程进行基于频率的采样

从这里的一个很好的答案来看,我的理解是perf每次事件计数器超过阈值时都会进行采样。当要求以特定频率采样时,它会尝试通过调整每次事件速率的估计来设置事件计数器阈值,以便在指定间隔发生溢出。

\n

我问自己这如何与多个线程一起工作,例如使用默认的“cycles”事件。

\n
    \n
  • 是否有一个全局“周期”计数器可以对溢出发生时正在运行的任何线程进行采样?或者每个 CPU 是否都有自己的“周期”计数器,用于对当前正在运行的线程进行采样,如果是,“每个 CPU”是指逻辑核心还是物理核心?或者它是每个线程的计数器?
  • \n
  • 是否只计算运行程序所花费的周期?
  • \n
\n

我希望能够解释像这些 \xe2\x80\x93 这样的模式,显然事件的发生率正在重新校准,但我不清楚为什么:

\n
tid  timestamp        event counter\n5881 187296.210979:   15736902 cycles:\n5881 187296.215945:   15664720 cycles:\n5881 187296.221356:   15586918 cycles:\n5881 187296.227022:          1 cycles:\n5881 187296.227032:          1 cycles:\n5881 187296.227037:         62 cycles:\n5881 187296.227043:       6902 cycles:\n5881 187296.227048:     822728 cycles:\n5881 187296.231842:   90947120 cycles:\n
Run Code Online (Sandbox Code Playgroud)\n

我希望它计算每个样本的下一个计数器阈值,因此在 处的样本之后187296.215945,它会将下一个样本设置为在15586918循环后发生,对吗?187296.221356但当200Hz的目标频率之前已经稳定时,将阈值设置为1个周期之后是没有意义的。这是来自另一个线程的干扰吗?

\n

multithreading profiling perf

7
推荐指数
1
解决办法
2771
查看次数