Тестирование производительности в проекте C ++ - PullRequest
0 голосов
/ 30 июня 2018

Я написал проект на С ++ с 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 ++?

1 Ответ

0 голосов
/ 02 июля 2018

Ну, похоже, здесь есть две отдельные проблемы:

1) memcheck не удается запустить из-за ошибки или какого-либо ограничения. Очевидно, один вариант вызова fcntl не поддерживается вашей версией valgrind. Возможно, вам следует уменьшить размер кода, удалить библиотеки, пока вы не сможете точно определить, какой вызов вызывает эту проблему. Или просто запустите его под другой версией valgrind. Тем не менее, я думаю, memcheck не даст вам данные, которые вы хотите ...

2) memcheck не является инструментом для профилирования. Valgrind состоит из нескольких различных инструментов, которые можно переключать с помощью параметра --tool. Вот обзор их. Тот, кто, скорее всего, даст вам информацию, которую вы хотите, это callgrind.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...