perf_event_open: Включая выполнение дочернего процесса в случае выборки

В соответствии с справочными страницами для рассмотрения выполнения дочернего процесса, когда для подсчета событий можно установить бит inherit. inherit нельзя использовать при использовании PERF_FORMAT_GROUP. Итак, как я могу включить выполнение дочернего процесса (например, выполнение команд оболочки с исходным кодом на C), чтобы его можно было учитывать при выборке (PERF_FORMAT_GROUP) с использованием perf_event_open

если PERF_FORMAT_GROUP не указан, означает ли это, что для каждого записанного сэмпла каждая запись сэмпла будет включать struct read_format, равные количеству событий, или семпл будет записан только для каждого события.


person user3527764    schedule 14.05.2018    source источник
comment
Уточните, пожалуйста, какая часть вашего вопроса осталась без ответа. Также предоставьте точную команду и выходные данные perf (существует много команд perf). Также предоставьте минимально воспроизводимый пример кода, использующего perf_event_open, и его вывод.   -  person Zulan    schedule 14.05.2018
comment
Пожалуйста, см. повторное редактирование вопроса....   -  person user3527764    schedule 14.05.2018


Ответы (1)


Если вам нужно использовать PERF_FORMAT_GROUP, а это не работает со встроенным inherit, вам придется самостоятельно отслеживать дочерние элементы. Вы можете сделать это, используя ptrace, а затем настроить perf_event_open для всех дочерних задач. Затем вам также необходимо объединить образцы из всех дескрипторов файлов событий.

Редактировать: Без PERF_FORMAT_GROUP запись внутренней выборки не выполняется одновременно. Конечно, вы можете просто настроить подсчет событий (вместо выборки событий) и одновременно считывать их через равные промежутки времени из пользовательского пространства.

person Zulan    schedule 14.05.2018
comment
Если PERF_FORMAT_GROUP не используется, будут ли одновременно записываться разные события? Кроме того, в этом случае, как, по-вашему, будут храниться показания, если я не смогу прочитать их одновременно? Я пытался исследовать это при установке бита inherit без использования PERF_FORMAT_GROUP и с использованием PERF_FORMAT_ID, по какой-то причине mmap терпит неудачу с ошибкой недопустимых аргументов. mmap был вызван следующим образом: mmap(NULL, 4096*3, PROT_READ|PROT_WRITE, MAP_SHARED, fd, 0); Как вы думаете, какие могут быть возможные причины? - person user3527764; 15.05.2018
comment
@user3527764 user3527764 Смотрите мое редактирование. Для конкретной ошибки кода, вероятно, лучше всего открыть новый вопрос, не забудьте включить минимальный воспроизводимый пример. - person Zulan; 15.05.2018