获取 write 和 read 系统调用是很好的第一步!
clone
和execve
系统调用将为您提供有关进程创建的信息。
... syscall_entry_clone: { cpu_id = 2 }, { clone_flags = 0x1200011, newsp = 0x0, parent_tid = 0x0, child_tid = 0x7F4440D7EA10 }
... syscall_exit_clone: { cpu_id = 2 }, { ret = 1606323 }
... syscall_exit_clone: { cpu_id = 1 }, { ret = 0 }
... syscall_entry_execve: { cpu_id = 1 }, { filename = "/bin/bash", argv = 0x55FA993F7EB0, envp = 0x55FA993BAF20 }
系统execve
调用提供进程路径。
确实,最好为每个事件提供 pid、ppid 以简化分析。这可以使用lttng add-context
命令来完成。对于这种情况:
lttng add-context -k -t vpid
lttng add-context -k -t vppid
然后我们得到:
... syscall_entry_clone: { cpu_id = 0 }, { vpid = 1602589, vppid = 2996 }, { clone_flags = 0x1200011, newsp = 0x0, parent_tid = 0x0, child_tid = 0x7F4440D7EA10 }
... syscall_exit_clone: { cpu_id = 0 }, { vpid = 1602589, vppid = 2996 }, { ret = 1607998 }
... syscall_exit_clone: { cpu_id = 1 }, { vpid = 1607998, vppid = 1602589 }, { ret = 0 }
... syscall_entry_execve: { cpu_id = 1 }, { vpid = 1607998, vppid = 1602589 }, { filename = "/bin/bash", argv = 0x55FA993B8C00, envp = 0x55FA993BAF20 }
... syscall_exit_execve: { cpu_id = 1 }, { vpid = 1607998, vppid = 1602589 }, { ret = 0 }
我鼓励您使用该lttng add-context --list
命令查看可用的上下文。
现在进入文件的读/写/打开/关闭,基本事件设置将是:
lttng enable-event -k --syscall write,pwrite64,writev,pwritev
lttng enable-event -k --syscall read,pread64,readv,preadv
lttng enable-event -k --syscall open,openat,name_to_handle_at,open_by_handle_at
lttng enable-event -k --syscall close
该open
族很重要,因为它给出了 fd 编号和文件路径之间关系的起点。系统close
调用对于结束关系很重要。
至于“直播”,直播模式可以满足要求。但是,如果您可以拖延一些时间,我会鼓励您研究一下轮换功能。
从那里你应该有所有需要的信息。不幸的是,Trace Compass似乎没有为此提供内置分析。如果您能胜任这项任务,那么在Babeltrace2 python 插件中实现或简单地使用 python TraceCollection API应该不会太难。
回顾一下:
lttng create my_session
lttng enable-event -k --syscall clone,exec
lttng enable-event -k --syscall write,pwrite64,writev,pwritev
lttng enable-event -k --syscall read,pread64,readv,preadv
lttng enable-event -k --syscall open,openat,name_to_handle_at,open_by_handle_at
lttng enable-event -k --syscall close
lttng add-context -k -t vpid
lttng add-context -k -t vppid