0

我目前正在做一些实验,我需要像这样记录在执行正常的stress-ng执行周期期间产生的所有事件/usr/bin/stress-ng -c 80 -t 30 --times --exec 50 --exec-ops 50,特别是与exec(sched:sched_process_execsyscalls: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这是链接中文件的最后一个,是没有关联事件的过程示例。

额外的问题:我还需要syscalls:sys_enter_fork使用 fork-ops(或等效的东西)进行压力执行来记录等效的 fork 事件(即),但我无法这样做,无论是从 trace-cmd 还是手动来自 Ftrace。我在互联网上读到在处理分叉进程时有一些特殊情况,但不明白要做什么才能特别记录这个事件。
对此问题的任何帮助也将不胜感激。

4

1 回答 1

0

我还通过捕获事件解决了这个问题syscalls:sys_enter_execve。在他们两个之间,我能够调用每个 exec 实例。

于 2020-06-20T08:43:27.143 回答