How to use systemtap for probing threaded user space applications?
Issue
-
If a multi-threaded program with the main thread not going through at least one quiesce after systemtap/uprobes tracing starts, then systemtap is not able to detect the events.
-
But it works when the application and stap script is ran concurrently. It is demonstrated below.
-
Compile the program pthread.cpp as shown below.
g++ -m32 -g -o pthread pthread.cpp -lpthread
#include <pthread.h>
#include <stdio.h>
#include <unistd.h>
int square (int x)
{
return (x * x);
}
void *my_thread(void *arg)
{
int x = 0;
int sqr;
while (x < 100) {
sqr = square(x);
sleep(1);
x++;
}
return NULL;
}
int main()
{
pthread_t thread_id;
if (pthread_create(&thread_id, NULL, my_thread, NULL)) {
fprintf(stderr, "Error creating thread\n");
return 1;
}
if (pthread_join(thread_id, NULL)) {
fprintf(stderr, "Error joining thread\n");
return 2;
}
return 0;
}
- Consider below systemtap script, pthread.stp
#! /usr/bin/env stap
probe process("./pthread").function("square")
{
printf("=> %s(%s)\n", probefunc(), $$parms);
}
probe process("./pthread").function("square").return
{
printf("<= %s\n", probefunc());
}
probe process("./pthread").statement("*@pthread.cpp:19")
{
printf(" x=%d, sqr=%d\n\n", $x, $sqr);
}
- For probing the application pthread, execute it as shown below.
stap -c ./pthread pthread.stp
- Sample output for the above command
[root@dhcp209-221 stap]# stap -c ./pthread pthread.stp
=> square(x=0x0)
<= square
x=0, sqr=0
=> square(x=0x1)
<= square
x=1, sqr=1
=> square(x=0x2)
<= square
x=2, sqr=4
=> square(x=0x3)
<= square
x=3, sqr=9
=> square(x=0x4)
<= square
x=4, sqr=16
=> square(x=0x5)
<= square
x=5, sqr=25
=> square(x=0x6)
<= square
x=6, sqr=36
=> square(x=0x7)
<= square
x=7, sqr=49
Environment
- Red Hat Enterprise Linux 6
- kernel-2.6.32-220.17.1.el6
- systemtap-1.6-5.el6_2
Subscriber exclusive content
A Red Hat subscription provides unlimited access to our knowledgebase of over 48,000 articles and solutions.
Welcome! Check out the Getting Started with Red Hat page for quick tours and guides for common tasks.
