Сбор данных о производительности по использованию кучи - PullRequest
0 голосов
/ 12 апреля 2019

Я работаю над модулем компилятора, который добавляет дополнительные инструкции к каждой загрузке / сохранению в приложении с акцентом на объекты кучи. Одним из факторов производительности является размер объекта, к которому осуществляется доступ; разные инструкции выбираются во время выполнения для разных размеров объекта.

Я выбрал несколько тестов SPEC для оценки влияния моих изменений на производительность. В настоящее время я ограничен только просмотром накладных расходов, измеряемых перфом. Это приводит к значительному количеству предположений о том, почему одни контрольные показатели оказываются более серьезными, чем другие. Подкрепление каждой гипотезы большим количеством данных кажется хорошим шагом. Из каждого теста для каждого объекта, размещенного в куче, было бы полезно узнать:

  • Размер каждого выделения или перераспределения кучи
  • Количество обращений к каждому выделению во время выполнения приложения.

Я был успешным в # 1. Было достаточно легко внедрить несколько вызовов printf () в glibc, так как я уже работаю с glibc. Я не знаю, как получить # 2; счетчики доступа кажутся гораздо лучше подходящими для фреймворка или инструмента-обертки, и я не знаю, какой из них будет работать лучше.

Можете ли вы дать рекомендации по сбору этой информации?

Ответы [ 2 ]

0 голосов
/ 16 апреля 2019

Valgrind имеет инструмент «DHAT» - инструмент динамического анализа кучи - который может собирать эти данные. Вывод не совсем в желаемом формате, но он достаточно близок для исследовательской работы. Подсчет доступа суммируется как «средний»[читает | пишет] на байт на выделение »; точный счетчик доступа не сообщается и не может быть извлечен из других данных отчета. Может быть, какая-нибудь разработка с открытым исходным кодом в моем будущем?

http://valgrind.org/docs/manual/dh-manual.html

valgrind --tool=exp-dhat --show-top-n=100000 --trace-children=yes --log-file="log.file" ./benchmark

0 голосов
/ 14 апреля 2019

Если вы выполняете инструментарий в сборке (а я думаю, что вы?), Вы можете в сегменте данных просто вставить метку со значением:

        .data
# probably some other stuff goes here
        .align 4
count:
        .long   0

и увеличить его следующим образом:

        movl    count, %eax
        addl    $1, %eax
        movl    %eax, count

выбор подходящего регистра. Хотя я полагаю, что если вы делаете это во главе вызова функции, %eax в любом случае будет засорен.

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