草庐IT

perf-stat

全部标签

c - 用 `perf record -g` 模拟 `perf_event_open`

我的目标是编写一些代码以在某个时间间隔记录所有CPU的当前调用堆栈。本质上,我想做与perfrecord相同的事情,但我自己使用perf_event_open。根据联机帮助页,我似乎需要使用PERF_SAMPLE_CALLCHAIN示例类型并使用mmap读取结果。也就是说,联机帮助页非常简洁,一些示例代码现在可以发挥很大作用。有人能指出我正确的方向吗? 最佳答案 了解这一点的最佳方法是阅读Linux内核源代码并了解如何自己模拟perfrecord-g。正如您正确识别的那样,perfevents的记录将从系统调用perf_event_

c - 使用 linux perf 工具测量应用程序的 FLOP

我想用“perf”测量某些应用程序执行的浮点和算术运算的数量,“perf”是linux性能计数器子系统的新命令行界面命令。(出于测试目的,我使用了我创建的一个简单的虚拟应用程序,见下文)。因为我找不到为测量FP和整数运算而定义的任何“性能”事件,所以我开始挖掘原始硬件事件代码(与-rNNN一起使用,其中NNN是事件代码的十六进制值)。所以我真正的问题是,我为退休指令(INST_RETIRED)找到的代码没有区分FP和其他指令(X87和MMX/SSE)。当我尝试对特定代码使用适当的umask时,我发现“perf”不知何故不理解或不支持包含umask。我试过:%perfstat-erC0.

c - 使用 linux perf 工具测量应用程序的 FLOP

我想用“perf”测量某些应用程序执行的浮点和算术运算的数量,“perf”是linux性能计数器子系统的新命令行界面命令。(出于测试目的,我使用了我创建的一个简单的虚拟应用程序,见下文)。因为我找不到为测量FP和整数运算而定义的任何“性能”事件,所以我开始挖掘原始硬件事件代码(与-rNNN一起使用,其中NNN是事件代码的十六进制值)。所以我真正的问题是,我为退休指令(INST_RETIRED)找到的代码没有区分FP和其他指令(X87和MMX/SSE)。当我尝试对特定代码使用适当的umask时,我发现“perf”不知何故不理解或不支持包含umask。我试过:%perfstat-erC0.

linux - 如何更改 perf_event_open 最大采样率

我正在使用perf_event_open获取样本。我试着让每个人都说到点子上。但是perf_event_open不够快。我尝试使用以下命令更改采样率:echo10000000>/proc/sys/kernel/perf_event_max_sample_rate但是看起来我设置的值太大了。运行我的代码后,perf_event_max_sample_rate变回较低的值,例如12500。当我尝试更改更大的值时,例如20000000、50000000等,采样速度不会随着我更改的值而增加。有什么方法可以更快地改变perf_event_open采样速度吗? 最佳答案

linux - 如何更改 perf_event_open 最大采样率

我正在使用perf_event_open获取样本。我试着让每个人都说到点子上。但是perf_event_open不够快。我尝试使用以下命令更改采样率:echo10000000>/proc/sys/kernel/perf_event_max_sample_rate但是看起来我设置的值太大了。运行我的代码后,perf_event_max_sample_rate变回较低的值,例如12500。当我尝试更改更大的值时,例如20000000、50000000等,采样速度不会随着我更改的值而增加。有什么方法可以更快地改变perf_event_open采样速度吗? 最佳答案

C 编程 - Stat 系统调用 - 错误

我是C的新手,但正在尝试一些系统调用。我正在编写程序,循环访问目录中的所有文件并打印当前文件名和大小。我可以让程序打印文件名,但是当我执行stat系统调用时它出错了。部分代码如下:while(dptr=readdir(dirp)){if(stat(dptr->d_name,&buf)!=0){//Alwaysdoesthisanditdoesprintthefilenameprintf("Erroronwhengettingsizeof%s\n",dptr->d_name);}else{//Nevergetshereprintf("%u",buf.st_size);}}我有这样描述的结

C 编程 - Stat 系统调用 - 错误

我是C的新手,但正在尝试一些系统调用。我正在编写程序,循环访问目录中的所有文件并打印当前文件名和大小。我可以让程序打印文件名,但是当我执行stat系统调用时它出错了。部分代码如下:while(dptr=readdir(dirp)){if(stat(dptr->d_name,&buf)!=0){//Alwaysdoesthisanditdoesprintthefilenameprintf("Erroronwhengettingsizeof%s\n",dptr->d_name);}else{//Nevergetshereprintf("%u",buf.st_size);}}我有这样描述的结

android - 编译linux工具perf for android

我想为Android设备编译pref,我是根据指南theguide做的.一个我设置NDK环境使用AndroidNDKr9exportNDK_TOOLCHAIN=${NDK}/toolchains/arm-linux-androideabi-4.6/prebuilt/linux-x86/bin/arm-linux-androideabi-exportNDK_SYSROOT=${NDK}/platforms/android-9/arch-arm我用工具运行makemakeARCH=armCROSS_COMPILE=${NDK_TOOLCHAIN}CFLAGS="--sysroot=${ND

android - 编译linux工具perf for android

我想为Android设备编译pref,我是根据指南theguide做的.一个我设置NDK环境使用AndroidNDKr9exportNDK_TOOLCHAIN=${NDK}/toolchains/arm-linux-androideabi-4.6/prebuilt/linux-x86/bin/arm-linux-androideabi-exportNDK_SYSROOT=${NDK}/platforms/android-9/arch-arm我用工具运行makemakeARCH=armCROSS_COMPILE=${NDK_TOOLCHAIN}CFLAGS="--sysroot=${ND

linux - perf stat 为每次运行提供不同数量的指令

我对以下空程序进行了性能分析,#includeintmain(){}编译并运行perfstat./a.out后,我​​得到以下输出(以及其他数据,如周期数、任务时钟等):418,869instructions#0.87insnspercycle在同一Sprite的每次“性能”分析期间,指令数量都会发生变化。我的实际需要是查找我编写的特定函数中的指令数。所以我将从新程序中的指令数中减去上述数字。(我可以计算在gcc中使用-S标记创建的program.s中的行数,但在查看perf行为后我感到困惑)为什么指令条数不一致,准确的说是不一样?更新我遵循了manpage中给出的示例在C中使用per