У меня есть пара процессов, на которых запущен инструмент, который я написал, и который соединен трубами, и я хотел бы измерить использование их собранной памяти с помощью valgrind
.До сих пор я пробовал что-то вроде:
$ valgrind tool=massif trace-children=yes --peak-inaccuracy=0.5 --pages-as-heap=yes --massif-out-file=myProcesses".%p" myProcesses.script
Где myProcesses.script
запускает эквивалент моего инструмента foo
дважды, например :
foo | foo > /dev/null
Valgrind, похоже, не фиксирует использование собранной памяти так, как я ожидаю.Если я использую top
для отслеживания этого, я получаю (ради аргумента) 10% использования памяти на первом foo
, а затем еще 10% на втором foo
до завершения myProcesses.script
.Это то, что я хочу измерить: использование обоих процессов.Вместо этого Valgrind возвращает следующую ошибку:
Massif: ms_main.c:1891 (ms_new_mem_brk): Assertion 'VG_IS_PAGE_ALIGNED(len)' failed.
Есть ли способ сбора данных об использовании памяти для команд, которые я использую по трубопроводу (используя valgrind
)?Или подобный инструмент, который я могу использовать, чтобы точно автоматизировать эти измерения?
Числа, которые top
возвращает во время опроса, кажутся мне волнистыми, и я ищу точные и повторяемые измерения.Если у вас есть предложения по альтернативным инструментам, я также приветствую их.
EDIT - Исправлена опечатка с опцией valgrind
.
EDIT 2 - По некоторым причинам, кажется, что опция --pages-as-heap
доставляет нам проблемы с исполняемыми файлами, которые мы тестируем.Ваши примеры работают нормально.Новая страница создается каждый раз, когда мы вводим не встроенную функцию (переполнение стека - хе).Мы хотели посчитать их, но они относительно незначительны в масштабах использования памяти, которое мы тестируем.(Возможно, нет вызовов функций в ls
или less
?) Удаление --pages-as-heap
помогло снова начать тестирование.Спасибо MrGomez за большую помощь.