From 137cb502e6e557bc7130f67ebf5c9068fa080627 Mon Sep 17 00:00:00 2001 From: ddomingo Date: Thu, 9 Oct 2008 14:51:21 +1000 Subject: added Identifying Contended User-Space Locks --- .../en-US/Useful_Scripts-functioncalls.xml | 2 +- .../en-US/Useful_Scripts-futexes.xml | 88 ++++++++++++++++++++++ .../en-US/Useful_SystemTap_Scripts.xml | 1 + 3 files changed, 90 insertions(+), 1 deletion(-) create mode 100644 doc/SystemTap_Beginners_Guide/en-US/Useful_Scripts-futexes.xml (limited to 'doc/SystemTap_Beginners_Guide/en-US') diff --git a/doc/SystemTap_Beginners_Guide/en-US/Useful_Scripts-functioncalls.xml b/doc/SystemTap_Beginners_Guide/en-US/Useful_Scripts-functioncalls.xml index d108e4fe..73c1a0ee 100644 --- a/doc/SystemTap_Beginners_Guide/en-US/Useful_Scripts-functioncalls.xml +++ b/doc/SystemTap_Beginners_Guide/en-US/Useful_Scripts-functioncalls.xml @@ -38,7 +38,7 @@ probe end,timer.ms(30000) { takes the targeted kernel function as an argument. The argument supports wildcards, which enables you to target multiple kernel functions up to a certain extent. -You can increase the sample time by editing the timer in the second probe (timer.ms()). contains an excerpt from the output of stap countcalls.stp "*@mm/*.c": +You can increase the sample time by editing the timer in the second probe (timer.ms()). The output of contains the name of the function called and how many times it was called during the sample time (in alphabetical order). contains an excerpt from the output of stap countcalls.stp "*@mm/*.c": diff --git a/doc/SystemTap_Beginners_Guide/en-US/Useful_Scripts-futexes.xml b/doc/SystemTap_Beginners_Guide/en-US/Useful_Scripts-futexes.xml new file mode 100644 index 00000000..adb3e5c4 --- /dev/null +++ b/doc/SystemTap_Beginners_Guide/en-US/Useful_Scripts-futexes.xml @@ -0,0 +1,88 @@ + + + + +
+ Identifying Contended User-Space Locks + + + + WAR STORY: Futex contention http://sourceware.org/systemtap/wiki/WSFutexContention?highlight=((WarStories)) + + + +no script in examples + + + + This section describes how to identify contended user-space locks throughout the system within a specific time period. The ability to identify contended user-space locks can help you investigate hangs that you suspect may be caused by futex contentions. + + Simply put, a futex contention occurs when multiple processes are trying to access the same region of memory. In some cases, this can result in a deadlock between the processes in contention, thereby appearing as an application hang. + + To do this, probes the futex system call.
+ + + futexcontention.stp + + +global thread_thislock # short +global thread_blocktime # +global FUTEX_WAIT = 0, FUTEX_WAKE = 1 + +global lock_waits # long-lived stats on (tid,lock) blockage elapsed time +global process_names # long-lived pid-to-execname mapping + +probe syscall.futex { + if (op != FUTEX_WAIT) next # we don't care about originators of WAKE events + t = tid () + process_names[pid()] = execname() + thread_thislock[t] = $uaddr + thread_blocktime[t] = gettimeofday_us() +} + +probe syscall.futex.return { + t = tid() + ts = thread_blocktime[t] + if (ts) { + elapsed = gettimeofday_us() - ts + lock_waits[pid(), thread_thislock[t]] <<< elapsed + delete thread_blocktime[t] + delete thread_thislock[t] + } +} + +probe end { + foreach ([pid+, lock] in lock_waits) + printf ("%s[%d] lock %p contended %d times, %d avg us\n", + process_names[pid], pid, lock, @count(lock_waits[pid,lock]), @avg(lock_waits[pid,lock])) +} + + + + + needs to be manually stopped; upon exit, it prints the following information: + + + Name and ID of the process responsible for a contention + The region of memory it contested + How many times the region of memory was contended + Average time of contention throughout the probe + + + contains the output of upon exiting the script after approximately 20 seconds. + + + + <xref linkend="futexcontention"/> Sample Output + +automount[2825] lock 0x00bc7784 contended 18 times, 999931 avg us +synergyc[3686] lock 0x0861e96c contended 192 times, 101991 avg us +synergyc[3758] lock 0x08d98744 contended 192 times, 101990 avg us +synergyc[3938] lock 0x0982a8b4 contended 192 times, 101997 avg us + + + + + + diff --git a/doc/SystemTap_Beginners_Guide/en-US/Useful_SystemTap_Scripts.xml b/doc/SystemTap_Beginners_Guide/en-US/Useful_SystemTap_Scripts.xml index 7145b622..fb2dba54 100644 --- a/doc/SystemTap_Beginners_Guide/en-US/Useful_SystemTap_Scripts.xml +++ b/doc/SystemTap_Beginners_Guide/en-US/Useful_SystemTap_Scripts.xml @@ -29,6 +29,7 @@ +