Linux上的分析工具,显示传递给调用函数的参数的大小

Linux上的分析工具,显示传递给调用函数的参数的大小,linux,profiling,profiler,Linux,Profiling,Profiler,Linux上的任何评测(性能度量)工具(OProfile、perf events、HTC Toolkit)能否显示传递给函数/过程的参数大小为的调用图 换言之,我希望可视化分析应用程序中的数据流(最好与分析数据结合在一起,即花在函数/子例程中的时间) 注意:当数组(向量和矩阵)被传递给子例程/函数时,我不仅对指针的大小感兴趣,而且对整个数据的大小也感兴趣。除了我怀疑论者的评论之外,我越来越感觉到,您真的希望有一个表示“内存带宽”的度量,与代码的某些部分相关 我有一种预感,你可能会从oprofi

Linux上的任何评测(性能度量)工具(OProfile、perf events、HTC Toolkit)能否显示传递给函数/过程的参数大小为的调用图

换言之,我希望可视化分析应用程序中的数据流(最好与分析数据结合在一起,即花在函数/子例程中的时间)



注意:当数组(向量和矩阵)被传递给子例程/函数时,我不仅对指针的大小感兴趣,而且对整个数据的大小也感兴趣。

除了我怀疑论者的评论之外,我越来越感觉到,您真的希望有一个表示“内存带宽”的度量,与代码的某些部分相关

我有一种预感,你可能会从oprofile中获得里程数
oprof_start
gui有一个很好的度量清单

(注意:这些取决于CPU,有关CPU的详细信息,请参阅或
op_help

这些似乎很有趣:

DATA_MEM_REFS    all memory references, cachable and non
L2_LD        number of L2 data loads
L2_ST        number of L2 data stores
perhaps some more, but I grew tired of reading things outside my area of expertise here

我认为,
perf
超越了(?)oprofile,而且它当然有更简单的接口来进行(采样)调用图分析,但我想如果您想要访问实际的CPU性能计数器事件,oprofile可能仍然是您要去的地方

您将如何定义传递的参数的大小?您是指引用/指针类型的指针大小吗?您是否会在寄存器中包含传递的参数?你会包括va_args吗?换言之,您能否在有意义的数据中定义结果?我有一种预感,简单的堆栈大小监控将是指针(数组)最有意义的度量。我不仅对指针的大小感兴趣,而且对数组(引用结构)的大小感兴趣;您将如何处理多态结构?您是否愿意使用rtti来测量引用内存的大小?如果一个数组是malloced的,那么你必须是一个侵入式的分析器才能知道这一点。如果您正在使用任何类型的智能指针(包括例如
tr1::cref
,您将得到歪斜的数字);优化将带来其他惊喜。开箱思考,我认为callgrind/kcachegrind与指令获取以外的其他度量可能接近这一方向的“度量”,如果您接受实际的mem访问,我刚刚遇到的mem访问拥有在多个平台上动态、交互式的二进制文件检测(因此它类似于valgrind,但是定制的);从演示中我得到的印象是,它应该能够将此用于您的目的。正如所料,这不是免费的午餐:)