我目前正在做一些实验,我需要像这样记录在执行正常的stress-ng执行周期期间产生的所有事件/usr/bin/stress-ng -c 80 -t 30 --times --exec 50 --exec-ops 50
,特别是与exec(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
这是链接中文件的最后一个,是没有关联事件的过程示例。
额外的问题:我还需要syscalls:sys_enter_fork
使用 fork-ops(或等效的东西)进行压力执行来记录等效的 fork 事件(即),但我无法这样做,无论是从 trace-cmd 还是手动来自 Ftrace。我在互联网上读到在处理分叉进程时有一些特殊情况,但不明白要做什么才能特别记录这个事件。
对此问题的任何帮助也将不胜感激。