Systemtap Function thread_indent:string(delta:long)
背景
thread_indent:string(delta:long)是一个非常有用的函数, 通过thread_indent:string(delta:long)可以非常方便的看出函数调用的嵌套以及层次结构.
输出结构为: time offset(microseconds), 进程名, 进程id, n个空格.
这里的time offset指在同一个线程内, thread_indent()函数被调用的时间位移量, 第一次调用时为0.
n指每次thread_indent(n)输出时 加(n正) 或 减(n负) 的空格个数.
用法举例 :
probe kernel.function("*@net/socket.c").call
{
printf ("%s -> %s\n", thread_indent(1), probefunc())
}
probe kernel.function("*@net/socket.c").return
{
printf ("%s <- %s\n", thread_indent(-1), probefunc())
}
输出举例 :
0 ftp(7223): -> sys_socketcall
1159 ftp(7223): -> sys_socket
2173 ftp(7223): -> __sock_create
2286 ftp(7223): -> sock_alloc_inode
2737 ftp(7223): <- sock_alloc_inode
3349 ftp(7223): -> sock_alloc
3389 ftp(7223): <- sock_alloc
3417 ftp(7223): <- __sock_create
4117 ftp(7223): -> sock_create
4160 ftp(7223): <- sock_create
4301 ftp(7223): -> sock_map_fd
4644 ftp(7223): -> sock_map_file
4699 ftp(7223): <- sock_map_file
4715 ftp(7223): <- sock_map_fd
4732 ftp(7223): <- sys_socket
4775 ftp(7223): <- sys_socketcall
参考
1. https://sourceware.org/systemtap/SystemTap_Beginners_Guide/systemtapscript-handler.html
2. https://sourceware.org/systemtap/tapsets/API-thread-indent.html