标签: perf

我无法运行“perf”命令。Perf 是一个用于堆栈跟踪的 Linux 分析器

尝试使用性能分析器。我已经安装了 linux 通用工具,但没有运气。这是我收到的消息:


r@r-K55A:~$ perf
WARNING: perf not found for kernel 3.16.0-45

  You may need to install the following packages for this specific kernel:
    linux-tools-3.16.0-45-generic
    linux-cloud-tools-3.16.0-45-generic

  You may also want to install one of the following packages to keep up to date:
    linux-tools-generic
    linux-cloud-tools-generic
Run Code Online (Sandbox Code Playgroud)

我尝试安装上述软件包,但出现以下错误:


Unable to locate package linux-tools-3.16.0-45-generic
E: Couldn't find any package by regex 'linux-tools-3.16.0-45-generic'
Run Code Online (Sandbox Code Playgroud)

profiler perf

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

Linux 性能记录不生成任何样本

我正在尝试在具有 PMU 支持的 aria10 fpga 板(带有 2 个 ARM Cortex A9 CPU)上分析我的用户空间程序。我正在运行 windriver linux 版本 9.x。我使用人们在互联网上建议的几乎所有 CONFIG_ 选项构建了我的内核。另外,我的 pgm 是使用 \xe2\x80\x93fno-omit-frame-pointer 和 \xe2\x80\x93g 选项编译的。

\n\n

我看到的是 \xe2\x80\x98perf record\xe2\x80\x99 根本不生成任何样本。\xe2\x80\x98perf stat true\xe2\x80\x99 输出看起来是有效的(不知道从中可以得到什么)。有人有建议/想法为什么我没有看到生成任何样本吗?

\n\n
~: perf record --call-graph dwarf --  my_app\n\n^C\n[ perf record: Woken up 1 times to write data ]\n[ perf record: Captured and wrote 0.003 MB perf.data ]\n\n~: perf report -g graph --no-children\nError:\nThe perf.data file has no samples!\n To display the perf.data header info, please use --header/--header-only options.\n\n~: perf …
Run Code Online (Sandbox Code Playgroud)

linux arm perf

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

perf报告显示此函数"__memset_avx2_unaligned_erms"有开销.这是否意味着内存未对齐?

我试图使用perf工具来分析我的C++代码.实现包含带有SSE/AVX/AVX2指令的代码.除了该代码使用-O3 -mavx2 -march=native标志编译.我相信__memset_avx2_unaligned_erms函数是一个libc实现memset.perf表明这个功能有相当大的开销.函数名称表示内存未对齐,但在代码中我使用GCC内置宏显式对齐内存__attribute__((aligned (x)))可能是此函数有明显开销的原因以及为什么虽然内存明确对齐但调用了未对齐版本?

我已将样本报告附在图片上.在此输入图像描述

c++ profiling avx avx2 perf

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

在 Linux 中运行进程的性能

对于分析,我们可以在 Linux 中使用 perf。但所有示例仅显示可执行文件。

在 CentOS 中,是否可以在正在运行的进程或守护程序上运行 perf 工具?

linux perf

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

Perf 将一些直接跳转指令报告为内存访问指令

我使用以下perf命令对用户空间对 DRAM 的读取访问进行采样evince

perf record -d --call-graph dwarf -c 100 -e mem_load_uops_retired.l3_miss:uppp /opt/evince-3.28.4/bin/evince
Run Code Online (Sandbox Code Playgroud)

可以看出,我使用该PEBS功能来提高采样的准确性。但是有一些非内存访问报告为内存访问。例如,这是一个由 报告的采样事件perf script

