标签: perf

如何使用linux perf获取libc6符号(例如_int_malloc)的调用父项?

我正在使用linux perf分析C++应用程序,我正在使用GProf2dot获得一个很好的控制流程图.但是,来自C库(libc6-2.13.so)的一些符号占用了总时间的很大一部分,但没有内边缘.

例如:

  • _int_malloc 需要8%的时间,但没有电话父母.
  • __strcmp_sse42__cxxabiv1::__si_class_type_info::__do_dyncast一同来的时间约10%,并有来电者的名字是0,它有来电2d6935c,2cc748c6,其中有没有来电.

结果,我无法找到哪些例程负责所有这些mallocing和动态转换只使用perf.但是,似乎其他符号(例如malloc但不是_int_malloc)确实有呼叫父母.

为什么没有为_int_malloc显示呼叫父母?为什么我找不到__do_dyn_cast的最终来电者?并且,有什么方法可以修改我的设置,以便我可以获取此信息吗?我在x86-64上,所以我想知道我是否需要带有帧指针的(非标准)libc6.

c++ linux profiling g++ perf

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

perf中的硬件事件和硬件缓存事件有什么区别?

当我输入perf list命令时,我发现有两种事件:Hardware eventHardware cache Event.两者有什么区别 ?

cache-misses和之间有什么区别LLC-misses?缓存未命中是否包括LLC未命中?

perf在测试程序时,工具是否会降低总体性能?

linux perf

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

Android Systrace跟踪文件格式

Android systrace工具,通过ADB 调用atrace工具.但是,我不太了解跟踪文件的格式.显然它与linux ftrace工具非常相似,但有些不同.主要区别在于它不使用System.Map文件,但它将所有信息包含在跟踪文件中.此外,还有一些特定于Android的新B | E条目.

Android源代码中有关于此格式的一些信息,请访问:http://androidxref.com/4.1.1/xref/external/chromium-trace/src/tracing/linux_perf_importer.js

但是,在该文档中,我们可以读到该格式属于Linux Perf Tool.我不这么认为,linux perf作为输出提供了一种非常不同的格式......(除非某些特殊配置是活动的......)

我的问题是:有谁知道我在哪里可以找到关于使用adb的atrace工具生成的android跟踪文件的官方文档?

这种格式对你来说很熟悉吗?

# tracer: nop
#
# entries-in-buffer/entries-written: 66427/66427   #P:2
#
#                              _-----=> irqs-off
#                             / _----=> need-resched
#                            | / _---=> hardirq/softirq
#                            || / _--=> preempt-depth
#                            ||| /     delay
#           TASK-PID   CPU#  ||||    TIMESTAMP  FUNCTION
#              | |       |   ||||       |         |
          atrace-1724  [000] d..3 14186.680000: sched_switch: prev_comm=atrace prev_pid=1724 prev_prio=120 prev_state=S ==> next_comm=swapper/0 next_pid=0 next_prio=120 …
Run Code Online (Sandbox Code Playgroud)

linux android ftrace perf systrace

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

Perf注释,仅显示源代码

我正在使用Perf来执行一些分析实验.

但是,我想知道特定代码区域的结果,并且在这种情况下,查看每行源代码(在本例中为C/C++)的结果(百分比)将简化任务.

perf annotate有一个视图,它显示ASM +源代码,也可以选择关闭显示源代码.我想知道如何完成此选项的另一端,即仅显示源代码+其每行事件的百分比并隐藏ASM输出.这有可能perf吗?

建议使用其他工具吗?我也在使用Vtune但是我想做的分析没有用.Valgrind是不可能的,太慢了.

我正在使用运行Ubuntu 13.04的x64.

linux performance linux-kernel perf

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

程序部分的perf stat

是否可以通过perf收集硬件计数器统计信息,仅用于程序执行的一部分?如果是这样,怎么样?

likwid提供了能够定义命名区域的功能,但如果只在安装了perf的系统上实现这一点,那将会很棒.

