问题标签 [kcachegrind]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
0 回答
418 浏览

c++ - 精确定位 gcc-4.1.2 和 gcc-4.8.1 之间的性能优化

语境:

我目前正在调查我的团队当前的构建环境(仍然使用 gcc-4.1.2)和使用 gcc-4.8.1 的构建之间的性能提升。结果令人震惊,在一次回归中加权平均速度至少提高了 25%。我还使用 gcc-4.4.7 进行了另一项测试,但它只看到了大约 7% 加速的加权平均值。我推测大的差异与新的 C++11 复制/移动语义有关,因为内存事务是我们程序中相当大的瓶颈。我们广泛使用了 STL 类型,所以编译器可能很好地利用了他们新的移动构造函数。

为了验证我的说法,我选择了一个显示平均性能改进的测试,并在其上运行了 kcachegrind 以进行两次编译。结果发布在下面,与我预期的不太一样。我应该指出一个快速且可能相关的细节。由于官僚主义的原因,我不得不静态编译 gcc-4.8.1 的 libstdc++.so。这意味着 kcachegrind 的位置显示了一些我为安全起见已审查的私有库。

在此处输入图像描述

令我惊讶的是,对内存操作的调用量相对没有变化(malloc_int_malloc)。另一个有趣的结果是完全不存在memcpy和增加_memcmp_sse4_1.

问题:

如果我想验证我的假设,即 C++11 语义是提高性能的原因,我应该在 callgrind 图中寻找什么?我应该找到更少的内存访问,还是应该找到std::string(string&&)签名(我实际上在这里找不到)。请记住,这是用 编译的-O3,这可能意味着此类签名已被优化,因此我进退两难。

我很高兴报告如此大的性能提升,但我想了解这种性能的来源。让我知道是否需要报告更多结果以获得更明确的答案。我希望这对 SO 来说不是太笼统的问题......

0 投票
1 回答
1378 浏览

c++ - C++ 分析:时钟周期计数

valgrind --tool=callgrind用来分析我的 C++ 程序的一个关键部分。

该部分本身的执行时间不到一微秒,因此我正在分析该部分上的大量循环。

我注意到指令的执行时间是 0.13% 的倍数(占程序总执行时间的百分比)。所以我只看到 0.13、0.26、0.52 等等。

我的问题是,我应该假设这个原子量测量 CPU 周期吗?见照片。(callgrind输出以图形方式显示kcachegrind。)

在此处输入图像描述

编辑:顺便说一下,看看机器代码,我看到mov需要 0.13 所以这可能确实是一个时钟周期。

0 投票
0 回答
230 浏览

ruby-on-rails - 迁移到新机器后,第一次 RSpec 测试非常慢

在我迁移到新的 Mac 之前,我的 RSpec 示例运行良好。现在,第一次测试似乎需要 1-3 分钟。下次运行测试(以不同的顺序)时,相同的测试可能只需要 0.2 秒。

rspec -p将告诉我哪些示例在那轮较慢,但它不能帮助我调试 WHY。

这可能是对外部服务的调用,或者可能是某个外部卷超时,因为它不再连接到这台机器,但我想不出引用可能是什么或在哪里......其他测试相同代码库的队友不要没有这个问题。

想法?

编辑(添加分析结果的图像)

这有帮助吗?我不知道什么cycle 5意思...

在此处输入图像描述

0 投票
1 回答
1280 浏览

kcachegrind - kcachegrind:如何绘制完整的调用图?

我喜欢 kcachegrind 的调用图。但我一直无法让它绘制完整的调用图。

我想我只需要设置:

  1. 图表 > 来电深度 > 无限
  2. 图表 > 被调用者深度 > 无限
  3. 图表 > 最小值 节点成本 > 无最小值
  4. 图表 > 最小值 通话费用 > 无最低要求

1和2很简单。3 在备忘录中,但显示为灰色。4 不在菜单中。

有没有办法让它以图形方式显示完整的调用图?

0 投票
1 回答
73 浏览

php - 是否可以在 XDebugs 探查器输出文件名中使用 MVC 路径?

我正在使用 XDebug 来分析大型 MVC 应用程序,通过它们的 URI 而不是文件名 (.php) 来分析单个请求会容易得多,因为多个请求是通过内部函数发出的,从而导致单个页面刷新的多个研磨文件。

