【问题标题】:Performance testing in C++ projectC++ 项目中的性能测试
【发布时间】:2018-12-09 06:55:45
【问题描述】:

我用 C++ 编写了一个有 10 个线程的项目。一个线程将数据加载到内存中(写入缓冲区),另外 9 个线程同时读取缓冲区并将数据存储到 SQLite 数据库中,所有线程都使用互斥锁进行处理以避免冲突。

现在我需要评估这个项目的性能,例如每个线程的成功时间、内存使用情况等。我该如何在 c++ 环境中进行呢?我使用 Valgrind 来检查这些。但我认为它不起作用。

这是我使用 Valgrind 运行的代码,

valgrind --tool=memcheck --leak-check=yes ./executable

它会给出这样的消息,

callers=20 --track-fds=yes ./monerosci 
==24262== Memcheck, a memory error detector
==24262== Copyright (C) 2002-2015, and GNU GPL'd, by Julian Seward et al.
==24262== Using Valgrind-3.11.0 and LibVEX; rerun with -h for copyright info
==24262== Command: ./monerosci
==24262== 

valgrind: m_syswrap/syswrap-linux.c:5361 
(vgSysWrap_linux_sys_fcntl_before): Assertion 'Unimplemented 
functionality' failed.
valgrind: valgrind

host stacktrace:
==24262==    at 0x38083F48: ??? (in /usr/lib/valgrind/memcheck-amd64-linux)
==24262==    by 0x38084064: ??? (in /usr/lib/valgrind/memcheck-amd64-linux)
==24262==    by 0x380841F1: ??? (in /usr/lib/valgrind/memcheck-amd64-linux)
==24262==    by 0x380FB399: ??? (in /usr/lib/valgrind/memcheck-amd64-linux)
==24262==    by 0x380D6234: ??? (in /usr/lib/valgrind/memcheck-amd64-linux)
==24262==    by 0x380D2D2A: ??? (in /usr/lib/valgrind/memcheck-amd64-linux)
==24262==    by 0x380D43DE: ??? (in /usr/lib/valgrind/memcheck-amd64-linux)
==24262==    by 0x380E3946: ??? (in /usr/lib/valgrind/memcheck-amd64-linux)

如何在 C++ 中测试项目的性能?

【问题讨论】:

    标签: c++ multithreading performance-testing valgrind


    【解决方案1】:

    看来这里有两个不同的问题:

    1) memcheck 由于错误或某些限制而无法运行。显然,您的 valgrind 版本不支持 fcntl 调用的一种变体。也许您应该减少代码大小,删除库,直到您可以查明哪个调用触发了这个问题。或者只是在不同版本的 valgrind 下运行它。但是,我认为memcheck 不会给你你想要的数据...

    2) memcheck 不是分析工具。 Valgrind 由几个不同的工具组成,可以使用--tool 参数进行切换。 Here's 它们的概述。最有可能为您提供所需信息的是callgrind

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-09-13
      • 1970-01-01
      • 2021-12-02
      • 1970-01-01
      • 1970-01-01
      • 2014-07-01
      • 2015-07-14
      相关资源
      最近更新 更多