以前的一些问题已经返回相关答案,但仍有一些缺点:

  • 使用探针我得到相同的错误,我使用的是稍微更新的内核(3.13).这些修补程序是否在较新版本中可用?
  • 使用perf_event_open我想保持在命令行上定义事件的灵活性.我还看了一下perf stat 本身的代码,但似乎没有通过调用perf_event_open进行设置.

linux perf likwid

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

什么是锁步采样?

我在几篇关于分析应用程序的帖子中看过这个术语,但我不明白它实际意味着什么以及它如何影响分析结果.

我在这里看过dtrace:

速率也增加到199赫兹,因为捕获内核堆栈比用户级堆栈便宜得多.奇数编号99和199用于避免与其他活动同步采样并产生误导性结果.

这里为perf:

-F 99:99赫兹的样品(每秒样品).我有时会比这更快地采样(高达999赫兹),但这也是成本开销.99赫兹应该可以忽略不计.此外,值"99"而不是"100"是为了避免锁步采样,这会产生偏差的结果.

从我所看到的所有剖析器应该避免锁步采样,因为结果可能"倾斜"和"误导",但我不明白为什么.我想这个问题适用于所有的分析器,但我对linux上的perf感兴趣.

linux profiling perf

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

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查找线程瓶颈并优化挂墙时间

perf record如果核心利用率大致恒定,则使用cpu周期进行采样对于查找优化候选者很有用。但是对于具有多个阶段的并行度不同的代码,计算cpu周期将着重强调并行阶段,同时又不强调会影响墙壁时间的顺序或有限并行度阶段。简而言之,单纯使用perf可能会凸显阿姆达尔定律的错误之

因此,问题是如何找到perf record/ perf report寻找减少墙壁时间的优化候选者,这可能是从并行并行代码中最热的循环到中等并行瓶颈到长单线程阶段的任何东西。

已知的解决方法有一些不足之处:

  • 在单个内核上执行工作负载,从而节省时间?cpu周期
  • 分别分析各个组件

元:这是一个法律约束特定随访到一个更一般的问题

linux performance multithreading profiling perf

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

在linux中定期读取性能计数器

有没有办法在Linux中定期读取性能计数器?

喜欢的东西perf stat与每一个X周期采样能力就是我要找的.

基本上我希望能够为某些程序每X量的cpu周期读取指令计数器(执行的指令数).

linux perf

6
推荐指数
2
解决办法
3265
查看次数

Linux:性能最高,找不到内核符号

已编译并安装具有Linux-Next内核2015-06-04的Ubuntu 15.04。

然后启动该内核,然后运行perf top,但显示未找到符号。

如何在perf中手动加载内核符号?

root@ubuntu-server:/boot# uname -r
4.1.0-rc6.060402222+

root@ubuntu-server:/proc# ls kall*
kallsyms

root@ubuntu-server:/boot# ls | grep 4.1.0-rc6.060402222
config-4.1.0-rc6.060402222+
initrd.img-4.1.0-rc6.060402222+
System.map-4.1.0-rc6.060402222+
vmlinuz-4.1.0-rc6.060402222+

root@ubuntu-server:/# perf top
No kallsyms or vmlinux with build-id 438e4365574d514672888bcfdd6292dbcf71f38f was found
[kernel.kallsyms] with build id 438e4365574d514672888bcfdd6292dbcf71f38f not found, continuing without symbols
Warning:
A vmlinux file was not found.
Kernel samples will not be resolved.
^C

root@ubuntu-server:/proc# perf top -k /boot/vmlinuz-4.1.0-rc6.060402222+
Warning:
The /boot/vmlinuz-4.1.0-rc6.060402222+ file can't be used: Success
Kernel samples will not be resolved.
^C
Run Code Online (Sandbox Code Playgroud)

在Linux-next文件夹中,.config文件已启用内核调试:

CONFIG_DEBUG_KERNEL=y
Run Code Online (Sandbox Code Playgroud)

linux symbols linux-kernel perf

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