Articles of perf

使用perf探针监视特定function期间的性能状态

我试图在使用linux perf工具的特定function期间监视性能状态。 我按照https://perf.wiki.kernel.org/index.php/Jolsa_Features_Togle_Event#Example_-_using_u.28ret.29probs 我试图得到一个简单的C程序的指令计数。 (如下所示) 1)我简单的C代码 #include<stdio.h> int sum=0; int i=0; void func(void) { for(i=0;i<100;i++) { sum=sum+i; } } int main(void) { func(); return 0; } 2)编译和添加探针 root@sunimal-laptop:/home/sunimal/temp# gcc -o ex source.c root@sunimal-laptop:/home/sunimal/temp# perf probe -x ./ex entry=func Added new event: probe_ex:entry (on 0x4ed) You can now use it in all perf tools, such as: […]

如何衡量Linux上单个分支的预测失误?

我知道在执行一个perf stat程序时,我可以得到分支错误预测的总百分比。 但是,我怎么能得到一个特定的分支统计( if或C语言switch语句)?

有没有办法将kptr_restrict设置为0?

我目前在运行linux perf时遇到了麻烦,主要是因为/proc/sys/kernel/kptr_restrict当前设置为1。 但是,如果我尝试/proc/sys/kernel/kptr_restrict回显0,如下所示… echo 0 > /proc/sys/kernel/kptr_restrict 我得到一个权限被拒绝的错误。 我不认为我可以改变它的权限。 有没有办法直接设置这个? 我是超级用户。 没有这个设置,我不认为perf会起作用。

Android Systrace跟踪文件格式

Android的systrace工具,通过ADB调用atrace工具。 但是,我不太了解跟踪文件的格式。 显然它与linux ftrace工具非常相似,但有一些不同之处。 主要的区别是不使用System.Map文件,但它将所有信息包含到跟踪文件中。 此外,还有一些新的B | E条目是特定于Android的。 在Android源代码中有一些关于这种格式的信息: http : //androidxref.com/4.1.1/xref/external/chromium-trace/src/tracing/linux_perf_importer.js 但是,在该文档中,我们可以看到格式属于Linux Perf Tool。 我不这么认为,linux perf作为一个输出提供了一个非常不同的格式…(除非一些特殊的configuration是活跃的…) 我的问题是:有谁知道在哪里可以find一个关于android跟踪文件的官方文档使用从adb的atrace工具生成? 这种格式对你来说很熟悉吗? # 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 […]

perf使调用图的demangling

如何为perf callgraph启用C ++ demangling? 当我进入注释模式时,似乎可以将符号去掉,但不会在主调用图中显示。 示例代码(使用Google Benchmark ): #include <benchmark/benchmark.h> #include <vector> static __attribute__ ((noinline)) int my_really_big_function() { for(size_t i = 0; i < 1000; ++i) { benchmark::DoNotOptimize(i % 5); } return 0; } static __attribute__ ((noinline)) void caller1() { for(size_t i = 0; i < 1000; ++i) { benchmark::DoNotOptimize(my_really_big_function()); benchmark::DoNotOptimize(i % 5); } } […]

为什么不执行报告caching未命中?

根据perf教程 , perf stat应该使用硬件计数器报告caching未命中。 但是,在我的系统上(最新的Arch Linux),它并没有: [joel@panda goog]$ perf stat ./hash Performance counter stats for './hash': 869.447863 task-clock # 0.997 CPUs utilized 92 context-switches # 0.106 K/sec 4 cpu-migrations # 0.005 K/sec 1,041 page-faults # 0.001 M/sec 2,628,646,296 cycles # 3.023 GHz 819,269,992 stalled-cycles-frontend # 31.17% frontend cycles idle 132,355,435 stalled-cycles-backend # 5.04% backend cycles […]

从ac程序中测量页面错误

我正在比较几个系统调用,我从哪里读/写内存。 是否有定义的API来测量C中的页面错误(页面input/输出)? 我发现这个库libperfstat.a,但它是为AIX ,我找不到任何东西的Linux。 编辑:我知道在Linux的time和perf-stat命令,只是探索是否有什么可用于我在C程序内使用。

perf事件文档

我已经search了由perf stat命令监视的每个事件的含义的详尽解释; 我find了一个教程 ,很好地解释了如何使用perf工具的不同function。 但是,这并不能解释可以观察到的几个事件的意义(而且有很多!!)。 有人知道哪里是一个相当简单和完整的文件有关perf列表命令列出的事件? 特别是,我有兴趣找出我写的一些应用程序使用的CPU的百分比。 我可以直接通过cpu时钟或任务时钟来测量它吗? 这两个事件的意义是什么? 提前致谢

什么是perfcaching事件的含义?

我想弄清楚为什么一个修改后的C程序运行速度比它的非修改的计数器部分(我添加了几行代码来执行一些额外的工作)。 在这种情况下,我怀疑“ caching效果 ”是主要的解释(指令caching)。 因此,我到达了perf (https://perf.wiki.kernel.org/index.php/Main_Page)分析工具,但不幸的是,我无法理解其输出caching未命中的含义。 提供了几个有关caching的事件: cache-references [Hardware event] cache-misses [Hardware event] L1-dcache-loads [Hardware cache event] L1-dcache-load-misses [Hardware cache event] L1-dcache-stores [Hardware cache event] L1-dcache-store-misses [Hardware cache event] L1-dcache-prefetches [Hardware cache event] L1-dcache-prefetch-misses [Hardware cache event] L1-icache-loads [Hardware cache event] L1-icache-load-misses [Hardware cache event] L1-icache-prefetches [Hardware cache event] L1-icache-prefetch-misses [Hardware cache event] LLC-loads [Hardware […]