evince 20589 16079.401401:        100 mem_load_uops_retired.l3_miss:uppp:     555555860750         5080022 N/A|SNP N/A|TLB N/A|LCK N/A
    555555579939 ev_history_can_go_back+0x19 (/opt/evince-3.28.4/bin/evince)
    5555555862ef ev_window_update_actions_sensitivity+0xa1f (/opt/evince-3.28.4/bin/evince)
    55555558ce4f ev_window_page_changed_cb+0xf (/opt/evince-3.28.4/bin/evince)
    7ffff574510c g_closure_invoke+0x19c (/usr/lib/x86_64-linux-gnu/libgobject-2.0.so.0.5600.4)
    7ffff575805d signal_emit_unlocked_R+0xf4d (/usr/lib/x86_64-linux-gnu/libgobject-2.0.so.0.5600.4)
    7ffff5760714 g_signal_emit_valist+0xa74 (/usr/lib/x86_64-linux-gnu/libgobject-2.0.so.0.5600.4)
    7ffff576112e g_signal_emit+0x8e (/usr/lib/x86_64-linux-gnu/libgobject-2.0.so.0.5600.4)
    7ffff7140d76 emit_value_changed+0xf6 (inlined)
    7ffff7140d76 adjustment_set_value+0xf6 (inlined)
    7ffff7140d76 gtk_adjustment_set_value_internal+0xf6 (/usr/lib/x86_64-linux-gnu/libgtk-3.so.0.2200.30)
    7ffff574510c g_closure_invoke+0x19c (/usr/lib/x86_64-linux-gnu/libgobject-2.0.so.0.5600.4)
    7ffff5757de7 signal_emit_unlocked_R+0xcd7 (/usr/lib/x86_64-linux-gnu/libgobject-2.0.so.0.5600.4)
    7ffff575fc7f g_signal_emitv+0x27f (/usr/lib/x86_64-linux-gnu/libgobject-2.0.so.0.5600.4)
    7ffff7153519 gtk_binding_entry_activate+0x289 (/usr/lib/x86_64-linux-gnu/libgtk-3.so.0.2200.30)
    7ffff71539ef binding_activate+0x5f (/usr/lib/x86_64-linux-gnu/libgtk-3.so.0.2200.30) …
Run Code Online (Sandbox Code Playgroud)

linux x86-64 performancecounter memory-access perf

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

有关性能块事件的信息

我需要有关 perf 中可用的以下块(磁盘 I/O)事件的信息。您能告诉我在哪里可以获得有关每个活动的详细信息吗?

  block:block_bio_backmerge                          
  block:block_bio_bounce                            
  block:block_bio_complete                          
  block:block_bio_frontmerge                         
  block:block_bio_queue                              
  block:block_bio_remap                            
  block:block_dirty_buffer                           
  block:block_getrq                                
  block:block_plug                                  
  block:block_rq_complete                           
  block:block_rq_insert                             
  block:block_rq_issue                              
  block:block_rq_remap                               
  block:block_rq_requeue                             
  block:block_sleeprq                                
  block:block_split                                 
  block:block_touch_buffer                           
  block:block_unplug
Run Code Online (Sandbox Code Playgroud)

请在这件事上给予我帮助。

linux-kernel perf

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

使用 --call-stack fp 进行性能记录无法展开主函数

我有一个 C++ 测试程序,可以让 CPU 保持忙碌:

\n
#include <cstdint>\n#include <iostream>\n\n// Linear-feedback shift register\nuint64_t lfsr1(uint64_t max_ix)\n{\n    uint64_t start_state = 0xACE1u;  /* Any nonzero start state will work. */\n    uint64_t lfsr = start_state;\n    uint64_t bit;                    /* Must be 16-bit to allow bit<<15 later in the code */\n\n    for (uint64_t ix = 0; ix < max_ix; ++ix)\n    {   /* taps: 16 14 13 11; feedback polynomial: x^16 + x^14 + x^13 + x^11 + 1 */\n        bit = ((lfsr >> 0) ^ (lfsr >> …
Run Code Online (Sandbox Code Playgroud)

c++ glibc libc stack-unwinding perf

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

选择性能报告汇编的 Intel 语法

我的perf报告显示了 AT&T 语法中的所有内容:

\n
...\n0,18 \xe2\x94\x82      pop         %rax                      \n0,14 \xe2\x94\x82    \xe2\x86\x90 retq                                  \n0,18 \xe2\x94\x82a9:   vmovsd      -0x8(%rdi,%rsi,8),%xmm0   \n0,12 \xe2\x94\x82af:   pop         %rax                      \n     \xe2\x94\x82    \xe2\x86\x90 retq                                  \n     \xe2\x94\x82b1:   vxorpd      %xmm2,%xmm2,%xmm2       \n0,02 \xe2\x94\x82      vxorpd      %xmm3,%xmm3,%xmm3       \n     \xe2\x94\x82b9:   vmovsd      0x8(%rdi,%rax,8),%xmm4  \n0,82 \xe2\x94\x82      vmulsd      %xmm1,%xmm1,%xmm1       \n0,16 \xe2\x94\x82      vsubsd      %xmm3,%xmm1,%xmm1       \n0,96 \xe2\x94\x82      vsubsd      %xmm2,%xmm4,%xmm3       \n0,57 \xe2\x94\x82      vmulsd      %xmm3,%xmm0,%xmm0       \n5,34 \xe2\x94\x82      vdivsd      %xmm1,%xmm0,%xmm0       \n0,55 \xe2\x94\x82      vaddsd      %xmm0,%xmm2,%xmm0      \n...\n
Run Code Online (Sandbox Code Playgroud)\n

