【问题标题】:Testing performance of C++ code测试 C++ 代码的性能
【发布时间】:2010-10-05 06:16:52
【问题描述】:

我可以使用哪些免费工具来测试 Linux 中 C++ 代码的性能?基本上我想确定代码的瓶颈并提高性能。我的应用程序主要涉及使用来自网络的数据的计算代码。所以我想提高代码的执行速度。

谢谢。

【问题讨论】:

  • 你的意思是你需要好的分析工具?可能是 OProfile,valgrind-tools?
  • 代码是计算密集型 (CPU)、磁盘 I/O 密集型、网络 I/O 密集型、内存消耗、多线程等吗?了解一些初始方向将帮助您找到更合适的工具。
  • 你是要计时执行还是分析代码的工作?

标签: c++ linux performance profiling


【解决方案1】:

对于典型的性能基准测试,这是我使用的。

  • gprof/oprofile - 用于 CPU 密集型代码分析。
  • netstat/ethereal - 用于网络统计
  • iostat/sar - 用于 I/O
  • vmstat - 用于内存
  • mpstat/sar - 用于 CPU 使用

现在您可以根据这些工具的输出来隔离问题。

例如:- 如果 I/O 是恒定的并且在限制范围内,您可以消除 I/O 问题。 如果 CPU 使用率很高,如我的 mpstat 所示,则使用 gprof/oprofile 进行分析。

如果不将它们全部一起用于不同的运行,很难确定瓶颈。

注意:你可以编写一个脚本将它们全部一起运行,并将每次运行的结果存储在指定的文件夹中。

【讨论】:

  • +1 用于提及好的工具。 +valgrind 用于 CPU/缓存密集型任务。为了快速开始,有必要检查程序运行时 CPU 与经过时间的比率 - 可以在顶部看到。如果它非常空闲,那么您需要改进您的网络 - 考虑打包/压缩数据的替代方法。如果 CPU 已固定,请使用 gprof 或其他任何内容来描述哪些功能正在花费时间,或者引入您自己的计时器(boost 具有您可以使用的高分辨率计时功能)来测量您的处理的特定部分需要多长时间才能完成.
【解决方案2】:

我为

推荐 valgrind
  • cpu使用率,callgrind子模块(源码行粒度)
  • 内存泄漏
  • 构建调用图
  • 一些高级问题,例如查找多线程锁定机制中的问题

callgrind 的输出可以通过 KCacheGrind 直观的显示出来。

【讨论】:

    【解决方案3】:

    到目前为止,我所知道的最好的 Linux 分析器是 Zoom。虽然它是一种商业产品,但它并不太贵,您可以根据要求获得免费的 30 天评估许可证

    【讨论】:

      【解决方案4】:

      正如@Paul 所说,试试Zoom

      就我个人而言,我使用this method,它适用于these reasons,Zoom 近似于它。这是some programmers have independently discovered的技术。

      我也被告知 OProfile 可以做到,但你必须知道你需要做什么。

      【讨论】:

        猜你喜欢
        • 2011-02-24
        • 1970-01-01
        • 2011-08-31
        • 2010-12-14
        • 2018-08-09
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-06-26
        相关资源
        最近更新 更多