Systemtap Function thread_indent:string(delta:long)

less than 1 minute read

背景

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

Flag Counter

digoal’s 大量PostgreSQL文章入口