但对我来说读这个很难,我更熟悉英特尔语法。

\n

有没有办法让 perf 以 Intel 语法输出它?我尝试在谷歌上搜索手册,但没有找到任何标志来启用此模式

\n

x86 disassembly intel-syntax perf

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

如何使用 perf 探针打印 malloc 大小函数

我想跟踪我的程序以了解程序的内存分配。这个想法是每当调用 malloc 时,它都会打印出带有 allocate 的调用堆栈size。这是我用来创建事件的命令:

perf probe -x /lib64/libc.so.6 'malloc allocated=-8(%bp):u64'
Run Code Online (Sandbox Code Playgroud)

perf report要告诉我allocated这件事的记忆是不正确的。我怎样才能解决这个问题。

我认为这个问题偏移到size-8(%bp))是不正确的。但我不知道 asm 所以我无法理解 libc 二进制文件。

更新:使用简单的程序,例如:

for (int i=0; i<10; i++)
    malloc(i);
Run Code Online (Sandbox Code Playgroud)

然后我可以看到如果我用 编译的话结果是正确的O0。我编译的结果O3不正确。并用我的大程序(数十万行代码)进行编译,O0但它不能给我正确的结果。

trace perf

0
推荐指数
1
解决办法
1654
查看次数

如何从性能统计数据中解释 LLC-Load-Misses

我在这里发布了一个类似上下文的问题

在解决了一些问题后,我降低了抖动。

我将描述我的场景。

我的内核启动参数如下所示:

nmi_watchdog=0 intel_idle.max_cstate=0 processr.max_cstate=0 nohz_full=7-11 isolcpus=7-11 mce=off rcu_nocbs=7-11 nosoftlockup cpuidle.off=1 powersave=off nonmi_ipi nnwatchdog

我有一个内核模块,它负责以给定的时间间隔发送一些数据包(这里我每 1 毫秒发送一次)。

  • 我有一个固定在 CPU 9 上的数据包生成器
  • 我有一个内核模块(或 Kthread)固定到 CPU 8
  • 我已将 rx 队列的 IRQ 关联设置为 CPU 10

因此,我执行了以下命令来获取性能统计信息

sudo ./perf stat -a -d -I 1000 --cpu=8 taskset -c 9 ./test.sh

下面,我发布了我得到的输出的摘录。从上面的命令,我试图分析我的 CPU Core 8 的事件。

因此,通过这种方式,这些组件不应相互干扰。

     5.002780500        1000.296809      cpu-clock (msec)          #    1.000 CPUs utilized
     5.002780500                  0      context-switches          #    0.000 K/sec
     5.002780500                  0      cpu-migrations            #    0.000 K/sec
     5.002780500                  0      page-faults               #    0.000 …
Run Code Online (Sandbox Code Playgroud)

kernel-module linux-kernel perf

0
推荐指数
1
解决办法
4421
查看次数

linux perf record:计数(-c)和频率(-F)选项之间的差异

我试图了解perf记录的-c和-F选项实际上是做什么的,但是我无法解释我所看到的。我正在运行以下命令:

perf record -a -F <frequency> sleep 1
Run Code Online (Sandbox Code Playgroud)

perf record -a -c <count> sleep 1
Run Code Online (Sandbox Code Playgroud)

尝试不同的频率计数值。我得到的结果 如下

在第一个表中,我设置频率,在第二个表中,设置计数。频率和计数如何影响事件数量?我认为事件的数量与频率和计数无关,但显然并非如此。性能实际上是做什么的?

linux frequency count perf

0
推荐指数
1
解决办法
372
查看次数

缓存未命中 L1 &lt; L2 &lt; L3

我有一个特定的软件,它表现出的行为是未命中率如下所示:

L1-dcache-misses < L2-misses< L3-misses
Run Code Online (Sandbox Code Playgroud)

怎么会这样呢?

未命中率是通过perf查看重新填充计数器除以每个缓存的访问总数来计算的。

caching cpu-cache perf

0
推荐指数
1
解决办法
1658
查看次数