Получить время выполнения программы в режиме Perf Sampling - PullRequest
0 голосов
/ 08 мая 2020

Я использую Perf для определения числа и местоположений обращений к DRAM в рабочей нагрузке. Для локаций мне нужно отслеживать в режиме выборки . Поэтому я отслеживаю в режиме выборки, и чтобы получить общее количество доступов, я умножаю количество событий доступа на период выборки (т.е. число инструкций между каждым образцом).

Мне также нужно общее время приложение на ЦП . Другими словами, мне нужно значение, подобное тому, что сообщает top. Потому что мне нужно знать период простоя (в течение которого приложение также на ЦП) между каждым обращением к DRAM в этом единственном приложении. Об этом не сообщается в режиме выборки, и я не могу использовать оба режима (т.е. оба perf record и perf stat) одновременно. Есть ли какой-нибудь механизм для этого?

1 Ответ

0 голосов
/ 09 мая 2020

Ftrace дамп огромен. Он сбрасывает журналы для каждого процесса, а мне нужна только информация для моей программы и ее потоков. Фильтр Ftrace может работать только на PID s. Но мне нужны имена процессов (иначе, comm s). Так что это лучшее, что я мог сделать без перекомпиляции ядра.

Я использовал Systemtap со следующим скриптом:

sudo stap -e 'probe scheduler.process_exit {if (execname() == "evince"){printf("%s, %lu\n", execname(), task_current()->se->sum_exec_runtime)}}'

scheduler.process_exit() - это пробная точка из Systemtap tapset библиотека, которая внутренне перехватывает функцию ядра do_exit() (я использовал первую, потому что она кажется более переносимой). execname() возвращает имя процесса, а task_current() возвращает задачу для текущего контекста. se ( планируемый объект для планировщика) - это поле в task_struct (структура данных, связанная с процессом или потоком в Linux), а sum_exec_runtime показывает всего физическое время выполнения планируемой сущности.

Итак, вот что делает сценарий:

При каждом выходе процесса (или потока) он проверяет, соответствует ли имя процесс (или поток) - evince . В этом случае будет отображаться общее время выполнения (в наносекундах) evince (потому что мы находимся в контексте процесса evince перед выходом ).

Очевидно, это не самое портативное решение.

...