我已经看到 %p = 进程 ID、%t = 时间戳和 %s = 脚本名称( var_path_to_example.php )

如果文件可以更像grind.{domain}{path}.%p命名会容易得多

这可能吗?我还没有找到任何其他可以做我之后的字符串格式替换器。

单页刷新当前创建了四个研磨文件(三个用于索引,一个是主请求,另外两个是媒体压缩器)和一个用于 img.php 的媒体路径重写器和调整器。

对于这种情况,所有这些都合并到一个 www.example.com/path/to/controller.grind 中会更可取。

0 投票
1 回答
5374 浏览

kcachegrind - 如何解释 Kcachegrind 图?

我已经开始使用Kcachegrind性能分析。但我不明白GUI和输出图。

例如对于这个调用图

在此处输入图像描述 SignatureIterator::iterate_parameters()我不明白 9.25% 指的是什么?SignatureIterator::iterate_parameters()5 198x 表示调用 了多少次SignatureIterator::parse_type()?100% in 是什么意思Symbol::byte_at(int) const?什么是ELF Object?

注意:在官方文档http://kcachegrind.sourceforge.net/html/CallGraph.html中,但还是不明白是什么the caller distance to the function

0 投票
1 回答
492 浏览

python - 使用 qcachegrind 处理 profilestats 输出时如何对 python 进行源注释

Kcachegrind是一个出色的实用程序,可以在分析代码时将热点直观地表示到源代码行级别。我发现它在微优化我的 C++ 代码库时非常有用。对于我最新的 python 项目,我开始使用 Kcachegrind 来处理profilestats的输出。Kcachegrind是一个仅限 linux 的实用程序,但有各种非官方端口可用,我正在使用的一个是qcachegrind。一般来说,它在很大程度上可以解决大多数问题,除了我很难让源注释工作。

在源选项卡上,我收到了熟悉的源缺失消息

使用选项

并且添加源基本目录没有用。

我有一种感觉,该实用程序需要一个与 Python 无关的 ELF 对象。在这方面的任何帮助都会很有用。

相关信息:

  • 蟒蛇 2.7
  • 个人资料统计 (2.0)
  • QCachegrind 0.7.4
  • 视窗 2012R2
0 投票
2 回答
1336 浏览

kcachegrind - KCachegrind 的默认扩展是什么

我在 Ubuntu 14.10 上安装了KCachegrind

当我单击打开按钮时,我会看到带有文件“Callgrind Profile Data”的默认过滤器的打开对话框,但看不到我的文件。我必须在过滤器中选择“所有文件”,然后我才能看到我的文件。

什么扩展名必须有我在打开此对话框时见过他一次的文件?

0 投票
2 回答
1345 浏览

c++ - 如何使用 KCachegrind 和 Callgrind 仅测量我的部分代码?

我想使用valgrind来分析我的代码。问题是,我有一个我不感兴趣的巨大启动序列。

我在valgrind/callgrind.h中找到了可以帮助我的定义:

  • CALLGRIND_START_INSTRUMENTATION
  • CALLGRIND_STOP_INSTRUMENTATION
  • CALLGRIND_DUMP_STATS

根据这篇文章,我必须使用以下选项执行valgrind :

valgrind --tool=callgrind --instr-atstart=no ./application

当我这样做时,会创建两个文件:

  • callgrind.out.16060
  • callgrind.out.16060.1

然后我想使用 kcachegrind 来可视化我的结果。这很好用,但跳过我的启动序列的 makros 似乎什么也没做。我必须做什么才能仅在我想要的地方测量性能?

0 投票
3 回答
8524 浏览

valgrind - 使 callgrind 显示 kcachegrind 调用图中的所有函数调用

我正在使用 valgrind 工具 - callgrind 和 kcachegrind 来分析一个大型项目,并且想知道是否有一种方法可以让 callgrind 报告所有函数(不仅仅是最昂贵的函数)的统计信息。

具体来说 - 当我在 kcachegrind 中可视化调用图时,它只包含那些非常昂贵的函数,但我想知道是否有办法将项目中的所有函数都包含在调用图中。用于生成分析信息的命令如下:

我不确定是否必须为 valgrind 提供任何选项,或者可能以不同的优化方式编译应用程序。这可能是微不足道的,但我找不到解决方案。对此高度赞赏的任何指针。

谢谢 !