Как фиксировать все сгенерированные события с помощью ftrace без потерь - PullRequest
0 голосов
/ 17 июня 2020

Сейчас я провожу несколько экспериментов, и мне нужно записать все события, которые генерируются во время выполнения обычного цикла выполнения стресс-нг, подобного этому /usr/bin/stress-ng -c 80 -t 30 --times --exec 50 --exec-ops 50, особенно те, которые связаны с exe c (sched:sched_process_exec и syscalls:sys_enter_execve).
К сожалению, при анализе файла трассировки я получаю несколько процессов, которые не генерировали никаких sys_execve, но были захвачены sched_process_exec, что для меня не имеет смысла.
Это произошло, хотя ни одно событие не было потеряно (в файле трассировки записи в буфере / записи одинаковы, а trace-cmd не предупреждает о потерянных событиях).
В этой ситуации я не могу понять, почему это происходит , и единственное объяснение, которое я могу дать, это то, что эти события не записываются. Любая помощь будет принята с благодарностью.
Вот пример справочного файла трассировки, который я получаю

Чтобы прояснить то, что я говорю, эти строки должны быть нормой:

stress-ng-1748  [001] .... 19573.548553: sys_execve(filename: 7ffe7a791720, argv: 7ffe7a791700, envp: 7ffe7a7916f8)
stress-ng-1748  [001] .... 19573.548707: sched_process_exec: filename=/usr/bin/stress-ng pid=1748 old_pid=1748

Процесс, который сгенерировал как событие sys_execve, так и событие sched_process_exec.

Тогда как этот:

stress-ng-1780  [005] .... 19573.598398: sched_process_exec: filename=/usr/bin/stress-ng pid=1780 old_pid=1780

, который является последним файлом в ссылке, является примером процесса без связанного события sys_execve.

Дополнительный вопрос: мне также нужно было бы записать эквивалентное событие fork (а именно syscalls:sys_enter_fork) с выполнением стресса с помощью fork-ops (или чего-то подобного), но я не смог это сделать , ни из trace-cmd, ни вручную из Ftrace. Я читал в inte rnet, что есть некоторые особые случаи при работе с процессами разветвления, но не мог понять, что делать, чтобы записать это событие, в частности.
Любая помощь по этому вопросу будет принята с благодарностью тоже.

1 Ответ

0 голосов
/ 20 июня 2020

Я решил эту проблему, также записав событие syscalls:sys_enter_execve. Между ними двумя мне удалось вызвать каждый экземпляр exe c.

...