lkml.org 
[lkml]   [2012]   [Apr]   [11]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
/
From
Subject[RFC 2/2] User space tool for dump user space stack
Date
Resend as linux-kernel kicked it back.

From: Tu, Xiaobing
Sent: Wednesday, April 11, 2012 4:07 PM
To: 'akpm@linux-foundation.org'; 'mingo@elte.hu'; 'rusty@rustcorp.com.au'; 'a.p.zijlstra@chello.nl'; 'linux-kernel@vger.kernel.org'; 'yanmin_zhang@linux.intel.com'; 'rostedt@goodmis.org'
Cc: Zuo, Jiao
Subject: [RFC 2/2] User space tool for dump user space stack
Importance: High


Here is the a backtrace tool in user space which can dump all the stack for whole processes or a special process, it read kernel space and user space stack call chain from /proc/xxx/stack, and converts the hex format into symbols., we tested it on i386 and x86-64. It works well.

There are two function in this tool:
1. Parse special process we want, using “parse_stack –p 22740”
  pid : 22740, name: droid.apps.maps
  ppid: 0, name: 
  child count is 22
  
  Kernel Stack:
  [<c136e3df>] sys_epoll_wait+0x2bf/0x360
  [<c18d6ad1>] syscall_call+0x7/0xb
  [<ffffffff>] 0xffffffff
  User Stack:
  [00000000b778ebb7]  /system/lib/libc.so
  [00000000b770cc98]  /system/lib/libutils.so (_ZN7android6Looper8pollOnceEiPiS1_PPv)
  [00000000b75e6f8f]  /system/lib/libandroid_runtime.so (_ZN7android18NativeMessageQueue8pollOnceEi)
  [00000000b75e6fc5]  /system/lib/libandroid_runtime.so (_ZN7androidL38android_os_MessageQueue_nativePollOnceEP7_JNIEnvP8_jobjectii)
  [00000000b632fc40]  /system/lib/libdvm.so (dvmPlatformInvoke)
  [00000000b637cf59]  /system/lib/libdvm.so (_Z16dvmCallJNIMethodPKjP6JValuePK6MethodP6Thread)
  [00000000b6424214]  /system/lib/libdvm.so
  [00000000b6341f86]  /system/lib/libdvm.so (_Z11dvmMterpStdP6Thread)
  [00000000b633e626]  /system/lib/libdvm.so (_Z12dvmInterpretP6ThreadPK6MethodP6JValue)
  [00000000b63aa9ca]  /system/lib/libdvm.so (_Z15dvmInvokeMethodP6ObjectPK6MethodP11ArrayObjectS5_P11ClassObjectb)
  [00000000b63bb46a]  /system/lib/libdvm.so (_ZL44Dalvik_java_lang_reflect_Method_invokeNativePKjP6JValue)
  [00000000b6424214]  /system/lib/libdvm.so
  [00000000b6341f86]  /system/lib/libdvm.so (_Z11dvmMterpStdP6Thread)
  [00000000b633e626]  /system/lib/libdvm.so (_Z12dvmInterpretP6ThreadPK6MethodP6JValue)
  [00000000b63aad32]  /system/lib/libdvm.so (_Z14dvmCallMethodVP6ThreadPK6MethodP6ObjectbP6JValuePc)
  [00000000b637ee7a]  /system/lib/libdvm.so (_ZL21CallStaticVoidMethodVP7_JNIEnvP7_jclassP10_jmethodIDPc)
  [00000000b75b19da]  /system/lib/libandroid_runtime.so (_ZN7_JNIEnv20CallStaticVoidMethodEP7_jclassP10_jmethodIDz)
  [00000000b75b3004]  /system/lib/libandroid_runtime.so (_ZN7android14AndroidRuntime5startEPKcS2_)
  [00000000080491d7]  /system/bin/app_process (main)
  [00000000b778cc0e]  /system/lib/libc.so (__libc_init)
  [0000000008048c0a]  /system/bin/app_process
  
  
  
  =========
  tid : 22741, name: GC
  ppid: 22740, name: droid.apps.maps
  Kernel Stack:
  [<c1290d29>] futex_wait+0x5e9/0x8c0
  [<c1292dee>] do_futex+0xee/0xc60
  [<c12939fa>] sys_futex+0x9a/0x120
  [<c18d6ad1>] syscall_call+0x7/0xb
  [<ffffffff>] 0xffffffff
  User Stack:
  [00000000b778ed1d]  /system/lib/libc.so
  [00000000b7786b49]  /system/lib/libc.so (__pthread_cond_timedwait_relative)
  [00000000b7786c94]  /system/lib/libc.so (__pthread_cond_timedwait)
  [00000000b7786d83]  /system/lib/libc.so (pthread_cond_timedwait)
  [00000000b7786dbc]  /system/lib/libc.so (pthread_cond_wait)
  [00000000b63cd3e0]  /system/lib/libdvm.so (_ZL14gcDaemonThreadPv)
  [00000000b6392bbf]  /system/lib/libdvm.so (_ZL19internalThreadStartPv)
  [00000000b77875a2]  /system/lib/libc.so (__thread_entry)
  [00000000b773f2d0]   (__thread_entry)
  [00000000b7731f92]  /system/lib/libcutils.so (mspace_malloc)
  
  
  
  =========
  tid : 22744, name: Signal Catcher
  ppid: 22740, name: droid.apps.maps
  Kernel Stack:
  [<c126ad66>] sys_rt_sigtimedwait+0x106/0x430
  [<c18d6ad1>] syscall_call+0x7/0xb
  [<ffffffff>] 0xffffffff
  User Stack:
  [00000000b778e45f]  /system/lib/libc.so
  [00000000b638d0d4]  /system/lib/libdvm.so (_ZL24signalCatcherThreadStartPv)
  [00000000b6392bbf]  /system/lib/libdvm.so (_ZL19internalThreadStartPv)
  [00000000b77875a2]  /system/lib/libc.so (__thread_entry)
  [0000000000000009]   (__thread_entry)
  
  
  
  =========
  tid : 22746, name: JDWP
  ppid: 22740, name: droid.apps.maps
  Kernel Stack:
  [<c184c65e>] unix_stream_recvmsg+0x39e/0x500
  [<c179d600>] sock_recvmsg+0xe0/0x110
  [<c179f086>] __sys_recvmsg+0xf6/0x1d0
  [<c179ff1c>] sys_socketcall+0x14c/0x4f0
  [<c18d6ad1>] syscall_call+0x7/0xb
  [<ffffffff>] 0xffffffff
  User Stack:
  [00000000b778e71b]  /system/lib/libc.so
  [00000000b63b313b]  /system/lib/libdvm.so (_ZL15jdwpThreadStartPv)
  [00000000b6392bbf]  /system/lib/libdvm.so (_ZL19internalThreadStartPv)
  [00000000b77875a2]  /system/lib/libc.so (__thread_entry)
  [00000000b773f2d0]   (__thread_entry)
  [00000000b7731f92]  /system/lib/libcutils.so (mspace_malloc)
  
  
  
  =========
  tid : 22747, name: Compiler
  ppid: 22740, name: droid.apps.maps
  Kernel Stack:
  [<c1290d29>] futex_wait+0x5e9/0x8c0
  [<c1292dee>] do_futex+0xee/0xc60
  [<c12939fa>] sys_futex+0x9a/0x120
  [<c18d6ad1>] syscall_call+0x7/0xb
  [<ffffffff>] 0xffffffff
  User Stack:
  [00000000b778ed1d]  /system/lib/libc.so
  [00000000b7786b49]  /system/lib/libc.so (__pthread_cond_timedwait_relative)
  [00000000b7786c94]  /system/lib/libc.so (__pthread_cond_timedwait)
  [00000000b7786d83]  /system/lib/libc.so (pthread_cond_timedwait)
  [00000000b7786dbc]  /system/lib/libc.so (pthread_cond_wait)
  [00000000b63cf079]  /system/lib/libdvm.so (_ZL19compilerThreadStartPv)
  [00000000b6392bbf]  /system/lib/libdvm.so (_ZL19internalThreadStartPv)
  [00000000b77875a2]  /system/lib/libc.so (__thread_entry)
  [00000000b77326ee]  /system/lib/libcutils.so (mspace_calloc)
  [00000000b63cccc4]  /system/lib/libdvm.so (_Z18dvmHeapSourceAllocj)
  [00000000b2915440]   (_Z18dvmHeapSourceAllocj)
  
  
  
  =========
  tid : 22748, name: ReferenceQueueD
  ppid: 22740, name: droid.apps.maps
  Kernel Stack:
  [<c1290d29>] futex_wait+0x5e9/0x8c0
  [<c1292dee>] do_futex+0xee/0xc60
  [<c12939fa>] sys_futex+0x9a/0x120
  [<c18d6ad1>] syscall_call+0x7/0xb
  [<ffffffff>] 0xffffffff
  User Stack:
  [00000000b778ed1d]  /system/lib/libc.so
  [00000000b7786b49]  /system/lib/libc.so (__pthread_cond_timedwait_relative)
  [00000000b7786c94]  /system/lib/libc.so (__pthread_cond_timedwait)
  [00000000b7786d83]  /system/lib/libc.so (pthread_cond_timedwait)
  [00000000b7786dbc]  /system/lib/libc.so (pthread_cond_wait)
  [00000000b638eb48]  /system/lib/libdvm.so (_ZL11waitMonitorP6ThreadP7Monitorxib)
  [00000000b63b8eb4]  /system/lib/libdvm.so (_ZL28Dalvik_java_lang_Object_waitPKjP6JValuePK6MethodP6Thread)
  [00000000b6424214]  /system/lib/libdvm.so
  [00000000b6341f86]  /system/lib/libdvm.so (_Z11dvmMterpStdP6Thread)
  [00000000b633e626]  /system/lib/libdvm.so (_Z12dvmInterpretP6ThreadPK6MethodP6JValue)
  [00000000b63aad32]  /system/lib/libdvm.so (_Z14dvmCallMethodVP6ThreadPK6MethodP6ObjectbP6JValuePc)
  [00000000b63aaef2]  /system/lib/libdvm.so (_Z13dvmCallMethodP6ThreadPK6MethodP6ObjectP6JValuez)
  [00000000b639242a]  /system/lib/libdvm.so (_ZL17interpThreadStartPv)
  [00000000b77875a2]  /system/lib/libc.so (__thread_entry)
  [00000000b633dc12]  /system/lib/libdvm.so (_Z9dvmMallocji)
  [00000000b63bb46a]  /system/lib/libdvm.so (_ZL44Dalvik_java_lang_reflect_Method_invokeNativePKjP6JValue)
  [00000000b6424214]  /system/lib/libdvm.so
  [00000000b6341f86]  /system/lib/libdvm.so (_Z11dvmMterpStdP6Thread)
  [00000000b633e626]  /system/lib/libdvm.so (_Z12dvmInterpretP6ThreadPK6MethodP6JValue)
  [00000000b63aad32]  /system/lib/libdvm.so (_Z14dvmCallMethodVP6ThreadPK6MethodP6ObjectbP6JValuePc)
  [00000000b637ee7a]  /system/lib/libdvm.so (_ZL21CallStaticVoidMethodVP7_JNIEnvP7_jclassP10_jmethodIDPc)
  [00000000b75b19da]  /system/lib/libandroid_runtime.so (_ZN7_JNIEnv20CallStaticVoidMethodEP7_jclassP10_jmethodIDz)
  [00000000b75b3004]  /system/lib/libandroid_runtime.so (_ZN7android14AndroidRuntime5startEPKcS2_)
  [00000000080491d7]  /system/bin/app_process (main)
  [00000000b778cc0e]  /system/lib/libc.so (__libc_init)
  [0000000008048c0a]  /system/bin/app_process
  
  
  
  =========
  tid : 22750, name: FinalizerDaemon
  ppid: 22740, name: droid.apps.maps
  Kernel Stack:
  [<c1290d29>] futex_wait+0x5e9/0x8c0
  [<c1292dee>] do_futex+0xee/0xc60
  [<c12939fa>] sys_futex+0x9a/0x120
  [<c18d6ad1>] syscall_call+0x7/0xb
  [<ffffffff>] 0xffffffff
  User Stack:
  [00000000b778ed1d]  /system/lib/libc.so
  [00000000b7786b49]  /system/lib/libc.so (__pthread_cond_timedwait_relative)
  [00000000b7786c94]  /system/lib/libc.so (__pthread_cond_timedwait)
  [00000000b7786d83]  /system/lib/libc.so (pthread_cond_timedwait)
  [00000000b7786dbc]  /system/lib/libc.so (pthread_cond_wait)
  [00000000b638eb48]  /system/lib/libdvm.so (_ZL11waitMonitorP6ThreadP7Monitorxib)
  [00000000b63b8eb4]  /system/lib/libdvm.so (_ZL28Dalvik_java_lang_Object_waitPKjP6JValuePK6MethodP6Thread)
  [00000000b6424214]  /system/lib/libdvm.so
  [00000000b6341f86]  /system/lib/libdvm.so (_Z11dvmMterpStdP6Thread)
  [00000000b633e626]  /system/lib/libdvm.so (_Z12dvmInterpretP6ThreadPK6MethodP6JValue)
  [00000000b63aad32]  /system/lib/libdvm.so (_Z14dvmCallMethodVP6ThreadPK6MethodP6ObjectbP6JValuePc)
  [00000000b63aaef2]  /system/lib/libdvm.so (_Z13dvmCallMethodP6ThreadPK6MethodP6ObjectP6JValuez)
  [00000000b639242a]  /system/lib/libdvm.so (_ZL17interpThreadStartPv)
  [00000000b77875a2]  /system/lib/libc.so (__thread_entry)
  [00000000b633dc12]  /system/lib/libdvm.so (_Z9dvmMallocji)
  [00000000b63bb46a]  /system/lib/libdvm.so (_ZL44Dalvik_java_lang_reflect_Method_invokeNativePKjP6JValue)
  [00000000b6424214]  /system/lib/libdvm.so
  [00000000b6341f86]  /system/lib/libdvm.so (_Z11dvmMterpStdP6Thread)
  [00000000b633e626]  /system/lib/libdvm.so (_Z12dvmInterpretP6ThreadPK6MethodP6JValue)
  [00000000b63aad32]  /system/lib/libdvm.so (_Z14dvmCallMethodVP6ThreadPK6MethodP6ObjectbP6JValuePc)
  [00000000b637ee7a]  /system/lib/libdvm.so (_ZL21CallStaticVoidMethodVP7_JNIEnvP7_jclassP10_jmethodIDPc)
  [00000000b75b19da]  /system/lib/libandroid_runtime.so (_ZN7_JNIEnv20CallStaticVoidMethodEP7_jclassP10_jmethodIDz)
  [00000000b75b3004]  /system/lib/libandroid_runtime.so (_ZN7android14AndroidRuntime5startEPKcS2_)
  [00000000080491d7]  /system/bin/app_process (main)
  [00000000b778cc0e]  /system/lib/libc.so (__libc_init)
  [0000000008048c0a]  /system/bin/app_process
  
  
  
  =========
  tid : 22751, name: FinalizerWatchd
  ppid: 22740, name: droid.apps.maps
  Kernel Stack:
  [<c1290d29>] futex_wait+0x5e9/0x8c0
  [<c1292dee>] do_futex+0xee/0xc60
  [<c12939fa>] sys_futex+0x9a/0x120
  [<c18d6ad1>] syscall_call+0x7/0xb
  [<ffffffff>] 0xffffffff
  User Stack:
  [00000000b778ed1d]  /system/lib/libc.so
  [00000000b7786b49]  /system/lib/libc.so (__pthread_cond_timedwait_relative)
  [00000000b7786c94]  /system/lib/libc.so (__pthread_cond_timedwait)
  [00000000b7786d43]  /system/lib/libc.so (pthread_cond_timedwait_monotonic)
  [00000000b638eacb]  /system/lib/libdvm.so (_ZL11waitMonitorP6ThreadP7Monitorxib)
  [00000000b638ec1f]  /system/lib/libdvm.so (_Z14dvmThreadSleepyj)
  [00000000b63b9d7e]  /system/lib/libdvm.so (_ZL31Dalvik_java_lang_VMThread_sleepPKjP6JValue)
  [00000000b6424214]  /system/lib/libdvm.so
  [00000000b6341f86]  /system/lib/libdvm.so (_Z11dvmMterpStdP6Thread)
  [00000000b633e626]  /system/lib/libdvm.so (_Z12dvmInterpretP6ThreadPK6MethodP6JValue)
  [00000000b63aad32]  /system/lib/libdvm.so (_Z14dvmCallMethodVP6ThreadPK6MethodP6ObjectbP6JValuePc)
  [00000000b63aaef2]  /system/lib/libdvm.so (_Z13dvmCallMethodP6ThreadPK6MethodP6ObjectP6JValuez)
  [00000000b639242a]  /system/lib/libdvm.so (_ZL17interpThreadStartPv)
  [00000000b77875a2]  /system/lib/libc.so (__thread_entry)
  [00000000b633dc12]  /system/lib/libdvm.so (_Z9dvmMallocji)
  [00000000b63bb46a]  /system/lib/libdvm.so (_ZL44Dalvik_java_lang_reflect_Method_invokeNativePKjP6JValue)
  [00000000b6424214]  /system/lib/libdvm.so
  [00000000b6341f86]  /system/lib/libdvm.so (_Z11dvmMterpStdP6Thread)
  [00000000b633e626]  /system/lib/libdvm.so (_Z12dvmInterpretP6ThreadPK6MethodP6JValue)
  [00000000b63aad32]  /system/lib/libdvm.so (_Z14dvmCallMethodVP6ThreadPK6MethodP6ObjectbP6JValuePc)
  [00000000b637ee7a]  /system/lib/libdvm.so (_ZL21CallStaticVoidMethodVP7_JNIEnvP7_jclassP10_jmethodIDPc)
  [00000000b75b19da]  /system/lib/libandroid_runtime.so (_ZN7_JNIEnv20CallStaticVoidMethodEP7_jclassP10_jmethodIDz)
  [00000000b75b3004]  /system/lib/libandroid_runtime.so (_ZN7android14AndroidRuntime5startEPKcS2_)
  [00000000080491d7]  /system/bin/app_process (main)
  [00000000b778cc0e]  /system/lib/libc.so (__libc_init)
  [0000000008048c0a]  /system/bin/app_process
  
  
  
  =========
  tid : 22752, name: Binder Thread #
  ppid: 22740, name: droid.apps.maps
  Kernel Stack:
  [<c16afcf8>] binder_thread_read+0x9b8/0xc60
  [<c16b43c1>] binder_ioctl+0x331/0x6b0
  [<c133f966>] do_vfs_ioctl+0x86/0x660
  [<c133ff7e>] sys_ioctl+0x3e/0x70
  [<c18d6ad1>] syscall_call+0x7/0xb
  [<ffffffff>] 0xffffffff
  User Stack:
  [00000000b778d776]  /system/lib/libc.so
  [00000000b7698d60]  /system/lib/libbinder.so (_ZN7android14IPCThreadState14talkWithDriverEb)
  [00000000b7699e3c]  /system/lib/libbinder.so (_ZN7android14IPCThreadState14joinThreadPoolEb)
  [00000000b76a4dd0]  /system/lib/libbinder.so (_ZN7android10PoolThread10threadLoopEv)
  [00000000b76ff954]  /system/lib/libutils.so (_ZN7android6Thread11_threadLoopEPv)
  [00000000b75b1870]  /system/lib/libandroid_runtime.so (_ZN7android14AndroidRuntime15javaThreadShellEPv)
  [00000000b770044e]  /system/lib/libutils.so (_ZN13thread_data_t10trampolineEPKS_)
  [00000000b77875a2]  /system/lib/libc.so (__thread_entry)
  [00000000b2915590]   (__thread_entry)
  
  
  =========
  tid : 22759, name: its
  ppid: 22740, name: droid.apps.maps
  Kernel Stack:
  [<c136e3df>] sys_epoll_wait+0x2bf/0x360
  [<c18d6ad1>] syscall_call+0x7/0xb
  [<ffffffff>] 0xffffffff
  User Stack:
  [00000000b778ebb7]  /system/lib/libc.so
  [00000000b770cc98]  /system/lib/libutils.so (_ZN7android6Looper8pollOnceEiPiS1_PPv)
  [00000000b75e6f8f]  /system/lib/libandroid_runtime.so (_ZN7android18NativeMessageQueue8pollOnceEi)
  [00000000b75e6fc5]  /system/lib/libandroid_runtime.so (_ZN7androidL38android_os_MessageQueue_nativePollOnceEP7_JNIEnvP8_jobjectii)
  [00000000b632fc40]  /system/lib/libdvm.so (dvmPlatformInvoke)
  [00000000b637cf59]  /system/lib/libdvm.so (_Z16dvmCallJNIMethodPKjP6JValuePK6MethodP6Thread)
  [00000000b6424214]  /system/lib/libdvm.so
  [00000000b6341f86]  /system/lib/libdvm.so (_Z11dvmMterpStdP6Thread)
  [00000000b633e626]  /system/lib/libdvm.so (_Z12dvmInterpretP6ThreadPK6MethodP6JValue)
  [00000000b63aad32]  /system/lib/libdvm.so (_Z14dvmCallMethodVP6ThreadPK6MethodP6ObjectbP6JValuePc)
  [00000000b63aaef2]  /system/lib/libdvm.so (_Z13dvmCallMethodP6ThreadPK6MethodP6ObjectP6JValuez)
  [00000000b639242a]  /system/lib/libdvm.so (_ZL17interpThreadStartPv)
  [00000000b77875a2]  /system/lib/libc.so (__thread_entry)
  [0000000000001d49]   (__thread_entry)
  
  

2. Parse stack for all the processes, using “parse_stack”
Attachment is the file store the stack info.

Br
XiaoBing Tu
PSI@System Integration Shanghai


[unhandled content-type:application/x-gzip]
\
 
 \ /
  Last update: 2012-04-11 10:25    [W:0.040 / U:2.020 seconds]
©2003-2018 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site